m-ric HF staff commited on
Commit
4ffcfc1
Β·
verified Β·
1 Parent(s): 4b6e9e0

fix agent state sharing (#9)

Browse files

- fixing agent session state (06415688c52d62649de9ca19dd747bfeeac414eb)

Files changed (1) hide show
  1. app.py +29 -14
app.py CHANGED
@@ -131,14 +131,17 @@ WEB_TOOLS = [
131
  TextInspectorTool(model, text_limit),
132
  ]
133
 
134
- agent = CodeAgent(
135
- model=model,
136
- tools=[visualizer] + WEB_TOOLS,
137
- max_steps=5,
138
- verbosity_level=2,
139
- additional_authorized_imports=AUTHORIZED_IMPORTS,
140
- planning_interval=4,
141
- )
 
 
 
142
 
143
  document_inspection_tool = TextInspectorTool(model, 20000)
144
 
@@ -198,17 +201,23 @@ def stream_to_gradio(
198
  class GradioUI:
199
  """A one-line interface to launch your agent in Gradio"""
200
 
201
- def __init__(self, agent, file_upload_folder: str | None = None):
202
- self.agent = agent
203
  self.file_upload_folder = file_upload_folder
204
  if self.file_upload_folder is not None:
205
  if not os.path.exists(file_upload_folder):
206
  os.mkdir(file_upload_folder)
207
 
208
- def interact_with_agent(self, prompt, messages):
 
 
 
 
209
  messages.append(gr.ChatMessage(role="user", content=prompt))
210
  yield messages
211
- for msg in stream_to_gradio(self.agent, task=prompt, reset_agent_memory=False):
 
 
212
  messages.append(msg)
213
  yield messages
214
  yield messages
@@ -279,6 +288,8 @@ OpenAI just published [Deep Research](https://openai.com/index/introducing-deep-
279
  However, their agent has a huge downside: it's not open. So we've started a 24-hour rush to replicate and open-source it. Our resulting [open-Deep-Research agent](https://github.com/huggingface/smolagents/tree/main/examples/open_deep_research) took the #1 rank of any open submission on the GAIA leaderboard! ✨
280
 
281
  You can try a simplified version below. πŸ‘‡""")
 
 
282
  stored_messages = gr.State([])
283
  file_uploads_log = gr.State([])
284
  chatbot = gr.Chatbot(
@@ -305,8 +316,12 @@ You can try a simplified version below. πŸ‘‡""")
305
  self.log_user_message,
306
  [text_input, file_uploads_log],
307
  [stored_messages, text_input],
308
- ).then(self.interact_with_agent, [stored_messages, chatbot], [chatbot])
 
 
 
 
309
 
310
  demo.launch(debug=True, share=True, **kwargs)
311
 
312
- GradioUI(agent).launch()
 
131
  TextInspectorTool(model, text_limit),
132
  ]
133
 
134
+ # Agent creation in a factory function
135
+ def create_agent():
136
+ """Creates a fresh agent instance for each session"""
137
+ return CodeAgent(
138
+ model=model,
139
+ tools=[visualizer] + WEB_TOOLS,
140
+ max_steps=5,
141
+ verbosity_level=2,
142
+ additional_authorized_imports=AUTHORIZED_IMPORTS,
143
+ planning_interval=4,
144
+ )
145
 
146
  document_inspection_tool = TextInspectorTool(model, 20000)
147
 
 
201
  class GradioUI:
202
  """A one-line interface to launch your agent in Gradio"""
203
 
204
+ def __init__(self, file_upload_folder: str | None = None):
205
+
206
  self.file_upload_folder = file_upload_folder
207
  if self.file_upload_folder is not None:
208
  if not os.path.exists(file_upload_folder):
209
  os.mkdir(file_upload_folder)
210
 
211
+ def interact_with_agent(self, prompt, messages, session_state):
212
+ # Get or create session-specific agent
213
+ if 'agent' not in session_state:
214
+ session_state['agent'] = create_agent()
215
+
216
  messages.append(gr.ChatMessage(role="user", content=prompt))
217
  yield messages
218
+
219
+ # Use session's agent instance
220
+ for msg in stream_to_gradio(session_state['agent'], task=prompt, reset_agent_memory=False):
221
  messages.append(msg)
222
  yield messages
223
  yield messages
 
288
  However, their agent has a huge downside: it's not open. So we've started a 24-hour rush to replicate and open-source it. Our resulting [open-Deep-Research agent](https://github.com/huggingface/smolagents/tree/main/examples/open_deep_research) took the #1 rank of any open submission on the GAIA leaderboard! ✨
289
 
290
  You can try a simplified version below. πŸ‘‡""")
291
+ # Add session state to store session-specific data
292
+ session_state = gr.State({}) # Initialize empty state for each session
293
  stored_messages = gr.State([])
294
  file_uploads_log = gr.State([])
295
  chatbot = gr.Chatbot(
 
316
  self.log_user_message,
317
  [text_input, file_uploads_log],
318
  [stored_messages, text_input],
319
+ ).then(self.interact_with_agent,
320
+ # Include session_state in function calls
321
+ [stored_messages, chatbot, session_state],
322
+ [chatbot]
323
+ )
324
 
325
  demo.launch(debug=True, share=True, **kwargs)
326
 
327
+ GradioUI().launch()