|
import gradio as gr |
|
import requests |
|
|
|
def send_request(params, url): |
|
while True: |
|
try: |
|
response = requests.post(url, params=params) |
|
|
|
if response.status_code == 200: |
|
print(f"POST request successful!\n{response.json()}") |
|
return response.json() |
|
else: |
|
print(f"POST request failed with status code: {response.status_code}") |
|
|
|
except requests.exceptions.RequestException as e: |
|
print(f"An error occurred: {e}") |
|
break |
|
|
|
def add_new_game(user_id): |
|
return send_request(locals(), url="https://3n1e869vil.execute-api.eu-central-1.amazonaws.com/test/add_new_game") |
|
|
|
def start_new_story(user_id, game_id, character_name, character_description): |
|
return send_request(locals(), url="https://3n1e869vil.execute-api.eu-central-1.amazonaws.com/test/start_new_story") |
|
|
|
def add_user_msg(user_id, game_id, role, content): |
|
return send_request(locals(), url="https://3n1e869vil.execute-api.eu-central-1.amazonaws.com/test/add_user_msg") |
|
|
|
with gr.Blocks(theme=gr.themes.Default(), css="footer{display:none !important}") as demo: |
|
game_var = gr.State({"user_id": "abcdabcd-abcd-abcd-abcd-abcdabcdabcd", "game_id": "", "player_name": ""}) |
|
|
|
with gr.Column(visible=True) as character_form: |
|
name = gr.Textbox(label="Character name", |
|
info="", |
|
lines=1, |
|
value="Oppo") |
|
description = gr.Textbox(label="Character description", |
|
info="", |
|
lines=10, |
|
value="Gracious loser of card games, patron of the arts and friend to everyone from dukes to barmaids. It's a shame he likes to steal.") |
|
update_character_btn = gr.Button("Begin Your Journey") |
|
|
|
with gr.Row(visible=False) as story_form: |
|
with gr.Column(scale=1, min_width=300): |
|
story_display = gr.Textbox(label="Story", interactive=False) |
|
|
|
with gr.Column(scale=1, min_width=300): |
|
player_response = gr.Textbox(label="Player response", |
|
info="", |
|
lines=3, |
|
value="") |
|
response_btn = gr.Button("Respond") |
|
|
|
|
|
def char_form_action(game, name, description): |
|
|
|
game["player_name"] = name |
|
game["game_id"] = add_new_game(game["user_id"])['id'] |
|
dm_msg = start_new_story(game["user_id"], game["game_id"], game["player_name"], description)['content'] |
|
|
|
|
|
|
|
|
|
return [game, |
|
"", |
|
"", |
|
gr.update(visible=False), |
|
gr.update(visible=True), |
|
gr.update(value=dm_msg)] |
|
|
|
update_character_btn.click(fn=char_form_action, |
|
inputs=[game_var, name, description], |
|
outputs=[game_var, name, description, character_form, story_form, story_display]) |
|
|
|
|
|
def story_form_action(game, player_response): |
|
if len(player_response.strip()) != 0: |
|
dm_msg = add_user_msg(game["user_id"], game["game_id"], game["player_name"], player_response)['content'] |
|
story_str = f'{game["player_name"]}: {player_response}\n\nDM: {dm_msg}' |
|
return { |
|
game_var: game, |
|
story_display: gr.update(value=story_str), |
|
} |
|
else: |
|
return { |
|
game_var: game, |
|
story_display: gr.update(visible=True), |
|
} |
|
|
|
|
|
response_btn.click(fn=story_form_action, |
|
inputs=[game_var, player_response], |
|
outputs=[game_var, story_display]) |
|
|
|
demo.launch(debug=True) |
|
|