Spaces:
Build error
Build error
| import gradio as gr | |
| import os | |
| from helper import load_world, save_world | |
| from together import Together | |
| from helper import get_together_api_key, load_env | |
| client = Together(api_key=get_together_api_key()) | |
| world = load_world('./YourWorld_L1.json') | |
| kingdom = world['kingdoms']['Varanasi Kingdom'] | |
| town = kingdom['towns']["Sarnath"] | |
| character = town['npcs']['Rohan Vyas'] | |
| system_prompt = """You are an AI Game master. Your job is to create a | |
| start to an adventure based on the world, kingdom, town and character | |
| a player is playing as. | |
| Instructions: | |
| You must only use 2-4 sentences \ | |
| Write in second person. For example: "You are Jack" \ | |
| Write in present tense. For example "You stand at..." \ | |
| First describe the character and their backstory. \ | |
| Then describes where they start and what they see around them.""" | |
| world_info = f""" | |
| World: {world} | |
| Kingdom: {kingdom} | |
| Town: {town} | |
| Your Character: {character} | |
| """ | |
| model_output = client.chat.completions.create( | |
| model="meta-llama/Llama-3-70b-chat-hf", | |
| temperature=1.0, | |
| messages=[ | |
| {"role": "system", "content": system_prompt}, | |
| {"role": "user", "content": world_info + '\nYour Start:'} | |
| ], | |
| ) | |
| start = model_output.choices[0].message.content | |
| print(start) | |
| world['start'] = start | |
| #save_world(world, '../shared_data/Kyropeia.json') # preserve video version | |
| save_world(world, '.YourWorld_L1.json') | |
| game_state = { | |
| "world": world['description'], | |
| "kingdom": kingdom['description'], | |
| "town": town['description'], | |
| "character": character['description'], | |
| "start": start, | |
| } | |
| def run_action12(message, history, game_state): | |
| if(message == 'start game'): | |
| return game_state['start'] | |
| system_prompt = """You are an AI Game master. Your job is to write what \ | |
| happens next in a player's adventure game.\ | |
| Instructions: \ | |
| You must on only write 1-3 sentences in response. \ | |
| Always write in second person present tense. \ | |
| Ex. (You look north and see...)""" | |
| world_info = f""" | |
| World: {game_state['world']} | |
| Kingdom: {game_state['kingdom']} | |
| Town: {game_state['town']} | |
| Your Character: {game_state['character']}""" | |
| messages = [ | |
| {"role": "system", "content": system_prompt}, | |
| {"role": "user", "content": world_info} | |
| ] | |
| for action in history: | |
| messages.append({"role": "assistant", "content": action[0]}) | |
| messages.append({"role": "user", "content": action[1]}) | |
| messages.append({"role": "user", "content": message}) | |
| model_output = client.chat.completions.create( | |
| model="meta-llama/Llama-3-70b-chat-hf", | |
| messages=messages | |
| ) | |
| result = model_output.choices[0].message.content | |
| return result | |
| def run_action(message, history, game_state): | |
| if message.lower() == 'start game': | |
| return game_state['start'] | |
| system_prompt = """You are an AI Game master. Your job is to write what \ | |
| happens next in a player's adventure game.\ | |
| Instructions: \ | |
| - Write only 1-3 sentences. \ | |
| - Always write in second person, e.g., "You look north and see..." \ | |
| - Write in present tense.""" | |
| world_info = f""" | |
| World: {game_state['world']} | |
| Kingdom: {game_state['kingdom']} | |
| Town: {game_state['town']} | |
| Your Character: {game_state['character']}""" | |
| # Build the conversation context | |
| messages = [ | |
| {"role": "system", "content": system_prompt}, | |
| {"role": "user", "content": world_info} | |
| ] | |
| for action in history: | |
| # Ensure action is in the correct format before appending | |
| if isinstance(action, tuple) and len(action) == 2: | |
| messages.append({"role": "assistant", "content": action[0]}) | |
| messages.append({"role": "user", "content": action[1]}) | |
| else: | |
| # If action is not in the correct format, log a warning or handle the case | |
| print(f"Warning: Invalid action format: {action}") | |
| # Add the user's current message | |
| messages.append({"role": "user", "content": message}) | |
| # Get the model's response | |
| model_output = client.chat.completions.create( | |
| model="meta-llama/Llama-3-70b-chat-hf", | |
| messages=messages | |
| ) | |
| return model_output.choices[0].message.content | |
| def main_loop(message, history): | |
| return run_action(message, history, game_state) | |
| demo = None # Added to allow restart | |
| def start_game(main_loop, share=False): | |
| global demo | |
| # If demo is already running, close it first | |
| if demo is not None: | |
| demo.close() | |
| demo = gr.ChatInterface( | |
| main_loop, | |
| chatbot=gr.Chatbot( | |
| height=250, | |
| placeholder="Type 'start game' to begin", | |
| type='messages' # Updated parameter for Gradio's chatbot messages | |
| ), | |
| textbox=gr.Textbox( | |
| placeholder="What do you do next?", | |
| container=False, | |
| scale=7 | |
| ), | |
| title="AI RPG", | |
| theme="soft", | |
| examples=["Look around", "Continue the story"], | |
| cache_examples=False, | |
| ) | |
| demo.launch(share=share, server_name="0.0.0.0") | |
| start_game(main_loop, True) |