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.
- agno/agent/agent.py +22 -1
- agno/agent/remote.py +1 -1
- agno/db/mysql/async_mysql.py +5 -7
- agno/db/mysql/mysql.py +5 -7
- agno/db/mysql/schemas.py +39 -21
- agno/db/postgres/async_postgres.py +10 -2
- agno/db/postgres/postgres.py +5 -7
- agno/db/postgres/schemas.py +39 -21
- agno/db/singlestore/schemas.py +41 -21
- agno/db/singlestore/singlestore.py +14 -3
- agno/db/sqlite/async_sqlite.py +7 -2
- agno/db/sqlite/schemas.py +36 -21
- agno/db/sqlite/sqlite.py +3 -7
- agno/models/base.py +4 -0
- agno/models/google/gemini.py +27 -4
- agno/os/routers/agents/router.py +1 -1
- agno/os/routers/evals/evals.py +2 -2
- agno/os/routers/knowledge/knowledge.py +2 -2
- agno/os/routers/knowledge/schemas.py +1 -1
- agno/os/routers/memory/memory.py +4 -4
- agno/os/routers/session/session.py +2 -2
- agno/os/routers/teams/router.py +2 -2
- agno/os/routers/traces/traces.py +3 -3
- agno/os/routers/workflows/router.py +1 -1
- agno/os/schema.py +1 -1
- agno/remote/base.py +1 -1
- agno/team/remote.py +1 -1
- agno/team/team.py +19 -1
- agno/tools/brandfetch.py +27 -18
- agno/tools/browserbase.py +150 -13
- agno/tools/function.py +6 -1
- agno/tools/mcp/mcp.py +1 -0
- agno/tools/toolkit.py +89 -21
- agno/workflow/remote.py +1 -1
- agno/workflow/workflow.py +14 -0
- {agno-2.3.22.dist-info → agno-2.3.23.dist-info}/METADATA +1 -1
- {agno-2.3.22.dist-info → agno-2.3.23.dist-info}/RECORD +40 -40
- {agno-2.3.22.dist-info → agno-2.3.23.dist-info}/WHEEL +0 -0
- {agno-2.3.22.dist-info → agno-2.3.23.dist-info}/licenses/LICENSE +0 -0
- {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
|
|
75
|
-
self.
|
|
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
|
-
|
|
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
|
-
|
|
172
|
-
|
|
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
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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
|
-
|
|
255
|
-
|
|
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
|
|
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,
|
|
@@ -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=
|
|
10
|
-
agno/agent/remote.py,sha256
|
|
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=
|
|
77
|
-
agno/db/mysql/mysql.py,sha256=
|
|
78
|
-
agno/db/mysql/schemas.py,sha256=
|
|
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=
|
|
82
|
-
agno/db/postgres/postgres.py,sha256=
|
|
83
|
-
agno/db/postgres/schemas.py,sha256=
|
|
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=
|
|
97
|
-
agno/db/singlestore/singlestore.py,sha256=
|
|
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=
|
|
101
|
-
agno/db/sqlite/schemas.py,sha256=
|
|
102
|
-
agno/db/sqlite/sqlite.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
329
|
-
agno/os/routers/knowledge/schemas.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
390
|
-
agno/team/team.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
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=
|
|
639
|
-
agno-2.3.
|
|
640
|
-
agno-2.3.
|
|
641
|
-
agno-2.3.
|
|
642
|
-
agno-2.3.
|
|
643
|
-
agno-2.3.
|
|
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
|
|
File without changes
|
|
File without changes
|