ai-sidekick / app.py
serverdaun's picture
Refactor Sidekick initialization to accept a memory file parameter and add clear memory functionality in the Gradio UI.
724c738
raw
history blame
3.03 kB
import os
from typing import Any, List, Tuple
import gradio as gr
from config import MEMORY_FILE
from sidekick import Sidekick
async def setup() -> Sidekick:
sidekick = Sidekick(memory_file=MEMORY_FILE)
await sidekick.setup()
return sidekick
async def process_message(
sidekick: Sidekick, message: str, success_criteria: str, history: List[Any]
) -> Tuple[List[Any], Sidekick]:
results = await sidekick.run_superstep(message, success_criteria, history)
return results, sidekick
async def reset(sidekick: Sidekick) -> Tuple[str, str, None, Sidekick]:
"""Reset the UI and create a fresh Sidekick, cleaning up the existing one if present."""
try:
if sidekick:
sidekick.free_resources()
except Exception:
pass # Ignore cleanup failures during reset
new_sidekick = Sidekick(memory_file=MEMORY_FILE)
await new_sidekick.setup()
return "", "", None, new_sidekick
async def clear_memory(sidekick: Sidekick) -> Tuple[str, str, None, Sidekick]:
"""Delete the persistent memory file."""
try:
os.remove(MEMORY_FILE)
except FileNotFoundError:
pass
return await reset(sidekick)
def free_resources(sidekick: Sidekick) -> None:
try:
if sidekick:
sidekick.free_resources()
except Exception as e:
print(f"Exception during cleanup: {e}")
with gr.Blocks(title="Sidekick", theme=gr.themes.Default(primary_hue="emerald")) as ui:
gr.Markdown("## Sidekick Personal Co-Worker")
sidekick = gr.State(delete_callback=free_resources)
# Chatbot section
with gr.Row():
chatbot = gr.Chatbot(
label="Sidekick", height=300, type="messages", resizable=True
)
# Input section
with gr.Group():
with gr.Row():
message = gr.Textbox(
show_label=False, placeholder="Your request to the Sidekick"
)
with gr.Row():
success_criteria = gr.Textbox(
show_label=False, placeholder="What are your success criteria?"
)
# Buttons section
with gr.Row():
reset_button = gr.Button("Reset", variant="stop")
go_button = gr.Button("Go!", variant="primary")
clear_memory_button = gr.Button("Clear Memory", variant="secondary")
ui.load(setup, [], [sidekick])
message.submit(
process_message,
[sidekick, message, success_criteria, chatbot],
[chatbot, sidekick],
)
success_criteria.submit(
process_message,
[sidekick, message, success_criteria, chatbot],
[chatbot, sidekick],
)
go_button.click(
process_message,
[sidekick, message, success_criteria, chatbot],
[chatbot, sidekick],
)
reset_button.click(
reset, [sidekick], [message, success_criteria, chatbot, sidekick]
)
clear_memory_button.click(
clear_memory, [sidekick], [message, success_criteria, chatbot, sidekick]
)
if __name__ == "__main__":
ui.launch()