agno 2.1.2__py3-none-any.whl → 2.1.4__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.
agno/workflow/workflow.py CHANGED
@@ -170,6 +170,11 @@ class Workflow:
170
170
  # This helps us improve the Agent and provide better support
171
171
  telemetry: bool = True
172
172
 
173
+ # Add this flag to control if the workflow should add history to the steps
174
+ add_workflow_history_to_steps: bool = False
175
+ # Number of historical runs to include in the messages
176
+ num_history_runs: int = 3
177
+
173
178
  def __init__(
174
179
  self,
175
180
  id: Optional[str] = None,
@@ -191,6 +196,8 @@ class Workflow:
191
196
  metadata: Optional[Dict[str, Any]] = None,
192
197
  cache_session: bool = False,
193
198
  telemetry: bool = True,
199
+ add_workflow_history_to_steps: bool = False,
200
+ num_history_runs: int = 3,
194
201
  ):
195
202
  self.id = id
196
203
  self.name = name
@@ -211,7 +218,8 @@ class Workflow:
211
218
  self.cache_session = cache_session
212
219
  self.db = db
213
220
  self.telemetry = telemetry
214
-
221
+ self.add_workflow_history_to_steps = add_workflow_history_to_steps
222
+ self.num_history_runs = num_history_runs
215
223
  self._workflow_session: Optional[WorkflowSession] = None
216
224
 
217
225
  def set_id(self) -> None:
@@ -707,6 +715,34 @@ class Workflow:
707
715
 
708
716
  return event
709
717
 
718
+ def _enrich_event_with_workflow_context(
719
+ self,
720
+ event: Any,
721
+ workflow_run_response: WorkflowRunOutput,
722
+ step_index: Optional[Union[int, tuple]] = None,
723
+ step: Optional[Any] = None,
724
+ ) -> Any:
725
+ """Enrich any event with workflow context information for frontend tracking"""
726
+
727
+ step_id = getattr(step, "step_id", None) if step else None
728
+ step_name = getattr(step, "name", None) if step else None
729
+
730
+ if hasattr(event, "workflow_id"):
731
+ event.workflow_id = workflow_run_response.workflow_id
732
+ if hasattr(event, "workflow_run_id"):
733
+ event.workflow_run_id = workflow_run_response.run_id
734
+ if hasattr(event, "step_id") and step_id:
735
+ event.step_id = step_id
736
+ if hasattr(event, "step_name") and step_name is not None:
737
+ if event.step_name is None:
738
+ event.step_name = step_name
739
+ # Only set step_index if it's not already set (preserve parallel.py's tuples)
740
+ if hasattr(event, "step_index") and step_index is not None:
741
+ if event.step_index is None:
742
+ event.step_index = step_index
743
+
744
+ return event
745
+
710
746
  def _transform_step_output_to_event(
711
747
  self, step_output: StepOutput, workflow_run_response: WorkflowRunOutput, step_index: Optional[int] = None
712
748
  ) -> StepOutputEvent:
@@ -875,9 +911,7 @@ class Workflow:
875
911
  return func(**call_kwargs)
876
912
  except TypeError as e:
877
913
  # If signature inspection fails, fall back to original method
878
- logger.error(
879
- f"Function signature inspection failed: {e}. Falling back to original calling convention."
880
- )
914
+ logger.error(f"Function signature inspection failed: {e}. Falling back to original calling convention.")
881
915
  return func(**kwargs)
882
916
 
883
917
  def _execute(
@@ -892,7 +926,8 @@ class Workflow:
892
926
  from inspect import isasyncgenfunction, iscoroutinefunction, isgeneratorfunction
893
927
 
894
928
  workflow_run_response.status = RunStatus.running
895
- register_run(workflow_run_response.run_id) # type: ignore
929
+ if workflow_run_response.run_id:
930
+ register_run(workflow_run_response.run_id) # type: ignore
896
931
 
897
932
  if callable(self.steps):
898
933
  if iscoroutinefunction(self.steps) or isasyncgenfunction(self.steps):
@@ -953,6 +988,11 @@ class Workflow:
953
988
  workflow_run_response=workflow_run_response,
954
989
  session_state=session_state,
955
990
  store_executor_outputs=self.store_executor_outputs,
991
+ workflow_session=session,
992
+ add_workflow_history_to_steps=self.add_workflow_history_to_steps
993
+ if self.add_workflow_history_to_steps
994
+ else None,
995
+ num_history_runs=self.num_history_runs,
956
996
  )
957
997
 
958
998
  # Check for cancellation after step execution
@@ -1122,6 +1162,11 @@ class Workflow:
1122
1162
  session_state=session_state,
1123
1163
  step_index=i,
1124
1164
  store_executor_outputs=self.store_executor_outputs,
1165
+ workflow_session=session,
1166
+ add_workflow_history_to_steps=self.add_workflow_history_to_steps
1167
+ if self.add_workflow_history_to_steps
1168
+ else None,
1169
+ num_history_runs=self.num_history_runs,
1125
1170
  ):
1126
1171
  raise_if_cancelled(workflow_run_response.run_id) # type: ignore
1127
1172
  # Handle events
@@ -1172,11 +1217,18 @@ class Workflow:
1172
1217
  yield step_output_event
1173
1218
 
1174
1219
  elif isinstance(event, WorkflowRunOutputEvent): # type: ignore
1175
- yield self._handle_event(event, workflow_run_response) # type: ignore
1220
+ # Enrich event with workflow context before yielding
1221
+ enriched_event = self._enrich_event_with_workflow_context(
1222
+ event, workflow_run_response, step_index=i, step=step
1223
+ )
1224
+ yield self._handle_event(enriched_event, workflow_run_response) # type: ignore
1176
1225
 
1177
1226
  else:
1178
- # Yield other internal events
1179
- yield self._handle_event(event, workflow_run_response) # type: ignore
1227
+ # Enrich other events with workflow context before yielding
1228
+ enriched_event = self._enrich_event_with_workflow_context(
1229
+ event, workflow_run_response, step_index=i, step=step
1230
+ )
1231
+ yield self._handle_event(enriched_event, workflow_run_response) # type: ignore
1180
1232
 
1181
1233
  # Break out of main step loop if early termination was requested
1182
1234
  if "early_termination" in locals() and early_termination:
@@ -1346,7 +1398,8 @@ class Workflow:
1346
1398
  workflow_run_response.status = RunStatus.running
1347
1399
 
1348
1400
  # Register run for cancellation tracking
1349
- register_run(workflow_run_response.run_id) # type: ignore
1401
+ if workflow_run_response.run_id:
1402
+ register_run(workflow_run_response.run_id) # type: ignore
1350
1403
 
1351
1404
  if callable(self.steps):
1352
1405
  # Execute the workflow with the custom executor
@@ -1415,6 +1468,11 @@ class Workflow:
1415
1468
  workflow_run_response=workflow_run_response,
1416
1469
  session_state=session_state,
1417
1470
  store_executor_outputs=self.store_executor_outputs,
1471
+ workflow_session=session,
1472
+ add_workflow_history_to_steps=self.add_workflow_history_to_steps
1473
+ if self.add_workflow_history_to_steps
1474
+ else None,
1475
+ num_history_runs=self.num_history_runs,
1418
1476
  )
1419
1477
 
1420
1478
  # Check for cancellation after step execution
@@ -1507,6 +1565,10 @@ class Workflow:
1507
1565
 
1508
1566
  workflow_run_response.status = RunStatus.running
1509
1567
 
1568
+ # Register run for cancellation tracking
1569
+ if workflow_run_response.run_id:
1570
+ register_run(workflow_run_response.run_id)
1571
+
1510
1572
  workflow_started_event = WorkflowStartedEvent(
1511
1573
  run_id=workflow_run_response.run_id or "",
1512
1574
  workflow_name=workflow_run_response.workflow_name,
@@ -1585,6 +1647,11 @@ class Workflow:
1585
1647
  session_state=session_state,
1586
1648
  step_index=i,
1587
1649
  store_executor_outputs=self.store_executor_outputs,
1650
+ workflow_session=session,
1651
+ add_workflow_history_to_steps=self.add_workflow_history_to_steps
1652
+ if self.add_workflow_history_to_steps
1653
+ else None,
1654
+ num_history_runs=self.num_history_runs,
1588
1655
  ):
1589
1656
  if workflow_run_response.run_id:
1590
1657
  raise_if_cancelled(workflow_run_response.run_id)
@@ -1634,11 +1701,22 @@ class Workflow:
1634
1701
  yield step_output_event
1635
1702
 
1636
1703
  elif isinstance(event, WorkflowRunOutputEvent): # type: ignore
1637
- yield self._handle_event(event, workflow_run_response, websocket_handler=websocket_handler) # type: ignore
1704
+ # Enrich event with workflow context before yielding
1705
+ enriched_event = self._enrich_event_with_workflow_context(
1706
+ event, workflow_run_response, step_index=i, step=step
1707
+ )
1708
+ yield self._handle_event(
1709
+ enriched_event, workflow_run_response, websocket_handler=websocket_handler
1710
+ ) # type: ignore
1638
1711
 
1639
1712
  else:
1640
- # Yield other internal events
1641
- yield self._handle_event(event, workflow_run_response, websocket_handler=websocket_handler) # type: ignore
1713
+ # Enrich other events with workflow context before yielding
1714
+ enriched_event = self._enrich_event_with_workflow_context(
1715
+ event, workflow_run_response, step_index=i, step=step
1716
+ )
1717
+ yield self._handle_event(
1718
+ enriched_event, workflow_run_response, websocket_handler=websocket_handler
1719
+ ) # type: ignore
1642
1720
 
1643
1721
  # Break out of main step loop if early termination was requested
1644
1722
  if "early_termination" in locals() and early_termination:
@@ -2632,3 +2710,147 @@ class Workflow:
2632
2710
  )
2633
2711
  except Exception as e:
2634
2712
  log_debug(f"Could not create Workflow run telemetry event: {e}")
2713
+
2714
+ def cli_app(
2715
+ self,
2716
+ input: Optional[str] = None,
2717
+ session_id: Optional[str] = None,
2718
+ user_id: Optional[str] = None,
2719
+ user: str = "User",
2720
+ emoji: str = ":technologist:",
2721
+ stream: Optional[bool] = None,
2722
+ stream_intermediate_steps: Optional[bool] = None,
2723
+ markdown: bool = True,
2724
+ show_time: bool = True,
2725
+ show_step_details: bool = True,
2726
+ exit_on: Optional[List[str]] = None,
2727
+ **kwargs: Any,
2728
+ ) -> None:
2729
+ """
2730
+ Run an interactive command-line interface to interact with the workflow.
2731
+
2732
+ This method creates a CLI interface that allows users to interact with the workflow
2733
+ either by providing a single input or through continuous interactive prompts.
2734
+
2735
+ Arguments:
2736
+ input: Optional initial input to process before starting interactive mode.
2737
+ session_id: Optional session identifier for maintaining conversation context.
2738
+ user_id: Optional user identifier for tracking user-specific data.
2739
+ user: Display name for the user in the CLI prompt. Defaults to "User".
2740
+ emoji: Emoji to display next to the user name in prompts. Defaults to ":technologist:".
2741
+ stream: Whether to stream the workflow response. If None, uses workflow default.
2742
+ stream_intermediate_steps: Whether to stream intermediate step outputs. If None, uses workflow default.
2743
+ markdown: Whether to render output as markdown. Defaults to True.
2744
+ show_time: Whether to display timestamps in the output. Defaults to True.
2745
+ show_step_details: Whether to show detailed step information. Defaults to True.
2746
+ exit_on: List of commands that will exit the CLI. Defaults to ["exit", "quit", "bye", "stop"].
2747
+ **kwargs: Additional keyword arguments passed to the workflow's print_response method.
2748
+
2749
+ Returns:
2750
+ None: This method runs interactively and does not return a value.
2751
+ """
2752
+
2753
+ from rich.prompt import Prompt
2754
+
2755
+ if input:
2756
+ self.print_response(
2757
+ input=input,
2758
+ stream=stream,
2759
+ stream_intermediate_steps=stream_intermediate_steps,
2760
+ markdown=markdown,
2761
+ show_time=show_time,
2762
+ show_step_details=show_step_details,
2763
+ user_id=user_id,
2764
+ session_id=session_id,
2765
+ **kwargs,
2766
+ )
2767
+
2768
+ _exit_on = exit_on or ["exit", "quit", "bye", "stop"]
2769
+ while True:
2770
+ message = Prompt.ask(f"[bold] {emoji} {user} [/bold]")
2771
+ if message in _exit_on:
2772
+ break
2773
+
2774
+ self.print_response(
2775
+ input=message,
2776
+ stream=stream,
2777
+ stream_intermediate_steps=stream_intermediate_steps,
2778
+ markdown=markdown,
2779
+ show_time=show_time,
2780
+ show_step_details=show_step_details,
2781
+ user_id=user_id,
2782
+ session_id=session_id,
2783
+ **kwargs,
2784
+ )
2785
+
2786
+ async def acli_app(
2787
+ self,
2788
+ input: Optional[str] = None,
2789
+ session_id: Optional[str] = None,
2790
+ user_id: Optional[str] = None,
2791
+ user: str = "User",
2792
+ emoji: str = ":technologist:",
2793
+ stream: Optional[bool] = None,
2794
+ stream_intermediate_steps: Optional[bool] = None,
2795
+ markdown: bool = True,
2796
+ show_time: bool = True,
2797
+ show_step_details: bool = True,
2798
+ exit_on: Optional[List[str]] = None,
2799
+ **kwargs: Any,
2800
+ ) -> None:
2801
+ """
2802
+ Run an interactive command-line interface to interact with the workflow.
2803
+
2804
+ This method creates a CLI interface that allows users to interact with the workflow
2805
+ either by providing a single input or through continuous interactive prompts.
2806
+
2807
+ Arguments:
2808
+ input: Optional initial input to process before starting interactive mode.
2809
+ session_id: Optional session identifier for maintaining conversation context.
2810
+ user_id: Optional user identifier for tracking user-specific data.
2811
+ user: Display name for the user in the CLI prompt. Defaults to "User".
2812
+ emoji: Emoji to display next to the user name in prompts. Defaults to ":technologist:".
2813
+ stream: Whether to stream the workflow response. If None, uses workflow default.
2814
+ stream_intermediate_steps: Whether to stream intermediate step outputs. If None, uses workflow default.
2815
+ markdown: Whether to render output as markdown. Defaults to True.
2816
+ show_time: Whether to display timestamps in the output. Defaults to True.
2817
+ show_step_details: Whether to show detailed step information. Defaults to True.
2818
+ exit_on: List of commands that will exit the CLI. Defaults to ["exit", "quit", "bye", "stop"].
2819
+ **kwargs: Additional keyword arguments passed to the workflow's print_response method.
2820
+
2821
+ Returns:
2822
+ None: This method runs interactively and does not return a value.
2823
+ """
2824
+
2825
+ from rich.prompt import Prompt
2826
+
2827
+ if input:
2828
+ await self.aprint_response(
2829
+ input=input,
2830
+ stream=stream,
2831
+ stream_intermediate_steps=stream_intermediate_steps,
2832
+ markdown=markdown,
2833
+ show_time=show_time,
2834
+ show_step_details=show_step_details,
2835
+ user_id=user_id,
2836
+ session_id=session_id,
2837
+ **kwargs,
2838
+ )
2839
+
2840
+ _exit_on = exit_on or ["exit", "quit", "bye", "stop"]
2841
+ while True:
2842
+ message = Prompt.ask(f"[bold] {emoji} {user} [/bold]")
2843
+ if message in _exit_on:
2844
+ break
2845
+
2846
+ await self.aprint_response(
2847
+ input=message,
2848
+ stream=stream,
2849
+ stream_intermediate_steps=stream_intermediate_steps,
2850
+ markdown=markdown,
2851
+ show_time=show_time,
2852
+ show_step_details=show_step_details,
2853
+ user_id=user_id,
2854
+ session_id=session_id,
2855
+ **kwargs,
2856
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.1.2
3
+ Version: 2.1.4
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
@@ -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=9yLUKQTiXKcJtqEg4NSSA9wjbDqec7nwRbOh3NY0v44,346965
7
+ agno/agent/agent.py,sha256=IpveWi4IXf3jh8mWbUxVSLOY-pwEOe0waw8ebpafu34,345232
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
@@ -31,18 +31,18 @@ agno/db/__init__.py,sha256=bfd_tpKsIKCjZosnFqID26VoWqy88v8gzkf9kLHToY4,625
31
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=o4zmI2Nvul4ZLRoUokUCwko1n4dKsJe6hB0xRbb3dpA,71487
35
- agno/db/dynamo/schemas.py,sha256=ZqeR4QdqMVi53iz2qcs-d5Y6MDfmhHSuP7vot__hLoI,11638
36
- agno/db/dynamo/utils.py,sha256=3Kwkq7FqUac6Q6BjwuzWzfyo4ANnS8FIz7_n3EEnbYo,25047
34
+ agno/db/dynamo/dynamo.py,sha256=jVV65rG1b5bAf03yfPkRBfuXMLl4Go9Q3u9NM7VBwtc,71546
35
+ agno/db/dynamo/schemas.py,sha256=vCB9-BN255muGpw5wt-5aolm8rHO5QI2SEfwfSc2HeY,11079
36
+ agno/db/dynamo/utils.py,sha256=WnFKxZJtnfyJ6rdU2oUCofUyFqjlo2_hB9Q5fkez8V4,25058
37
37
  agno/db/firestore/__init__.py,sha256=lYAJjUs4jMxJFty1GYZw464K35zeuBlcoFR9uuIQYtI,79
38
- agno/db/firestore/firestore.py,sha256=zfmEZiCXpxuTgoruVXLjy8TLjqw8dptgsvvP9f4B7Gs,61519
38
+ agno/db/firestore/firestore.py,sha256=Z548061P68EeyH7H8RexEgn6i2W6DLSjDO9dz3A7OZA,61505
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=mjyqMjvXBJoM4L0OOyO19NLQIanReS64Pb7bM__RYJw,46974
42
+ agno/db/gcs_json/gcs_json_db.py,sha256=jVj8i70XDO7O1E8wIr_xAeC1Shng_vpOzZui--8eMFQ,47007
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=gieZm2o9EH-vJwxaqxiK_3qfs0hVDazYWpxGdHVl3F0,41214
45
+ agno/db/in_memory/in_memory_db.py,sha256=MwHk7EcKIHpOFXBJSeb1z6tCSyjUKW3zZpUmyHqWTpM,41285
46
46
  agno/db/in_memory/utils.py,sha256=X02wny18w5uvGE3caokPbCQTG6t7OErWNPkK3Umru3s,5780
47
47
  agno/db/json/__init__.py,sha256=zyPTmVF9S-OwXCL7FSkrDmunZ_Q14YZO3NYUv1Pa14Y,62
48
48
  agno/db/json/json_db.py,sha256=WkPhdkvDKYOc6Q-QUOlhV1G9-VPo0YQzpU1qrmPHMis,47585
@@ -112,7 +112,7 @@ agno/knowledge/embedder/aws_bedrock.py,sha256=tqWp-BFnZvyOSusuN1OZ-TXtt6nZWFzZu6
112
112
  agno/knowledge/embedder/azure_openai.py,sha256=TTIWlrPhhPsjspbecmgKoBlTRyKlUTzurEF1QCehQCs,8522
113
113
  agno/knowledge/embedder/base.py,sha256=PUyo0zzk1TlImKsmWORLhc74rNSEKIQcMcjP1sE7Pyk,746
114
114
  agno/knowledge/embedder/cohere.py,sha256=riT-Q7sGaG-BgkYtaq9ONXLuoUt99TncOWLzfOSWwtE,14499
115
- agno/knowledge/embedder/fastembed.py,sha256=03tm4_AsIv-kEu3e92mp-6mfLK1dT8ndu3uDYevYm3I,2096
115
+ agno/knowledge/embedder/fastembed.py,sha256=yE3eBXusFhDugGbhAUfGZn2IDWw5_bwVKeDEuNg9wH4,2106
116
116
  agno/knowledge/embedder/fireworks.py,sha256=Om3RQ95FCtTYdn52vrJfnZomkVHpAI2HaW2fxhsk0EM,387
117
117
  agno/knowledge/embedder/google.py,sha256=i4H8RJ-baWAU_QObCvupuuGDJobdUNfhPy3rxzCNIQA,10945
118
118
  agno/knowledge/embedder/huggingface.py,sha256=eQEVHb6jh_OiR985JR88lZvtrtilI-NcQRgCliVucCo,3572
@@ -163,7 +163,7 @@ agno/models/aimlapi/aimlapi.py,sha256=9Qh-b8HvFSvmPP3VBNGT00qy9izHLMWgR-KDQCE5CM
163
163
  agno/models/anthropic/__init__.py,sha256=nbReX3p17JCwfrMDR9hR7-OaEFZm80I7dng93dl-Fhw,77
164
164
  agno/models/anthropic/claude.py,sha256=7chDZrLdh_ocFLOy3qHwOY_pfZrJ-EWrB3otLv97fNU,26488
165
165
  agno/models/aws/__init__.py,sha256=TbcwQwv9A7KjqBM5RQBR8x46GvyyCxbBCjwkpjfVGKE,352
166
- agno/models/aws/bedrock.py,sha256=8Yhxumoy2yL9QScVAZqm2jKoHP39lXCsd718N9-_Tao,28881
166
+ agno/models/aws/bedrock.py,sha256=ScZcGwOMh-N0DfArXtDVzKy467QPAN0OS8llBNAc8cQ,28880
167
167
  agno/models/aws/claude.py,sha256=sL47z9fM3jxGbARkr0mlAVYEKKX854J3u-Qeb5gIADo,14746
168
168
  agno/models/azure/__init__.py,sha256=EoFdJHjayvmv_VOmaW9cJguwA1K5OFS_nFeazyn0B2w,605
169
169
  agno/models/azure/ai_foundry.py,sha256=V75lk4pH_RVFzVhWYz9-ZSA3dcaQe2SpRF1lrAm_agw,18673
@@ -220,7 +220,7 @@ agno/models/openai/chat.py,sha256=ZdFj0xeCEGI1_UR_q_IsHl_KqoQ076g8LG5g32zJRYc,37
220
220
  agno/models/openai/like.py,sha256=wmw9PfAVqluBs4MMY73dgjelKn1yl5JDKyCRvaNFjFw,745
221
221
  agno/models/openai/responses.py,sha256=HyrfTZF8AkjdxktKhos9Riuos03nkhSvreeQGAyn81A,47116
222
222
  agno/models/openrouter/__init__.py,sha256=ZpZhNyy_EGSXp58uC9e2iyjnxBctql7GaY8rUG-599I,90
223
- agno/models/openrouter/openrouter.py,sha256=FX0P9mPEHyTuiVQNs-c84Ehy0RIGEmvdy6WM_-KhxUQ,907
223
+ agno/models/openrouter/openrouter.py,sha256=YXjTHcETz4mn-exBr0GyAbP7_XeQMJkF7Pdf2XBRdFw,2595
224
224
  agno/models/perplexity/__init__.py,sha256=JNmOElDLwcZ9_Lk5owkEdgwmAhaH3YJ-VJqOI8rgp5c,90
225
225
  agno/models/perplexity/perplexity.py,sha256=d17a9pbSrTIM2PIwCPq8_QrgcNmv1klMsS8rWnEa1fI,6988
226
226
  agno/models/portkey/__init__.py,sha256=CjGmltOuDlYfuJgpYHmfRkKiIS9W9MH4oYaGKaNNZeM,71
@@ -235,19 +235,21 @@ agno/models/together/__init__.py,sha256=y6-pgHLEInpJtffjLGHkUWTDpoQNnMlKHa4fstyH
235
235
  agno/models/together/together.py,sha256=27e-0IqlsFYh0d40XiOjx18GjOqytFI7vwcnCk8JApg,950
236
236
  agno/models/vercel/__init__.py,sha256=BYQD23dB-dmIXm8iy4S6yxXRW8xg24E9TLOgwckH674,55
237
237
  agno/models/vercel/v0.py,sha256=48Na0ZFBnRw3hUFUqO5xMO78jzOYnBj-o5kLLg4F188,826
238
+ agno/models/vertexai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
239
+ agno/models/vertexai/claude.py,sha256=7dw2oF4rQ7-ZncsSTxuXVVtUWpQ1ijSGZkWPFredepM,2454
238
240
  agno/models/vllm/__init__.py,sha256=G8cpCZtu4zJvMGud5eSYMMxGBpNTe9jM4W-p0XUeCGE,59
239
241
  agno/models/vllm/vllm.py,sha256=UtiiSvUR4pG_1CzuhY5MWduRgzM2hGVTakKJ6ZBdQmo,2730
240
242
  agno/models/xai/__init__.py,sha256=ukcCxnCHxTtkJNA2bAMTX4MhCv1wJcbiq8ZIfYczIxs,55
241
243
  agno/models/xai/xai.py,sha256=jA6_39tfapkjkHKdzbKaNq1t9qIvO1IaZY1hQqEmFVs,4181
242
244
  agno/os/__init__.py,sha256=h8oQu7vhD5RZf09jkyM_Kt1Kdq_d5kFB9gJju8QPwcY,55
243
- agno/os/app.py,sha256=8qX4zF16Ly-U0zxrNwuA_L8BIea6bMLRYqiP_qonr10,24937
245
+ agno/os/app.py,sha256=kTUhb-NaUyX5UP-A2rzaAD1xntd3TXwl2sY3qWGQIcg,26540
244
246
  agno/os/auth.py,sha256=FyBtAKWtg-qSunCas5m5pK1dVEmikOSZvcCp5r25tTA,1844
245
247
  agno/os/config.py,sha256=u4R9yazQXIcKjR3QzEIZw_XAe_OHp3xn0ff7SVkj2jA,2893
246
- agno/os/mcp.py,sha256=w9x8dN-UuIhRrU8azvjPB95RHIcOKh5IXlRCClCfpN4,8104
248
+ agno/os/mcp.py,sha256=BQk3EXCyU3-KHJn7829aOs7txV9TE3p7bwPlYJ7iFGc,8125
247
249
  agno/os/router.py,sha256=-w_VXQm2QscNAAeDehAgQ9CStNpPr06qhPmYYhiZslM,69930
248
- agno/os/schema.py,sha256=bdmGLQoBJyetiAZeajJG_gEKLaQSSEwiDwKy0q4Pa-M,38278
250
+ agno/os/schema.py,sha256=ln1kiOW6gNhPumCEyidLhecWKZhbIOJlfbEK-5J1Yu8,38362
249
251
  agno/os/settings.py,sha256=Cn5_8lZI8Vx1UaUYqs9h6Qp4IMDFn4f3c35uppiaMy4,1343
250
- agno/os/utils.py,sha256=IUi608rikks17lsOFia6LK_6YlMB6M5xe6pS90t0xV4,17901
252
+ agno/os/utils.py,sha256=pS_fWQT7SJeYPAia5e8Dj8YjtIXPD-fAHnnQk23Merg,17907
251
253
  agno/os/interfaces/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
252
254
  agno/os/interfaces/base.py,sha256=vXkr1tRjWHTcmBlQFzvQjqURLhObmFtUAx82uij_j48,542
253
255
  agno/os/interfaces/a2a/__init__.py,sha256=Fs7--dx9drvtVS9QjsCCm0P7c-hJ7TzU8gNwKTQsZDA,62
@@ -257,7 +259,7 @@ agno/os/interfaces/a2a/utils.py,sha256=rTn9x0UGbX53EiAsljf87PmzYwLuvqaobUWpCn35u
257
259
  agno/os/interfaces/agui/__init__.py,sha256=1zrGICk4roXUINwSFZfqH6sBsbHmD5KjGYVJMGg4fKQ,66
258
260
  agno/os/interfaces/agui/agui.py,sha256=PKGoDDbtQFmEC0zRwZmsjS_5t9bJWJ-ZGwxEQsu9P-U,1415
259
261
  agno/os/interfaces/agui/router.py,sha256=TBVADofGBw16x0wSF-aOEfNrebNtoX_WzHENcKsnu6s,4835
260
- agno/os/interfaces/agui/utils.py,sha256=bfWxYh2w2O3aroRlaOc2f4ZJXEVavya1IqvCntqY9Xw,19162
262
+ agno/os/interfaces/agui/utils.py,sha256=sPjguuHCrrWS_V22o73fAhl6gX0Y2uXjN0gRRBQa3r8,19372
261
263
  agno/os/interfaces/slack/__init__.py,sha256=F095kOcgiyk_KzIozNNieKwpVc_NR8HYpuO4bKiCNN0,70
262
264
  agno/os/interfaces/slack/router.py,sha256=RuD0Y0YOdlyqaj37W5outpM7dHTlEX6R63V4IrETSYc,5710
263
265
  agno/os/interfaces/slack/security.py,sha256=nMbW_0g-G_DEMbCQOD8C3PYrRPIpB2cyM6P-xS6GHYk,917
@@ -306,9 +308,9 @@ agno/session/__init__.py,sha256=p6eqzWcLSHiMex2yZvkwv2yrFUNdGs21TGMS49xrEC4,376
306
308
  agno/session/agent.py,sha256=vut3IwCivUu0vvuht_1c3rUhW61NZee6whxDQUsEkUM,9756
307
309
  agno/session/summary.py,sha256=THBbzE48V81p4dKUX2W8OvbpsNO5dI6BdtqDyjfcVqw,8433
308
310
  agno/session/team.py,sha256=0lS-9ljtG17iyC0n8sq_7aEy9MZsdfMf8VgObqJ_3tg,10384
309
- agno/session/workflow.py,sha256=8dWTona5jen1iPYwjcvxq1XG5EQDFnd28BEjcbqzl4s,5004
311
+ agno/session/workflow.py,sha256=-wvyKB_MmWCvyxDl8pzp7Bf9lBLW9xu3SGHk-4lyxvA,7421
310
312
  agno/team/__init__.py,sha256=toHidBOo5M3n_TIVtIKHgcDbLL9HR-_U-YQYuIt_XtE,847
311
- agno/team/team.py,sha256=1gCJR6aF5KS3nx-6xClQhu3fCx0cWjRx0PekbBEje-w,337610
313
+ agno/team/team.py,sha256=PerwVgXr95YrWQBWljxntCbPuH5i0uEf5JnPm0p8qt8,334992
312
314
  agno/tools/__init__.py,sha256=jNll2sELhPPbqm5nPeT4_uyzRO2_KRTW-8Or60kioS0,210
313
315
  agno/tools/agentql.py,sha256=S82Z9aTNr-E5wnA4fbFs76COljJtiQIjf2grjz3CkHU,4104
314
316
  agno/tools/airflow.py,sha256=uf2rOzZpSU64l_qRJ5Raku-R3Gky-uewmYkh6W0-oxg,2610
@@ -344,15 +346,16 @@ agno/tools/email.py,sha256=YmqNngDMDfJn-TCrxGV9IxRh2xcLmxQh7NOuuKTyUwU,2359
344
346
  agno/tools/evm.py,sha256=lX8KhpfHBcYANuNLmNI7EmwrnkE1anXjWGsGuM3_hRM,5371
345
347
  agno/tools/exa.py,sha256=vwTcNo8iOh_0QDSV1dpgf7qtKpRW4cm9KPRIN3GcLWw,16844
346
348
  agno/tools/fal.py,sha256=49rgpgfpk-aKUs18x8vDH1Wa4jNOPKN3iczfqWMo8xw,4633
347
- agno/tools/file.py,sha256=h3CiiM0wREK3vR_PlYFwJ8zYBFFjNmReNnAm9-JPgCU,4322
349
+ agno/tools/file.py,sha256=SVikIqRyxGW7byyqk0GSuz4KCUZGxZEsE_EK8ag3aak,4406
348
350
  agno/tools/file_generation.py,sha256=OMRG1CkpnZTCMxnKXGHfkfdXUYEur9jsdyCNxujWHS4,13896
349
351
  agno/tools/financial_datasets.py,sha256=NiXwyiYIFCawI8rR7JLJNIfwoQlranUeCcABHKhLHfw,9190
350
352
  agno/tools/firecrawl.py,sha256=sMV6XRaSIyTSkTJbtMdIQPTsN11ozJ78YDDi04kBvQE,5341
351
- agno/tools/function.py,sha256=EC5CgG6W8uRXtolPQnqSIAPmX-hI-7GDzw5C__LphdA,44987
353
+ agno/tools/function.py,sha256=QDbGgK8BYvFHuPRnVxMb-bXCao8z1hvkwBm8eaKe4m0,45671
352
354
  agno/tools/giphy.py,sha256=_wOCWVnMdFByE9Yoz4Pf2MoKxSjkUTiPJZ928_BNe2M,3070
353
355
  agno/tools/github.py,sha256=wct6P00YzF3zgWoV2c5aHeXX_2dgb9LqRwJAboi6QXw,70286
354
356
  agno/tools/gmail.py,sha256=MlLlEvxHly_2oKAZaKxXDmoHLTbWDSXcjOASGt7RpY8,28067
355
357
  agno/tools/google_bigquery.py,sha256=j0c14CgGK8KvD7eEirsdAx7RSwcfMheugn84ySq6miU,4483
358
+ agno/tools/google_drive.py,sha256=dxGr_NhMsqFsr_tR3w4MgLXm7_nlCTI43sCmKw60N_4,11159
356
359
  agno/tools/google_maps.py,sha256=AqPEIt4u6B2kQtzOnL5PH3RXoefCfjT_Uvm3coAqzaY,9513
357
360
  agno/tools/googlecalendar.py,sha256=s8BPKvDZGeLD2idlQG-vqDqVpza6PupF5AzAElnAK_M,27457
358
361
  agno/tools/googlesearch.py,sha256=xRuaEqn7N6JIQC6z9jFuA0Kdtoe5MafGqRMtZ8jW2AQ,3566
@@ -450,7 +453,7 @@ agno/utils/location.py,sha256=VhXIwSWdr7L4DEJoUeVI92Y-rJ32NUcYzFRnzLgX-es,658
450
453
  agno/utils/log.py,sha256=Ycg4_MEkXyOz25OkY272JHWxIZP1nB4OScwJ-r8BMGk,7791
451
454
  agno/utils/mcp.py,sha256=v5juISDNtdQaUK1DmJnAAGuNiSp0491TDwErgjEdhF8,5113
452
455
  agno/utils/media.py,sha256=Lk0sbSHmoKlQi3hLKorowCKGF74xdeMfqIj6Gt21Zek,5891
453
- agno/utils/merge_dict.py,sha256=L-t3BuKZD5fG-7fscTGG2nKSKcVCXXkdGgKR1TgQRXQ,1497
456
+ agno/utils/merge_dict.py,sha256=K_dZdwi46gjDFn7wgqZ9_fycRIZGJCnUxFVKCrQ6PYc,1490
454
457
  agno/utils/message.py,sha256=HcTDVdgZOfwqGL0YW5QNEeNoSLUvTawCo6_USJzsd6M,2423
455
458
  agno/utils/openai.py,sha256=quhHsggz0uSZc9Lt-aVsveHSS1LT2r1fMgC0IpG43Tg,10300
456
459
  agno/utils/pickle.py,sha256=Ip6CPNxAWF3MVrUhMTW7e3IcpKhYG0IA-NKbdUYr94c,1008
@@ -482,7 +485,7 @@ agno/utils/models/watsonx.py,sha256=fe6jN0hBvOCQurqjS6_9PIwDHt-4kVod9qW236Zs6DU,
482
485
  agno/utils/print_response/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
483
486
  agno/utils/print_response/agent.py,sha256=Er4YxWTMsSewC0Ckr0woabyOzT0XyLNzmXuItyuCa4s,35789
484
487
  agno/utils/print_response/team.py,sha256=b1JzAS_oskX_0aw2Xw4JPtNLoOyWUBT_g2JToWhPT70,78659
485
- agno/utils/print_response/workflow.py,sha256=qzI09OFS-f4tua27tBXhmle0ezQGFiC6s5IPgPvTq9I,66499
488
+ agno/utils/print_response/workflow.py,sha256=OwSodeoUhWHBKWZlv2eObPl0brzV_LndFrPEHn518Lc,72083
486
489
  agno/vectordb/__init__.py,sha256=P0QP9PUC4j2JtWIfYJX7LeC-oiPuh_QsUaOaP1ZY_dI,64
487
490
  agno/vectordb/base.py,sha256=y5kqBiIp2atgcvV-_NXNXcX6NZFqJZibBaqbkWhtFTk,3054
488
491
  agno/vectordb/distance.py,sha256=OjpKSq57_gblZm4VGZTV7B7le45r_2-Fp1X4Hilx1M4,131
@@ -528,16 +531,16 @@ agno/vectordb/weaviate/__init__.py,sha256=FIoFJgqSmGuFgpvmsg8EjAn8FDAhuqAXed7fja
528
531
  agno/vectordb/weaviate/index.py,sha256=y4XYPRZFksMfrrF85B4hn5AtmXM4SH--4CyLo27EHgM,253
529
532
  agno/vectordb/weaviate/weaviate.py,sha256=ZXK81-mTZmPUzUi2U6B5oY2vvJ5eWCv2HqrwinijUZM,38638
530
533
  agno/workflow/__init__.py,sha256=lwavZXIkgqajbSf1jMqzE7kbXBIFmk5niI_NgpVI-gA,542
531
- agno/workflow/condition.py,sha256=JFWPnwEeOIkQWexGYDK9pToPyf_siRCW92rkFdA4yTc,28452
532
- agno/workflow/loop.py,sha256=cTVkRX5pwfZH5O19Q3W3YS9bcSKmEszkDwfR0V72rV8,30635
533
- agno/workflow/parallel.py,sha256=msc1n1ga5KZjMySZ7JGFVAMYCgJ8PjPIcR0ue5GnIG0,33667
534
- agno/workflow/router.py,sha256=ZAiVsh2F_9ssKj0_RzHWzfgimaZ5hfb3Ni1Xx_SkVR0,26625
535
- agno/workflow/step.py,sha256=JgqvINTmY8Y0RnQP5wQ4v03K479XK3YTa36ZZWYg_Z8,52289
536
- agno/workflow/steps.py,sha256=uRE4oGWs2cA-TrX881AEa69zu6rheXH81mNOZiRrNvg,23719
537
- agno/workflow/types.py,sha256=ajZg2hQ9VmJQrmqwXpsIAOnkelYQmWNjbb7ZS-Y3Xpo,17632
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,,
534
+ agno/workflow/condition.py,sha256=xsBExYiZzE-hs77Ze1pq5mmhraZfdMcRClM4QSJfVGQ,29898
535
+ agno/workflow/loop.py,sha256=2RRPSU_Xb7MiM6t5ETtWUwCabji4LWCR1XpyydrdzvM,32081
536
+ agno/workflow/parallel.py,sha256=atFbBNOGfby13YjmUdgrNj-OSfweCTmybcbakTSJBsw,34619
537
+ agno/workflow/router.py,sha256=8MhZjbzD9RtwToT9JF43xTl_ZV1o6U2A0xMkabgER0M,28071
538
+ agno/workflow/step.py,sha256=smLxC82EoM-lG1ghr_b6kxSqIiQRnR2M_IJo7t4c_co,57761
539
+ agno/workflow/steps.py,sha256=ePZd8hct1sEdGDwkXz7YWl6FjOlizY73aHpJuClVqEE,25165
540
+ agno/workflow/types.py,sha256=XZP9wNEsNE88zr9hhmKMHOpTEEY_UmH71AZRM43a5EY,18662
541
+ agno/workflow/workflow.py,sha256=3WhwXZ2u1a-fH7gx541yHW-n3DzW3Kz2ZLPBxmi4XPE,125776
542
+ agno-2.1.4.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
543
+ agno-2.1.4.dist-info/METADATA,sha256=hs_9_lcrU0lxE7-5tiHhy4Xp1rjQr1eLO4qGs5hQzeM,22009
544
+ agno-2.1.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
545
+ agno-2.1.4.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
546
+ agno-2.1.4.dist-info/RECORD,,
File without changes