import gradio as gr import pandas as pd import os from component import * from GameRecommender import * import gc from sklearn.model_selection import train_test_split from huggingface_hub import snapshot_download from sklearn.preprocessing import MultiLabelBinarizer,LabelEncoder,MinMaxScaler DATA_BASE_PATH = 'data' # MODEL_BASE_PATH = 'models' MODEL_BASE_PATH = snapshot_download( repo_id="VJyzCELERY/SteamGameRecommender", repo_type="model", allow_patterns=["GameRecommender/*"] ) SEED = 42 RAW_GAMES_DATAPATH = os.path.join(DATA_BASE_PATH,'converted.csv') GAMES_DATAPATH = os.path.join(DATA_BASE_PATH,'Cleaned_games.csv') REVIEWS_DATAPATH = os.path.join(DATA_BASE_PATH,'MergedFragmentData_SAMPLE.csv') TRIMMED_REVIEW_DATAPATH = os.path.join(DATA_BASE_PATH,'Trimmed_Dataset.csv') USER_PREFERENCE_DATAPATH = os.path.join(DATA_BASE_PATH,'UserPreferenceDF.csv') MODEL_PATH = os.path.join(MODEL_BASE_PATH,'GameRecommender') from datasets import load_dataset GAMES_DS = load_dataset("VJyzCELERY/Cleaned_games") # load dataset model = GameRecommendationEnsemble.load(MODEL_PATH) vectorizer=model.text_based_recommender.vectorizer review_app_id_encoder=model.text_based_recommender.app_id_encoder genres = model.game_content_recommeder.genre_encoder.classes_.tolist() genres = [genre for genre in genres if genre != 'Unknown'] categories = model.game_content_recommeder.category_encoder.classes_.tolist() categories = [cat for cat in categories if cat != 'Unknown'] price_ranges = model.game_content_recommeder.price_range_encoder.classes_.tolist() selectable_app_ids = list(model.collaborative_recommender.item_to_index.keys()) # df_games = pd.read_csv(GAMES_DATAPATH,index_col=False) df_games = GAMES_DS['train'].to_pandas() available_names = df_games[df_games['app_id'].astype(str).isin(selectable_app_ids)]['Name'].tolist() def recommend_game(description=None, app_name=None, price_range=None, year_release=None, excpected_playtime=None, game_score=None, dlc_count=None, genres=None, categories=None, top_n=5,weight_text=1.0, weight_collab=1.0, weight_content=1.0): if app_name: if isinstance(app_name, (str)): app_name = [app_name] app_ids = df_games[df_games['Name'].isin(app_name)]['app_id'].astype(str).tolist() else: app_ids = None prediction = model.predict(description=description,app_ids=app_ids,price_range=price_range,year_release=year_release,average_playtime=excpected_playtime,game_score=game_score, dlc_count=dlc_count,genres=genres,categories=categories,top_n=top_n,weight_text=weight_text,weight_collab=weight_collab,weight_content=weight_content) app_ids = prediction['app_id'].tolist() output = df_games.loc[df_games['app_id'].astype(str).isin(app_ids)].reset_index() return gr.DataFrame(value=output) # Load external CSS file with open('style.css', 'r') as f: custom_css = f.read() """ MAIN DEMO """ with gr.Blocks(css = custom_css) as demo: # container with gr.Row(elem_classes="container"): with gr.Column(elem_id="system", elem_classes='content-section', visible=True) as system_section: # special for this section gr.HTML('