agno 2.1.1__py3-none-any.whl → 2.1.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. agno/agent/agent.py +12 -0
  2. agno/db/base.py +8 -4
  3. agno/db/dynamo/dynamo.py +69 -17
  4. agno/db/firestore/firestore.py +68 -29
  5. agno/db/gcs_json/gcs_json_db.py +68 -17
  6. agno/db/in_memory/in_memory_db.py +83 -14
  7. agno/db/json/json_db.py +79 -15
  8. agno/db/mongo/mongo.py +27 -8
  9. agno/db/mysql/mysql.py +17 -3
  10. agno/db/postgres/postgres.py +21 -3
  11. agno/db/redis/redis.py +38 -11
  12. agno/db/singlestore/singlestore.py +14 -3
  13. agno/db/sqlite/sqlite.py +34 -46
  14. agno/knowledge/reader/field_labeled_csv_reader.py +294 -0
  15. agno/knowledge/reader/pdf_reader.py +28 -52
  16. agno/knowledge/reader/reader_factory.py +12 -0
  17. agno/memory/manager.py +12 -4
  18. agno/models/anthropic/claude.py +4 -1
  19. agno/models/aws/bedrock.py +52 -112
  20. agno/os/app.py +24 -30
  21. agno/os/interfaces/a2a/__init__.py +3 -0
  22. agno/os/interfaces/a2a/a2a.py +42 -0
  23. agno/os/interfaces/a2a/router.py +252 -0
  24. agno/os/interfaces/a2a/utils.py +924 -0
  25. agno/os/interfaces/agui/router.py +12 -0
  26. agno/os/router.py +38 -8
  27. agno/os/routers/memory/memory.py +5 -3
  28. agno/os/routers/memory/schemas.py +1 -0
  29. agno/os/utils.py +36 -10
  30. agno/team/team.py +12 -0
  31. agno/tools/mcp.py +46 -1
  32. agno/utils/merge_dict.py +22 -1
  33. agno/utils/streamlit.py +1 -1
  34. agno/workflow/parallel.py +90 -14
  35. agno/workflow/step.py +30 -27
  36. agno/workflow/workflow.py +5 -3
  37. {agno-2.1.1.dist-info → agno-2.1.2.dist-info}/METADATA +16 -14
  38. {agno-2.1.1.dist-info → agno-2.1.2.dist-info}/RECORD +41 -36
  39. {agno-2.1.1.dist-info → agno-2.1.2.dist-info}/WHEEL +0 -0
  40. {agno-2.1.1.dist-info → agno-2.1.2.dist-info}/licenses/LICENSE +0 -0
  41. {agno-2.1.1.dist-info → agno-2.1.2.dist-info}/top_level.txt +0 -0
agno/workflow/step.py CHANGED
@@ -211,6 +211,8 @@ class Step:
211
211
  if step_input.previous_step_outputs:
212
212
  step_input.previous_step_content = step_input.get_last_step_content()
213
213
 
214
+ session_state_copy = copy(session_state) if session_state is not None else {}
215
+
214
216
  # Execute with retries
215
217
  for attempt in range(self.max_retries + 1):
216
218
  try:
@@ -223,7 +225,6 @@ class Step:
223
225
  if inspect.isgeneratorfunction(self.active_executor):
224
226
  content = ""
225
227
  final_response = None
226
- session_state_copy = copy(session_state) if session_state else None
227
228
  try:
228
229
  for chunk in self._call_custom_function(
229
230
  self.active_executor, step_input, session_state_copy
@@ -244,7 +245,7 @@ class Step:
244
245
  final_response = e.value
245
246
 
246
247
  # Merge session_state changes back
247
- if session_state_copy and session_state:
248
+ if session_state is not None:
248
249
  merge_dictionaries(session_state, session_state_copy)
249
250
 
250
251
  if final_response is not None:
@@ -253,11 +254,10 @@ class Step:
253
254
  response = StepOutput(content=content)
254
255
  else:
255
256
  # Execute function with signature inspection for session_state support
256
- session_state_copy = copy(session_state) if session_state else None
257
257
  result = self._call_custom_function(self.active_executor, step_input, session_state_copy) # type: ignore
258
258
 
259
259
  # Merge session_state changes back
260
- if session_state_copy and session_state:
260
+ if session_state is not None:
261
261
  merge_dictionaries(session_state, session_state_copy)
262
262
 
263
263
  # If function returns StepOutput, use it directly
@@ -292,7 +292,6 @@ class Step:
292
292
  if isinstance(self.active_executor, Team):
293
293
  kwargs["store_member_responses"] = True
294
294
 
295
- session_state_copy = copy(session_state)
296
295
  response = self.active_executor.run( # type: ignore
297
296
  input=message, # type: ignore
298
297
  images=images,
@@ -305,8 +304,9 @@ class Step:
305
304
  **kwargs,
306
305
  )
307
306
 
308
- # Update workflow session state
309
- merge_dictionaries(session_state, session_state_copy) # type: ignore
307
+ if session_state is not None:
308
+ # Update workflow session state
309
+ merge_dictionaries(session_state, session_state_copy) # type: ignore
310
310
 
311
311
  if store_executor_outputs and workflow_run_response is not None:
312
312
  self._store_executor_response(workflow_run_response, response) # type: ignore
@@ -365,6 +365,9 @@ class Step:
365
365
  if step_input.previous_step_outputs:
366
366
  step_input.previous_step_content = step_input.get_last_step_content()
367
367
 
368
+ # Create session_state copy once to avoid duplication
369
+ session_state_copy = copy(session_state) if session_state is not None else {}
370
+
368
371
  # Emit StepStartedEvent
369
372
  if stream_intermediate_steps and workflow_run_response:
370
373
  yield StepStartedEvent(
@@ -395,7 +398,6 @@ class Step:
395
398
  if inspect.isgeneratorfunction(self.active_executor):
396
399
  log_debug("Function returned iterable, streaming events")
397
400
  content = ""
398
- session_state_copy = copy(session_state) if session_state else None
399
401
  try:
400
402
  iterator = self._call_custom_function(self.active_executor, step_input, session_state_copy) # type: ignore
401
403
  for event in iterator: # type: ignore
@@ -414,7 +416,7 @@ class Step:
414
416
  yield event # type: ignore[misc]
415
417
 
416
418
  # Merge session_state changes back
417
- if session_state_copy and session_state:
419
+ if session_state is not None:
418
420
  merge_dictionaries(session_state, session_state_copy)
419
421
 
420
422
  if not final_response:
@@ -424,11 +426,10 @@ class Step:
424
426
  final_response = e.value
425
427
 
426
428
  else:
427
- session_state_copy = copy(session_state) if session_state else None
428
429
  result = self._call_custom_function(self.active_executor, step_input, session_state_copy) # type: ignore
429
430
 
430
431
  # Merge session_state changes back
431
- if session_state_copy and session_state:
432
+ if session_state is not None:
432
433
  merge_dictionaries(session_state, session_state_copy)
433
434
 
434
435
  if isinstance(result, StepOutput):
@@ -462,7 +463,6 @@ class Step:
462
463
  if isinstance(self.active_executor, Team):
463
464
  kwargs["store_member_responses"] = True
464
465
 
465
- session_state_copy = copy(session_state)
466
466
  response_stream = self.active_executor.run( # type: ignore[call-overload, misc]
467
467
  input=message,
468
468
  images=images,
@@ -493,8 +493,9 @@ class Step:
493
493
  break
494
494
  yield event # type: ignore[misc]
495
495
 
496
- # Update workflow session state
497
- merge_dictionaries(session_state, session_state_copy) # type: ignore
496
+ if session_state is not None:
497
+ # Update workflow session state
498
+ merge_dictionaries(session_state, session_state_copy) # type: ignore
498
499
 
499
500
  if store_executor_outputs and workflow_run_response is not None:
500
501
  self._store_executor_response(workflow_run_response, active_executor_run_response) # type: ignore
@@ -565,6 +566,9 @@ class Step:
565
566
  if step_input.previous_step_outputs:
566
567
  step_input.previous_step_content = step_input.get_last_step_content()
567
568
 
569
+ # Create session_state copy once to avoid duplication
570
+ session_state_copy = copy(session_state) if session_state is not None else {}
571
+
568
572
  # Execute with retries
569
573
  for attempt in range(self.max_retries + 1):
570
574
  try:
@@ -576,7 +580,6 @@ class Step:
576
580
  ):
577
581
  content = ""
578
582
  final_response = None
579
- session_state_copy = copy(session_state) if session_state else None
580
583
  try:
581
584
  if inspect.isgeneratorfunction(self.active_executor):
582
585
  iterator = self._call_custom_function(
@@ -615,7 +618,7 @@ class Step:
615
618
  final_response = e.value
616
619
 
617
620
  # Merge session_state changes back
618
- if session_state_copy and session_state:
621
+ if session_state is not None:
619
622
  merge_dictionaries(session_state, session_state_copy)
620
623
 
621
624
  if final_response is not None:
@@ -623,7 +626,6 @@ class Step:
623
626
  else:
624
627
  response = StepOutput(content=content)
625
628
  else:
626
- session_state_copy = copy(session_state) if session_state else None
627
629
  if inspect.iscoroutinefunction(self.active_executor):
628
630
  result = await self._acall_custom_function(
629
631
  self.active_executor, step_input, session_state_copy
@@ -632,7 +634,7 @@ class Step:
632
634
  result = self._call_custom_function(self.active_executor, step_input, session_state_copy) # type: ignore
633
635
 
634
636
  # Merge session_state changes back
635
- if session_state_copy and session_state:
637
+ if session_state is not None:
636
638
  merge_dictionaries(session_state, session_state_copy)
637
639
 
638
640
  # If function returns StepOutput, use it directly
@@ -668,7 +670,6 @@ class Step:
668
670
  if isinstance(self.active_executor, Team):
669
671
  kwargs["store_member_responses"] = True
670
672
 
671
- session_state_copy = copy(session_state)
672
673
  response = await self.active_executor.arun( # type: ignore
673
674
  input=message, # type: ignore
674
675
  images=images,
@@ -681,8 +682,9 @@ class Step:
681
682
  **kwargs,
682
683
  )
683
684
 
684
- # Update workflow session state
685
- merge_dictionaries(session_state, session_state_copy) # type: ignore
685
+ if session_state is not None:
686
+ # Update workflow session state
687
+ merge_dictionaries(session_state, session_state_copy) # type: ignore
686
688
 
687
689
  if store_executor_outputs and workflow_run_response is not None:
688
690
  self._store_executor_response(workflow_run_response, response) # type: ignore
@@ -728,6 +730,9 @@ class Step:
728
730
  if step_input.previous_step_outputs:
729
731
  step_input.previous_step_content = step_input.get_last_step_content()
730
732
 
733
+ # Create session_state copy once to avoid duplication
734
+ session_state_copy = copy(session_state) if session_state is not None else {}
735
+
731
736
  if stream_intermediate_steps and workflow_run_response:
732
737
  # Emit StepStartedEvent
733
738
  yield StepStartedEvent(
@@ -751,8 +756,6 @@ class Step:
751
756
  log_debug(f"Executing async function executor for step: {self.name}")
752
757
  import inspect
753
758
 
754
- session_state_copy = copy(session_state) if session_state else None
755
-
756
759
  # Check if the function is an async generator
757
760
  if inspect.isasyncgenfunction(self.active_executor):
758
761
  content = ""
@@ -812,7 +815,7 @@ class Step:
812
815
  final_response = StepOutput(content=str(result))
813
816
 
814
817
  # Merge session_state changes back
815
- if session_state_copy and session_state:
818
+ if session_state is not None:
816
819
  merge_dictionaries(session_state, session_state_copy)
817
820
  else:
818
821
  # For agents and teams, prepare message with context
@@ -840,7 +843,6 @@ class Step:
840
843
  if isinstance(self.active_executor, Team):
841
844
  kwargs["store_member_responses"] = True
842
845
 
843
- session_state_copy = copy(session_state)
844
846
  response_stream = self.active_executor.arun( # type: ignore
845
847
  input=message,
846
848
  images=images,
@@ -871,8 +873,9 @@ class Step:
871
873
  break
872
874
  yield event # type: ignore[misc]
873
875
 
874
- # Update workflow session state
875
- merge_dictionaries(session_state, session_state_copy) # type: ignore
876
+ if session_state is not None:
877
+ # Update workflow session state
878
+ merge_dictionaries(session_state, session_state_copy) # type: ignore
876
879
 
877
880
  if store_executor_outputs and workflow_run_response is not None:
878
881
  self._store_executor_response(workflow_run_response, active_executor_run_response) # type: ignore
agno/workflow/workflow.py CHANGED
@@ -875,10 +875,10 @@ class Workflow:
875
875
  return func(**call_kwargs)
876
876
  except TypeError as e:
877
877
  # If signature inspection fails, fall back to original method
878
- logger.warning(
879
- f"Async function signature inspection failed: {e}. Falling back to original calling convention."
878
+ logger.error(
879
+ f"Function signature inspection failed: {e}. Falling back to original calling convention."
880
880
  )
881
- return func(**call_kwargs)
881
+ return func(**kwargs)
882
882
 
883
883
  def _execute(
884
884
  self,
@@ -2158,6 +2158,7 @@ class Workflow:
2158
2158
  additional_data=additional_data,
2159
2159
  user_id=user_id,
2160
2160
  session_id=session_id,
2161
+ session_state=session_state,
2161
2162
  audio=audio,
2162
2163
  images=images,
2163
2164
  videos=videos,
@@ -2176,6 +2177,7 @@ class Workflow:
2176
2177
  additional_data=additional_data,
2177
2178
  user_id=user_id,
2178
2179
  session_id=session_id,
2180
+ session_state=session_state,
2179
2181
  audio=audio,
2180
2182
  images=images,
2181
2183
  videos=videos,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.1.1
3
+ Version: 2.1.2
4
4
  Summary: Agno: a lightweight library for building Multi-Agent Systems
5
5
  Author-email: Ashpreet Bedi <ashpreet@agno.com>
6
6
  Project-URL: homepage, https://agno.com
@@ -23,6 +23,7 @@ Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  Requires-Dist: docstring-parser
25
25
  Requires-Dist: gitpython
26
+ Requires-Dist: h11>=0.16.0
26
27
  Requires-Dist: httpx
27
28
  Requires-Dist: packaging
28
29
  Requires-Dist: pydantic-settings
@@ -247,6 +248,8 @@ Requires-Dist: chonkie[st]; extra == "chonkie"
247
248
  Requires-Dist: chonkie; extra == "chonkie"
248
249
  Provides-Extra: agui
249
250
  Requires-Dist: ag-ui-protocol; extra == "agui"
251
+ Provides-Extra: a2a
252
+ Requires-Dist: a2a-sdk; extra == "a2a"
250
253
  Provides-Extra: huggingface
251
254
  Requires-Dist: huggingface-hub; extra == "huggingface"
252
255
  Provides-Extra: performance
@@ -267,7 +270,6 @@ Requires-Dist: agno[anthropic]; extra == "models"
267
270
  Requires-Dist: agno[azure]; extra == "models"
268
271
  Requires-Dist: agno[cerebras]; extra == "models"
269
272
  Requires-Dist: agno[cohere]; extra == "models"
270
- Requires-Dist: agno[infinity]; extra == "models"
271
273
  Requires-Dist: agno[google]; extra == "models"
272
274
  Requires-Dist: agno[groq]; extra == "models"
273
275
  Requires-Dist: agno[ibm]; extra == "models"
@@ -379,11 +381,11 @@ Dynamic: license-file
379
381
 
380
382
  ## What is Agno?
381
383
 
382
- [Agno](https://docs.agno.com) is a high-performance runtime for multi-agent systems. Use it to build, run and manage secure multi-agent systems in your cloud.
384
+ [Agno](https://docs.agno.com) is a high-performance SDK and runtime for multi-agent systems. Use it to build, run and manage multi-agent systems in your cloud.
383
385
 
384
- Agno gives you the fastest framework for building agents with session management, memory, knowledge, human in the loop and MCP support. You can put agents together as an autonomous multi-agent team, or build step-based agentic workflows for full control over complex multi-step processes.
386
+ Agno is the fastest framework for building agents with built-in memory, knowledge, session management, human in the loop and best-in-class MCP support. You can put agents together as multi-agent teams or step-based agentic workflows.
385
387
 
386
- In 10 lines of code, we can build an Agent that will fetch the top stories from HackerNews and summarize them.
388
+ In 10 lines of code, we can build an Agent that uses tools to achieve a task.
387
389
 
388
390
  ```python hackernews_agent.py
389
391
  from agno.agent import Agent
@@ -391,22 +393,22 @@ from agno.models.anthropic import Claude
391
393
  from agno.tools.hackernews import HackerNewsTools
392
394
 
393
395
  agent = Agent(
394
- model=Claude(id="claude-sonnet-4-0"),
396
+ model=Claude(id="claude-sonnet-4-5"),
395
397
  tools=[HackerNewsTools()],
396
398
  markdown=True,
397
399
  )
398
- agent.print_response("Summarize the top 5 stories on hackernews", stream=True)
400
+ agent.print_response("Write a report on trending startups and products.", stream=True)
399
401
  ```
400
402
 
401
403
  But the real advantage of Agno is its [AgentOS](https://docs.agno.com/agent-os/introduction) runtime:
402
404
 
403
- 1. You get a pre-built FastAPI app for running your agentic system, meaning you start building your product on day one. This is a remarkable advantage over other solutions or rolling your own.
404
- 2. You also get a control plane which connects directly to your AgentOS for testing, monitoring and managing your system. This gives you unmatched visibility and control over your system.
405
- 3. Your AgentOS runs in your cloud and you get complete data privacy because no data ever leaves your system. This is incredible for security conscious enterprises that can't send traces to external services.
405
+ 1. You get a pre-built FastAPI app for serving your agents, teams and workflows, meaning you start building your AI product on day one. This is a remarkable advantage over other solutions.
406
+ 2. You also get a UI that connects directly to the pre-built FastAPI app. Use it to test, monitor and manage your system. This gives you unmatched visibility and control.
407
+ 3. Your AgentOS runs in your cloud and you get complete privacy because no data ever leaves your system. This is incredible for security conscious enterprises that can't send data to external services.
406
408
 
407
- For organizations building agents, Agno provides the complete solution. You get the fastest framework for building agents (speed of development and execution), a pre-built FastAPI app that lets you build your product on day one, and a control plane for managing your system.
409
+ For organizations building agents, Agno provides the complete solution. You get the fastest framework for building agents (speed of development and execution), a pre-built FastAPI app that get you building product on day one, and a control plane for managing your system.
408
410
 
409
- We bring a novel architecture that no other framework provides, your AgentOS runs securely in your cloud, and the control plane connects directly to it from your browser. You don't need to send data to external services or pay retention costs, you get complete privacy and control.
411
+ We bring a novel architecture that no other framework provides, your AgentOS runs securely in your cloud, and the control plane connects directly to it from your browser. You don't need to send data to any external services or pay retention costs, you get complete privacy and control.
410
412
 
411
413
  ## Getting started
412
414
 
@@ -463,10 +465,10 @@ source .venvs/perfenv/bin/activate
463
465
  # pip install openai agno langgraph langchain_openai
464
466
 
465
467
  # Agno
466
- python evals/performance/instantiation_with_tool.py
468
+ python cookbook/evals/performance/instantiate_agent_with_tool.py
467
469
 
468
470
  # LangGraph
469
- python evals/performance/other/langgraph_instantiation.py
471
+ python cookbook/evals/performance/comparison/langgraph_instantiation.py
470
472
  ```
471
473
 
472
474
  > The following evaluation is run on an Apple M4 MacBook Pro. It also runs as a Github action on this repo.
@@ -4,7 +4,7 @@ agno/exceptions.py,sha256=-JelI3vzaHTWySKM1LqtLoH1Otm841QqAwsiboztG14,4748
4
4
  agno/media.py,sha256=eTfYb_pwhX_PCIVPSrW4VYRqmoxKABEF1aZClrVvQ30,16500
5
5
  agno/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  agno/agent/__init__.py,sha256=s7S3FgsjZxuaabzi8L5n4aSH8IZAiZ7XaNNcySGR-EQ,1051
7
- agno/agent/agent.py,sha256=SwsX4AoO_9r2BEyyLQNHIfwa0T9t8wyNXy2Rmi_rC1A,346387
7
+ agno/agent/agent.py,sha256=9yLUKQTiXKcJtqEg4NSSA9wjbDqec7nwRbOh3NY0v44,346965
8
8
  agno/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  agno/api/agent.py,sha256=fKlQ62E_C9Rjd7Zus3Gs3R1RG-IhzFV-ICpkb6SLqYc,932
10
10
  agno/api/api.py,sha256=Z7iWbrjheJcGLeeDYrtTCWiKTVqjH0uJI35UNWOtAXw,973
@@ -28,41 +28,41 @@ agno/cloud/aws/s3/api_client.py,sha256=nW-Jn8WPILIvdH8niQOPpKMXlAIDB2xYTz0GHRy4P
28
28
  agno/cloud/aws/s3/bucket.py,sha256=5dkKhjWVmf8dyQEyCTd6DkQlKADBnm0-_VKQgKqtJQM,7798
29
29
  agno/cloud/aws/s3/object.py,sha256=ttZPbLm3o63oGIhKgAr_bIf9DOpJlXRmrEVlkbTcJbk,1766
30
30
  agno/db/__init__.py,sha256=bfd_tpKsIKCjZosnFqID26VoWqy88v8gzkf9kLHToY4,625
31
- agno/db/base.py,sha256=JYsminwt6x0MuWxmJIEf9AjNl1WkDELKjlGvCJRdHZ4,8482
31
+ agno/db/base.py,sha256=fGNdKHixsHjfVYQo3NxTiDQBFCvOxChUJynAQmih7NY,8670
32
32
  agno/db/utils.py,sha256=eL0prfDrTEfOwNlOZeoZE4pu59bNJET22uh8wgzz-cw,4879
33
33
  agno/db/dynamo/__init__.py,sha256=fZ7NwKbyhoIu7_4T6hVz44HkIINXMnTfFrDrgB6bpEo,67
34
- agno/db/dynamo/dynamo.py,sha256=Gde62hB1qQx62ey_w00-Ap0_LJhnzwTbwvHJegTr_io,69134
34
+ agno/db/dynamo/dynamo.py,sha256=o4zmI2Nvul4ZLRoUokUCwko1n4dKsJe6hB0xRbb3dpA,71487
35
35
  agno/db/dynamo/schemas.py,sha256=ZqeR4QdqMVi53iz2qcs-d5Y6MDfmhHSuP7vot__hLoI,11638
36
36
  agno/db/dynamo/utils.py,sha256=3Kwkq7FqUac6Q6BjwuzWzfyo4ANnS8FIz7_n3EEnbYo,25047
37
37
  agno/db/firestore/__init__.py,sha256=lYAJjUs4jMxJFty1GYZw464K35zeuBlcoFR9uuIQYtI,79
38
- agno/db/firestore/firestore.py,sha256=izPTOz6u08YQ9sXl7b4x--7wDmSwW1TpWPeefccLpzw,59650
38
+ agno/db/firestore/firestore.py,sha256=zfmEZiCXpxuTgoruVXLjy8TLjqw8dptgsvvP9f4B7Gs,61519
39
39
  agno/db/firestore/schemas.py,sha256=k8YuG_PC_Hd3WCLaDkk4bAJP8BmAWmrt6VXuG1wr2Ak,4132
40
40
  agno/db/firestore/utils.py,sha256=FVR1XQjnsZsG3IrFyvTOHICd0lgD99aajUJ-UAvVEOg,10332
41
41
  agno/db/gcs_json/__init__.py,sha256=aTR4o3aFrzfANHtRw7nX9uc5_GsY52ch0rmoo7uXuc4,76
42
- agno/db/gcs_json/gcs_json_db.py,sha256=1veG3FX1exwTVGzdcMQiM62kctp1S9Sn3QFrh4O06RU,45001
42
+ agno/db/gcs_json/gcs_json_db.py,sha256=mjyqMjvXBJoM4L0OOyO19NLQIanReS64Pb7bM__RYJw,46974
43
43
  agno/db/gcs_json/utils.py,sha256=Ist4HuQoYvC2BKr01oTxDp9mfMirz1UBBDKElbXg2bg,6610
44
44
  agno/db/in_memory/__init__.py,sha256=OvR_FONhOh9PmcRfUA_6gvplZT5UGIBAgVKqVg6SWTA,80
45
- agno/db/in_memory/in_memory_db.py,sha256=nNPn7OCS8T3zV4eb-yUz4ap9M269US8jcZ2_k5tmKJo,38476
45
+ agno/db/in_memory/in_memory_db.py,sha256=gieZm2o9EH-vJwxaqxiK_3qfs0hVDazYWpxGdHVl3F0,41214
46
46
  agno/db/in_memory/utils.py,sha256=X02wny18w5uvGE3caokPbCQTG6t7OErWNPkK3Umru3s,5780
47
47
  agno/db/json/__init__.py,sha256=zyPTmVF9S-OwXCL7FSkrDmunZ_Q14YZO3NYUv1Pa14Y,62
48
- agno/db/json/json_db.py,sha256=fBXdRiP69bHz-FE2LsnFQx0WNatpkjtNfxrebVODhZo,45099
48
+ agno/db/json/json_db.py,sha256=WkPhdkvDKYOc6Q-QUOlhV1G9-VPo0YQzpU1qrmPHMis,47585
49
49
  agno/db/json/utils.py,sha256=__c14xMdyw1AlyV7-DAGDr8YicqhfCbSS5C8OkVN2So,6658
50
50
  agno/db/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
51
  agno/db/migrations/v1_to_v2.py,sha256=bBc96nKf8CjkuhTEdcKdr3hUgPpRMVwE71ozVCnux4c,23969
52
52
  agno/db/mongo/__init__.py,sha256=EPa9QkGNVwnuej72LhZDCeASMXa-e0pR20jsgwa9BhY,63
53
- agno/db/mongo/mongo.py,sha256=HPAmnSDkDxVccViLVG2wnf408n1QZJ4DI0DgI492wzw,67059
53
+ agno/db/mongo/mongo.py,sha256=PfHk_CFMTFnzK3JHm8C6NlAmMbmKZb98265B7D9l36E,67959
54
54
  agno/db/mongo/schemas.py,sha256=MAhfwx7_zxKucnZpgq_YSZANaF5MqiZ6qDByhdIREk8,2054
55
55
  agno/db/mongo/utils.py,sha256=dmVo0HGIG7IPKdCjuRDcO0ZOtyXcNkP6S2G-XBFqzZE,6906
56
56
  agno/db/mysql/__init__.py,sha256=ohBMZ1E6ctioEF0XX5PjC4LtUQrc6lFkjsE4ojyXA8g,63
57
- agno/db/mysql/mysql.py,sha256=0AEGNs-zXWJ6bsmrcBe6l1ECwwnp9d2xWQcwVqwZ_wU,84350
57
+ agno/db/mysql/mysql.py,sha256=y2HQdFrJ-bp1igRgDrfpec1mdf6hCUL6Nrwsa0QXYv4,85122
58
58
  agno/db/mysql/schemas.py,sha256=2OAaX7ILykFCJBcEWH6kFXzNI8JnnYZCXClbVUoRbLc,5482
59
59
  agno/db/mysql/utils.py,sha256=7E83u2gKOkr7lxFPGM2ucLvfJarbEtNRxOeZQhLYKzU,10066
60
60
  agno/db/postgres/__init__.py,sha256=eEdY4emRxmBmxeZUhAYSaObgcqKdd6C9IxUSk1U0gDY,75
61
- agno/db/postgres/postgres.py,sha256=yS7nMy_Iblg4EP-AeRvJs2Ag7Ac7zpjWkv49qa0NZ6A,80149
61
+ agno/db/postgres/postgres.py,sha256=BKQrsQZYZ0NRzaSfBNaHPNmzmH73jNPD4Tje31okjNA,80934
62
62
  agno/db/postgres/schemas.py,sha256=adbKcMapqeXsEYeF6feWe2ja1paRzCMOkQSHHN6Psp8,5275
63
63
  agno/db/postgres/utils.py,sha256=iaY0ZqJgzadCitxSbsRchCtBE5WeUApfIj-VbdH9MJI,9447
64
64
  agno/db/redis/__init__.py,sha256=rZWeZ4CpVeKP-enVQ-SRoJ777i0rdGNgoNDRS9gsfAc,63
65
- agno/db/redis/redis.py,sha256=Yg8KAmXZpNO7rKpwhqc6JJeevCCWQo_d1qz_SVJPQJU,54094
65
+ agno/db/redis/redis.py,sha256=6B2hga3YSI4qM3X3XF8I2UBjHyNI65UIgfrQ5qQo-Po,55789
66
66
  agno/db/redis/schemas.py,sha256=LE1NApES1ao5X770HXB7jvrk2n31KiOWAsl5Z0xMG08,3637
67
67
  agno/db/redis/utils.py,sha256=z1pyakjlCQ_FyQUXe8pPer-pQDG70GLDOYQLNl4Oxrg,8955
68
68
  agno/db/schemas/__init__.py,sha256=HIKc2Apyk6ENJb_Py6sgNdbl6H7eo6PD5QMTmkdJSwI,72
@@ -72,11 +72,11 @@ agno/db/schemas/memory.py,sha256=kKlJ6AWpbwz-ZJfBJieartPP0QqeeoKAXx2Ity4Yj-Y,146
72
72
  agno/db/schemas/metrics.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
73
  agno/db/singlestore/__init__.py,sha256=dufbaod8ZZIeZIVi0hYJQ8Eu2DfIfWdIy00cpqAsx9U,87
74
74
  agno/db/singlestore/schemas.py,sha256=yDXBGtswAuVxKX1_GvKIBt6IlEor2HiAbYPrwX5SSJ8,5489
75
- agno/db/singlestore/singlestore.py,sha256=DRRzrlGDfO33s_oGVBb3raX14QUSI9LPA5-6yX1S5KU,82480
75
+ agno/db/singlestore/singlestore.py,sha256=RpuK51wYWUrg1hFzOTMQvs-55-r0gCWPz5yCG84hNL4,83197
76
76
  agno/db/singlestore/utils.py,sha256=LG0NhOx5B5oJY-Kcc_3ipNzBT1J-mBGx8TARUkRtWv8,11377
77
77
  agno/db/sqlite/__init__.py,sha256=LocJ-suv6xpdun8HUxgbD3bTgmQArQvLJkbpb1pRGy0,67
78
78
  agno/db/sqlite/schemas.py,sha256=-L3hmlg80PAPmfexPrWtnepSzlmZHrbyPZ754nJlVdE,5191
79
- agno/db/sqlite/sqlite.py,sha256=b7Act9wF9H2yH_kkmMovu2tbO88xZikjZFONX11NPdI,83254
79
+ agno/db/sqlite/sqlite.py,sha256=DPsqdUMCZ2Zlo0L4wcz-hi2EG6nNwvNKrevkm95weTM,83033
80
80
  agno/db/sqlite/utils.py,sha256=52FbQrmMHXicxocqbXM5B7iBGgVTSft0r_9PyckLSt0,9434
81
81
  agno/eval/__init__.py,sha256=vCYcIbfOkT2lL8vZJ9zsea6j3byp5A-mxEb_45VaD8I,449
82
82
  agno/eval/accuracy.py,sha256=UZmxOtVP3p3fFzby2YyjE4-Tza2MMtQiBrfhK9mJrx4,32531
@@ -130,11 +130,12 @@ agno/knowledge/reader/arxiv_reader.py,sha256=PtqP3bB4eZAYUlK9_ytPCFiy4icvMj7bIZN
130
130
  agno/knowledge/reader/base.py,sha256=9D3GU6RdGIvVD1cdOHNieA8vCIZxUBJ6HLbwl1Ol-1I,3631
131
131
  agno/knowledge/reader/csv_reader.py,sha256=GZiRh9yx0TM_GAEOQiBp3VfffbwGBZ7M2e5eSs45gIs,6491
132
132
  agno/knowledge/reader/docx_reader.py,sha256=oLQzbtZJg3wNFFzddrV77iDIV2Az4gvM32DLA0QrKZE,3309
133
+ agno/knowledge/reader/field_labeled_csv_reader.py,sha256=ECcg9Fr0DtxKiAF0bLRwTIxVaM3Ivp_EPTgaeWTHNwA,11764
133
134
  agno/knowledge/reader/firecrawl_reader.py,sha256=SCbcRLkMrUb2WiC6SPuAoZULtHITa2VAmBtZlGmamGM,6855
134
135
  agno/knowledge/reader/json_reader.py,sha256=KfDgHno_XHORIGaoA1Q2Y5M7nkcTFM9IUzWXkjVjYKQ,3245
135
136
  agno/knowledge/reader/markdown_reader.py,sha256=HoSEkX2Svl2tEMDyzAmRNmwxsterb3i3-1-EQR6N4IU,5272
136
- agno/knowledge/reader/pdf_reader.py,sha256=NaXGmVXDTI6WCvUW62bo4ryphugvMw8PorKcYU_OJ38,17645
137
- agno/knowledge/reader/reader_factory.py,sha256=g-Z9axqRv1PJliPNnl77y4Qt7ElXD3fq3rbWi85A5tg,9715
137
+ agno/knowledge/reader/pdf_reader.py,sha256=wTWG1U5sz_DjXqNLMpYxzK0aJy4yzTZF9WdgrEwrouI,17187
138
+ agno/knowledge/reader/reader_factory.py,sha256=YKJIBMGQJ7sMhOHVMKSAt36HvfAJi6w6ZXusoa965GM,10224
138
139
  agno/knowledge/reader/s3_reader.py,sha256=j_xBDWV9l5Uhsr88glQ0dCMS-ijvqw8gdMc1Bzfm394,3547
139
140
  agno/knowledge/reader/text_reader.py,sha256=Vkk3mWhjyazPv77Z9PGO1nRVk8cmVkUFIWZFCVqTkOI,4444
140
141
  agno/knowledge/reader/web_search_reader.py,sha256=GMc59AxwS1zTyBEmnwzJCEbPmK4ut1eWy8EV5XXTRSk,14585
@@ -149,7 +150,7 @@ agno/knowledge/reranker/cohere.py,sha256=2Be5blVyeZ3vYlnFa2NYvJuytjaCB8G2OWJ11pQ
149
150
  agno/knowledge/reranker/infinity.py,sha256=N9geg9xZqRdJZksfQcvbGJgMymXrQVJl_K5KICWqH8o,7193
150
151
  agno/knowledge/reranker/sentence_transformer.py,sha256=ZN4SqnMZsUhg5G7AzlONM1_UjezfNrjFYXpNVHD4U-U,1912
151
152
  agno/memory/__init__.py,sha256=XWKJU5SJObYZqEKMZ2XYwgH8-YeuWUoSRfT4dEI5HnY,101
152
- agno/memory/manager.py,sha256=eCgy4KLVM97x8ypqx1-0hKubbTcwEYrOlzI-rNOinec,42219
153
+ agno/memory/manager.py,sha256=szd2QhMyzBT_AD-UkwvTMonPrN2_hXBKVxYFIzy6lnA,42473
153
154
  agno/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
155
  agno/models/base.py,sha256=bjP0Xt5-Jlk1I_7wHmuv8lhUPE75WzZ_iF3U-d81TUI,85214
155
156
  agno/models/defaults.py,sha256=1_fe4-ZbNriE8BgqxVRVi4KGzEYxYKYsz4hn6CZNEEM,40
@@ -160,9 +161,9 @@ agno/models/utils.py,sha256=PprNlVI8d8loHayjRsrc4TL38sfkFMS3EVZcF5cLXoA,669
160
161
  agno/models/aimlapi/__init__.py,sha256=XQcFRvt4qJ8ol9nCC0XKEkVEDivdNf3nZNoJZMZ5m8M,78
161
162
  agno/models/aimlapi/aimlapi.py,sha256=9Qh-b8HvFSvmPP3VBNGT00qy9izHLMWgR-KDQCE5CM0,1493
162
163
  agno/models/anthropic/__init__.py,sha256=nbReX3p17JCwfrMDR9hR7-OaEFZm80I7dng93dl-Fhw,77
163
- agno/models/anthropic/claude.py,sha256=8v9AbtYJmhXF-e6X5yRcRki3xE7GOowLbQh6jeGiei0,26363
164
+ agno/models/anthropic/claude.py,sha256=7chDZrLdh_ocFLOy3qHwOY_pfZrJ-EWrB3otLv97fNU,26488
164
165
  agno/models/aws/__init__.py,sha256=TbcwQwv9A7KjqBM5RQBR8x46GvyyCxbBCjwkpjfVGKE,352
165
- agno/models/aws/bedrock.py,sha256=4H4Y-ZC8nz1Dcag1JxT3orpvzSlHPaNhTy9NXaqCSY8,30919
166
+ agno/models/aws/bedrock.py,sha256=8Yhxumoy2yL9QScVAZqm2jKoHP39lXCsd718N9-_Tao,28881
166
167
  agno/models/aws/claude.py,sha256=sL47z9fM3jxGbARkr0mlAVYEKKX854J3u-Qeb5gIADo,14746
167
168
  agno/models/azure/__init__.py,sha256=EoFdJHjayvmv_VOmaW9cJguwA1K5OFS_nFeazyn0B2w,605
168
169
  agno/models/azure/ai_foundry.py,sha256=V75lk4pH_RVFzVhWYz9-ZSA3dcaQe2SpRF1lrAm_agw,18673
@@ -239,19 +240,23 @@ agno/models/vllm/vllm.py,sha256=UtiiSvUR4pG_1CzuhY5MWduRgzM2hGVTakKJ6ZBdQmo,2730
239
240
  agno/models/xai/__init__.py,sha256=ukcCxnCHxTtkJNA2bAMTX4MhCv1wJcbiq8ZIfYczIxs,55
240
241
  agno/models/xai/xai.py,sha256=jA6_39tfapkjkHKdzbKaNq1t9qIvO1IaZY1hQqEmFVs,4181
241
242
  agno/os/__init__.py,sha256=h8oQu7vhD5RZf09jkyM_Kt1Kdq_d5kFB9gJju8QPwcY,55
242
- agno/os/app.py,sha256=GwOaXkhhmLmgaYzFTL4BWWXxsQLaFowzClh_NscmjtY,25554
243
+ agno/os/app.py,sha256=8qX4zF16Ly-U0zxrNwuA_L8BIea6bMLRYqiP_qonr10,24937
243
244
  agno/os/auth.py,sha256=FyBtAKWtg-qSunCas5m5pK1dVEmikOSZvcCp5r25tTA,1844
244
245
  agno/os/config.py,sha256=u4R9yazQXIcKjR3QzEIZw_XAe_OHp3xn0ff7SVkj2jA,2893
245
246
  agno/os/mcp.py,sha256=w9x8dN-UuIhRrU8azvjPB95RHIcOKh5IXlRCClCfpN4,8104
246
- agno/os/router.py,sha256=7FCrVW35a4tB_o2-lO-eIjrlgoAdCR4fPYxCdk6F6YQ,68965
247
+ agno/os/router.py,sha256=-w_VXQm2QscNAAeDehAgQ9CStNpPr06qhPmYYhiZslM,69930
247
248
  agno/os/schema.py,sha256=bdmGLQoBJyetiAZeajJG_gEKLaQSSEwiDwKy0q4Pa-M,38278
248
249
  agno/os/settings.py,sha256=Cn5_8lZI8Vx1UaUYqs9h6Qp4IMDFn4f3c35uppiaMy4,1343
249
- agno/os/utils.py,sha256=ktRb8U6DSrmAyAGyg_y-hvpgTAIvhOavBOoc-eEBS7Y,16956
250
+ agno/os/utils.py,sha256=IUi608rikks17lsOFia6LK_6YlMB6M5xe6pS90t0xV4,17901
250
251
  agno/os/interfaces/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
251
252
  agno/os/interfaces/base.py,sha256=vXkr1tRjWHTcmBlQFzvQjqURLhObmFtUAx82uij_j48,542
253
+ agno/os/interfaces/a2a/__init__.py,sha256=Fs7--dx9drvtVS9QjsCCm0P7c-hJ7TzU8gNwKTQsZDA,62
254
+ agno/os/interfaces/a2a/a2a.py,sha256=UiTX-GOuXxp1CQzRgtmgSSYNn2iFC_vKYnC37OidygM,1337
255
+ agno/os/interfaces/a2a/router.py,sha256=wyQS4wdIukK-FM7749Ev7KBsZ8r-NxM8dBR-0nuARHE,11141
256
+ agno/os/interfaces/a2a/utils.py,sha256=rTn9x0UGbX53EiAsljf87PmzYwLuvqaobUWpCn35ut0,39285
252
257
  agno/os/interfaces/agui/__init__.py,sha256=1zrGICk4roXUINwSFZfqH6sBsbHmD5KjGYVJMGg4fKQ,66
253
258
  agno/os/interfaces/agui/agui.py,sha256=PKGoDDbtQFmEC0zRwZmsjS_5t9bJWJ-ZGwxEQsu9P-U,1415
254
- agno/os/interfaces/agui/router.py,sha256=CgHCqNwA3ktUoGmCt0PoaQPX3hJ4rcXOgtXUGQ5sPIU,4335
259
+ agno/os/interfaces/agui/router.py,sha256=TBVADofGBw16x0wSF-aOEfNrebNtoX_WzHENcKsnu6s,4835
255
260
  agno/os/interfaces/agui/utils.py,sha256=bfWxYh2w2O3aroRlaOc2f4ZJXEVavya1IqvCntqY9Xw,19162
256
261
  agno/os/interfaces/slack/__init__.py,sha256=F095kOcgiyk_KzIozNNieKwpVc_NR8HYpuO4bKiCNN0,70
257
262
  agno/os/interfaces/slack/router.py,sha256=RuD0Y0YOdlyqaj37W5outpM7dHTlEX6R63V4IrETSYc,5710
@@ -274,8 +279,8 @@ agno/os/routers/knowledge/__init__.py,sha256=ZSqMQ8X7C_oYn8xt7NaYlriarWUpHgaWDyH
274
279
  agno/os/routers/knowledge/knowledge.py,sha256=nCbVU2aCenIvpbmIIWjupgICO3GHbiD76q81P-lD0r8,38604
275
280
  agno/os/routers/knowledge/schemas.py,sha256=w8XZZsWCVNmd2s_rihq2PDcgXhF7H_yO7WHU_OgY6OU,4397
276
281
  agno/os/routers/memory/__init__.py,sha256=9hrYFc1dkbsLBqKfqyfioQeLX9TTbLrJx6lWDKNNWbc,93
277
- agno/os/routers/memory/memory.py,sha256=c7GHRv7Hg9iEXJZtxSYSIeBGWAycl6HaOG-PAXhHPfE,17469
278
- agno/os/routers/memory/schemas.py,sha256=zCjyyqk1v2piRAC1XZo3wHYm3hzM36xAexUBNZxP6u8,1667
282
+ agno/os/routers/memory/memory.py,sha256=LYqcMlRaBIZMr2Vi2bMkRFd3BJqDgpRPS-wshaTYNYg,17723
283
+ agno/os/routers/memory/schemas.py,sha256=yhQUF5m_y5bJQj1N4mKesUG3xmpE2TyZqF92LNqzm1w,1701
279
284
  agno/os/routers/metrics/__init__.py,sha256=Uw6wWEikLpF5hHxBkHtFyaTuz7OUerGYWk0JW7teUGQ,97
280
285
  agno/os/routers/metrics/metrics.py,sha256=0cUsYWlknzTxeAUklswNlWOWl1m7F4NH-mfdv9ex_QY,8021
281
286
  agno/os/routers/metrics/schemas.py,sha256=E7F31CXg9_JiBqeNZWFsZCraShqEHIDD8pDfS4E2oco,1633
@@ -303,7 +308,7 @@ agno/session/summary.py,sha256=THBbzE48V81p4dKUX2W8OvbpsNO5dI6BdtqDyjfcVqw,8433
303
308
  agno/session/team.py,sha256=0lS-9ljtG17iyC0n8sq_7aEy9MZsdfMf8VgObqJ_3tg,10384
304
309
  agno/session/workflow.py,sha256=8dWTona5jen1iPYwjcvxq1XG5EQDFnd28BEjcbqzl4s,5004
305
310
  agno/team/__init__.py,sha256=toHidBOo5M3n_TIVtIKHgcDbLL9HR-_U-YQYuIt_XtE,847
306
- agno/team/team.py,sha256=2MY_m7jGZebw9GgbZFAaz0eN6jzzoElTt_ZU3Hee9KI,337032
311
+ agno/team/team.py,sha256=1gCJR6aF5KS3nx-6xClQhu3fCx0cWjRx0PekbBEje-w,337610
307
312
  agno/tools/__init__.py,sha256=jNll2sELhPPbqm5nPeT4_uyzRO2_KRTW-8Or60kioS0,210
308
313
  agno/tools/agentql.py,sha256=S82Z9aTNr-E5wnA4fbFs76COljJtiQIjf2grjz3CkHU,4104
309
314
  agno/tools/airflow.py,sha256=uf2rOzZpSU64l_qRJ5Raku-R3Gky-uewmYkh6W0-oxg,2610
@@ -360,7 +365,7 @@ agno/tools/linear.py,sha256=yA3Yci-Dnid0rZPeXds4aZY8hL7KjloZkES9thKEPe8,13775
360
365
  agno/tools/linkup.py,sha256=EzX4_ARW96DkFe1IXAFlPQI5rdhhdhmNTX1tB5IVFWs,2123
361
366
  agno/tools/local_file_system.py,sha256=wWyhM5-lqDgDO_YNzRA8ekG-m2n89k8fWr8M1BWiQWo,3157
362
367
  agno/tools/lumalab.py,sha256=6WnZXbThKY2jL9zLswq1PVsbFm2jz81qshWqBZi59oo,6808
363
- agno/tools/mcp.py,sha256=Zox_N0Uv6xRS_rA0pV_nSpQxTbQAiQfSBEOJGGcJnfM,26361
368
+ agno/tools/mcp.py,sha256=xsKZ1EY3-DmHlDPeWTlVBCJv5DKkTKX_KZvmC1o8M-w,27765
364
369
  agno/tools/mcp_toolbox.py,sha256=HOCerjBTTcJ3WnWwkMNlk5zkAAUFUUB-jHTZ6CvApX0,12622
365
370
  agno/tools/mem0.py,sha256=5W5pZwJmBTt-_l4nvBdNQHavXFSKV9mVdJg5aso4JBI,7680
366
371
  agno/tools/memori.py,sha256=tubBYj0rQFbBXadhWxwTjjmb3Rnims536AVPkGdCMcw,13181
@@ -445,7 +450,7 @@ agno/utils/location.py,sha256=VhXIwSWdr7L4DEJoUeVI92Y-rJ32NUcYzFRnzLgX-es,658
445
450
  agno/utils/log.py,sha256=Ycg4_MEkXyOz25OkY272JHWxIZP1nB4OScwJ-r8BMGk,7791
446
451
  agno/utils/mcp.py,sha256=v5juISDNtdQaUK1DmJnAAGuNiSp0491TDwErgjEdhF8,5113
447
452
  agno/utils/media.py,sha256=Lk0sbSHmoKlQi3hLKorowCKGF74xdeMfqIj6Gt21Zek,5891
448
- agno/utils/merge_dict.py,sha256=VgOG8cfJ_jApQfNE0gcOHTM110tm4ojWUKzc6ykJkUQ,658
453
+ agno/utils/merge_dict.py,sha256=L-t3BuKZD5fG-7fscTGG2nKSKcVCXXkdGgKR1TgQRXQ,1497
449
454
  agno/utils/message.py,sha256=HcTDVdgZOfwqGL0YW5QNEeNoSLUvTawCo6_USJzsd6M,2423
450
455
  agno/utils/openai.py,sha256=quhHsggz0uSZc9Lt-aVsveHSS1LT2r1fMgC0IpG43Tg,10300
451
456
  agno/utils/pickle.py,sha256=Ip6CPNxAWF3MVrUhMTW7e3IcpKhYG0IA-NKbdUYr94c,1008
@@ -457,7 +462,7 @@ agno/utils/response_iterator.py,sha256=MgtadrOuMcw2vJcVvhJdMKRzpVddhLWUIkGFbBz7Z
457
462
  agno/utils/safe_formatter.py,sha256=zLrW6O-nGUZvXoDkZOTgVpjeUFTmMUj8pk3FLvW_XjM,809
458
463
  agno/utils/serialize.py,sha256=XvQA_KSkVd5qI1QuZwdQpCsl1IOKddFu52Jl6WQASqU,904
459
464
  agno/utils/shell.py,sha256=JaY14Fq3ulodG4SeSdLEoOZDI4JJlmCbdgwK5beJuc8,700
460
- agno/utils/streamlit.py,sha256=Bn2kQLiTKKqyN0VXj0NBN_sz8V1bV5vImoSk1PCi52g,17966
465
+ agno/utils/streamlit.py,sha256=zr5t3lOvj0kFBIAMVPqqtOJDl6qM9bz-W-k028hfb4U,17977
461
466
  agno/utils/string.py,sha256=iO1etmjHVxnPMTixAKlpR1vnBnRapYL2pm_cjhS06Ww,7557
462
467
  agno/utils/team.py,sha256=VXdm41WhsC6Rb20fHcpO4H55obQ6R435luAAZ4Jc3yQ,1853
463
468
  agno/utils/timer.py,sha256=Fuax69yh1cVIzCYMmJDB4HpTsPM8Iiq1VaTWz1vJtF8,1282
@@ -525,14 +530,14 @@ agno/vectordb/weaviate/weaviate.py,sha256=ZXK81-mTZmPUzUi2U6B5oY2vvJ5eWCv2Hqrwin
525
530
  agno/workflow/__init__.py,sha256=lwavZXIkgqajbSf1jMqzE7kbXBIFmk5niI_NgpVI-gA,542
526
531
  agno/workflow/condition.py,sha256=JFWPnwEeOIkQWexGYDK9pToPyf_siRCW92rkFdA4yTc,28452
527
532
  agno/workflow/loop.py,sha256=cTVkRX5pwfZH5O19Q3W3YS9bcSKmEszkDwfR0V72rV8,30635
528
- agno/workflow/parallel.py,sha256=K_fT51xzYLI2k48dafNHH4uki-HoT6H2aNwCSeHWE2c,29859
533
+ agno/workflow/parallel.py,sha256=msc1n1ga5KZjMySZ7JGFVAMYCgJ8PjPIcR0ue5GnIG0,33667
529
534
  agno/workflow/router.py,sha256=ZAiVsh2F_9ssKj0_RzHWzfgimaZ5hfb3Ni1Xx_SkVR0,26625
530
- agno/workflow/step.py,sha256=15vZFN5HlO3IkHqsxkM-2InUzCWC0Ee8BtoJ-OAhS5w,52485
535
+ agno/workflow/step.py,sha256=JgqvINTmY8Y0RnQP5wQ4v03K479XK3YTa36ZZWYg_Z8,52289
531
536
  agno/workflow/steps.py,sha256=uRE4oGWs2cA-TrX881AEa69zu6rheXH81mNOZiRrNvg,23719
532
537
  agno/workflow/types.py,sha256=ajZg2hQ9VmJQrmqwXpsIAOnkelYQmWNjbb7ZS-Y3Xpo,17632
533
- agno/workflow/workflow.py,sha256=Mw8rGlllpkSoi742L3sH-FubgLpTwMYwmMRYmOv5u9I,115102
534
- agno-2.1.1.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
535
- agno-2.1.1.dist-info/METADATA,sha256=M0perrwcgs0G78Q5bROugl09x1rXxDVbYUGn-xxKcpQ,22051
536
- agno-2.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
537
- agno-2.1.1.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
538
- agno-2.1.1.dist-info/RECORD,,
538
+ agno/workflow/workflow.py,sha256=QSMWhff996gYkPOzcj-qv_HA51z54ts9a4UTemOMTkA,115187
539
+ agno-2.1.2.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
540
+ agno-2.1.2.dist-info/METADATA,sha256=WBDPmWLZjVh7nMQW8a056PVRP3eWEPv_7NybMJPuXSM,22009
541
+ agno-2.1.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
542
+ agno-2.1.2.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
543
+ agno-2.1.2.dist-info/RECORD,,
File without changes