Spaces:
Paused
Paused
Clone a new agent per session to isolate the session conversation from others
Browse files- Gradio_UI.py +29 -5
Gradio_UI.py
CHANGED
|
@@ -178,6 +178,33 @@ def stream_to_gradio(
|
|
| 178 |
yield gr.ChatMessage(role="assistant", content=f"**Final answer:** {str(final_answer)}")
|
| 179 |
|
| 180 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 181 |
class GradioUI:
|
| 182 |
"""A one-line interface to launch your agent in Gradio"""
|
| 183 |
|
|
@@ -186,7 +213,7 @@ class GradioUI:
|
|
| 186 |
raise ModuleNotFoundError(
|
| 187 |
"Please install 'gradio' extra to use the GradioUI: `pip install 'smolagents[gradio]'`"
|
| 188 |
)
|
| 189 |
-
self.
|
| 190 |
self.file_upload_folder = file_upload_folder
|
| 191 |
if self.file_upload_folder is not None:
|
| 192 |
if not os.path.exists(file_upload_folder):
|
|
@@ -197,8 +224,7 @@ class GradioUI:
|
|
| 197 |
|
| 198 |
# Get the agent type from the template agent
|
| 199 |
if "agent" not in session_state:
|
| 200 |
-
|
| 201 |
-
session_state["agent"] = deepcopy(self.agent)
|
| 202 |
|
| 203 |
messages.append(gr.ChatMessage(role="user", content=prompt))
|
| 204 |
yield messages
|
|
@@ -300,8 +326,6 @@ class GradioUI:
|
|
| 300 |
[text_input, file_uploads_log],
|
| 301 |
[stored_messages, text_input],
|
| 302 |
).then(self.interact_with_agent, [stored_messages, chatbot, session_state], [chatbot])
|
| 303 |
-
# Initialize instance when page loads
|
| 304 |
-
demo.load(random.random, inputs=None, outputs=None)
|
| 305 |
|
| 306 |
demo.launch(debug=True, share=True, **kwargs)
|
| 307 |
|
|
|
|
| 178 |
yield gr.ChatMessage(role="assistant", content=f"**Final answer:** {str(final_answer)}")
|
| 179 |
|
| 180 |
|
| 181 |
+
class AgentCloner:
|
| 182 |
+
def __init__(self, agent: CodeAgent) -> None:
|
| 183 |
+
self.agent = agent
|
| 184 |
+
self.model_client = agent.model
|
| 185 |
+
|
| 186 |
+
def clone():
|
| 187 |
+
new_model_client = HfApiModel(
|
| 188 |
+
max_tokens=self.model.max_tokens,
|
| 189 |
+
temperature=self.model.temperature,
|
| 190 |
+
model_id=self.model.model_id,
|
| 191 |
+
custom_role_conversions=self.model.custom_role_conversions,
|
| 192 |
+
)
|
| 193 |
+
new_agent = CodeAgent(
|
| 194 |
+
model=new_model_client,
|
| 195 |
+
tools=self.agent.tools,
|
| 196 |
+
max_steps=self.agent.max_steps,
|
| 197 |
+
verbosity_level=self.agent.verbosity_level,
|
| 198 |
+
grammar=self.agent.,
|
| 199 |
+
planning_interval=self.agent.,
|
| 200 |
+
name=self.agent.,
|
| 201 |
+
description=self.agent.,
|
| 202 |
+
prompt_templates=self.agent.prompt_templates
|
| 203 |
+
)
|
| 204 |
+
return new_agent
|
| 205 |
+
|
| 206 |
+
|
| 207 |
+
|
| 208 |
class GradioUI:
|
| 209 |
"""A one-line interface to launch your agent in Gradio"""
|
| 210 |
|
|
|
|
| 213 |
raise ModuleNotFoundError(
|
| 214 |
"Please install 'gradio' extra to use the GradioUI: `pip install 'smolagents[gradio]'`"
|
| 215 |
)
|
| 216 |
+
self.agent_cloner = AgentCloner(agent, model)
|
| 217 |
self.file_upload_folder = file_upload_folder
|
| 218 |
if self.file_upload_folder is not None:
|
| 219 |
if not os.path.exists(file_upload_folder):
|
|
|
|
| 224 |
|
| 225 |
# Get the agent type from the template agent
|
| 226 |
if "agent" not in session_state:
|
| 227 |
+
session_state["agent"] = self.agent_cloner.clone()
|
|
|
|
| 228 |
|
| 229 |
messages.append(gr.ChatMessage(role="user", content=prompt))
|
| 230 |
yield messages
|
|
|
|
| 326 |
[text_input, file_uploads_log],
|
| 327 |
[stored_messages, text_input],
|
| 328 |
).then(self.interact_with_agent, [stored_messages, chatbot, session_state], [chatbot])
|
|
|
|
|
|
|
| 329 |
|
| 330 |
demo.launch(debug=True, share=True, **kwargs)
|
| 331 |
|