serverdaun commited on
Commit
b2f7196
·
1 Parent(s): 04c9c28

add gradio UI

Browse files
Files changed (1) hide show
  1. app.py +90 -0
app.py ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Any, List, Tuple
2
+
3
+ import gradio as gr
4
+
5
+ from sidekick import Sidekick
6
+
7
+
8
+ async def setup() -> Sidekick:
9
+ sidekick = Sidekick()
10
+ await sidekick.setup()
11
+ return sidekick
12
+
13
+
14
+ async def process_message(
15
+ sidekick: Sidekick, message: str, success_criteria: str, history: List[Any]
16
+ ) -> Tuple[List[Any], Sidekick]:
17
+ results = await sidekick.run_superstep(message, success_criteria, history)
18
+ return results, sidekick
19
+
20
+
21
+ async def reset(sidekick: Sidekick) -> Tuple[str, str, None, Sidekick]:
22
+ """Reset the UI and create a fresh Sidekick, cleaning up the existing one if present."""
23
+ try:
24
+ if sidekick:
25
+ sidekick.free_resources()
26
+ except Exception:
27
+ pass # Ignore cleanup failures during reset
28
+
29
+ new_sidekick = Sidekick()
30
+ await new_sidekick.setup()
31
+ return "", "", None, new_sidekick
32
+
33
+
34
+ def free_resources(sidekick: Sidekick) -> None:
35
+ try:
36
+ if sidekick:
37
+ sidekick.free_resources()
38
+ except Exception as e:
39
+ print(f"Exception during cleanup: {e}")
40
+
41
+
42
+ with gr.Blocks(title="Sidekick", theme=gr.themes.Default(primary_hue="emerald")) as ui:
43
+ gr.Markdown("## Sidekick Personal Co-Worker")
44
+ sidekick = gr.State(delete_callback=free_resources)
45
+
46
+ # Chatbot section
47
+ with gr.Row():
48
+ chatbot = gr.Chatbot(
49
+ label="Sidekick", height=300, type="messages", resizable=True
50
+ )
51
+
52
+ # Input section
53
+ with gr.Group():
54
+ with gr.Row():
55
+ message = gr.Textbox(
56
+ show_label=False, placeholder="Your request to the Sidekick"
57
+ )
58
+ with gr.Row():
59
+ success_criteria = gr.Textbox(
60
+ show_label=False, placeholder="What are your success criteria?"
61
+ )
62
+
63
+ # Buttons section
64
+ with gr.Row():
65
+ reset_button = gr.Button("Reset", variant="stop")
66
+ go_button = gr.Button("Go!", variant="primary")
67
+
68
+ ui.load(setup, [], [sidekick])
69
+ message.submit(
70
+ process_message,
71
+ [sidekick, message, success_criteria, chatbot],
72
+ [chatbot, sidekick],
73
+ )
74
+ success_criteria.submit(
75
+ process_message,
76
+ [sidekick, message, success_criteria, chatbot],
77
+ [chatbot, sidekick],
78
+ )
79
+ go_button.click(
80
+ process_message,
81
+ [sidekick, message, success_criteria, chatbot],
82
+ [chatbot, sidekick],
83
+ )
84
+ reset_button.click(
85
+ reset, [sidekick], [message, success_criteria, chatbot, sidekick]
86
+ )
87
+
88
+
89
+ if __name__ == "__main__":
90
+ ui.launch()