Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Working chatbot logs
Browse files
app.py
CHANGED
@@ -6,6 +6,7 @@ import traceback
|
|
6 |
from e2b_desktop import Sandbox
|
7 |
from huggingface_hub import upload_folder, login
|
8 |
from smolagents.monitoring import LogLevel
|
|
|
9 |
from textwrap import dedent
|
10 |
import time
|
11 |
from threading import Timer
|
@@ -424,7 +425,7 @@ def update_terminal_from_session(session_hash):
|
|
424 |
return read_log_content(log_path)
|
425 |
|
426 |
|
427 |
-
def create_agent():
|
428 |
return E2BVisionAgent(
|
429 |
model=model,
|
430 |
data_dir=data_dir,
|
@@ -436,7 +437,7 @@ def create_agent():
|
|
436 |
)
|
437 |
|
438 |
class EnrichedGradioUI(GradioUI):
|
439 |
-
def interact_with_agent(self, task_input, messages, session_state, session_hash):
|
440 |
import gradio as gr
|
441 |
|
442 |
interaction_id = generate_interaction_id(request)
|
@@ -446,9 +447,12 @@ class EnrichedGradioUI(GradioUI):
|
|
446 |
data_dir = os.path.join(TMP_DIR, interaction_id)
|
447 |
if not os.path.exists(data_dir):
|
448 |
os.makedirs(data_dir)
|
449 |
-
|
450 |
log_file = get_log_file_path(session_hash)
|
451 |
|
|
|
|
|
|
|
452 |
# Construct the full task with instructions
|
453 |
full_task = task_input + dedent(f"""
|
454 |
The desktop has a resolution of {WIDTH}x{HEIGHT}, take it into account to decide clicking coordinates.
|
@@ -464,12 +468,8 @@ class EnrichedGradioUI(GradioUI):
|
|
464 |
We can only execute one action at a time. On each step, answer only a python blob with the action to perform
|
465 |
""")
|
466 |
|
467 |
-
# Get the agent type from the template agent
|
468 |
-
if "agent" not in session_state:
|
469 |
-
session_state["agent"] = create_agent()
|
470 |
-
|
471 |
try:
|
472 |
-
messages.append(gr.ChatMessage(role="user", content=
|
473 |
yield messages
|
474 |
|
475 |
for msg in stream_to_gradio(session_state["agent"], task=full_task, reset_agent_memory=False):
|
@@ -477,7 +477,7 @@ class EnrichedGradioUI(GradioUI):
|
|
477 |
yield messages
|
478 |
|
479 |
yield messages
|
480 |
-
save_final_status(data_dir, "completed", details = agent.memory.get_succinct_steps())
|
481 |
except Exception as e:
|
482 |
error_message=f"Error in interaction: {str(e)}"
|
483 |
messages.append(gr.ChatMessage(role="assistant", content=error_message))
|
@@ -556,7 +556,8 @@ with gr.Blocks(css=custom_css, js=custom_js) as demo:
|
|
556 |
resizeable=True,
|
557 |
scale=1,
|
558 |
)
|
559 |
-
|
|
|
560 |
|
561 |
def read_log_content(log_file, tail=4):
|
562 |
"""Read the contents of a log file for a specific session"""
|
@@ -576,7 +577,7 @@ with gr.Blocks(css=custom_css, js=custom_js) as demo:
|
|
576 |
# Function to set view-only mode
|
577 |
def clear_and_set_view_only(task_input, request: gr.Request):
|
578 |
# First clear the results, then set view-only mode
|
579 |
-
return "", update_html(False, request), gr.update(visible=False)
|
580 |
|
581 |
# Function to set interactive mode
|
582 |
def set_interactive_mode(request: gr.Request):
|
@@ -592,18 +593,18 @@ with gr.Blocks(css=custom_css, js=custom_js) as demo:
|
|
592 |
# Return the current HTML to avoid changing the display
|
593 |
# This will keep the BSOD visible
|
594 |
return gr.update()
|
595 |
-
|
596 |
|
597 |
# Chain the events
|
598 |
# 1. Set view-only mode when button is clicked and reset visibility
|
599 |
view_only_event = update_btn.click(
|
600 |
fn=clear_and_set_view_only,
|
601 |
inputs=[task_input],
|
602 |
-
outputs=[results_output, html_output, results_container
|
603 |
).then(
|
604 |
agent_ui.log_user_message,
|
605 |
[task_input, task_input],
|
606 |
-
[stored_messages,
|
607 |
).then(agent_ui.interact_with_agent, [stored_messages, chatbot, session_state, session_hash_state], [chatbot]).then(
|
608 |
lambda: (
|
609 |
gr.Textbox(
|
@@ -612,7 +613,7 @@ with gr.Blocks(css=custom_css, js=custom_js) as demo:
|
|
612 |
gr.Button(interactive=True),
|
613 |
),
|
614 |
None,
|
615 |
-
[
|
616 |
).then(
|
617 |
fn=check_and_set_interactive,
|
618 |
inputs=[results_output],
|
@@ -626,11 +627,7 @@ with gr.Blocks(css=custom_css, js=custom_js) as demo:
|
|
626 |
)
|
627 |
|
628 |
# Connect refresh button to update terminal
|
629 |
-
|
630 |
-
fn=update_terminal_from_session,
|
631 |
-
inputs=[session_hash_state],
|
632 |
-
outputs=[terminal]
|
633 |
-
)
|
634 |
|
635 |
|
636 |
# Launch the app
|
|
|
6 |
from e2b_desktop import Sandbox
|
7 |
from huggingface_hub import upload_folder, login
|
8 |
from smolagents.monitoring import LogLevel
|
9 |
+
from smolagents.gradio_ui import GradioUI, stream_to_gradio
|
10 |
from textwrap import dedent
|
11 |
import time
|
12 |
from threading import Timer
|
|
|
425 |
return read_log_content(log_path)
|
426 |
|
427 |
|
428 |
+
def create_agent(data_dir, desktop, log_file):
|
429 |
return E2BVisionAgent(
|
430 |
model=model,
|
431 |
data_dir=data_dir,
|
|
|
437 |
)
|
438 |
|
439 |
class EnrichedGradioUI(GradioUI):
|
440 |
+
def interact_with_agent(self, task_input, messages, session_state, session_hash, request: gr.Request):
|
441 |
import gradio as gr
|
442 |
|
443 |
interaction_id = generate_interaction_id(request)
|
|
|
447 |
data_dir = os.path.join(TMP_DIR, interaction_id)
|
448 |
if not os.path.exists(data_dir):
|
449 |
os.makedirs(data_dir)
|
450 |
+
|
451 |
log_file = get_log_file_path(session_hash)
|
452 |
|
453 |
+
if "agent" not in session_state:
|
454 |
+
session_state["agent"] = create_agent(data_dir=data_dir, desktop=desktop, log_file=log_file)
|
455 |
+
|
456 |
# Construct the full task with instructions
|
457 |
full_task = task_input + dedent(f"""
|
458 |
The desktop has a resolution of {WIDTH}x{HEIGHT}, take it into account to decide clicking coordinates.
|
|
|
468 |
We can only execute one action at a time. On each step, answer only a python blob with the action to perform
|
469 |
""")
|
470 |
|
|
|
|
|
|
|
|
|
471 |
try:
|
472 |
+
messages.append(gr.ChatMessage(role="user", content=full_task))
|
473 |
yield messages
|
474 |
|
475 |
for msg in stream_to_gradio(session_state["agent"], task=full_task, reset_agent_memory=False):
|
|
|
477 |
yield messages
|
478 |
|
479 |
yield messages
|
480 |
+
save_final_status(data_dir, "completed", details = session_state["agent"].memory.get_succinct_steps())
|
481 |
except Exception as e:
|
482 |
error_message=f"Error in interaction: {str(e)}"
|
483 |
messages.append(gr.ChatMessage(role="assistant", content=error_message))
|
|
|
556 |
resizeable=True,
|
557 |
scale=1,
|
558 |
)
|
559 |
+
from smolagents import CodeAgent
|
560 |
+
agent_ui = EnrichedGradioUI(CodeAgent(tools=[], model=None, name="ok", description="ok"))
|
561 |
|
562 |
def read_log_content(log_file, tail=4):
|
563 |
"""Read the contents of a log file for a specific session"""
|
|
|
577 |
# Function to set view-only mode
|
578 |
def clear_and_set_view_only(task_input, request: gr.Request):
|
579 |
# First clear the results, then set view-only mode
|
580 |
+
return "", update_html(False, request), gr.update(visible=False)
|
581 |
|
582 |
# Function to set interactive mode
|
583 |
def set_interactive_mode(request: gr.Request):
|
|
|
593 |
# Return the current HTML to avoid changing the display
|
594 |
# This will keep the BSOD visible
|
595 |
return gr.update()
|
596 |
+
submit_btn = gr.Button("dont click")
|
597 |
|
598 |
# Chain the events
|
599 |
# 1. Set view-only mode when button is clicked and reset visibility
|
600 |
view_only_event = update_btn.click(
|
601 |
fn=clear_and_set_view_only,
|
602 |
inputs=[task_input],
|
603 |
+
outputs=[results_output, html_output, results_container]
|
604 |
).then(
|
605 |
agent_ui.log_user_message,
|
606 |
[task_input, task_input],
|
607 |
+
[stored_messages, task_input, submit_btn],
|
608 |
).then(agent_ui.interact_with_agent, [stored_messages, chatbot, session_state, session_hash_state], [chatbot]).then(
|
609 |
lambda: (
|
610 |
gr.Textbox(
|
|
|
613 |
gr.Button(interactive=True),
|
614 |
),
|
615 |
None,
|
616 |
+
[task_input, submit_btn],
|
617 |
).then(
|
618 |
fn=check_and_set_interactive,
|
619 |
inputs=[results_output],
|
|
|
627 |
)
|
628 |
|
629 |
# Connect refresh button to update terminal
|
630 |
+
|
|
|
|
|
|
|
|
|
631 |
|
632 |
|
633 |
# Launch the app
|