Spaces:
Build error
Build error
| import streamlit as st | |
| import pandas as pd | |
| from transformers import GPT2LMHeadModel, GPT2Tokenizer | |
| # Load the games.csv file into a pandas DataFrame | |
| # Caches the loaded data to improve performance | |
| def load_data(): | |
| data = pd.read_csv('games.csv') | |
| return data.copy() | |
| games_data = load_data() | |
| # Load the pre-trained GPT-2 model and tokenizer | |
| tokenizer = GPT2Tokenizer.from_pretrained('gpt2') | |
| model = GPT2LMHeadModel.from_pretrained('gpt2') | |
| # Function to handle user questions and provide answers based on the loaded data | |
| def answer_question(question): | |
| question = question.lower() | |
| answer = "" | |
| if "release date" in question: | |
| # Find the release date of a game | |
| game_title = question.split("release date of ")[1].strip() | |
| matching_games = games_data[games_data['Title'].str.lower() == game_title] | |
| if not matching_games.empty: | |
| release_date = matching_games.iloc[0]['Release_Date'] | |
| answer = f"The release date of '{game_title}' is {release_date}" | |
| else: | |
| answer = f"Sorry, I couldn't find any information about '{game_title}'" | |
| elif "developer" in question: | |
| # Find the developers of a game | |
| game_title = question.split("developers of ")[1].strip() | |
| matching_games = games_data[games_data['Title'].str.lower() == game_title] | |
| if not matching_games.empty: | |
| developers = matching_games.iloc[0]['Developers'] | |
| answer = f"The developers of '{game_title}' are {developers}" | |
| else: | |
| answer = f"Sorry, I couldn't find any information about '{game_title}'" | |
| elif "similar games to" in question: | |
| # Find similar games based on user question | |
| game_title = question.split("similar games to ")[1].strip() | |
| matching_games = games_data[games_data['Title'].str.lower() == game_title] | |
| if not matching_games.empty: | |
| genre = matching_games.iloc[0]['Genres'] | |
| similar_games = find_similar_games(game_title, genre) | |
| if similar_games: | |
| answer = f"Here are some similar games to '{game_title}': {', '.join(similar_games)}" | |
| else: | |
| answer = f"Sorry, I couldn't find any similar games to '{game_title}'" | |
| else: | |
| answer = f"Sorry, I couldn't find any information about '{game_title}'" | |
| # Add more question-answer logic here based on the columns in your games.csv file | |
| return answer | |
| # Perform prompt tuning to improve model responses | |
| def perform_prompt_tuning(input_text): | |
| responses = [] | |
| for _ in range(3): | |
| inputs = tokenizer.encode(input_text, return_tensors='pt') | |
| prompt_len = inputs.shape[1] | |
| outputs = model.generate(inputs, max_length=200, num_return_sequences=1, no_repeat_ngram_size=2, do_sample=True, top_k=50, top_p=0.95, temperature=0.7) | |
| response = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
| responses.append(response) | |
| return responses | |
| # Find similar games based on genre | |
| def find_similar_games(game_title, genre): | |
| # Implement your logic for finding similar games based on genre | |
| # Return a list of similar game titles | |
| pass | |
| # Define the main function that will run the Streamlit app | |
| def main(): | |
| st.title("Game Wikipedia") | |
| # Create a text input field for user queries | |
| user_question = st.text_input("Ask a question") | |
| # Display example questions for the user to copy-paste | |
| st.write("Example Questions:") | |
| st.write("1. release date of Hades") | |
| st.write("2. developers of God of War") | |
| st.write("3. Summary for Hollow Knight") | |
| # When the user submits a question, get the answer and display it | |
| if st.button("Submit"): | |
| # Perform prompt tuning to get model responses | |
| responses = perform_prompt_tuning(user_question) | |
| # Provide correct answer if available | |
| correct_answer = answer_question(user_question) | |
| if correct_answer: | |
| st.write("Correct Answer:") | |
| st.write(correct_answer) | |
| # Display the responses | |
| st.write("Model Responses:") | |
| for i, response in enumerate(responses): | |
| st.write(f"{i+1}. {response}") | |
| # Provide additional information if available | |
| if "Sorry, I couldn't find any information" not in responses[0]: | |
| st.write("Additional Information:") | |
| additional_info = answer_question(user_question) | |
| st.write(additional_info) | |
| # Display the answer based on user selection | |
| selected_index = st.number_input("Select the best response (1, 2, 3)", value=1, min_value=1, max_value=3, step=1) | |
| answer = responses[selected_index - 1] | |
| # Display the answer | |
| st.write("Model's Answer:") | |
| st.write(answer) | |
| if __name__ == "__main__": | |
| main() | |