agno 2.3.22__py3-none-any.whl → 2.3.23__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 (40) hide show
  1. agno/agent/agent.py +22 -1
  2. agno/agent/remote.py +1 -1
  3. agno/db/mysql/async_mysql.py +5 -7
  4. agno/db/mysql/mysql.py +5 -7
  5. agno/db/mysql/schemas.py +39 -21
  6. agno/db/postgres/async_postgres.py +10 -2
  7. agno/db/postgres/postgres.py +5 -7
  8. agno/db/postgres/schemas.py +39 -21
  9. agno/db/singlestore/schemas.py +41 -21
  10. agno/db/singlestore/singlestore.py +14 -3
  11. agno/db/sqlite/async_sqlite.py +7 -2
  12. agno/db/sqlite/schemas.py +36 -21
  13. agno/db/sqlite/sqlite.py +3 -7
  14. agno/models/base.py +4 -0
  15. agno/models/google/gemini.py +27 -4
  16. agno/os/routers/agents/router.py +1 -1
  17. agno/os/routers/evals/evals.py +2 -2
  18. agno/os/routers/knowledge/knowledge.py +2 -2
  19. agno/os/routers/knowledge/schemas.py +1 -1
  20. agno/os/routers/memory/memory.py +4 -4
  21. agno/os/routers/session/session.py +2 -2
  22. agno/os/routers/teams/router.py +2 -2
  23. agno/os/routers/traces/traces.py +3 -3
  24. agno/os/routers/workflows/router.py +1 -1
  25. agno/os/schema.py +1 -1
  26. agno/remote/base.py +1 -1
  27. agno/team/remote.py +1 -1
  28. agno/team/team.py +19 -1
  29. agno/tools/brandfetch.py +27 -18
  30. agno/tools/browserbase.py +150 -13
  31. agno/tools/function.py +6 -1
  32. agno/tools/mcp/mcp.py +1 -0
  33. agno/tools/toolkit.py +89 -21
  34. agno/workflow/remote.py +1 -1
  35. agno/workflow/workflow.py +14 -0
  36. {agno-2.3.22.dist-info → agno-2.3.23.dist-info}/METADATA +1 -1
  37. {agno-2.3.22.dist-info → agno-2.3.23.dist-info}/RECORD +40 -40
  38. {agno-2.3.22.dist-info → agno-2.3.23.dist-info}/WHEEL +0 -0
  39. {agno-2.3.22.dist-info → agno-2.3.23.dist-info}/licenses/LICENSE +0 -0
  40. {agno-2.3.22.dist-info → agno-2.3.23.dist-info}/top_level.txt +0 -0
agno/tools/toolkit.py CHANGED
@@ -1,4 +1,5 @@
1
1
  from collections import OrderedDict
2
+ from inspect import iscoroutinefunction
2
3
  from typing import Any, Callable, Dict, List, Optional, Sequence, Union
3
4
 
4
5
  from agno.tools.function import Function
@@ -14,6 +15,7 @@ class Toolkit:
14
15
  self,
15
16
  name: str = "toolkit",
16
17
  tools: Sequence[Union[Callable[..., Any], Function]] = [],
18
+ async_tools: Optional[Sequence[tuple[Callable[..., Any], str]]] = None,
17
19
  instructions: Optional[str] = None,
18
20
  add_instructions: bool = False,
19
21
  include_tools: Optional[list[str]] = None,
@@ -32,6 +34,9 @@ class Toolkit:
32
34
  Args:
33
35
  name: A descriptive name for the toolkit
34
36
  tools: List of tools to include in the toolkit (can be callables or Function objects from @tool decorator)
37
+ async_tools: List of (async_callable, tool_name) tuples for async variants.
38
+ Used when async methods have different names than sync methods.
39
+ Example: [(self.anavigate_to, "navigate_to"), (self.ascreenshot, "screenshot")]
35
40
  instructions: Instructions for the toolkit
36
41
  add_instructions: Whether to add instructions to the toolkit
37
42
  include_tools: List of tool names to include in the toolkit
@@ -47,7 +52,11 @@ class Toolkit:
47
52
  """
48
53
  self.name: str = name
49
54
  self.tools: Sequence[Union[Callable[..., Any], Function]] = tools
55
+ self._async_tools: Sequence[tuple[Callable[..., Any], str]] = async_tools or []
56
+ # Functions dict - used by agent.run() and agent.print_response()
50
57
  self.functions: Dict[str, Function] = OrderedDict()
58
+ # Async functions dict - used by agent.arun() and agent.aprint_response()
59
+ self.async_functions: Dict[str, Function] = OrderedDict()
51
60
  self.instructions: Optional[str] = instructions
52
61
  self.add_instructions: bool = add_instructions
53
62
 
@@ -71,8 +80,11 @@ class Toolkit:
71
80
  self.cache_dir: Optional[str] = cache_dir
72
81
 
73
82
  # Automatically register all methods if auto_register is True
74
- if auto_register and self.tools:
75
- self._register_tools()
83
+ if auto_register:
84
+ if self.tools:
85
+ self._register_tools()
86
+ if self._async_tools:
87
+ self._register_async_tools()
76
88
 
77
89
  def _get_tool_name(self, tool: Union[Callable[..., Any], Function]) -> str:
78
90
  """Get the name of a tool, whether it's a Function or callable."""
@@ -125,14 +137,25 @@ class Toolkit:
125
137
  log_warning(f"Show result tool(s) not present in the toolkit: {', '.join(missing_show_result)}")
126
138
 
127
139
  def _register_tools(self) -> None:
128
- """Register all tools."""
140
+ """Register all sync tools."""
129
141
  for tool in self.tools:
130
142
  self.register(tool)
131
143
 
144
+ def _register_async_tools(self) -> None:
145
+ """Register all async tools with their mapped names.
146
+
147
+ Async detection is automatic via iscoroutinefunction.
148
+ """
149
+ for async_func, tool_name in self._async_tools:
150
+ self.register(async_func, name=tool_name)
151
+
132
152
  def register(self, function: Union[Callable[..., Any], Function], name: Optional[str] = None) -> None:
133
153
  """Register a function with the toolkit.
134
154
 
135
155
  This method supports both regular callables and Function objects (from @tool decorator).
156
+ Automatically detects if the function is async (using iscoroutinefunction) and registers
157
+ it to the appropriate dict (functions for sync, async_functions for async).
158
+
136
159
  When a Function object is passed (e.g., from a @tool decorated method), it will:
137
160
  1. Extract the configuration from the Function object
138
161
  2. Look for a bound method with the same name on `self`
@@ -140,17 +163,18 @@ class Toolkit:
140
163
 
141
164
  Args:
142
165
  function: The callable or Function object to register
143
- name: Optional custom name for the function
144
-
145
- Returns:
146
- The registered function
166
+ name: Optional custom name for the function (useful for aliasing)
147
167
  """
148
168
  try:
149
169
  # Handle Function objects (from @tool decorator)
150
170
  if isinstance(function, Function):
151
- return self._register_decorated_tool(function, name)
171
+ # Auto-detect if this is an async function
172
+ is_async = function.entrypoint is not None and iscoroutinefunction(function.entrypoint)
173
+ return self._register_decorated_tool(function, name, is_async=is_async)
174
+
175
+ # Handle regular callables - auto-detect async
176
+ is_async = iscoroutinefunction(function)
152
177
 
153
- # Handle regular callables
154
178
  tool_name = name or function.__name__
155
179
  if self.include_tools is not None and tool_name not in self.include_tools:
156
180
  return
@@ -168,14 +192,19 @@ class Toolkit:
168
192
  stop_after_tool_call=tool_name in self.stop_after_tool_call_tools,
169
193
  show_result=tool_name in self.show_result_tools or tool_name in self.stop_after_tool_call_tools,
170
194
  )
171
- self.functions[f.name] = f
172
- log_debug(f"Function: {f.name} registered with {self.name}")
195
+
196
+ if is_async:
197
+ self.async_functions[f.name] = f
198
+ log_debug(f"Async function: {f.name} registered with {self.name}")
199
+ else:
200
+ self.functions[f.name] = f
201
+ log_debug(f"Function: {f.name} registered with {self.name}")
173
202
  except Exception as e:
174
203
  func_name = self._get_tool_name(function)
175
204
  logger.warning(f"Failed to create Function for: {func_name}")
176
205
  raise e
177
206
 
178
- def _register_decorated_tool(self, function: Function, name: Optional[str] = None) -> None:
207
+ def _register_decorated_tool(self, function: Function, name: Optional[str] = None, is_async: bool = False) -> None:
179
208
  """Register a Function object from @tool decorator, binding it to self.
180
209
 
181
210
  When @tool decorator is used on a class method, it creates a Function with an unbound
@@ -185,6 +214,7 @@ class Toolkit:
185
214
  Args:
186
215
  function: The Function object from @tool decorator
187
216
  name: Optional custom name override
217
+ is_async: If True, register to async_functions dict instead of functions
188
218
  """
189
219
  import inspect
190
220
 
@@ -207,14 +237,24 @@ class Toolkit:
207
237
 
208
238
  if params and params[0] == "self":
209
239
  # Create a bound method by wrapping the function to include self
210
- def make_bound_method(func, instance):
211
- def bound(*args, **kwargs):
212
- return func(instance, *args, **kwargs)
240
+ if is_async:
241
+
242
+ def make_bound_method(func, instance):
243
+ async def bound(*args, **kwargs):
244
+ return await func(instance, *args, **kwargs)
245
+
246
+ bound.__name__ = getattr(func, "__name__", tool_name)
247
+ bound.__doc__ = getattr(func, "__doc__", None)
248
+ return bound
249
+ else:
250
+
251
+ def make_bound_method(func, instance):
252
+ def bound(*args, **kwargs):
253
+ return func(instance, *args, **kwargs)
213
254
 
214
- # Preserve function metadata for debugging
215
- bound.__name__ = getattr(func, "__name__", tool_name)
216
- bound.__doc__ = getattr(func, "__doc__", None)
217
- return bound
255
+ bound.__name__ = getattr(func, "__name__", tool_name)
256
+ bound.__doc__ = getattr(func, "__doc__", None)
257
+ return bound
218
258
 
219
259
  bound_method = make_bound_method(original_func, self)
220
260
  else:
@@ -251,8 +291,36 @@ class Toolkit:
251
291
  cache_dir=function.cache_dir if function.cache_dir else self.cache_dir,
252
292
  cache_ttl=function.cache_ttl if function.cache_ttl != 3600 else self.cache_ttl,
253
293
  )
254
- self.functions[f.name] = f
255
- log_debug(f"Function: {f.name} registered with {self.name} (from @tool decorator)")
294
+
295
+ if is_async:
296
+ self.async_functions[f.name] = f
297
+ log_debug(f"Async function: {f.name} registered with {self.name} (from @tool decorator)")
298
+ else:
299
+ self.functions[f.name] = f
300
+ log_debug(f"Function: {f.name} registered with {self.name} (from @tool decorator)")
301
+
302
+ def get_functions(self) -> Dict[str, Function]:
303
+ """Get sync functions dict.
304
+
305
+ Returns:
306
+ Dict of function name to Function for sync execution
307
+ """
308
+ return self.functions
309
+
310
+ def get_async_functions(self) -> Dict[str, Function]:
311
+ """Get functions dict optimized for async execution.
312
+
313
+ Returns a merged dict where async_functions take precedence over functions.
314
+ This allows async-optimized implementations to be automatically used in async contexts,
315
+ while falling back to sync implementations for tools without async variants.
316
+
317
+ Returns:
318
+ Dict of function name to Function, with async variants preferred
319
+ """
320
+ # Merge: start with sync functions, override with async variants
321
+ merged = OrderedDict(self.functions)
322
+ merged.update(self.async_functions)
323
+ return merged
256
324
 
257
325
  @property
258
326
  def requires_connect(self) -> bool:
agno/workflow/remote.py CHANGED
@@ -340,7 +340,7 @@ class RemoteWorkflow(BaseRemote):
340
340
  )
341
341
  return map_task_result_to_workflow_run_output(task_result, workflow_id=self.workflow_id, user_id=user_id)
342
342
 
343
- async def cancel_run(self, run_id: str, auth_token: Optional[str] = None) -> bool:
343
+ async def acancel_run(self, run_id: str, auth_token: Optional[str] = None) -> bool:
344
344
  """Cancel a running workflow execution.
345
345
 
346
346
  Args:
agno/workflow/workflow.py CHANGED
@@ -36,6 +36,9 @@ from agno.models.message import Message
36
36
  from agno.models.metrics import Metrics
37
37
  from agno.run import RunContext, RunStatus
38
38
  from agno.run.agent import RunContentEvent, RunEvent, RunOutput
39
+ from agno.run.cancel import (
40
+ acancel_run as acancel_run_global,
41
+ )
39
42
  from agno.run.cancel import (
40
43
  acleanup_run,
41
44
  araise_if_cancelled,
@@ -3496,6 +3499,17 @@ class Workflow:
3496
3499
  """
3497
3500
  return cancel_run_global(run_id)
3498
3501
 
3502
+ async def acancel_run(self, run_id: str) -> bool:
3503
+ """Cancel a running workflow execution (async version).
3504
+
3505
+ Args:
3506
+ run_id (str): The run_id to cancel.
3507
+
3508
+ Returns:
3509
+ bool: True if the run was found and marked for cancellation, False otherwise.
3510
+ """
3511
+ return await acancel_run_global(run_id)
3512
+
3499
3513
  @overload
3500
3514
  def run(
3501
3515
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.3.22
3
+ Version: 2.3.23
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
@@ -6,8 +6,8 @@ agno/media.py,sha256=PisfrNwkx2yVOW8p6LXlV237jI06Y6kGjd7wUMk5170,17121
6
6
  agno/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  agno/table.py,sha256=9hHFnInNsrj0ZKtWjGDP5c6kbmNdtQvDDYT2j2CZJ6o,198
8
8
  agno/agent/__init__.py,sha256=K1umiV73llHpUidDlng0J3T_YY6tbISfsNKw_2S-L1U,1112
9
- agno/agent/agent.py,sha256=Rv-0GgQB9O4mJPLrxMZUVgY7CPCZtMNEgCwawLNX93U,514213
10
- agno/agent/remote.py,sha256=-QHCfn22GYJ2BpYXfbPvO891yvX1yzcDIaHH4UreGiw,19171
9
+ agno/agent/agent.py,sha256=apfoRwypHSSBDC2lg_NckeUnR1-ItX5fW2QDsCPQsbw,514951
10
+ agno/agent/remote.py,sha256=EzaT0hhD_2BkrL3ECnxx0oxWnyyc6nPmDbifqvSgkUo,19172
11
11
  agno/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  agno/api/agent.py,sha256=fKlQ62E_C9Rjd7Zus3Gs3R1RG-IhzFV-ICpkb6SLqYc,932
13
13
  agno/api/api.py,sha256=gFhVjxJYkQsw8mBl2fhoStMPGlyJ37DJaqgUOwZVvQI,1021
@@ -73,14 +73,14 @@ agno/db/mongo/mongo.py,sha256=1scOoU3L4T7vBehlrMe_ymPAH7RxAFh1y6aYlYyrQAE,104250
73
73
  agno/db/mongo/schemas.py,sha256=Q3JrMZ3zCKZcHilh5CoQePI5d5dRjHAtjs5QuWrxiWc,3098
74
74
  agno/db/mongo/utils.py,sha256=1KrbF1PR_707e9SqXZcquaw_N7mRYm9HjJnvYwBjgG8,9921
75
75
  agno/db/mysql/__init__.py,sha256=LYeR17sORN-i8lFH7Sfk-THwEcQZP79_WHmpaBj9R7Y,130
76
- agno/db/mysql/async_mysql.py,sha256=LvMhEm6XH4ks_PQkL8K2zoQ1vf8KACO_4XLwYDf4xOE,124498
77
- agno/db/mysql/mysql.py,sha256=wGDrX6bnzU3C3vrVtnRddzS2uvc_ZLWVooVFvVIRCLc,122344
78
- agno/db/mysql/schemas.py,sha256=_4p2IWt0zVq-fHuxFhEpWLWxlp3QPKk8xtNMiB1TNOY,9067
76
+ agno/db/mysql/async_mysql.py,sha256=mm2nG8_wI9s7F_1a3_tWaeWygJREIv31npflVyL6Nkw,124319
77
+ agno/db/mysql/mysql.py,sha256=ftbUPIj2rgiszfbaNtnfeFE01HnkBWquiEyT4TEQvdQ,122165
78
+ agno/db/mysql/schemas.py,sha256=_Qkx0plM5oPsthnLHpQOoMLcIbjpTKiaLDbxPNKh7ak,9892
79
79
  agno/db/mysql/utils.py,sha256=wo-QamkH6dOBmCv1tsY5yp-0L7ca2CD2Yj9BpqpcLhs,17799
80
80
  agno/db/postgres/__init__.py,sha256=Ojk00nTCzQFiH2ViD7KIBjgpkTKLRNPCwWnuXMKtNXY,154
81
- agno/db/postgres/async_postgres.py,sha256=iwR0wADODy_yYpVhqlzkkF2cEAQHaxcUlPAPvHIWRaQ,116014
82
- agno/db/postgres/postgres.py,sha256=BkExTuHhw3MahfS5kGUgtsChcSyZ13XwPJeQ4fG84MA,128427
83
- agno/db/postgres/schemas.py,sha256=G0BRG9GcUcO43-TU52nKSEog8v3tdJNwIhEjts9dCns,8405
81
+ agno/db/postgres/async_postgres.py,sha256=2Jsh-9eRvqbvEf5SAwHIyJzUdFkdKBcWf-IotMGf-pg,116389
82
+ agno/db/postgres/postgres.py,sha256=lT1R2u3h513_M7iNymQdVRbd5_J_7PMkqHrPToiaNcE,128248
83
+ agno/db/postgres/schemas.py,sha256=vZKc9zHOAMIXITuFdj6Zx8s3E9r4TWRFBvaonWuNi6M,9230
84
84
  agno/db/postgres/utils.py,sha256=_nVMb1iHwNf829aWK-jdE5nEpfuDitFdyoBJc-vkfaY,16239
85
85
  agno/db/redis/__init__.py,sha256=rZWeZ4CpVeKP-enVQ-SRoJ777i0rdGNgoNDRS9gsfAc,63
86
86
  agno/db/redis/redis.py,sha256=qq3L43axf9ftp0HFS3HHD9kEsy2qOisONOzg60Lt6cg,82232
@@ -93,13 +93,13 @@ agno/db/schemas/knowledge.py,sha256=qVL6jEdaUG92WJw70-FrA7atetPqrpZnLYkYZDuiYho,
93
93
  agno/db/schemas/memory.py,sha256=soOeuQgLYHng0qZxzrRHf1lN574IW55lXGP403Qn1oY,2078
94
94
  agno/db/schemas/metrics.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
95
  agno/db/singlestore/__init__.py,sha256=dufbaod8ZZIeZIVi0hYJQ8Eu2DfIfWdIy00cpqAsx9U,87
96
- agno/db/singlestore/schemas.py,sha256=gnCpoRAztbPiZOCfx9MGBx1sySijwogajSjxIeGpsaA,8923
97
- agno/db/singlestore/singlestore.py,sha256=C_QkbKPfdrz8ZDtAS-FXpAqJXIM_EsdvmiC5HUD0MN8,119653
96
+ agno/db/singlestore/schemas.py,sha256=wPzSrSQ3hVdUw385nmr8UmurHV6vtpAVuhYUlaLh1K4,9750
97
+ agno/db/singlestore/singlestore.py,sha256=Cb7a1hVe61OJt3_NgmnRT5zvPXYZbkYM3YFDMYs_P8g,120242
98
98
  agno/db/singlestore/utils.py,sha256=vJ6QM-wbJBzA8l5ULYbJ5KLB9c3-GZqtb0NWdy5gg2c,14225
99
99
  agno/db/sqlite/__init__.py,sha256=09V3i4y0-tBjt60--57ivZ__SaaS67GCsDT4Apzv-5Y,138
100
- agno/db/sqlite/async_sqlite.py,sha256=KnuED3PcaV7IBKzuWCEvqfVjXlns1xvgYgU5tj1vQjs,123816
101
- agno/db/sqlite/schemas.py,sha256=1lrIFWEhXYZJIlQYEnOl3XLp3UfsE5ILj2HUPmOf3cg,8265
102
- agno/db/sqlite/sqlite.py,sha256=o2d0njj7Ojwjio6D49aziJnwEcDm5iq8wf1DScG4MpU,120967
100
+ agno/db/sqlite/async_sqlite.py,sha256=tQcOGgabpLHR2kI0Rqa1FBAlLgzd9dNvAWRSt5La9Vo,124127
101
+ agno/db/sqlite/schemas.py,sha256=lvc7-WQTY1pPjqh_5sf8ic4yxcMrUwf8ljAjMT1AoQ4,8887
102
+ agno/db/sqlite/sqlite.py,sha256=WW-28Mh1Ir1cj3zOQkIWEuT0qFxFWo5zVtrt1ta-w80,120735
103
103
  agno/db/sqlite/utils.py,sha256=PZp-g4oUf6Iw1kuDAmOpIBtfyg4poKiG_DxXP4EonFI,15721
104
104
  agno/db/surrealdb/__init__.py,sha256=C8qp5-Nx9YnSmgKEtGua-sqG_ntCXONBw1qqnNyKPqI,75
105
105
  agno/db/surrealdb/metrics.py,sha256=oKDRyjRQ6KR3HaO8zDHQLVMG7-0NDkOFOKX5I7mD5FA,10336
@@ -192,7 +192,7 @@ agno/memory/strategies/base.py,sha256=bHtkZ27U9VXKezdaSWLJZELjK97GcpQUBefSa8BYpp
192
192
  agno/memory/strategies/summarize.py,sha256=4M9zWTsooC3EtHpZoC7Z-yFaQgQoebRMNfZPitdsvB0,7307
193
193
  agno/memory/strategies/types.py,sha256=b3N5jOG_dM4AxT7vGagFIc9sqUUjxFtRHSoH4_AhEx8,1225
194
194
  agno/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
195
- agno/models/base.py,sha256=7zGj7QUitUUdWD_xxJQIpgdLNbghnrIFDqem4d6DJ2Q,122737
195
+ agno/models/base.py,sha256=xA12pw52P-Bu6xqewk9Gb9xGCv6AfsZ3obalFnYl6IU,123005
196
196
  agno/models/defaults.py,sha256=1_fe4-ZbNriE8BgqxVRVi4KGzEYxYKYsz4hn6CZNEEM,40
197
197
  agno/models/message.py,sha256=5bZOFdZuhsQw06nNppvFJq-JGI4lqQt4sVhdjfEFBZM,19976
198
198
  agno/models/metrics.py,sha256=bQJ5DMoFcrb2EyA2VUm4u9HVGbgTKO5F1o2A_t_7hqI,4913
@@ -224,7 +224,7 @@ agno/models/deepseek/deepseek.py,sha256=vIxeA8ou-1_hlj2adF4VxbHhMKlMjcb6QUGVk_SB
224
224
  agno/models/fireworks/__init__.py,sha256=qIDjKUnwmrnwfa9B2Y3ybRyuUsF7Pzw6_bVq4N6M0Cg,86
225
225
  agno/models/fireworks/fireworks.py,sha256=0pCtb8UmPAJZTKpwFXKO-HLNZ-qK2zu3P8P5qxySRF8,1648
226
226
  agno/models/google/__init__.py,sha256=bEOSroFJ4__38XaCgBUWiOe_Qga66ZRm_gis__yIMmc,74
227
- agno/models/google/gemini.py,sha256=jMxJgNbOKH2hIFccQ3xahWuWgrgjnhj2_1joOks7isU,81939
227
+ agno/models/google/gemini.py,sha256=9IWKCDY5LnGJ6UD7qEJ4c5USl639n1k6hkZOHQ9kg_0,82729
228
228
  agno/models/google/utils.py,sha256=6X5yFZ8q9OL8FRnI-1Fa4iHHCx7PENFQ4uIBX34FilY,721
229
229
  agno/models/groq/__init__.py,sha256=gODf5IA4yJKlwTEYsUywmA-dsiQVyL2_yWMc8VncdVU,66
230
230
  agno/models/groq/groq.py,sha256=1xBkn8OmXFFXMcrhkxodsurgOuk1u_GVwq8GOHDSPTU,24185
@@ -289,7 +289,7 @@ agno/os/config.py,sha256=z0wNd576_qsQGsQWsMRIZzjknDVEPlKWF_pHE6VBUyY,3538
289
289
  agno/os/managers.py,sha256=j7Y07yEsW03iKEy1itb3sq3PXcJS3ipJbK4rTqk6_Ow,13086
290
290
  agno/os/mcp.py,sha256=TNkq9y20RBrCFx3iIk1MPrct6gCTYV0KMPS_1EwNghs,31393
291
291
  agno/os/router.py,sha256=Xx3iwxSUSRDEXsQoq5mFuz9MlZIx2YYOkod7RQAaLzw,12348
292
- agno/os/schema.py,sha256=ag6NmJcaAuSUyxio25w4tNBEzqWhHjVxRj6PhB-552E,30535
292
+ agno/os/schema.py,sha256=GmOy3c52pp1EcVp3QznfHySZwIop1qwB8woX41jeSAE,30527
293
293
  agno/os/scopes.py,sha256=gH3Obo618gHKt5h-N1OkWqB4UPl2LZygd7GW7pKzdAc,15696
294
294
  agno/os/settings.py,sha256=gS9pN1w21wsa5XqDkK-RfQmroAaqoX4KZBfRuhUevkM,1556
295
295
  agno/os/utils.py,sha256=CP-ZjCJSpdYDq3PNMbNbuiGZSycJyX_RpOrW37J-J-U,34782
@@ -318,31 +318,31 @@ agno/os/routers/database.py,sha256=PbUq-nQYOROhNiKloKX6qpqKlpqvN6sAnUG31gzgjDk,5
318
318
  agno/os/routers/health.py,sha256=AO3ec6Xi1wXOwUUFJhEcM45488qu6aZRJTwF2GLz6Ak,992
319
319
  agno/os/routers/home.py,sha256=xe8DYJkRgad55qiza0lHt8pUIV5PLSyu2MkybjuPDDE,1708
320
320
  agno/os/routers/agents/__init__.py,sha256=nr1H0Mp7NlWPnvu0ccaHVSPHz-lXg43TRMApkUIEXNc,91
321
- agno/os/routers/agents/router.py,sha256=5C4p8ODPYWd_sJNH_eGHF1TQvsbLud7q3FVBtxSGIBo,25750
321
+ agno/os/routers/agents/router.py,sha256=Y76w6Nc1Wq5bhhUcAbX8AzokZdFauKGwlxtuCrLpENk,25757
322
322
  agno/os/routers/agents/schema.py,sha256=dtnFw5e0MFzLmfApHvBwXp0ByN1w10F-swYeZyNkN7c,12776
323
323
  agno/os/routers/evals/__init__.py,sha256=3s0M-Ftg5A3rFyRfTATs-0aNA6wcbj_5tCvtwH9gORQ,87
324
- agno/os/routers/evals/evals.py,sha256=Oh_ysbeQDevx1Wx9kMpGRajINz8peHUPupYWa94jEi0,23466
324
+ agno/os/routers/evals/evals.py,sha256=9DErwITEV6O1BAr28asB29Yvgy8C5wtzQyz-ys-yJzw,23478
325
325
  agno/os/routers/evals/schemas.py,sha256=xkbOSOX1scmvN782CVqv_MrsiXlxAqXA_esjmy5KEvY,7775
326
326
  agno/os/routers/evals/utils.py,sha256=MjOPY0xNdJZY04_4YQxsv3FPCsKTMDix8jyKDWwn6kc,8367
327
327
  agno/os/routers/knowledge/__init__.py,sha256=ZSqMQ8X7C_oYn8xt7NaYlriarWUpHgaWDyHXOWooMaU,105
328
- agno/os/routers/knowledge/knowledge.py,sha256=0S-LzD9VXqL1IDeI-joFSlK7toVh2zN-L_XuRSJEkZQ,49903
329
- agno/os/routers/knowledge/schemas.py,sha256=Uh7v-vGT8lMOoFc2Zh0PFMsPNenHIdDVF1cyKIp-uIU,8877
328
+ agno/os/routers/knowledge/knowledge.py,sha256=7Szb4nVZ86TfctQVqZycqCHPhoZp0Z6BK77xZAKgOaE,49915
329
+ agno/os/routers/knowledge/schemas.py,sha256=XcB9ODjCcnnkW8lbM7xuc5ZX2tIy_kmJX2H5qlHDakM,8869
330
330
  agno/os/routers/memory/__init__.py,sha256=9hrYFc1dkbsLBqKfqyfioQeLX9TTbLrJx6lWDKNNWbc,93
331
- agno/os/routers/memory/memory.py,sha256=ZKKR8SxEo4mjyGVZ11qy4BbnYXI-rnemAvj_N4nGYfc,32830
331
+ agno/os/routers/memory/memory.py,sha256=SAXNlJTsQ-orSQymlQ-XVgN6RLlui3W9tB0NVSOWLrA,32854
332
332
  agno/os/routers/memory/schemas.py,sha256=WQ7OkJnRIMTis5VkbR6wPIG9X_srBlp4jfmYBW0Eqi8,4673
333
333
  agno/os/routers/metrics/__init__.py,sha256=Uw6wWEikLpF5hHxBkHtFyaTuz7OUerGYWk0JW7teUGQ,97
334
334
  agno/os/routers/metrics/metrics.py,sha256=L947err_dLzp5EoRHnh_tIglHxYnOJa76koLVed595o,9540
335
335
  agno/os/routers/metrics/schemas.py,sha256=1zE3Mfi15SNfF_Hy3r_tLK86E-Jox_qWzSG0oPswFQA,2706
336
336
  agno/os/routers/session/__init__.py,sha256=du4LO9aZwiY1t59VcV9M6wiAfftFFlUZc-YXsTGy9LI,97
337
- agno/os/routers/session/session.py,sha256=DOwW6pF1QRdd5V2QqZD-woBq6FDIfYc_0-9pWVmqTVQ,57752
337
+ agno/os/routers/session/session.py,sha256=oDAwi6iZTsqkDwt0MehCCUox5IC838CG7TFdgePHQ4c,57764
338
338
  agno/os/routers/teams/__init__.py,sha256=j2aPA09mwwn_vOG8p2uX0sDR-qNbLLRlPlprqM789NY,88
339
- agno/os/routers/teams/router.py,sha256=GZMLtofGYr9YiC-zK4q2GxOGBPWTL7plrSo_a5kXztA,24533
339
+ agno/os/routers/teams/router.py,sha256=_PQ2BfsP_zvr7Hczd5GzKi5FwYq6buB26Jur-zOV0mc,24544
340
340
  agno/os/routers/teams/schema.py,sha256=CaRIiEFXBTF1T5D2RlPCRTIMgyqh2kFlYtbCmkuNYYU,12173
341
341
  agno/os/routers/traces/__init__.py,sha256=v-QMRjlrw1iLkh2UawukKWfZ2R66L-OQmAGR-kqFo8I,93
342
342
  agno/os/routers/traces/schemas.py,sha256=_O7tfF3aAPR-R1Q9noakWxjbI20UxkemVh7P2Dkw71I,20034
343
- agno/os/routers/traces/traces.py,sha256=4S5Bh4aGw64KyTwAoMJH91JAuwURzgH1g8yk_dre8N0,24429
343
+ agno/os/routers/traces/traces.py,sha256=6fXnHacKJQULAG_Sh-Ci2sFGn1XMsXufRJM4GVxywOU,24413
344
344
  agno/os/routers/workflows/__init__.py,sha256=1VnCzNTwxT9Z9EHskfqtrl1zhXGPPKuR4TktYdKd1RI,146
345
- agno/os/routers/workflows/router.py,sha256=6hzIPYignzJqccqrVFAv3hdlRJQCr1K_HG8r38GeFg4,31073
345
+ agno/os/routers/workflows/router.py,sha256=IWkpaw7QhuumJUDUv82BV4yFRtppDsikPfY7c5SpKS8,31080
346
346
  agno/os/routers/workflows/schema.py,sha256=ovFO5RNL4UPXDNHZuQzOHZJsWkiBtoLX5D-Plp__AQ4,5739
347
347
  agno/reasoning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
348
348
  agno/reasoning/anthropic.py,sha256=WzUrGLLdbH31T6uBafYKt7W0wXMYHbXLxYRiVs2ge5U,6334
@@ -358,7 +358,7 @@ agno/reasoning/openai.py,sha256=GSPgZkp0yZklRZNBxLOJ_Gvm-9ZLerqnXcukw1YwkJ4,8164
358
358
  agno/reasoning/step.py,sha256=6DaOb_0DJRz9Yh1w_mxcRaOSVzIQDrj3lQ6rzHLdIwA,1220
359
359
  agno/reasoning/vertexai.py,sha256=CCdY-ygLEdQLQuo2D-dYC0aDr4FJ9BqtkCkk2U2Ftfs,6174
360
360
  agno/remote/__init__.py,sha256=zgDS3cO_6VavICojsmG8opJ49wLwydftGE6i6_yPDTo,66
361
- agno/remote/base.py,sha256=35sw8S9I7XHkkL8exq4UBZk4on_CM7FW9z_BUiKTK0c,23357
361
+ agno/remote/base.py,sha256=D2TDs7rmlbxgbLEArga7jq9IgdKSzhs_jzoUO43WDQo,23358
362
362
  agno/run/__init__.py,sha256=GZwloCe48rEAjkb_xOJ7piOjICmHawiR1d4SqBtUd-k,222
363
363
  agno/run/agent.py,sha256=ISzr_ivLyXTAW87i8Sgssk4nINeiP8yuREj9S7U9z0I,29720
364
364
  agno/run/base.py,sha256=SqiprPcwBbjVRxSi9zlMqPsN6QDh0UHMvodnRBZnH5c,9814
@@ -386,8 +386,8 @@ agno/skills/loaders/__init__.py,sha256=1Lb6T2BkyQECIKIk-n5F6Unxm7CT1PEan_iYrTMtm
386
386
  agno/skills/loaders/base.py,sha256=Syt6lIOe-m_Kz68ndwuVed3wZFAPvYDDnJkhypazYJ8,743
387
387
  agno/skills/loaders/local.py,sha256=7budE7d-JG86XyqnRwo495yiYWDjj16yDV67aiSacOQ,7478
388
388
  agno/team/__init__.py,sha256=7oYaEB1iTGbmajpgSd3tjCQAQo6t0PIE8ZT1m5MKTm0,905
389
- agno/team/remote.py,sha256=LCiQo-_CrcfbvnJFWV8m_L-ZAhFKHuXmdv60guNDCNQ,16978
390
- agno/team/team.py,sha256=fjkQZcpG98wYfW65SrIReoDJCHjMxxq9WIK5NRYdymM,434172
389
+ agno/team/remote.py,sha256=BgUEQsTFA4tehDas1YO7lwQCj3cLJrxfoSFVOYm_1po,16979
390
+ agno/team/team.py,sha256=_A1_UI6KCf6COnt29Wtfr9npvUZFIavRTk7DB-0Says,434740
391
391
  agno/tools/__init__.py,sha256=jNll2sELhPPbqm5nPeT4_uyzRO2_KRTW-8Or60kioS0,210
392
392
  agno/tools/agentql.py,sha256=S82Z9aTNr-E5wnA4fbFs76COljJtiQIjf2grjz3CkHU,4104
393
393
  agno/tools/airflow.py,sha256=uf2rOzZpSU64l_qRJ5Raku-R3Gky-uewmYkh6W0-oxg,2610
@@ -398,10 +398,10 @@ agno/tools/aws_lambda.py,sha256=ZxDwvUFoPkOeWUVJn7eF8tozEAh3YV1CMLn2-q7qw9s,1931
398
398
  agno/tools/aws_ses.py,sha256=CmltZONpF2knf1GXlAFZj_CZuttc_w2yY6pNhtd6TvA,2271
399
399
  agno/tools/baidusearch.py,sha256=mVXT4Fv2Eqo7CbbamyH76FzabZfejxLXKUcBO_4vMEI,2995
400
400
  agno/tools/bitbucket.py,sha256=R-S2g10niu6DAEYnSdLPwHCzb7Eu8w6TVgZdFXtOR98,11210
401
- agno/tools/brandfetch.py,sha256=Ib1F8MOaymqf-VSrz1bgSUt4YHUUu0Srq_xX3x_1qo8,8230
401
+ agno/tools/brandfetch.py,sha256=u9aYSNy8EkUqX0NGNpgVOB-jQLLRu_NhjEKeHy0fjoQ,8595
402
402
  agno/tools/bravesearch.py,sha256=8qL5nIFg39czCov9_onpk0nq0TS8nWVNE2SF331KLQw,3539
403
403
  agno/tools/brightdata.py,sha256=iZXoQHmFkmRQKwFHkqhHwoG7XHa9_5C9ha5DqxGKLXw,14346
404
- agno/tools/browserbase.py,sha256=0iFh-hzT0H55apzKfJ2S_oqIf8WgliovxpSlExfve70,7765
404
+ agno/tools/browserbase.py,sha256=JX0hajVsOcObJUYiaOBr9yUkzmtrvwr6dL1pc259Iko,13387
405
405
  agno/tools/calcom.py,sha256=3HgJwBphBWbGuTUK-U6El0AeI-HGCibrZMLo-pBx5PI,9721
406
406
  agno/tools/calculator.py,sha256=m4exhG-laAjpOtXLRfpUG3nqOQEd-7qH0vlk40iep-Q,4988
407
407
  agno/tools/cartesia.py,sha256=wmjPeLZQVS_iE7BMsb2Vfldqj2DGy2LNxrVmH6crpe4,7252
@@ -427,7 +427,7 @@ agno/tools/file.py,sha256=S_SFXzW1uzm29ecL0FH1QoWQKq3mD9JthALVSq549fg,10244
427
427
  agno/tools/file_generation.py,sha256=OxJNeEGpqf_SxemvET54Gi_j6uT1xMWFbjbQOnTSdoY,14006
428
428
  agno/tools/financial_datasets.py,sha256=NiXwyiYIFCawI8rR7JLJNIfwoQlranUeCcABHKhLHfw,9190
429
429
  agno/tools/firecrawl.py,sha256=axrrM7bvXBRkX8cBUtfrJ_G0YIeSQWaCTDAgRuhFsNk,5623
430
- agno/tools/function.py,sha256=ejMsUYG0FpPAYQCFnxjDKSGm_cixAHb80clTa2OjPLM,52530
430
+ agno/tools/function.py,sha256=i6RIdfusvljEQcMPrxB79XrXi1oX3wJMNYMouQ0Q5eo,52909
431
431
  agno/tools/giphy.py,sha256=_wOCWVnMdFByE9Yoz4Pf2MoKxSjkUTiPJZ928_BNe2M,3070
432
432
  agno/tools/github.py,sha256=wct6P00YzF3zgWoV2c5aHeXX_2dgb9LqRwJAboi6QXw,70286
433
433
  agno/tools/gmail.py,sha256=m_7SY4oz2sP0RSJyNItZ_h5VeyI86J8840_p5Nz_2So,37073
@@ -485,7 +485,7 @@ agno/tools/tavily.py,sha256=1habkgXXHU8oStWmoZ29DVRBtl-tO-Pss1o9N1MovIU,10464
485
485
  agno/tools/telegram.py,sha256=e78EJlh44EmJNnv3FHyxW-sl72GjFYHpF6aGrCjNijc,1523
486
486
  agno/tools/todoist.py,sha256=p3TCQ0zAfmrhGIHDExVb8bmY0746UbzAbKHNFJlGggw,8177
487
487
  agno/tools/tool_registry.py,sha256=LMKqamTqjbFBD6SAV39PJULPmpfiHwSq6_NQoBxvGl8,85
488
- agno/tools/toolkit.py,sha256=LkJ-KjpW11hDH6IFTlrE_IQfn7ND3ZVcKrl3AkzJNcg,13281
488
+ agno/tools/toolkit.py,sha256=hqsTe-VWKw3dmPFom5V5SseF6odWRGI2k7iqLEugRnY,16527
489
489
  agno/tools/trafilatura.py,sha256=AK2Q_0jqwOqL8-0neMI6ZjuUt-w0dGvW-w8zE6FrZVs,14792
490
490
  agno/tools/trello.py,sha256=y2fc60ITCIXBOk4TX3w70YjkMvM9SMKsEYpfXOKWtOI,8546
491
491
  agno/tools/twilio.py,sha256=XUbUhFJdLxP3nlNx2UdS9aHva-HSIGHD01cHHuE9Rfg,6752
@@ -506,7 +506,7 @@ agno/tools/zendesk.py,sha256=OgvK0bQGIHnRmN8X6OxyGI7P0Si6w4sodZr6FfmNR50,3084
506
506
  agno/tools/zep.py,sha256=i3yDNlVJLM0CK8SFHi-64fs0DfHMUwqu1CCrMvzJ95M,19305
507
507
  agno/tools/zoom.py,sha256=PD3l-JJ6VK1XJLXF8ciPScS6oRH8CHl7OQtoiZq8VK0,15963
508
508
  agno/tools/mcp/__init__.py,sha256=VqnrxQzDMGcT9gRI5sXAmZ1ccuomGNCfHYQSYxlyZaw,278
509
- agno/tools/mcp/mcp.py,sha256=m7Zxmq5p2e9_bFGb-63JdaY15c0hYnL251JNm62mCuk,25862
509
+ agno/tools/mcp/mcp.py,sha256=c8nWHZpWo53bUw7PJ4tkTP5ECew8mAFT7RpyzIgIFPQ,25898
510
510
  agno/tools/mcp/multi_mcp.py,sha256=lYO_euSw_gJdky6cZyJtQ53s1igrsMaxR-bL8DJMF60,25659
511
511
  agno/tools/mcp/params.py,sha256=Ng9RhXeUgHCDh2mzPAKoAdsTctKfurrt5VYmbrUgfVA,666
512
512
  agno/tools/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -630,14 +630,14 @@ agno/workflow/agent.py,sha256=PSt7X8BOgO9Rmh1YnT3I9HBq360IjdXfaKNzffqqiRw,12173
630
630
  agno/workflow/condition.py,sha256=bnjGzcmjiwhFO0_IfCx3wPFjHVYYoLyQD4k0B6_i5YE,34239
631
631
  agno/workflow/loop.py,sha256=Q9o260HKzMOJNCfTCH3XR1MwTNRqXxTMfM6k4NVY10A,35068
632
632
  agno/workflow/parallel.py,sha256=beAuv-Y5qt64kYlr_bK-RU36fzcA9WuNsFvgEET7o3I,38077
633
- agno/workflow/remote.py,sha256=WxFhUqZW9-yfTkh9KDkb35N3LNyCEa4Q1bP1MvjM83c,14143
633
+ agno/workflow/remote.py,sha256=-turwcZ0Nm0rsltJAFfG6IzyhTujJZs9lPoV-W2anUs,14144
634
634
  agno/workflow/router.py,sha256=s0fZ8CHu0Q4Ngygs7N4j-Lq1NHBqBmGExckBURWwZ4I,32340
635
635
  agno/workflow/step.py,sha256=voTmWWihLKDAMeLgYoie96KLCiVpxPFrZoFHEMhA6QM,75046
636
636
  agno/workflow/steps.py,sha256=1UySQjqwHlFHVhUL9r2hqy1K3esISjh2bvtClQk5PiI,27482
637
637
  agno/workflow/types.py,sha256=t4304WCKB19QFdV3ixXZICcU8wtBza4EBCIz5Ve6MSQ,18035
638
- agno/workflow/workflow.py,sha256=MPBPGuh-9snFx_d83zJXkbMaUtEMqhwJQYNpKOp4p1Q,195871
639
- agno-2.3.22.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
640
- agno-2.3.22.dist-info/METADATA,sha256=wlY2DCdCA99HC-p2mONYUMTBdWpq8HpiXV0msHX0ics,23251
641
- agno-2.3.22.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
642
- agno-2.3.22.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
643
- agno-2.3.22.dist-info/RECORD,,
638
+ agno/workflow/workflow.py,sha256=Z_-3ZLux2VxyqK2kgr_YcvCwg_YtSWVjHszXOkVoMy8,196292
639
+ agno-2.3.23.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
640
+ agno-2.3.23.dist-info/METADATA,sha256=s6Scy3i6Gfvm9yxbVLL9yWBgY4bqrwjKqMFRTy2POlI,23251
641
+ agno-2.3.23.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
642
+ agno-2.3.23.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
643
+ agno-2.3.23.dist-info/RECORD,,
File without changes