|
from google.genai import types |
|
from src.manager import GeminiManager |
|
from src.tool_loader import ToolLoader |
|
import gradio as gr |
|
import time |
|
|
|
if __name__ == "__main__": |
|
|
|
|
|
tool_loader = ToolLoader() |
|
|
|
model_manager = GeminiManager(toolsLoader=tool_loader, gemini_model="gemini-2.5-pro-preview-03-25") |
|
|
|
def user_message(msg: str, history: list) -> tuple[str, list]: |
|
"""Adds user message to chat history""" |
|
history.append(gr.ChatMessage(role="user", content=msg)) |
|
return "", history |
|
|
|
def handle_undo(history, undo_data: gr.UndoData): |
|
return history[:undo_data.index], history[undo_data.index]['content'] |
|
|
|
def handle_retry(history, retry_data: gr.RetryData): |
|
new_history = history[:retry_data.index+1] |
|
|
|
yield from model_manager.run(new_history) |
|
|
|
def handle_edit(history, edit_data: gr.EditData): |
|
new_history = history[:edit_data.index+1] |
|
new_history[-1]['content'] = edit_data.value |
|
|
|
yield from model_manager.run(new_history) |
|
|
|
with gr.Blocks(fill_width=True, fill_height=True) as demo: |
|
gr.Markdown("# Hashiru AI") |
|
|
|
chatbot = gr.Chatbot( |
|
avatar_images=("HASHIRU_2.png", "HASHIRU.png"), |
|
type="messages", |
|
show_copy_button=True, |
|
editable="user", |
|
scale=1 |
|
) |
|
input_box = gr.Textbox(label="Chat Message", scale=0, interactive=True, submit_btn=True) |
|
|
|
chatbot.undo(handle_undo, chatbot, [chatbot, input_box]) |
|
chatbot.retry(handle_retry, chatbot, [chatbot, input_box]) |
|
chatbot.edit(handle_edit, chatbot, [chatbot, input_box]) |
|
|
|
input_box.submit( |
|
user_message, |
|
inputs=[input_box, chatbot], |
|
outputs=[input_box, chatbot], |
|
queue=False, |
|
).then( |
|
model_manager.run, |
|
inputs=chatbot, |
|
outputs=[chatbot, input_box], |
|
queue=True, |
|
show_progress="full", |
|
trigger_mode="always_last" |
|
) |
|
|
|
demo.launch(share=True) |
|
|