in src/smolagents/gradio_ui.py [0:0]
def interact_with_agent(self, prompt, messages, session_state):
import gradio as gr
# Get the agent type from the template agent
if "agent" not in session_state:
session_state["agent"] = self.agent
try:
messages.append(gr.ChatMessage(role="user", content=prompt, metadata={"status": "done"}))
yield messages
for msg in stream_to_gradio(
session_state["agent"], task=prompt, reset_agent_memory=self.reset_agent_memory
):
if isinstance(msg, gr.ChatMessage):
messages[-1].metadata["status"] = "done"
messages.append(msg)
elif isinstance(msg, str): # Then it's only a completion delta
msg = msg.replace("<", r"\<").replace(">", r"\>") # HTML tags seem to break Gradio Chatbot
if messages[-1].metadata["status"] == "pending":
messages[-1].content = msg
else:
messages.append(
gr.ChatMessage(role=MessageRole.ASSISTANT, content=msg, metadata={"status": "pending"})
)
yield messages
yield messages
except Exception as e:
yield messages
raise gr.Error(f"Error in interaction: {str(e)}")