DiceGame / app.py
bparekh99's picture
Update app.py
824fa6b verified
raw
history blame
2.49 kB
# Install dependencies
# pip install gradio langgraph
import gradio as gr
import random
from typing import Literal
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
# Define the game state
global_score = {"total": 0}
game_history = [] # Track game rounds
class State(TypedDict):
bet: int
result: str
score: int
roll: int
# Nodes for LangGraph
def input_node(state):
return state
def success_node(state):
global_score["total"] += 10
state["result"] = f"πŸŽ‰ You win! +$10 (Roll: {state['roll']})"
state["score"] = global_score["total"]
return state
def failure_node(state):
global_score["total"] -= 5
state["result"] = f"😞 You lose! -$5 (Roll: {state['roll']})"
state["score"] = global_score["total"]
return state
def determine_outcome(state) -> Literal["node_2", "node_3"]:
roll = random.randint(1, 6) + random.randint(1, 6)
state['roll'] = roll
return "node_2" if roll <= state["bet"] else "node_3"
# Build LangGraph
builder = StateGraph(State)
builder.add_node("node_1", input_node)
builder.add_node("node_2", success_node)
builder.add_node("node_3", failure_node)
builder.add_edge(START, "node_1")
builder.add_conditional_edges("node_1", determine_outcome)
builder.add_edge("node_2", END)
builder.add_edge("node_3", END)
graph = builder.compile()
# Gradio UI function
def play_game(bet: int):
if bet < 1 or bet > 12:
return "Please enter a value between 1 and 12.", global_score["total"], []
result = graph.invoke({"bet": bet, "result": "", "score": global_score["total"], "roll": 0})
game_history.append({"Bet": bet, "Roll": result["roll"], "Result": result["result"], "Score": result["score"]})
return result["result"], result["score"], game_history[::-1]
# Gradio Interface
with gr.Blocks() as demo:
gr.Markdown("## 🎲 Dice Bet Game with LangGraph")
with gr.Row():
bet_input = gr.Number(label="Your Bet (1-12)", value=7, precision=0)
play_button = gr.Button("🎲 Roll Dice")
with gr.Row():
result_output = gr.Textbox(label="Result")
score_output = gr.Number(label="Total Winnings", value=0, precision=0, interactive=False)
history_table = gr.Dataframe(headers=["Bet", "Roll", "Result", "Score"], label="Game History", interactive=False)
play_button.click(play_game, inputs=[bet_input], outputs=[result_output, score_output, history_table])
if __name__ == "__main__":
demo.launch()