agno 2.1.3__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:
@@ -952,6 +988,11 @@ class Workflow:
952
988
  workflow_run_response=workflow_run_response,
953
989
  session_state=session_state,
954
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,
955
996
  )
956
997
 
957
998
  # Check for cancellation after step execution
@@ -1121,6 +1162,11 @@ class Workflow:
1121
1162
  session_state=session_state,
1122
1163
  step_index=i,
1123
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,
1124
1170
  ):
1125
1171
  raise_if_cancelled(workflow_run_response.run_id) # type: ignore
1126
1172
  # Handle events
@@ -1171,11 +1217,18 @@ class Workflow:
1171
1217
  yield step_output_event
1172
1218
 
1173
1219
  elif isinstance(event, WorkflowRunOutputEvent): # type: ignore
1174
- 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
1175
1225
 
1176
1226
  else:
1177
- # Yield other internal events
1178
- 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
1179
1232
 
1180
1233
  # Break out of main step loop if early termination was requested
1181
1234
  if "early_termination" in locals() and early_termination:
@@ -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
@@ -1589,6 +1647,11 @@ class Workflow:
1589
1647
  session_state=session_state,
1590
1648
  step_index=i,
1591
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,
1592
1655
  ):
1593
1656
  if workflow_run_response.run_id:
1594
1657
  raise_if_cancelled(workflow_run_response.run_id)
@@ -1638,11 +1701,22 @@ class Workflow:
1638
1701
  yield step_output_event
1639
1702
 
1640
1703
  elif isinstance(event, WorkflowRunOutputEvent): # type: ignore
1641
- 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
1642
1711
 
1643
1712
  else:
1644
- # Yield other internal events
1645
- 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
1646
1720
 
1647
1721
  # Break out of main step loop if early termination was requested
1648
1722
  if "early_termination" in locals() and early_termination:
@@ -2636,3 +2710,147 @@ class Workflow:
2636
2710
  )
2637
2711
  except Exception as e:
2638
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.3
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,9 +31,9 @@ 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
38
  agno/db/firestore/firestore.py,sha256=Z548061P68EeyH7H8RexEgn6i2W6DLSjDO9dz3A7OZA,61505
39
39
  agno/db/firestore/schemas.py,sha256=k8YuG_PC_Hd3WCLaDkk4bAJP8BmAWmrt6VXuG1wr2Ak,4132
@@ -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
@@ -242,14 +242,14 @@ agno/models/vllm/vllm.py,sha256=UtiiSvUR4pG_1CzuhY5MWduRgzM2hGVTakKJ6ZBdQmo,2730
242
242
  agno/models/xai/__init__.py,sha256=ukcCxnCHxTtkJNA2bAMTX4MhCv1wJcbiq8ZIfYczIxs,55
243
243
  agno/models/xai/xai.py,sha256=jA6_39tfapkjkHKdzbKaNq1t9qIvO1IaZY1hQqEmFVs,4181
244
244
  agno/os/__init__.py,sha256=h8oQu7vhD5RZf09jkyM_Kt1Kdq_d5kFB9gJju8QPwcY,55
245
- agno/os/app.py,sha256=MGUa56gOj7-O9x5xZriwxsRuiC2m93H_B206ScnzqAY,26434
245
+ agno/os/app.py,sha256=kTUhb-NaUyX5UP-A2rzaAD1xntd3TXwl2sY3qWGQIcg,26540
246
246
  agno/os/auth.py,sha256=FyBtAKWtg-qSunCas5m5pK1dVEmikOSZvcCp5r25tTA,1844
247
247
  agno/os/config.py,sha256=u4R9yazQXIcKjR3QzEIZw_XAe_OHp3xn0ff7SVkj2jA,2893
248
248
  agno/os/mcp.py,sha256=BQk3EXCyU3-KHJn7829aOs7txV9TE3p7bwPlYJ7iFGc,8125
249
249
  agno/os/router.py,sha256=-w_VXQm2QscNAAeDehAgQ9CStNpPr06qhPmYYhiZslM,69930
250
- agno/os/schema.py,sha256=bdmGLQoBJyetiAZeajJG_gEKLaQSSEwiDwKy0q4Pa-M,38278
250
+ agno/os/schema.py,sha256=ln1kiOW6gNhPumCEyidLhecWKZhbIOJlfbEK-5J1Yu8,38362
251
251
  agno/os/settings.py,sha256=Cn5_8lZI8Vx1UaUYqs9h6Qp4IMDFn4f3c35uppiaMy4,1343
252
- agno/os/utils.py,sha256=scwbYQ_OhsSvdAKnN2LHpj_TB_vwsQx23lkswIz_TZs,17900
252
+ agno/os/utils.py,sha256=pS_fWQT7SJeYPAia5e8Dj8YjtIXPD-fAHnnQk23Merg,17907
253
253
  agno/os/interfaces/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
254
254
  agno/os/interfaces/base.py,sha256=vXkr1tRjWHTcmBlQFzvQjqURLhObmFtUAx82uij_j48,542
255
255
  agno/os/interfaces/a2a/__init__.py,sha256=Fs7--dx9drvtVS9QjsCCm0P7c-hJ7TzU8gNwKTQsZDA,62
@@ -259,7 +259,7 @@ agno/os/interfaces/a2a/utils.py,sha256=rTn9x0UGbX53EiAsljf87PmzYwLuvqaobUWpCn35u
259
259
  agno/os/interfaces/agui/__init__.py,sha256=1zrGICk4roXUINwSFZfqH6sBsbHmD5KjGYVJMGg4fKQ,66
260
260
  agno/os/interfaces/agui/agui.py,sha256=PKGoDDbtQFmEC0zRwZmsjS_5t9bJWJ-ZGwxEQsu9P-U,1415
261
261
  agno/os/interfaces/agui/router.py,sha256=TBVADofGBw16x0wSF-aOEfNrebNtoX_WzHENcKsnu6s,4835
262
- agno/os/interfaces/agui/utils.py,sha256=bfWxYh2w2O3aroRlaOc2f4ZJXEVavya1IqvCntqY9Xw,19162
262
+ agno/os/interfaces/agui/utils.py,sha256=sPjguuHCrrWS_V22o73fAhl6gX0Y2uXjN0gRRBQa3r8,19372
263
263
  agno/os/interfaces/slack/__init__.py,sha256=F095kOcgiyk_KzIozNNieKwpVc_NR8HYpuO4bKiCNN0,70
264
264
  agno/os/interfaces/slack/router.py,sha256=RuD0Y0YOdlyqaj37W5outpM7dHTlEX6R63V4IrETSYc,5710
265
265
  agno/os/interfaces/slack/security.py,sha256=nMbW_0g-G_DEMbCQOD8C3PYrRPIpB2cyM6P-xS6GHYk,917
@@ -308,9 +308,9 @@ agno/session/__init__.py,sha256=p6eqzWcLSHiMex2yZvkwv2yrFUNdGs21TGMS49xrEC4,376
308
308
  agno/session/agent.py,sha256=vut3IwCivUu0vvuht_1c3rUhW61NZee6whxDQUsEkUM,9756
309
309
  agno/session/summary.py,sha256=THBbzE48V81p4dKUX2W8OvbpsNO5dI6BdtqDyjfcVqw,8433
310
310
  agno/session/team.py,sha256=0lS-9ljtG17iyC0n8sq_7aEy9MZsdfMf8VgObqJ_3tg,10384
311
- agno/session/workflow.py,sha256=8dWTona5jen1iPYwjcvxq1XG5EQDFnd28BEjcbqzl4s,5004
311
+ agno/session/workflow.py,sha256=-wvyKB_MmWCvyxDl8pzp7Bf9lBLW9xu3SGHk-4lyxvA,7421
312
312
  agno/team/__init__.py,sha256=toHidBOo5M3n_TIVtIKHgcDbLL9HR-_U-YQYuIt_XtE,847
313
- agno/team/team.py,sha256=1gCJR6aF5KS3nx-6xClQhu3fCx0cWjRx0PekbBEje-w,337610
313
+ agno/team/team.py,sha256=PerwVgXr95YrWQBWljxntCbPuH5i0uEf5JnPm0p8qt8,334992
314
314
  agno/tools/__init__.py,sha256=jNll2sELhPPbqm5nPeT4_uyzRO2_KRTW-8Or60kioS0,210
315
315
  agno/tools/agentql.py,sha256=S82Z9aTNr-E5wnA4fbFs76COljJtiQIjf2grjz3CkHU,4104
316
316
  agno/tools/airflow.py,sha256=uf2rOzZpSU64l_qRJ5Raku-R3Gky-uewmYkh6W0-oxg,2610
@@ -350,11 +350,12 @@ agno/tools/file.py,sha256=SVikIqRyxGW7byyqk0GSuz4KCUZGxZEsE_EK8ag3aak,4406
350
350
  agno/tools/file_generation.py,sha256=OMRG1CkpnZTCMxnKXGHfkfdXUYEur9jsdyCNxujWHS4,13896
351
351
  agno/tools/financial_datasets.py,sha256=NiXwyiYIFCawI8rR7JLJNIfwoQlranUeCcABHKhLHfw,9190
352
352
  agno/tools/firecrawl.py,sha256=sMV6XRaSIyTSkTJbtMdIQPTsN11ozJ78YDDi04kBvQE,5341
353
- agno/tools/function.py,sha256=EC5CgG6W8uRXtolPQnqSIAPmX-hI-7GDzw5C__LphdA,44987
353
+ agno/tools/function.py,sha256=QDbGgK8BYvFHuPRnVxMb-bXCao8z1hvkwBm8eaKe4m0,45671
354
354
  agno/tools/giphy.py,sha256=_wOCWVnMdFByE9Yoz4Pf2MoKxSjkUTiPJZ928_BNe2M,3070
355
355
  agno/tools/github.py,sha256=wct6P00YzF3zgWoV2c5aHeXX_2dgb9LqRwJAboi6QXw,70286
356
356
  agno/tools/gmail.py,sha256=MlLlEvxHly_2oKAZaKxXDmoHLTbWDSXcjOASGt7RpY8,28067
357
357
  agno/tools/google_bigquery.py,sha256=j0c14CgGK8KvD7eEirsdAx7RSwcfMheugn84ySq6miU,4483
358
+ agno/tools/google_drive.py,sha256=dxGr_NhMsqFsr_tR3w4MgLXm7_nlCTI43sCmKw60N_4,11159
358
359
  agno/tools/google_maps.py,sha256=AqPEIt4u6B2kQtzOnL5PH3RXoefCfjT_Uvm3coAqzaY,9513
359
360
  agno/tools/googlecalendar.py,sha256=s8BPKvDZGeLD2idlQG-vqDqVpza6PupF5AzAElnAK_M,27457
360
361
  agno/tools/googlesearch.py,sha256=xRuaEqn7N6JIQC6z9jFuA0Kdtoe5MafGqRMtZ8jW2AQ,3566
@@ -484,7 +485,7 @@ agno/utils/models/watsonx.py,sha256=fe6jN0hBvOCQurqjS6_9PIwDHt-4kVod9qW236Zs6DU,
484
485
  agno/utils/print_response/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
485
486
  agno/utils/print_response/agent.py,sha256=Er4YxWTMsSewC0Ckr0woabyOzT0XyLNzmXuItyuCa4s,35789
486
487
  agno/utils/print_response/team.py,sha256=b1JzAS_oskX_0aw2Xw4JPtNLoOyWUBT_g2JToWhPT70,78659
487
- agno/utils/print_response/workflow.py,sha256=qzI09OFS-f4tua27tBXhmle0ezQGFiC6s5IPgPvTq9I,66499
488
+ agno/utils/print_response/workflow.py,sha256=OwSodeoUhWHBKWZlv2eObPl0brzV_LndFrPEHn518Lc,72083
488
489
  agno/vectordb/__init__.py,sha256=P0QP9PUC4j2JtWIfYJX7LeC-oiPuh_QsUaOaP1ZY_dI,64
489
490
  agno/vectordb/base.py,sha256=y5kqBiIp2atgcvV-_NXNXcX6NZFqJZibBaqbkWhtFTk,3054
490
491
  agno/vectordb/distance.py,sha256=OjpKSq57_gblZm4VGZTV7B7le45r_2-Fp1X4Hilx1M4,131
@@ -530,16 +531,16 @@ agno/vectordb/weaviate/__init__.py,sha256=FIoFJgqSmGuFgpvmsg8EjAn8FDAhuqAXed7fja
530
531
  agno/vectordb/weaviate/index.py,sha256=y4XYPRZFksMfrrF85B4hn5AtmXM4SH--4CyLo27EHgM,253
531
532
  agno/vectordb/weaviate/weaviate.py,sha256=ZXK81-mTZmPUzUi2U6B5oY2vvJ5eWCv2HqrwinijUZM,38638
532
533
  agno/workflow/__init__.py,sha256=lwavZXIkgqajbSf1jMqzE7kbXBIFmk5niI_NgpVI-gA,542
533
- agno/workflow/condition.py,sha256=JFWPnwEeOIkQWexGYDK9pToPyf_siRCW92rkFdA4yTc,28452
534
- agno/workflow/loop.py,sha256=cTVkRX5pwfZH5O19Q3W3YS9bcSKmEszkDwfR0V72rV8,30635
535
- agno/workflow/parallel.py,sha256=FjsGDKTie8Rt_xDrQs7vMczx_XsaNrAbajWCEk81-wI,33619
536
- agno/workflow/router.py,sha256=ZAiVsh2F_9ssKj0_RzHWzfgimaZ5hfb3Ni1Xx_SkVR0,26625
537
- agno/workflow/step.py,sha256=JgqvINTmY8Y0RnQP5wQ4v03K479XK3YTa36ZZWYg_Z8,52289
538
- agno/workflow/steps.py,sha256=uRE4oGWs2cA-TrX881AEa69zu6rheXH81mNOZiRrNvg,23719
539
- agno/workflow/types.py,sha256=ajZg2hQ9VmJQrmqwXpsIAOnkelYQmWNjbb7ZS-Y3Xpo,17632
540
- agno/workflow/workflow.py,sha256=WH0MfGx5iVepwOJfbV1IuO_aHGeMbxc8yuCnWzZWQaM,115393
541
- agno-2.1.3.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
542
- agno-2.1.3.dist-info/METADATA,sha256=-BO85k6qLtl1kDextO3Ca-UyHnPNBJpcWTs0WBsU6Bo,22009
543
- agno-2.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
544
- agno-2.1.3.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
545
- agno-2.1.3.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