agno 2.0.3__py3-none-any.whl → 2.0.5__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 (58) hide show
  1. agno/agent/agent.py +229 -164
  2. agno/db/dynamo/dynamo.py +8 -0
  3. agno/db/firestore/firestore.py +8 -0
  4. agno/db/gcs_json/gcs_json_db.py +9 -0
  5. agno/db/json/json_db.py +8 -0
  6. agno/db/migrations/v1_to_v2.py +191 -23
  7. agno/db/mongo/mongo.py +68 -0
  8. agno/db/mysql/mysql.py +13 -3
  9. agno/db/mysql/schemas.py +27 -27
  10. agno/db/postgres/postgres.py +19 -11
  11. agno/db/redis/redis.py +6 -0
  12. agno/db/singlestore/schemas.py +1 -1
  13. agno/db/singlestore/singlestore.py +8 -1
  14. agno/db/sqlite/sqlite.py +12 -3
  15. agno/integrations/discord/client.py +1 -0
  16. agno/knowledge/knowledge.py +92 -66
  17. agno/knowledge/reader/reader_factory.py +7 -3
  18. agno/knowledge/reader/web_search_reader.py +12 -6
  19. agno/models/base.py +2 -2
  20. agno/models/message.py +109 -0
  21. agno/models/openai/chat.py +3 -0
  22. agno/models/openai/responses.py +12 -0
  23. agno/models/response.py +5 -0
  24. agno/models/siliconflow/__init__.py +5 -0
  25. agno/models/siliconflow/siliconflow.py +25 -0
  26. agno/os/app.py +164 -41
  27. agno/os/auth.py +24 -14
  28. agno/os/interfaces/agui/utils.py +98 -134
  29. agno/os/router.py +128 -55
  30. agno/os/routers/evals/utils.py +9 -9
  31. agno/os/routers/health.py +25 -0
  32. agno/os/routers/home.py +52 -0
  33. agno/os/routers/knowledge/knowledge.py +11 -11
  34. agno/os/routers/session/session.py +24 -8
  35. agno/os/schema.py +29 -2
  36. agno/os/utils.py +0 -8
  37. agno/run/agent.py +3 -3
  38. agno/run/team.py +3 -3
  39. agno/run/workflow.py +64 -10
  40. agno/session/team.py +1 -0
  41. agno/team/team.py +189 -94
  42. agno/tools/duckduckgo.py +15 -11
  43. agno/tools/googlesearch.py +1 -1
  44. agno/tools/mem0.py +11 -17
  45. agno/tools/memory.py +34 -6
  46. agno/utils/common.py +90 -1
  47. agno/utils/streamlit.py +14 -8
  48. agno/utils/string.py +32 -0
  49. agno/utils/tools.py +1 -1
  50. agno/vectordb/chroma/chromadb.py +8 -2
  51. agno/workflow/step.py +115 -16
  52. agno/workflow/workflow.py +16 -13
  53. {agno-2.0.3.dist-info → agno-2.0.5.dist-info}/METADATA +6 -5
  54. {agno-2.0.3.dist-info → agno-2.0.5.dist-info}/RECORD +57 -54
  55. agno/knowledge/reader/url_reader.py +0 -128
  56. {agno-2.0.3.dist-info → agno-2.0.5.dist-info}/WHEEL +0 -0
  57. {agno-2.0.3.dist-info → agno-2.0.5.dist-info}/licenses/LICENSE +0 -0
  58. {agno-2.0.3.dist-info → agno-2.0.5.dist-info}/top_level.txt +0 -0
agno/workflow/workflow.py CHANGED
@@ -51,6 +51,7 @@ from agno.run.workflow import (
51
51
  )
52
52
  from agno.session.workflow import WorkflowSession
53
53
  from agno.team.team import Team
54
+ from agno.utils.common import is_typed_dict, validate_typed_dict
54
55
  from agno.utils.log import (
55
56
  log_debug,
56
57
  log_warning,
@@ -217,14 +218,18 @@ class Workflow:
217
218
 
218
219
  def _validate_input(
219
220
  self, input: Optional[Union[str, Dict[str, Any], List[Any], BaseModel, List[Message]]]
220
- ) -> Optional[BaseModel]:
221
+ ) -> Optional[Union[str, List, Dict, Message, BaseModel]]:
221
222
  """Parse and validate input against input_schema if provided"""
222
223
  if self.input_schema is None:
223
- return None
224
+ return input # Return input unchanged if no schema is set
224
225
 
225
226
  if input is None:
226
227
  raise ValueError("Input required when input_schema is set")
227
228
 
229
+ # Handle Message objects - extract content
230
+ if isinstance(input, Message):
231
+ input = input.content # type: ignore
232
+
228
233
  # If input is a string, convert it to a dict
229
234
  if isinstance(input, str):
230
235
  import json
@@ -238,8 +243,6 @@ class Workflow:
238
243
  if isinstance(input, BaseModel):
239
244
  if isinstance(input, self.input_schema):
240
245
  try:
241
- # Re-validate to catch any field validation errors
242
- input.model_validate(input.model_dump())
243
246
  return input
244
247
  except Exception as e:
245
248
  raise ValueError(f"BaseModel validation failed: {str(e)}")
@@ -250,8 +253,13 @@ class Workflow:
250
253
  # Case 2: Message is a dict
251
254
  elif isinstance(input, dict):
252
255
  try:
253
- validated_model = self.input_schema(**input)
254
- return validated_model
256
+ # Check if the schema is a TypedDict
257
+ if is_typed_dict(self.input_schema):
258
+ validated_dict = validate_typed_dict(input, self.input_schema)
259
+ return validated_dict
260
+ else:
261
+ validated_model = self.input_schema(**input)
262
+ return validated_model
255
263
  except Exception as e:
256
264
  raise ValueError(f"Failed to parse dict into {self.input_schema.__name__}: {str(e)}")
257
265
 
@@ -1924,10 +1932,7 @@ class Workflow:
1924
1932
  ) -> Union[WorkflowRunOutput, Iterator[WorkflowRunOutputEvent]]:
1925
1933
  """Execute the workflow synchronously with optional streaming"""
1926
1934
 
1927
- validated_input = self._validate_input(input)
1928
- if validated_input is not None:
1929
- input = validated_input
1930
-
1935
+ input = self._validate_input(input)
1931
1936
  if background:
1932
1937
  raise RuntimeError("Background execution is not supported for sync run()")
1933
1938
 
@@ -2059,9 +2064,7 @@ class Workflow:
2059
2064
  ) -> Union[WorkflowRunOutput, AsyncIterator[WorkflowRunOutputEvent]]:
2060
2065
  """Execute the workflow synchronously with optional streaming"""
2061
2066
 
2062
- validated_input = self._validate_input(input)
2063
- if validated_input is not None:
2064
- input = validated_input
2067
+ input = self._validate_input(input)
2065
2068
 
2066
2069
  websocket_handler = None
2067
2070
  if websocket:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.0.3
3
+ Version: 2.0.5
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
@@ -366,6 +366,7 @@ Dynamic: license-file
366
366
  <div align="center">
367
367
  <a href="https://docs.agno.com">📚 Documentation</a> &nbsp;|&nbsp;
368
368
  <a href="https://docs.agno.com/examples/introduction">💡 Examples</a> &nbsp;|&nbsp;
369
+ <a href="https://www.agno.com/?utm_source=github&utm_medium=readme&utm_campaign=agno-github&utm_content=header">🏠 Website</a> &nbsp;|&nbsp;
369
370
  <a href="https://github.com/agno-agi/agno/stargazers">🌟 Star Us</a>
370
371
  </div>
371
372
 
@@ -406,14 +407,14 @@ If you're new to Agno, follow our [quickstart](https://docs.agno.com/introductio
406
407
 
407
408
  After that, checkout the [examples gallery](https://docs.agno.com/examples/introduction) and build real-world applications with Agno.
408
409
 
409
- ## Documentation, Community & More examples
410
+ ## Documentation, Community & More Examples
410
411
 
411
412
  - Docs: <a href="https://docs.agno.com" target="_blank" rel="noopener noreferrer">docs.agno.com</a>
412
413
  - Cookbook: <a href="https://github.com/agno-agi/agno/tree/main/cookbook" target="_blank" rel="noopener noreferrer">Cookbook</a>
413
414
  - Community forum: <a href="https://community.agno.com/" target="_blank" rel="noopener noreferrer">community.agno.com</a>
414
415
  - Discord: <a href="https://discord.gg/4MtYHHrgA8" target="_blank" rel="noopener noreferrer">discord</a>
415
416
 
416
- ## Setup your coding agent to use Agno
417
+ ## Setup Your Coding Agent to Use Agno
417
418
 
418
419
  For LLMs and AI assistants to understand and navigate Agno's documentation, we provide an [llms.txt](https://docs.agno.com/llms.txt) or [llms-full.txt](https://docs.agno.com/llms-full.txt) file.
419
420
 
@@ -441,7 +442,7 @@ At Agno, we're obsessed with performance. Why? because even simple AI workflows
441
442
 
442
443
  While an Agent's run-time is bottlenecked by inference, we must do everything possible to minimize execution time, reduce memory usage, and parallelize tool calls. These numbers may seem trivial at first, but our experience shows that they add up even at a reasonably small scale.
443
444
 
444
- ### Instantiation time
445
+ ### Instantiation Time
445
446
 
446
447
  Let's measure the time it takes for an Agent with 1 tool to start up. We'll run the evaluation 1000 times to get a baseline measurement.
447
448
 
@@ -469,7 +470,7 @@ Agno is on the left, notice how it finishes before LangGraph gets 1/2 way throug
469
470
 
470
471
  https://github.com/user-attachments/assets/ba466d45-75dd-45ac-917b-0a56c5742e23
471
472
 
472
- ### Memory usage
473
+ ### Memory Usage
473
474
 
474
475
  To measure memory usage, we use the `tracemalloc` library. We first calculate a baseline memory usage by running an empty function, then run the Agent 1000x times and calculate the difference. This gives a (reasonably) isolated measurement of the memory usage of the Agent.
475
476
 
@@ -4,7 +4,7 @@ agno/exceptions.py,sha256=HWuuNFS5J0l1RYJsdUrSx51M22aFEoh9ltoeonXBoBw,2891
4
4
  agno/media.py,sha256=bWnJb2ns4gN-do73iHvslZPn9uNbH_Ty8XgOiOvSFfU,13932
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=sAnL2VOC4o1W3JzHyCYrF6tDZqaXJFwAi40a3YWAets,322572
7
+ agno/agent/agent.py,sha256=2YbyDCSXkH2pjO1IGobEzWnkZ7Fkkmcz3l6eiHTxGRU,325861
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,38 +31,38 @@ agno/db/__init__.py,sha256=bfd_tpKsIKCjZosnFqID26VoWqy88v8gzkf9kLHToY4,625
31
31
  agno/db/base.py,sha256=POGw6M85Dwt1YD_69KbtB1iuTyrqYl4ZIWU07GO_4yc,7898
32
32
  agno/db/utils.py,sha256=xjrbR4g2ry0HnkiQC29Ql7jRzfxrorqS4HNlswhzVcM,3478
33
33
  agno/db/dynamo/__init__.py,sha256=fZ7NwKbyhoIu7_4T6hVz44HkIINXMnTfFrDrgB6bpEo,67
34
- agno/db/dynamo/dynamo.py,sha256=kQ-_CedgRsaT37a5ptENpL1ddnKJBA_6nHD3Vqy-dFo,66202
34
+ agno/db/dynamo/dynamo.py,sha256=ZIud33mQeIO7IxNFmgtUgXUE7phNkR4xJ3mTCgNgEL8,66481
35
35
  agno/db/dynamo/schemas.py,sha256=ZqeR4QdqMVi53iz2qcs-d5Y6MDfmhHSuP7vot__hLoI,11638
36
36
  agno/db/dynamo/utils.py,sha256=3Kwkq7FqUac6Q6BjwuzWzfyo4ANnS8FIz7_n3EEnbYo,25047
37
37
  agno/db/firestore/__init__.py,sha256=lYAJjUs4jMxJFty1GYZw464K35zeuBlcoFR9uuIQYtI,79
38
- agno/db/firestore/firestore.py,sha256=9NBC_tdUjWJg9ldHAKRVmRSa5yLtj9QREDvEBwjdhdI,56706
38
+ agno/db/firestore/firestore.py,sha256=1IjBjZwHcbTiukeiTuFqM0xPVo3pJwx_EVuFlVG6vDE,56960
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=yCCPOj2C_W6Lhkbn8k0fcnDvQhPF_X9Qnx4ayqtIyn8,41993
42
+ agno/db/gcs_json/gcs_json_db.py,sha256=SMPSMDpYL326wv1KbqD7qHh3NACvrUk1P8DpT_PvIgI,42307
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
45
  agno/db/in_memory/in_memory_db.py,sha256=qivtyP3ShYMuKFRadGgzbrRyaCElfm511ytiSdqPWcY,35074
46
46
  agno/db/in_memory/utils.py,sha256=X02wny18w5uvGE3caokPbCQTG6t7OErWNPkK3Umru3s,5780
47
47
  agno/db/json/__init__.py,sha256=zyPTmVF9S-OwXCL7FSkrDmunZ_Q14YZO3NYUv1Pa14Y,62
48
- agno/db/json/json_db.py,sha256=q79dpjL1AR2FVZ2DuOy1j_UX2FN_whTfENNkboYBsZg,41977
48
+ agno/db/json/json_db.py,sha256=AFcNHriyosn3Tce8S2fYCUZNL9UrE-MK3DCaAQGGttM,42228
49
49
  agno/db/json/utils.py,sha256=__c14xMdyw1AlyV7-DAGDr8YicqhfCbSS5C8OkVN2So,6658
50
50
  agno/db/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
- agno/db/migrations/v1_to_v2.py,sha256=Q1bIfq5gSSctDLlWFTypUPBhmeKQnRwz-ENQczcvOXc,6171
51
+ agno/db/migrations/v1_to_v2.py,sha256=HYLLaas9YEEbAOhzK3Sd-qBP-1YfHeeWglWsU31V584,12692
52
52
  agno/db/mongo/__init__.py,sha256=EPa9QkGNVwnuej72LhZDCeASMXa-e0pR20jsgwa9BhY,63
53
- agno/db/mongo/mongo.py,sha256=6RD_HiCKJumh-geu3JnbpiReXObZhxUjissfVJW7zdw,55050
53
+ agno/db/mongo/mongo.py,sha256=jOwq6agagQEkFHZykSjB_h4oItFTPoBTZZSegrOFcUg,57904
54
54
  agno/db/mongo/schemas.py,sha256=MAhfwx7_zxKucnZpgq_YSZANaF5MqiZ6qDByhdIREk8,2054
55
55
  agno/db/mongo/utils.py,sha256=dmVo0HGIG7IPKdCjuRDcO0ZOtyXcNkP6S2G-XBFqzZE,6906
56
56
  agno/db/mysql/__init__.py,sha256=ohBMZ1E6ctioEF0XX5PjC4LtUQrc6lFkjsE4ojyXA8g,63
57
- agno/db/mysql/mysql.py,sha256=L1KWlxIROvXT_DFb5Kuk0QdQOln3GGrKC-5r-4_VSQk,69828
58
- agno/db/mysql/schemas.py,sha256=xGh5h9_StWWCdAN98_wxDnug93JxB2Fm9gEvIUehIds,5136
57
+ agno/db/mysql/mysql.py,sha256=3P6Wm69IEiYnYtuA9U-afU-S76e5OJJGVT5e98wKtiQ,70241
58
+ agno/db/mysql/schemas.py,sha256=2OAaX7ILykFCJBcEWH6kFXzNI8JnnYZCXClbVUoRbLc,5482
59
59
  agno/db/mysql/utils.py,sha256=7E83u2gKOkr7lxFPGM2ucLvfJarbEtNRxOeZQhLYKzU,10066
60
60
  agno/db/postgres/__init__.py,sha256=eEdY4emRxmBmxeZUhAYSaObgcqKdd6C9IxUSk1U0gDY,75
61
- agno/db/postgres/postgres.py,sha256=ispOuB9-q1-xWm6qho6GCoI8IxSIa_GHxC-0czWGDTo,68955
61
+ agno/db/postgres/postgres.py,sha256=PezXOvn7y0g4-eugNt0YUEOHeF3oBv01-mU8Mu_HyuA,69264
62
62
  agno/db/postgres/schemas.py,sha256=adbKcMapqeXsEYeF6feWe2ja1paRzCMOkQSHHN6Psp8,5275
63
63
  agno/db/postgres/utils.py,sha256=iaY0ZqJgzadCitxSbsRchCtBE5WeUApfIj-VbdH9MJI,9447
64
64
  agno/db/redis/__init__.py,sha256=rZWeZ4CpVeKP-enVQ-SRoJ777i0rdGNgoNDRS9gsfAc,63
65
- agno/db/redis/redis.py,sha256=Y2Lwki4iuHhgMaab-9-rlzVcMxxE-pXx4Nm3SHz5GtI,51338
65
+ agno/db/redis/redis.py,sha256=JntBcaerlnGUL67eUUMjqIIzhB7bldkl6NlUYJywzCk,51537
66
66
  agno/db/redis/schemas.py,sha256=LE1NApES1ao5X770HXB7jvrk2n31KiOWAsl5Z0xMG08,3637
67
67
  agno/db/redis/utils.py,sha256=z1pyakjlCQ_FyQUXe8pPer-pQDG70GLDOYQLNl4Oxrg,8955
68
68
  agno/db/schemas/__init__.py,sha256=HIKc2Apyk6ENJb_Py6sgNdbl6H7eo6PD5QMTmkdJSwI,72
@@ -71,12 +71,12 @@ agno/db/schemas/knowledge.py,sha256=qVL6jEdaUG92WJw70-FrA7atetPqrpZnLYkYZDuiYho,
71
71
  agno/db/schemas/memory.py,sha256=kKlJ6AWpbwz-ZJfBJieartPP0QqeeoKAXx2Ity4Yj-Y,1461
72
72
  agno/db/schemas/metrics.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
73
  agno/db/singlestore/__init__.py,sha256=dufbaod8ZZIeZIVi0hYJQ8Eu2DfIfWdIy00cpqAsx9U,87
74
- agno/db/singlestore/schemas.py,sha256=9cQB4NxIoZgsaSH9aXBxrX9aBgec0f_nMjUl6jVXvbg,5498
75
- agno/db/singlestore/singlestore.py,sha256=d61qCsHwGkrmUxCztelXX2EaXASRUiGU_ZsaDnTmaNs,69218
74
+ agno/db/singlestore/schemas.py,sha256=yDXBGtswAuVxKX1_GvKIBt6IlEor2HiAbYPrwX5SSJ8,5489
75
+ agno/db/singlestore/singlestore.py,sha256=gYNi3k-4GYmqivoIBIB9h6FO7JdUGmyksYy3-pZ_zVg,69539
76
76
  agno/db/singlestore/utils.py,sha256=LG0NhOx5B5oJY-Kcc_3ipNzBT1J-mBGx8TARUkRtWv8,11377
77
77
  agno/db/sqlite/__init__.py,sha256=LocJ-suv6xpdun8HUxgbD3bTgmQArQvLJkbpb1pRGy0,67
78
78
  agno/db/sqlite/schemas.py,sha256=-L3hmlg80PAPmfexPrWtnepSzlmZHrbyPZ754nJlVdE,5191
79
- agno/db/sqlite/sqlite.py,sha256=UQhAHVGMl9Sl6nkPQ68xLclWlF6PTVxgkwsBVxOYC8E,67797
79
+ agno/db/sqlite/sqlite.py,sha256=puxKFhiriPz4TAIOKzBy2qBQY3En8AT7CwjFxTO6gZc,68187
80
80
  agno/db/sqlite/utils.py,sha256=52FbQrmMHXicxocqbXM5B7iBGgVTSft0r_9PyckLSt0,9434
81
81
  agno/eval/__init__.py,sha256=vCYcIbfOkT2lL8vZJ9zsea6j3byp5A-mxEb_45VaD8I,449
82
82
  agno/eval/accuracy.py,sha256=UZmxOtVP3p3fFzby2YyjE4-Tza2MMtQiBrfhK9mJrx4,32531
@@ -85,10 +85,10 @@ agno/eval/reliability.py,sha256=kmyHthgzTeKOn_HGDSdpBlpxQ4m_vqhcAcjAjQxgKdk,1223
85
85
  agno/eval/utils.py,sha256=EbpxDTgP9QGlSjU9NQi0X-tJRMMbxDmDpTedb_s-D20,3149
86
86
  agno/integrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
87
  agno/integrations/discord/__init__.py,sha256=MS08QSnegGgpDZd9LyLjK4pWIk9dXlbzgD7wB3eEVJE,88
88
- agno/integrations/discord/client.py,sha256=5errUDidSiZN2PVf7BItrLu-GIgUyi5sVUG73knBug8,8320
88
+ agno/integrations/discord/client.py,sha256=2IWkA-kCDsDXByKOGq2QJG6MtFsbouzNN105rsXn95A,8375
89
89
  agno/knowledge/__init__.py,sha256=PJCt-AGKGFztzR--Ok2TNKW5QEqllZzqiI_7f8-1u80,79
90
90
  agno/knowledge/content.py,sha256=q2bjcjDhfge_UrQAcygrv5R9ZTk7vozzKnQpatDQWRo,2295
91
- agno/knowledge/knowledge.py,sha256=tkFv7O-6-SMn_xiHkTsCitSFfjYgfwsrCDaKLTgB5S8,62118
91
+ agno/knowledge/knowledge.py,sha256=fQxDUufCT42PCMZn0M400swtbsk6nVDvT8N4IKA30X0,63384
92
92
  agno/knowledge/types.py,sha256=zKBJC6xhy2Kl7pxWIhu7txbTAmAPIZlgMPZCbjyU11k,635
93
93
  agno/knowledge/utils.py,sha256=_uhEFtz4p7-cIKffdj5UZ__c-u96rs2UWP6dv5HpOMk,6490
94
94
  agno/knowledge/chunking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -129,11 +129,10 @@ agno/knowledge/reader/firecrawl_reader.py,sha256=SCbcRLkMrUb2WiC6SPuAoZULtHITa2V
129
129
  agno/knowledge/reader/json_reader.py,sha256=KfDgHno_XHORIGaoA1Q2Y5M7nkcTFM9IUzWXkjVjYKQ,3245
130
130
  agno/knowledge/reader/markdown_reader.py,sha256=HoSEkX2Svl2tEMDyzAmRNmwxsterb3i3-1-EQR6N4IU,5272
131
131
  agno/knowledge/reader/pdf_reader.py,sha256=4xx9ErZ4oXMsn4dgde9P9xKR6wogYnUKWJF2UAjAp84,17494
132
- agno/knowledge/reader/reader_factory.py,sha256=2oNnmNNDN7FUW3EbZOiMCryCS59Lswkyn4EMvf0CVlk,9703
132
+ agno/knowledge/reader/reader_factory.py,sha256=g-Z9axqRv1PJliPNnl77y4Qt7ElXD3fq3rbWi85A5tg,9715
133
133
  agno/knowledge/reader/s3_reader.py,sha256=j_xBDWV9l5Uhsr88glQ0dCMS-ijvqw8gdMc1Bzfm394,3547
134
134
  agno/knowledge/reader/text_reader.py,sha256=Vkk3mWhjyazPv77Z9PGO1nRVk8cmVkUFIWZFCVqTkOI,4444
135
- agno/knowledge/reader/url_reader.py,sha256=asvBs4j-Y8S7vfTEQMtP6FNQ65AWzd4eeXUu0j3kGpk,4604
136
- agno/knowledge/reader/web_search_reader.py,sha256=CaHBiMtONrO4HvNbM7NkHAyjLhHVCJZEkmQ5IvITWxQ,14239
135
+ agno/knowledge/reader/web_search_reader.py,sha256=GMc59AxwS1zTyBEmnwzJCEbPmK4ut1eWy8EV5XXTRSk,14585
137
136
  agno/knowledge/reader/website_reader.py,sha256=S2q9ozLPa7NCFZF8iXtIIkn9ECJF_s8b1UAJKYwGLoA,18401
138
137
  agno/knowledge/reader/wikipedia_reader.py,sha256=rTmqpr3IpwioMMZoMx5LLoscR19x6tUhv4aU84o0quk,2085
139
138
  agno/knowledge/reader/youtube_reader.py,sha256=z0Udminq7XkUpob129Oq_8w8SvmRVn0CkXHp2S0KUg4,2986
@@ -147,11 +146,11 @@ agno/knowledge/reranker/sentence_transformer.py,sha256=ZN4SqnMZsUhg5G7AzlONM1_Uj
147
146
  agno/memory/__init__.py,sha256=XWKJU5SJObYZqEKMZ2XYwgH8-YeuWUoSRfT4dEI5HnY,101
148
147
  agno/memory/manager.py,sha256=eCgy4KLVM97x8ypqx1-0hKubbTcwEYrOlzI-rNOinec,42219
149
148
  agno/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
- agno/models/base.py,sha256=8-l9gp0iMdPUplkDaPVtA96x32xXRhhvz9djvr6BxdE,77951
149
+ agno/models/base.py,sha256=pnApr0FSnFVJw5WQwNERz0pC2cRums-AS1xO5pyKkT4,77953
151
150
  agno/models/defaults.py,sha256=1_fe4-ZbNriE8BgqxVRVi4KGzEYxYKYsz4hn6CZNEEM,40
152
- agno/models/message.py,sha256=5Cw8eMYfUjcfl4hc9Zg07Sv4cTOW5OrqtCQMi8Jpr80,12284
151
+ agno/models/message.py,sha256=oIyuIhILNnV86OHYiwh_vWSduQSCVwrqQfjQ4-fqdFs,17633
153
152
  agno/models/metrics.py,sha256=81IILXZwGmOTiWK003bi5mg4bM1f4LCWbwyamjFzp18,4500
154
- agno/models/response.py,sha256=-kAqVSZPO1bIx4FolOCvotGJyQXqXPVLOLIpS9QJ5Oo,3964
153
+ agno/models/response.py,sha256=Tq36PoxFrp-_OA6SZPfM7Kd858kQ6cG4BcIlDUGBlZ8,4168
155
154
  agno/models/utils.py,sha256=PprNlVI8d8loHayjRsrc4TL38sfkFMS3EVZcF5cLXoA,669
156
155
  agno/models/aimlapi/__init__.py,sha256=XQcFRvt4qJ8ol9nCC0XKEkVEDivdNf3nZNoJZMZ5m8M,78
157
156
  agno/models/aimlapi/aimlapi.py,sha256=cc5Dwj38GIy31FbczHkWnKVWNKcHo6cnoeJh26rF6Ws,1455
@@ -205,9 +204,9 @@ agno/models/nvidia/nvidia.py,sha256=pnM6n4JKyPIsTegCJ1mPNxT5xWbdY_8DaA0H0QJDs7s,
205
204
  agno/models/ollama/__init__.py,sha256=TIhwxG7ek3eyfoKTLoZQXwdgzcIngYKjbjSlkf2gkWE,72
206
205
  agno/models/ollama/chat.py,sha256=QGJetMU5qL6oPrI-yFSAMt_rfjb2T0XsquGx6r3z91k,13940
207
206
  agno/models/openai/__init__.py,sha256=OssVgQRpsriU6aJZ3lIp_jFuqvX6y78L4Fd3uTlmI3E,225
208
- agno/models/openai/chat.py,sha256=4YCIzcCGs4uhTBNVH20FwmFNMBizGhHr4AUibwerH98,36317
207
+ agno/models/openai/chat.py,sha256=4cRlD9NAFhmIC81uaun4UbERkHKGMO2nBabh5InoZLo,36444
209
208
  agno/models/openai/like.py,sha256=wmw9PfAVqluBs4MMY73dgjelKn1yl5JDKyCRvaNFjFw,745
210
- agno/models/openai/responses.py,sha256=O-DPhoBY9aFbJc8gB3skYtWhbYespU3QYdJzuW4y1pk,46553
209
+ agno/models/openai/responses.py,sha256=KCFe1K5TLt81WHPQMJY5vbwRaKVZlceat5Mz49RvHJg,47106
211
210
  agno/models/openrouter/__init__.py,sha256=ZpZhNyy_EGSXp58uC9e2iyjnxBctql7GaY8rUG-599I,90
212
211
  agno/models/openrouter/openrouter.py,sha256=Ng-_ztpq_lghGI3tM94nsC8minKhiZ6d265c6IYXtg4,869
213
212
  agno/models/perplexity/__init__.py,sha256=JNmOElDLwcZ9_Lk5owkEdgwmAhaH3YJ-VJqOI8rgp5c,90
@@ -216,6 +215,8 @@ agno/models/portkey/__init__.py,sha256=CjGmltOuDlYfuJgpYHmfRkKiIS9W9MH4oYaGKaNNZ
216
215
  agno/models/portkey/portkey.py,sha256=6jGzRT3QscVZxKJEKWTJSUJg0cmMIGZzdRBWTcw7cIU,2983
217
216
  agno/models/sambanova/__init__.py,sha256=3RiEVJYiYxakKsQAmv4ATEuwT4iAezvHnr5SL1gEWHo,86
218
217
  agno/models/sambanova/sambanova.py,sha256=tRsTWeO0K-RwBvkAwtYfyuaSY_8bV2T-TFk3t8_fmMs,956
218
+ agno/models/siliconflow/__init__.py,sha256=TANxpIdp9mz6LV8YS9FRmy-2GfpgObrPKt19tlmBVj8,94
219
+ agno/models/siliconflow/siliconflow.py,sha256=9VSSET1uULe1nAoD5HDOZzQeTN9Cvzya2e7XIBt2MgY,897
219
220
  agno/models/together/__init__.py,sha256=y6-pgHLEInpJtffjLGHkUWTDpoQNnMlKHa4fstyH6pk,82
220
221
  agno/models/together/together.py,sha256=PXExyXjZS1PYCT5CJ_OaWYUg-AnVlayuSK0Pb-E4GKQ,912
221
222
  agno/models/vercel/__init__.py,sha256=BYQD23dB-dmIXm8iy4S6yxXRW8xg24E9TLOgwckH674,55
@@ -225,20 +226,20 @@ agno/models/vllm/vllm.py,sha256=anBt3gshctbmda-OZJ51tOgbHHemsrSbQLMDqB39HIA,2707
225
226
  agno/models/xai/__init__.py,sha256=ukcCxnCHxTtkJNA2bAMTX4MhCv1wJcbiq8ZIfYczIxs,55
226
227
  agno/models/xai/xai.py,sha256=2BaoRSBxL2KXNqbSOv7iVmKPJIWoEPRh0er_9fu8yfc,4120
227
228
  agno/os/__init__.py,sha256=h8oQu7vhD5RZf09jkyM_Kt1Kdq_d5kFB9gJju8QPwcY,55
228
- agno/os/app.py,sha256=kvI6OeUeTZmHWoBYIO5D6Vh05mIHxeFnCTjxidh4D9c,18613
229
- agno/os/auth.py,sha256=7pC5AseseQzTgsxKRCfO-42v2v7wU_zcxK0yNBIiXSc,1569
229
+ agno/os/app.py,sha256=FuhU3tz2CoWER4cJ4NvFT0UgUE23LHolPUlE1EBSuZI,24636
230
+ agno/os/auth.py,sha256=FyBtAKWtg-qSunCas5m5pK1dVEmikOSZvcCp5r25tTA,1844
230
231
  agno/os/config.py,sha256=u4R9yazQXIcKjR3QzEIZw_XAe_OHp3xn0ff7SVkj2jA,2893
231
232
  agno/os/mcp.py,sha256=5L0TZwInuCWM7TQ7MI_DjMWfVIIB0jxVCqaVEdR62UU,8114
232
- agno/os/router.py,sha256=JVebB0MNYMb-LEHmmiFkyWjGwZ2kWmmMAisrbLwnF-g,58223
233
- agno/os/schema.py,sha256=YeS9Hkfc9tqgDWqDGfDDBigCm87nk21HtoMb6YpCyiM,36879
233
+ agno/os/router.py,sha256=Ic9M3eDS-01zpGHzn1ODR8ox-7B-xe-7xjA7VIb-OAg,61658
234
+ agno/os/schema.py,sha256=n1DseZbkqR_Fy1bFSoog17rljYj3RFLMxUM2r_6gwF4,38222
234
235
  agno/os/settings.py,sha256=Cn5_8lZI8Vx1UaUYqs9h6Qp4IMDFn4f3c35uppiaMy4,1343
235
- agno/os/utils.py,sha256=uEVyNN7Prb3K5YPlHyamdsUt2oimMJRX-oN1yvBpcvg,9307
236
+ agno/os/utils.py,sha256=_UIq19VBwIa09YP7WYLvkX3LYNJLFAtayPvNzEjLG-4,9115
236
237
  agno/os/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
237
238
  agno/os/interfaces/base.py,sha256=NIqG5vCQDaKczcQZWRc9tK1L1v5_wD6haXTHFViMCpo,443
238
239
  agno/os/interfaces/agui/__init__.py,sha256=1zrGICk4roXUINwSFZfqH6sBsbHmD5KjGYVJMGg4fKQ,66
239
240
  agno/os/interfaces/agui/agui.py,sha256=Gf05amiSeDrEfCe7KcQaEJ8Tq9JdX1D7It9hYh1k-a8,902
240
241
  agno/os/interfaces/agui/router.py,sha256=CgHCqNwA3ktUoGmCt0PoaQPX3hJ4rcXOgtXUGQ5sPIU,4335
241
- agno/os/interfaces/agui/utils.py,sha256=HPk01BtNEjpOJe283tlCA6h4wEUzMFG-2LbQU6SXoG4,17940
242
+ agno/os/interfaces/agui/utils.py,sha256=VykZ-SGN5UzBpP5Pv4TmZgMsZRNPgSryO5z5ir48-N0,15892
242
243
  agno/os/interfaces/slack/__init__.py,sha256=F095kOcgiyk_KzIozNNieKwpVc_NR8HYpuO4bKiCNN0,70
243
244
  agno/os/interfaces/slack/router.py,sha256=9FvL12luuzJyTKIO_piQFayHeRAV317JEwUkZ3W9MzY,4034
244
245
  agno/os/interfaces/slack/security.py,sha256=nMbW_0g-G_DEMbCQOD8C3PYrRPIpB2cyM6P-xS6GHYk,917
@@ -248,12 +249,14 @@ agno/os/interfaces/whatsapp/router.py,sha256=48AfJrsmtmGzG32rUrQ76E4kc9F9bSqR4ei
248
249
  agno/os/interfaces/whatsapp/security.py,sha256=WOdjP886O0Wq6CRHSLAv_b39y6pjmn8opPQDSlZf4WA,1735
249
250
  agno/os/interfaces/whatsapp/whatsapp.py,sha256=NpkenUHFhILEZgEIjbicCXq61rdaXhbx5Md1aFy7UjY,837
250
251
  agno/os/routers/__init__.py,sha256=du4LO9aZwiY1t59VcV9M6wiAfftFFlUZc-YXsTGy9LI,97
252
+ agno/os/routers/health.py,sha256=MpJrg488T0m8jU0mtoBNPiLhlR2r2gFihvyZwdQh_oc,725
253
+ agno/os/routers/home.py,sha256=gbqBP2-G5_aFSdsXMdc77jtanI8XSRZ8QcxKjX8_qkw,1717
251
254
  agno/os/routers/evals/__init__.py,sha256=3s0M-Ftg5A3rFyRfTATs-0aNA6wcbj_5tCvtwH9gORQ,87
252
255
  agno/os/routers/evals/evals.py,sha256=zjsgoTCyKbj9clPtTyg3veFFkHNxMBPtcLGuy5Zlnck,16965
253
256
  agno/os/routers/evals/schemas.py,sha256=3Ebm3IrpX22Hg3ZatMRkozgS4TfnMki4_UbqCNtQvJ4,4800
254
- agno/os/routers/evals/utils.py,sha256=rVdywU0YfWqxOynFGJfO2ItJNsFj3AUsj-EnxAYkWvQ,5458
257
+ agno/os/routers/evals/utils.py,sha256=ZdQd5Rz7rBFwMT6Z380cP1MvJG24I_lgTfaQItvva3g,5519
255
258
  agno/os/routers/knowledge/__init__.py,sha256=ZSqMQ8X7C_oYn8xt7NaYlriarWUpHgaWDyHXOWooMaU,105
256
- agno/os/routers/knowledge/knowledge.py,sha256=c6czhUhRTF7jNiCRzLriITzrfREZRlG_V1CWHYjKV94,38649
259
+ agno/os/routers/knowledge/knowledge.py,sha256=nCbVU2aCenIvpbmIIWjupgICO3GHbiD76q81P-lD0r8,38604
257
260
  agno/os/routers/knowledge/schemas.py,sha256=w8XZZsWCVNmd2s_rihq2PDcgXhF7H_yO7WHU_OgY6OU,4397
258
261
  agno/os/routers/memory/__init__.py,sha256=9hrYFc1dkbsLBqKfqyfioQeLX9TTbLrJx6lWDKNNWbc,93
259
262
  agno/os/routers/memory/memory.py,sha256=pi_3omyZ54usHNTVBvkoPwIXBgu1p-Q7s4jYD2wUYYM,16798
@@ -262,7 +265,7 @@ agno/os/routers/metrics/__init__.py,sha256=Uw6wWEikLpF5hHxBkHtFyaTuz7OUerGYWk0JW
262
265
  agno/os/routers/metrics/metrics.py,sha256=0cUsYWlknzTxeAUklswNlWOWl1m7F4NH-mfdv9ex_QY,8021
263
266
  agno/os/routers/metrics/schemas.py,sha256=E7F31CXg9_JiBqeNZWFsZCraShqEHIDD8pDfS4E2oco,1633
264
267
  agno/os/routers/session/__init__.py,sha256=du4LO9aZwiY1t59VcV9M6wiAfftFFlUZc-YXsTGy9LI,97
265
- agno/os/routers/session/session.py,sha256=MHJUxfnNhSTH706Er_E1aRBVo9Hd_bd4baOtRdZkL-4,31026
268
+ agno/os/routers/session/session.py,sha256=ajM-ehfThQTxczwkRpEpo_EkmloeRGNNYWWad6Dth18,31923
266
269
  agno/reasoning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
267
270
  agno/reasoning/azure_ai_foundry.py,sha256=ZCrrQ0wOEO0JNpLxFxp3crqGA9xjBqAcop9xJFlpRng,2600
268
271
  agno/reasoning/deepseek.py,sha256=nEBIs7X-3dzkPWB_0tht5jNCtg61NBdroiaVPeT0pjw,2237
@@ -273,19 +276,19 @@ agno/reasoning/ollama.py,sha256=v-XbtBjjRUZHX9I1ZNZAAb-sv8W_a0hCgkhczz_W4HU,2564
273
276
  agno/reasoning/openai.py,sha256=RkXxZZpr1KykMiDLVdz36d3WKjwlGPucR5RmhU5asHM,3089
274
277
  agno/reasoning/step.py,sha256=6DaOb_0DJRz9Yh1w_mxcRaOSVzIQDrj3lQ6rzHLdIwA,1220
275
278
  agno/run/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
276
- agno/run/agent.py,sha256=1RyQ6QGwTji2s2u76vuuRFmKw-YvJbyHHHCuhmnmMBY,21648
279
+ agno/run/agent.py,sha256=xZ6yZA8T7QEJLDyogbpmTz8GJlRdxznUT1pKzugnGQw,21633
277
280
  agno/run/base.py,sha256=TvIGCos_uNrFpYe8F9j3qWE1YC4-_SW9rxnsFilJvCc,6911
278
281
  agno/run/cancel.py,sha256=yoSj3fnx8D7Gf-fSngVIgd3GOp3tRaDhHH_4QeHDoAk,2667
279
282
  agno/run/messages.py,sha256=rAC4CLW-xBA6qFS1BOvcjJ9j_qYf0a7sX1mcdY04zMU,1126
280
- agno/run/team.py,sha256=z7qsULJfIQ54iikrXyF2fJ_XQDY9Lvc9Bxjf5HSnSOY,22187
281
- agno/run/workflow.py,sha256=3qXN87y5ZYRLD5hgDH4AjW9nbY4w7CWZ2EpzbwLryx0,19786
283
+ agno/run/team.py,sha256=FSgPjfTqyHSNKrrNC0tVGUo-208w27xA9k2PxLYZlfE,22172
284
+ agno/run/workflow.py,sha256=MuNvgDKBoNRsg81S-fw7URt_k36xIOYiL64uWDDHxSg,22624
282
285
  agno/session/__init__.py,sha256=p6eqzWcLSHiMex2yZvkwv2yrFUNdGs21TGMS49xrEC4,376
283
286
  agno/session/agent.py,sha256=0o8QJRc6HclC7X5MjPTSqtRIwuyjJ9un4ck9FK8lBlA,9686
284
287
  agno/session/summary.py,sha256=2a74rDzrOGkWjrFkHQ6gf1dsZBU0_G1lgDE7b3fPaQw,8405
285
- agno/session/team.py,sha256=rZ0pWP2oCqzjLXDzib7nUPMOWLOUM36ZvhvTyGP8Sx0,10213
288
+ agno/session/team.py,sha256=ttb5MquVYEAtcXZNPttcBYgELu2cEwQRknveVyddr-Y,10250
286
289
  agno/session/workflow.py,sha256=8dWTona5jen1iPYwjcvxq1XG5EQDFnd28BEjcbqzl4s,5004
287
290
  agno/team/__init__.py,sha256=toHidBOo5M3n_TIVtIKHgcDbLL9HR-_U-YQYuIt_XtE,847
288
- agno/team/team.py,sha256=Johz7cXmhopZ7gw8cqGB8_EWXZgiGCs-wJpj4Ng9nYA,301415
291
+ agno/team/team.py,sha256=AoTeRtDFI9g2MybcMFc4Z7t5HqEe9s6Xt8jCTsVhsgE,306165
289
292
  agno/tools/__init__.py,sha256=jNll2sELhPPbqm5nPeT4_uyzRO2_KRTW-8Or60kioS0,210
290
293
  agno/tools/agentql.py,sha256=S82Z9aTNr-E5wnA4fbFs76COljJtiQIjf2grjz3CkHU,4104
291
294
  agno/tools/airflow.py,sha256=uf2rOzZpSU64l_qRJ5Raku-R3Gky-uewmYkh6W0-oxg,2610
@@ -314,7 +317,7 @@ agno/tools/desi_vocal.py,sha256=dTeIaD7pabaZxPG9IxtQhaVpC6-A3-4hX4xIt5C7kA4,3661
314
317
  agno/tools/discord.py,sha256=KkqArWVMtwpqOC-fQ7MxHAOAL9-G0CqlXUWgjQNgvOA,5819
315
318
  agno/tools/docker.py,sha256=pk1OXW3Pk318gMoFjV2vXGA0HBc93DLs8eftOM7eRIQ,25837
316
319
  agno/tools/duckdb.py,sha256=cYs1cgMUqZOydYC_ow65mTMSlRoAyws7k-Hx_RfVgrM,14668
317
- agno/tools/duckduckgo.py,sha256=SAwfZX3ZVVdEu68hPWzeu95WK_H3f28-AYKF6AccBVA,3151
320
+ agno/tools/duckduckgo.py,sha256=7IdggRnw6kuhPARRPIjWxrxGOt9TwP4W1oSILFhF_0Y,3474
318
321
  agno/tools/e2b.py,sha256=InuGclzz93kbqWfrXSAtLvpCn-DzwuN1H26lWyUP0qQ,25958
319
322
  agno/tools/eleven_labs.py,sha256=dYdyjxsLL9fLQBwY6_e-bPG-XgSNIB2y91avZskbg_Y,7184
320
323
  agno/tools/email.py,sha256=YmqNngDMDfJn-TCrxGV9IxRh2xcLmxQh7NOuuKTyUwU,2359
@@ -331,7 +334,7 @@ agno/tools/gmail.py,sha256=MlLlEvxHly_2oKAZaKxXDmoHLTbWDSXcjOASGt7RpY8,28067
331
334
  agno/tools/google_bigquery.py,sha256=j0c14CgGK8KvD7eEirsdAx7RSwcfMheugn84ySq6miU,4483
332
335
  agno/tools/google_maps.py,sha256=AqPEIt4u6B2kQtzOnL5PH3RXoefCfjT_Uvm3coAqzaY,9513
333
336
  agno/tools/googlecalendar.py,sha256=s8BPKvDZGeLD2idlQG-vqDqVpza6PupF5AzAElnAK_M,27457
334
- agno/tools/googlesearch.py,sha256=MB2LoNWras9vUXRO0Uyb6wXSulZbuMaPPPEkEOcqfT8,3558
337
+ agno/tools/googlesearch.py,sha256=xRuaEqn7N6JIQC6z9jFuA0Kdtoe5MafGqRMtZ8jW2AQ,3566
335
338
  agno/tools/googlesheets.py,sha256=Xb5y5ka_K3T-ZlYs-aVCl0RC5NFy3GOh7R8SGUb3i-o,14911
336
339
  agno/tools/hackernews.py,sha256=h5w-L5FkGGMAHr6Jjez6164-UYZ_2r2qFAzwMrKLdRM,2776
337
340
  agno/tools/jina.py,sha256=xa0yxcxsSZ1-BzxO3PJKNWnWrv64DxbpvRHTPFXWhC4,4036
@@ -342,9 +345,9 @@ agno/tools/linkup.py,sha256=EzX4_ARW96DkFe1IXAFlPQI5rdhhdhmNTX1tB5IVFWs,2123
342
345
  agno/tools/local_file_system.py,sha256=wWyhM5-lqDgDO_YNzRA8ekG-m2n89k8fWr8M1BWiQWo,3157
343
346
  agno/tools/lumalab.py,sha256=6WnZXbThKY2jL9zLswq1PVsbFm2jz81qshWqBZi59oo,6808
344
347
  agno/tools/mcp.py,sha256=Cdeo9xI1nBnEWOytvWCzka9oiMi7_lPaVcNBWS1uQdw,25396
345
- agno/tools/mem0.py,sha256=50F0WkevC7BUTjGnTxMlaar-Uw-bSusmeav28hdkyXA,7855
348
+ agno/tools/mem0.py,sha256=5W5pZwJmBTt-_l4nvBdNQHavXFSKV9mVdJg5aso4JBI,7680
346
349
  agno/tools/memori.py,sha256=VCZmDFCyp_7c1jPA3dm3OBQHYNZNZ-AhEHBmNyKmIAU,14691
347
- agno/tools/memory.py,sha256=5RPWOaq2GRxHmT3LdMnzuTHoboYA1ZjvGP4Ir-8FEdU,17041
350
+ agno/tools/memory.py,sha256=vpMoKtCqs3m6vkuqmZ4fW9IRf1OhXHQGGaq3exJK0Xo,18449
348
351
  agno/tools/mlx_transcribe.py,sha256=kuiYZAM5ZAdkiOfFdbGJsCb0gacnJRtSTFzuX8eWGLw,6379
349
352
  agno/tools/models_labs.py,sha256=UrjuEOfsXv92ZYsnQJGLQdiVQiRLK4q0CjITbtQ_u7k,7488
350
353
  agno/tools/moviepy_video.py,sha256=ssSIOO16HcdCqZEYy38TWM5c6_ZOnCw-3ZU3kzuM15c,12888
@@ -409,7 +412,7 @@ agno/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
409
412
  agno/utils/audio.py,sha256=kdPMr_wYh-NyxQ-U57hyulK0Y7iIkuVinL9AQ7w64EU,1455
410
413
  agno/utils/certs.py,sha256=Dtqmcwngq6b-27gN7Zsmo9lKlMPYd70UNexLMqpX3BE,683
411
414
  agno/utils/code_execution.py,sha256=JAzcsuUJVO8ZVcD9AgX_O9waBegjhbrHkQZp-YZGsdA,415
412
- agno/utils/common.py,sha256=T2M_nWdww8D-C_oV6NF5LeE1LVCItu7mPG1eEgfqvuM,1266
415
+ agno/utils/common.py,sha256=EJaERgzrJnin1i0Aorv0Sf5y8AfMQWM-8yYhuYtD_4Q,4445
413
416
  agno/utils/dttm.py,sha256=sk7olzbUlMl8ibAGx24sxoP0DGBCnH81VQRYjqIcpDg,289
414
417
  agno/utils/enum.py,sha256=wDHnruIf8cQU-_QdryY9LBugPCrlj-nOabQuEFnmeYM,753
415
418
  agno/utils/env.py,sha256=o8OwKhx78vi8MaXPes10mXejmJ13CqAh7ODKMS1pmcM,438
@@ -435,11 +438,11 @@ agno/utils/response.py,sha256=VfMfRK_m3teMjoEbZaq2nFt5hSmBYrWFaf0VSEuol58,7218
435
438
  agno/utils/response_iterator.py,sha256=MgtadrOuMcw2vJcVvhJdMKRzpVddhLWUIkGFbBz7ZCQ,379
436
439
  agno/utils/safe_formatter.py,sha256=zLrW6O-nGUZvXoDkZOTgVpjeUFTmMUj8pk3FLvW_XjM,809
437
440
  agno/utils/shell.py,sha256=JaY14Fq3ulodG4SeSdLEoOZDI4JJlmCbdgwK5beJuc8,700
438
- agno/utils/streamlit.py,sha256=Y6tVdchba35suA-mru3P3FpMtdjqbnmltLY6ek1k6PA,17704
439
- agno/utils/string.py,sha256=F6yvMIwnD6CJTmui0tARyXakHFjh7610nEtRKAbNd90,6367
441
+ agno/utils/streamlit.py,sha256=Bn2kQLiTKKqyN0VXj0NBN_sz8V1bV5vImoSk1PCi52g,17966
442
+ agno/utils/string.py,sha256=N2BBdn-gvtFjeWAU_FBDpXBzEZxHEhK85DpA1ZiV4p0,7189
440
443
  agno/utils/team.py,sha256=VXdm41WhsC6Rb20fHcpO4H55obQ6R435luAAZ4Jc3yQ,1853
441
444
  agno/utils/timer.py,sha256=Fuax69yh1cVIzCYMmJDB4HpTsPM8Iiq1VaTWz1vJtF8,1282
442
- agno/utils/tools.py,sha256=aBidpfPWd7Q2MtATubbNVerFoPJJVVIBD595H8dTIb0,3834
445
+ agno/utils/tools.py,sha256=YZjA95pSNhHHcyoz5pe-Wo-yh9O2NU4Pqcbhs5kbefY,3842
443
446
  agno/utils/web.py,sha256=JwLKspkLcuFyA19T5tf4-Rs8BGPwTEySp531A3t0sC4,655
444
447
  agno/utils/whatsapp.py,sha256=242VwGOdbgkxVeIj4D899mpT3GnG_IpcaKnd5qebhTA,9936
445
448
  agno/utils/yaml_io.py,sha256=cwTqCE-eBGoi87KLDcwB6iyWe0NcvEmadQjWL1cQ7jE,860
@@ -466,7 +469,7 @@ agno/vectordb/cassandra/cassandra.py,sha256=7DDOuV03bCq8rrkqnnrW_WvGV5vLDPVXKOHN
466
469
  agno/vectordb/cassandra/extra_param_mixin.py,sha256=tCgHnXxuy3Ea4bhrBGkejz9kpgLyM_sUf3QfWcjqzLQ,315
467
470
  agno/vectordb/cassandra/index.py,sha256=9Ea-AoAxCQf2xP-RoIwvujVdzpNBcm2Qgcs4O5D40cU,572
468
471
  agno/vectordb/chroma/__init__.py,sha256=xSNCyxrJJMd37Y9aNumn026ycHrMKxREgEg1zsnCm1c,82
469
- agno/vectordb/chroma/chromadb.py,sha256=uy_phgP6e6QpxkSQMol4-e2T19qtQEGqzFCAUGqmTD8,31493
472
+ agno/vectordb/chroma/chromadb.py,sha256=4pAqrS2JzjC37EpAgx-p0_FrNsEHJirb30bSqXPy30M,31820
470
473
  agno/vectordb/clickhouse/__init__.py,sha256=pcmZRNBEpDznEEpl3NzMZgvVLo8tni3X0FY1G_WXAdc,214
471
474
  agno/vectordb/clickhouse/clickhousedb.py,sha256=IgqlE2X64gzwh4N-jkuW44_laVIvZjwyB-G06GAW_d8,28917
472
475
  agno/vectordb/clickhouse/index.py,sha256=_YW-8AuEYy5kzOHi0zIzjngpQPgJOBdSrn9BfEL4LZU,256
@@ -506,12 +509,12 @@ agno/workflow/condition.py,sha256=JFWPnwEeOIkQWexGYDK9pToPyf_siRCW92rkFdA4yTc,28
506
509
  agno/workflow/loop.py,sha256=cTVkRX5pwfZH5O19Q3W3YS9bcSKmEszkDwfR0V72rV8,30635
507
510
  agno/workflow/parallel.py,sha256=K_fT51xzYLI2k48dafNHH4uki-HoT6H2aNwCSeHWE2c,29859
508
511
  agno/workflow/router.py,sha256=ZAiVsh2F_9ssKj0_RzHWzfgimaZ5hfb3Ni1Xx_SkVR0,26625
509
- agno/workflow/step.py,sha256=ZaP3457D1fd8yM4AO4jx3w11pDYAEhofrUiVA9gak3s,47484
512
+ agno/workflow/step.py,sha256=15vZFN5HlO3IkHqsxkM-2InUzCWC0Ee8BtoJ-OAhS5w,52485
510
513
  agno/workflow/steps.py,sha256=uRE4oGWs2cA-TrX881AEa69zu6rheXH81mNOZiRrNvg,23719
511
514
  agno/workflow/types.py,sha256=ZEFyaKH42261_3yx810ABfi70RUfjPGSwiIep7n53yg,17485
512
- agno/workflow/workflow.py,sha256=U2spltZRzneAcWFqaHVUMSBzC3YKoKfgmZ_M_D5UKjw,110297
513
- agno-2.0.3.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
514
- agno-2.0.3.dist-info/METADATA,sha256=iE4rD6BbXbhe0hcRdVHM4ogjC4Yy9xqr1qe12pqwNDk,21617
515
- agno-2.0.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
516
- agno-2.0.3.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
517
- agno-2.0.3.dist-info/RECORD,,
515
+ agno/workflow/workflow.py,sha256=40t5CqcQk_cRLfQwkUXodCBPEcWMvvQaPPLd-vKB62Y,110539
516
+ agno-2.0.5.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
517
+ agno-2.0.5.dist-info/METADATA,sha256=NITjl8r0ICMENhQha1162KEddPmOzgsh6j8D6fdqTTg,21762
518
+ agno-2.0.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
519
+ agno-2.0.5.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
520
+ agno-2.0.5.dist-info/RECORD,,
@@ -1,128 +0,0 @@
1
- from io import BytesIO
2
- from os.path import basename
3
- from pathlib import Path
4
- from typing import List, Optional
5
- from urllib.parse import urlparse
6
-
7
- import httpx
8
-
9
- from agno.knowledge.chunking.fixed import FixedSizeChunking
10
- from agno.knowledge.chunking.strategy import ChunkingStrategy, ChunkingStrategyType
11
- from agno.knowledge.document.base import Document
12
- from agno.knowledge.reader.base import Reader
13
- from agno.knowledge.reader.csv_reader import CSVReader
14
- from agno.knowledge.reader.pdf_reader import PDFReader
15
- from agno.knowledge.types import ContentType
16
- from agno.utils.http import async_fetch_with_retry, fetch_with_retry
17
- from agno.utils.log import log_debug
18
-
19
-
20
- class URLReader(Reader):
21
- """Reader for general URL content"""
22
-
23
- def __init__(
24
- self, chunking_strategy: Optional[ChunkingStrategy] = FixedSizeChunking(), proxy: Optional[str] = None, **kwargs
25
- ):
26
- super().__init__(chunking_strategy=chunking_strategy, **kwargs)
27
- self.proxy = proxy
28
-
29
- @classmethod
30
- def get_supported_chunking_strategies(self) -> List[ChunkingStrategyType]:
31
- """Get the list of supported chunking strategies for URL readers."""
32
- return [
33
- ChunkingStrategyType.FIXED_SIZE_CHUNKER,
34
- ChunkingStrategyType.AGENTIC_CHUNKER,
35
- ChunkingStrategyType.DOCUMENT_CHUNKER,
36
- ChunkingStrategyType.RECURSIVE_CHUNKER,
37
- ChunkingStrategyType.SEMANTIC_CHUNKER,
38
- ]
39
-
40
- @classmethod
41
- def get_supported_content_types(self) -> List[ContentType]:
42
- return [ContentType.URL]
43
-
44
- def read(
45
- self, url: str, id: Optional[str] = None, name: Optional[str] = None, password: Optional[str] = None
46
- ) -> List[Document]:
47
- if not url:
48
- raise ValueError("No url provided")
49
-
50
- log_debug(f"Reading: {url}")
51
-
52
- # Retry the request up to 3 times with exponential backoff
53
- response = fetch_with_retry(url, proxy=self.proxy)
54
-
55
- documents = self._create_documents(
56
- url=url, text=response.text, content=response.content, id=id, name=name, password=password
57
- )
58
-
59
- if not self.chunk:
60
- return documents
61
-
62
- chunked_documents = []
63
- for document in documents:
64
- chunked_documents.append(self.chunk_document(document))
65
- return [doc for sublist in chunked_documents for doc in sublist]
66
-
67
- async def async_read(
68
- self, url: str, id: Optional[str] = None, name: Optional[str] = None, password: Optional[str] = None
69
- ) -> List[Document]:
70
- """Async version of read method"""
71
- if not url:
72
- raise ValueError("No url provided")
73
-
74
- log_debug(f"Reading async: {url}")
75
- client_args = {"proxy": self.proxy} if self.proxy else {}
76
- async with httpx.AsyncClient(**client_args) as client: # type: ignore
77
- response = await async_fetch_with_retry(url, client=client)
78
-
79
- documents = self._create_documents(
80
- url=url, text=response.text, content=response.content, id=id, name=name, password=password
81
- )
82
-
83
- if not self.chunk:
84
- return documents
85
-
86
- return await self.chunk_documents_async(documents)
87
-
88
- def _create_documents(
89
- self,
90
- url: str,
91
- text: str,
92
- content: bytes,
93
- id: Optional[str] = None,
94
- name: Optional[str] = None,
95
- password: Optional[str] = None,
96
- ) -> List[Document]:
97
- """Helper method to create a document from URL content"""
98
-
99
- # Determine file extension from URL
100
- parsed_url = urlparse(url)
101
- url_path = Path(parsed_url.path) # type: ignore
102
- file_extension = url_path.suffix.lower()
103
-
104
- # Read the document using the appropriate reader
105
- if file_extension == ".csv":
106
- filename = basename(parsed_url.path) or "data.csv"
107
- return CSVReader().read(file=BytesIO(content), name=filename)
108
- elif file_extension == ".pdf":
109
- if password:
110
- return PDFReader().read(pdf=BytesIO(content), name=name, password=password)
111
- else:
112
- return PDFReader().read(pdf=BytesIO(content), name=name)
113
- else:
114
- doc_name = name or parsed_url.path.strip("/").replace("/", "_").replace(" ", "_")
115
- if not doc_name:
116
- doc_name = parsed_url.netloc
117
- if not doc_name:
118
- doc_name = url
119
-
120
- return [
121
- Document(
122
- name=doc_name,
123
- id=id or doc_name,
124
- meta_data={"url": url},
125
- content=text,
126
- size=len(text),
127
- )
128
- ]
File without changes