Spaces:
Build error
Build error
File size: 4,868 Bytes
f81fe54 f7fed67 f81fe54 f7fed67 f81fe54 f7fed67 f81fe54 f7fed67 f81fe54 f7fed67 f81fe54 f7fed67 f81fe54 f7fed67 f81fe54 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | import streamlit as st
import pandas as pd
from transformers import GPT2LMHeadModel, GPT2Tokenizer
# Load the games.csv file into a pandas DataFrame
@st.cache_resource # 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()
|