agno 2.0.8__py3-none-any.whl → 2.0.10__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 (48) hide show
  1. agno/agent/agent.py +13 -8
  2. agno/db/base.py +14 -0
  3. agno/db/dynamo/dynamo.py +107 -27
  4. agno/db/firestore/firestore.py +109 -33
  5. agno/db/gcs_json/gcs_json_db.py +100 -20
  6. agno/db/in_memory/in_memory_db.py +95 -20
  7. agno/db/json/json_db.py +101 -21
  8. agno/db/migrations/v1_to_v2.py +181 -35
  9. agno/db/mongo/mongo.py +251 -26
  10. agno/db/mysql/mysql.py +307 -6
  11. agno/db/postgres/postgres.py +279 -33
  12. agno/db/redis/redis.py +99 -22
  13. agno/db/singlestore/singlestore.py +319 -38
  14. agno/db/sqlite/sqlite.py +339 -23
  15. agno/models/anthropic/claude.py +0 -20
  16. agno/models/aws/claude.py +1 -1
  17. agno/models/huggingface/huggingface.py +2 -1
  18. agno/models/ollama/chat.py +28 -2
  19. agno/models/openai/chat.py +7 -0
  20. agno/models/openai/responses.py +8 -8
  21. agno/os/interfaces/base.py +2 -0
  22. agno/os/interfaces/slack/router.py +50 -10
  23. agno/os/interfaces/slack/slack.py +6 -4
  24. agno/os/interfaces/whatsapp/router.py +7 -4
  25. agno/os/router.py +18 -0
  26. agno/os/utils.py +2 -2
  27. agno/reasoning/azure_ai_foundry.py +2 -2
  28. agno/reasoning/deepseek.py +2 -2
  29. agno/reasoning/groq.py +2 -2
  30. agno/reasoning/ollama.py +2 -2
  31. agno/reasoning/openai.py +2 -2
  32. agno/run/base.py +15 -2
  33. agno/team/team.py +10 -12
  34. agno/tools/mcp_toolbox.py +284 -0
  35. agno/tools/scrapegraph.py +58 -31
  36. agno/tools/whatsapp.py +1 -1
  37. agno/utils/models/claude.py +2 -2
  38. agno/utils/print_response/agent.py +2 -2
  39. agno/utils/print_response/team.py +6 -6
  40. agno/utils/reasoning.py +22 -1
  41. agno/utils/string.py +9 -0
  42. agno/workflow/workflow.py +11 -7
  43. {agno-2.0.8.dist-info → agno-2.0.10.dist-info}/METADATA +4 -1
  44. {agno-2.0.8.dist-info → agno-2.0.10.dist-info}/RECORD +47 -47
  45. agno/utils/models/aws_claude.py +0 -170
  46. {agno-2.0.8.dist-info → agno-2.0.10.dist-info}/WHEEL +0 -0
  47. {agno-2.0.8.dist-info → agno-2.0.10.dist-info}/licenses/LICENSE +0 -0
  48. {agno-2.0.8.dist-info → agno-2.0.10.dist-info}/top_level.txt +0 -0
agno/workflow/workflow.py CHANGED
@@ -136,6 +136,8 @@ class Workflow:
136
136
  user_id: Optional[str] = None
137
137
  # Default session state (stored in the database to persist across runs)
138
138
  session_state: Optional[Dict[str, Any]] = None
139
+ # Set to True to overwrite the stored session_state with the session_state provided in the run
140
+ overwrite_db_session_state: bool = False
139
141
 
140
142
  # If True, the workflow runs in debug mode
141
143
  debug_mode: Optional[bool] = False
@@ -176,6 +178,7 @@ class Workflow:
176
178
  steps: Optional[WorkflowSteps] = None,
177
179
  session_id: Optional[str] = None,
178
180
  session_state: Optional[Dict[str, Any]] = None,
181
+ overwrite_db_session_state: bool = False,
179
182
  user_id: Optional[str] = None,
180
183
  debug_mode: Optional[bool] = False,
181
184
  stream: Optional[bool] = None,
@@ -194,6 +197,7 @@ class Workflow:
194
197
  self.steps = steps
195
198
  self.session_id = session_id
196
199
  self.session_state = session_state
200
+ self.overwrite_db_session_state = overwrite_db_session_state
197
201
  self.user_id = user_id
198
202
  self.debug_mode = debug_mode
199
203
  self.store_events = store_events
@@ -599,8 +603,8 @@ class Workflow:
599
603
  # Update the current metadata with the metadata from the database which is updated in place
600
604
  self.metadata = session.metadata
601
605
 
602
- def _update_session_state(self, session: WorkflowSession, session_state: Dict[str, Any]):
603
- """Load the existing Workflow from a WorkflowSession (from the database)"""
606
+ def _load_session_state(self, session: WorkflowSession, session_state: Dict[str, Any]):
607
+ """Load and return the stored session_state from the database, optionally merging it with the given one"""
604
608
 
605
609
  from agno.utils.merge_dict import merge_dictionaries
606
610
 
@@ -613,6 +617,7 @@ class Workflow:
613
617
  session_state_from_db is not None
614
618
  and isinstance(session_state_from_db, dict)
615
619
  and len(session_state_from_db) > 0
620
+ and not self.overwrite_db_session_state
616
621
  ):
617
622
  # This preserves precedence: run_params > db_state > agent_defaults
618
623
  merged_state = session_state_from_db.copy()
@@ -1406,7 +1411,6 @@ class Workflow:
1406
1411
  logger.info(f"Early termination requested by step {step_name}")
1407
1412
  break
1408
1413
 
1409
-
1410
1414
  # Update the workflow_run_response with completion data
1411
1415
  if collected_step_outputs:
1412
1416
  workflow_run_response.metrics = self._aggregate_workflow_metrics(collected_step_outputs)
@@ -1717,7 +1721,7 @@ class Workflow:
1717
1721
  self._update_metadata(session=workflow_session)
1718
1722
 
1719
1723
  # Update session state from DB
1720
- session_state = self._update_session_state(session=workflow_session, session_state=session_state)
1724
+ session_state = self._load_session_state(session=workflow_session, session_state=session_state)
1721
1725
 
1722
1726
  self._prepare_steps()
1723
1727
 
@@ -1808,7 +1812,7 @@ class Workflow:
1808
1812
  self._update_metadata(session=workflow_session)
1809
1813
 
1810
1814
  # Update session state from DB
1811
- session_state = self._update_session_state(session=workflow_session, session_state=session_state)
1815
+ session_state = self._load_session_state(session=workflow_session, session_state=session_state)
1812
1816
 
1813
1817
  self._prepare_steps()
1814
1818
 
@@ -1968,7 +1972,7 @@ class Workflow:
1968
1972
  self._update_metadata(session=workflow_session)
1969
1973
 
1970
1974
  # Update session state from DB
1971
- session_state = self._update_session_state(session=workflow_session, session_state=session_state)
1975
+ session_state = self._load_session_state(session=workflow_session, session_state=session_state)
1972
1976
 
1973
1977
  log_debug(f"Workflow Run Start: {self.name}", center=True)
1974
1978
 
@@ -2138,7 +2142,7 @@ class Workflow:
2138
2142
  self._update_metadata(session=workflow_session)
2139
2143
 
2140
2144
  # Update session state from DB
2141
- session_state = self._update_session_state(session=workflow_session, session_state=session_state)
2145
+ session_state = self._load_session_state(session=workflow_session, session_state=session_state)
2142
2146
 
2143
2147
  log_debug(f"Async Workflow Run Start: {self.name}", center=True)
2144
2148
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.0.8
3
+ Version: 2.0.10
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
@@ -163,6 +163,8 @@ Requires-Dist: psycopg-binary; extra == "psycopg"
163
163
  Requires-Dist: psycopg; extra == "psycopg"
164
164
  Provides-Extra: reportlab
165
165
  Requires-Dist: reportlab; extra == "reportlab"
166
+ Provides-Extra: scrapegraph
167
+ Requires-Dist: scrapegraph-py; extra == "scrapegraph"
166
168
  Provides-Extra: todoist
167
169
  Requires-Dist: todoist-api-python; extra == "todoist"
168
170
  Provides-Extra: valyu
@@ -300,6 +302,7 @@ Requires-Dist: agno[mcp]; extra == "tools"
300
302
  Requires-Dist: agno[browserbase]; extra == "tools"
301
303
  Requires-Dist: agno[agentql]; extra == "tools"
302
304
  Requires-Dist: agno[opencv]; extra == "tools"
305
+ Requires-Dist: agno[scrapegraph]; extra == "tools"
303
306
  Requires-Dist: agno[valyu]; extra == "tools"
304
307
  Requires-Dist: agno[confluence]; extra == "tools"
305
308
  Requires-Dist: agno[oxylabs]; extra == "tools"
@@ -4,7 +4,7 @@ agno/exceptions.py,sha256=HWuuNFS5J0l1RYJsdUrSx51M22aFEoh9ltoeonXBoBw,2891
4
4
  agno/media.py,sha256=eTfYb_pwhX_PCIVPSrW4VYRqmoxKABEF1aZClrVvQ30,16500
5
5
  agno/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  agno/agent/__init__.py,sha256=s7S3FgsjZxuaabzi8L5n4aSH8IZAiZ7XaNNcySGR-EQ,1051
7
- agno/agent/agent.py,sha256=gc0TG2luSL9bVKrl6ZAhnjJGbFhtkMe-fbT3m_Ul9Us,329973
7
+ agno/agent/agent.py,sha256=jeJp0Nx6z3jabzhWIgJuT9eU24WjKwAAmlrGLNmgBhA,330395
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
@@ -28,41 +28,41 @@ agno/cloud/aws/s3/api_client.py,sha256=nW-Jn8WPILIvdH8niQOPpKMXlAIDB2xYTz0GHRy4P
28
28
  agno/cloud/aws/s3/bucket.py,sha256=5dkKhjWVmf8dyQEyCTd6DkQlKADBnm0-_VKQgKqtJQM,7798
29
29
  agno/cloud/aws/s3/object.py,sha256=ttZPbLm3o63oGIhKgAr_bIf9DOpJlXRmrEVlkbTcJbk,1766
30
30
  agno/db/__init__.py,sha256=bfd_tpKsIKCjZosnFqID26VoWqy88v8gzkf9kLHToY4,625
31
- agno/db/base.py,sha256=POGw6M85Dwt1YD_69KbtB1iuTyrqYl4ZIWU07GO_4yc,7898
31
+ agno/db/base.py,sha256=JYsminwt6x0MuWxmJIEf9AjNl1WkDELKjlGvCJRdHZ4,8482
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=kfuClYY8i8cv2R5hZ4vUayEW4NQsE3YDxnhihF2fz8U,66522
34
+ agno/db/dynamo/dynamo.py,sha256=Gde62hB1qQx62ey_w00-Ap0_LJhnzwTbwvHJegTr_io,69134
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=Gi_eapQORjPJOOTZKIxTejlW1P4NCH6UWQPphTBgzC8,57079
38
+ agno/db/firestore/firestore.py,sha256=izPTOz6u08YQ9sXl7b4x--7wDmSwW1TpWPeefccLpzw,59650
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=1OWdYE-ywsX2TcUzZ_SPIQuJLBrbArKW2yH5DAH48K8,42388
42
+ agno/db/gcs_json/gcs_json_db.py,sha256=1veG3FX1exwTVGzdcMQiM62kctp1S9Sn3QFrh4O06RU,45001
43
43
  agno/db/gcs_json/utils.py,sha256=Ist4HuQoYvC2BKr01oTxDp9mfMirz1UBBDKElbXg2bg,6610
44
44
  agno/db/in_memory/__init__.py,sha256=OvR_FONhOh9PmcRfUA_6gvplZT5UGIBAgVKqVg6SWTA,80
45
- agno/db/in_memory/in_memory_db.py,sha256=qivtyP3ShYMuKFRadGgzbrRyaCElfm511ytiSdqPWcY,35074
45
+ agno/db/in_memory/in_memory_db.py,sha256=L0a8pU5I1HNy_8Uo3lP4BjOOqhUDj021-jxcPohxp0o,37615
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=xIYkb4Fzns5490SOtIdY4wbqIaWbIh87ga6Oscci6ms,42491
48
+ agno/db/json/json_db.py,sha256=fBXdRiP69bHz-FE2LsnFQx0WNatpkjtNfxrebVODhZo,45099
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=m1YbpVk6dTQ3XPW0A3Z29dUgHLbsmFVtPJ8NUi9beJA,18043
51
+ agno/db/migrations/v1_to_v2.py,sha256=bBc96nKf8CjkuhTEdcKdr3hUgPpRMVwE71ozVCnux4c,23969
52
52
  agno/db/mongo/__init__.py,sha256=EPa9QkGNVwnuej72LhZDCeASMXa-e0pR20jsgwa9BhY,63
53
- agno/db/mongo/mongo.py,sha256=jHizCIW4fFYrrzXMGH4rfV4DbP8p7o-WTDP59-ZtQTU,58011
53
+ agno/db/mongo/mongo.py,sha256=xyQUWIyXREmr8jgUopSv2me8euQ2UzJB_Gd1i4Tw7Xc,67840
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=ZmX17ZBMz1UPVTjw0la0HUlsx_zognbRtKBCD3c9Vf4,70291
57
+ agno/db/mysql/mysql.py,sha256=0AEGNs-zXWJ6bsmrcBe6l1ECwwnp9d2xWQcwVqwZ_wU,84350
58
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=FWMke0CJDLxZhxRM_kvS0yAmrfzO8-Y2deeRAFFisuc,69313
61
+ agno/db/postgres/postgres.py,sha256=DWQFM4XgdrFwhqn0FDE5XqiIK36mzmvD3X3ntiyyEJs,80085
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=pkrYNQgzu-N6QqXtgr75UMCsRui3sBluJsDoDqwnxzY,51521
65
+ agno/db/redis/redis.py,sha256=Yg8KAmXZpNO7rKpwhqc6JJeevCCWQo_d1qz_SVJPQJU,54094
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
@@ -72,11 +72,11 @@ agno/db/schemas/memory.py,sha256=kKlJ6AWpbwz-ZJfBJieartPP0QqeeoKAXx2Ity4Yj-Y,146
72
72
  agno/db/schemas/metrics.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
73
  agno/db/singlestore/__init__.py,sha256=dufbaod8ZZIeZIVi0hYJQ8Eu2DfIfWdIy00cpqAsx9U,87
74
74
  agno/db/singlestore/schemas.py,sha256=yDXBGtswAuVxKX1_GvKIBt6IlEor2HiAbYPrwX5SSJ8,5489
75
- agno/db/singlestore/singlestore.py,sha256=3pv_4e9v156_wzCmCKzC4f1wY5_QXkyeUPOx_ge-fa4,69492
75
+ agno/db/singlestore/singlestore.py,sha256=DRRzrlGDfO33s_oGVBb3raX14QUSI9LPA5-6yX1S5KU,82480
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=q6WppFCsD_jYM8qLHWG08fhs8S2moq1jfUNuWitaz3g,68158
79
+ agno/db/sqlite/sqlite.py,sha256=b7Act9wF9H2yH_kkmMovu2tbO88xZikjZFONX11NPdI,83254
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
@@ -155,10 +155,10 @@ agno/models/utils.py,sha256=PprNlVI8d8loHayjRsrc4TL38sfkFMS3EVZcF5cLXoA,669
155
155
  agno/models/aimlapi/__init__.py,sha256=XQcFRvt4qJ8ol9nCC0XKEkVEDivdNf3nZNoJZMZ5m8M,78
156
156
  agno/models/aimlapi/aimlapi.py,sha256=9Qh-b8HvFSvmPP3VBNGT00qy9izHLMWgR-KDQCE5CM0,1493
157
157
  agno/models/anthropic/__init__.py,sha256=nbReX3p17JCwfrMDR9hR7-OaEFZm80I7dng93dl-Fhw,77
158
- agno/models/anthropic/claude.py,sha256=iyMOdfBPuliNHe956ethMJNcu2Uu2Gv99--OjrMmxSo,27200
158
+ agno/models/anthropic/claude.py,sha256=8v9AbtYJmhXF-e6X5yRcRki3xE7GOowLbQh6jeGiei0,26363
159
159
  agno/models/aws/__init__.py,sha256=TbcwQwv9A7KjqBM5RQBR8x46GvyyCxbBCjwkpjfVGKE,352
160
160
  agno/models/aws/bedrock.py,sha256=4H4Y-ZC8nz1Dcag1JxT3orpvzSlHPaNhTy9NXaqCSY8,30919
161
- agno/models/aws/claude.py,sha256=rfBA8RZ5Br8QxmLeXWHBWrj1-KGB4OLj1q740SokcMU,14750
161
+ agno/models/aws/claude.py,sha256=sL47z9fM3jxGbARkr0mlAVYEKKX854J3u-Qeb5gIADo,14746
162
162
  agno/models/azure/__init__.py,sha256=EoFdJHjayvmv_VOmaW9cJguwA1K5OFS_nFeazyn0B2w,605
163
163
  agno/models/azure/ai_foundry.py,sha256=V75lk4pH_RVFzVhWYz9-ZSA3dcaQe2SpRF1lrAm_agw,18673
164
164
  agno/models/azure/openai_chat.py,sha256=RYHmcHA7cn79_U6GTjNP5vYiYET6IfPgUp6XZ2WEiyQ,4423
@@ -182,7 +182,7 @@ agno/models/google/gemini.py,sha256=UDyF4jzeT63pS2BrrFJcqARcaqd8WrLEb-B-KnyZeO4,
182
182
  agno/models/groq/__init__.py,sha256=gODf5IA4yJKlwTEYsUywmA-dsiQVyL2_yWMc8VncdVU,66
183
183
  agno/models/groq/groq.py,sha256=hByU97lwb9HBsFgDHZsq2_a3dvT-X8QIO-qmLsD4ePY,22121
184
184
  agno/models/huggingface/__init__.py,sha256=VgdYkgSHqsFLhvJ9lSUCyEZfest8hbCAUpWU6WCk-_c,94
185
- agno/models/huggingface/huggingface.py,sha256=ryBIvKYJ7ubvR0e9szXFS_RN5-LuYQUUcbHSJTx57P0,19840
185
+ agno/models/huggingface/huggingface.py,sha256=Kt_2UeXF2dCbxnsuNt8F_Hezq_WR9kvySltp3U_OrrM,19877
186
186
  agno/models/ibm/__init__.py,sha256=jwrz0JL4pd1cAPN7wLi51qgQfOB8kUIhFjs_oEc4NWc,74
187
187
  agno/models/ibm/watsonx.py,sha256=GkMfe68DunLMVQ4wtox8Y-LzagPN5mz4hd0Z_vXS1tM,16007
188
188
  agno/models/internlm/__init__.py,sha256=88O1Vb6HuNls8KDUOKuQdKF_3iG9wI3uc56Xy-qBoMI,75
@@ -208,11 +208,11 @@ agno/models/nexus/nexus.py,sha256=rJcBQXR1aqUiLWMPBRuHIEh87wVrsqXup1hr_smanBQ,63
208
208
  agno/models/nvidia/__init__.py,sha256=O0g3_0_ciOz0AH4Y4CAL7YRfhdDPAvhDzNjJmgWKT78,74
209
209
  agno/models/nvidia/nvidia.py,sha256=0vpEq4cBY_5JdBzGoD95rBdro6dpVNAV5ioKz3lpnfs,948
210
210
  agno/models/ollama/__init__.py,sha256=TIhwxG7ek3eyfoKTLoZQXwdgzcIngYKjbjSlkf2gkWE,72
211
- agno/models/ollama/chat.py,sha256=izI5VgfT4J319DKeLEeWvvdUy4-z1noyJ0cQvTNxu1I,14977
211
+ agno/models/ollama/chat.py,sha256=jGDjLi6aeJdLCG8ITxnp0r_E7eoWT5qOZWbM9GmzuyU,16005
212
212
  agno/models/openai/__init__.py,sha256=OssVgQRpsriU6aJZ3lIp_jFuqvX6y78L4Fd3uTlmI3E,225
213
- agno/models/openai/chat.py,sha256=ziDp_zOPZWZI5vpBhza3CZPv4SMeVeAi6UdtAGjzmVQ,36362
213
+ agno/models/openai/chat.py,sha256=sZ6gDrXun7GLkksLWHA1f6bCkxgHGA96Bo8xz0gx5GA,36800
214
214
  agno/models/openai/like.py,sha256=wmw9PfAVqluBs4MMY73dgjelKn1yl5JDKyCRvaNFjFw,745
215
- agno/models/openai/responses.py,sha256=46o9Yu0Vo6ILVGn5dELYAmI4jhdtsmn8Y0ZClezDq58,47167
215
+ agno/models/openai/responses.py,sha256=tOxgILr9GZVJRCQX1fJYG7p06pBe2-h7fASjr7YdxHA,47109
216
216
  agno/models/openrouter/__init__.py,sha256=ZpZhNyy_EGSXp58uC9e2iyjnxBctql7GaY8rUG-599I,90
217
217
  agno/models/openrouter/openrouter.py,sha256=FX0P9mPEHyTuiVQNs-c84Ehy0RIGEmvdy6WM_-KhxUQ,907
218
218
  agno/models/perplexity/__init__.py,sha256=JNmOElDLwcZ9_Lk5owkEdgwmAhaH3YJ-VJqOI8rgp5c,90
@@ -236,22 +236,22 @@ agno/os/app.py,sha256=acPtlVPAlrdsg6L2QC73SpaaX68-hsWn9X0RH9WNx7Q,24457
236
236
  agno/os/auth.py,sha256=FyBtAKWtg-qSunCas5m5pK1dVEmikOSZvcCp5r25tTA,1844
237
237
  agno/os/config.py,sha256=u4R9yazQXIcKjR3QzEIZw_XAe_OHp3xn0ff7SVkj2jA,2893
238
238
  agno/os/mcp.py,sha256=5L0TZwInuCWM7TQ7MI_DjMWfVIIB0jxVCqaVEdR62UU,8114
239
- agno/os/router.py,sha256=LSWu6jCnDxo8JV02fFi9bhXEWh47PYJmWWYLAlOlfQM,61695
239
+ agno/os/router.py,sha256=IFgQCyx16MHHA2UAqr1T8I2_dKJ_QqmOOYdnGjWABHE,62517
240
240
  agno/os/schema.py,sha256=bdmGLQoBJyetiAZeajJG_gEKLaQSSEwiDwKy0q4Pa-M,38278
241
241
  agno/os/settings.py,sha256=Cn5_8lZI8Vx1UaUYqs9h6Qp4IMDFn4f3c35uppiaMy4,1343
242
- agno/os/utils.py,sha256=MdUJ214ua4ClMg1XjwLIef-sKA7pm8zYms6IOgpYJg0,10790
242
+ agno/os/utils.py,sha256=tOszvSQPXbbYCLOWBPsCnHGbELKw0i6mVahxmEzddhI,10810
243
243
  agno/os/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
244
- agno/os/interfaces/base.py,sha256=NIqG5vCQDaKczcQZWRc9tK1L1v5_wD6haXTHFViMCpo,443
244
+ agno/os/interfaces/base.py,sha256=giU0y-egtXLqokN1HQyQIWl4NBawTk_ua7ytKGFmZRc,527
245
245
  agno/os/interfaces/agui/__init__.py,sha256=1zrGICk4roXUINwSFZfqH6sBsbHmD5KjGYVJMGg4fKQ,66
246
246
  agno/os/interfaces/agui/agui.py,sha256=-KiJaM-IkL9QI9UNzyWqO-uQxdQxsZJnV5aNFmDPcN4,898
247
247
  agno/os/interfaces/agui/router.py,sha256=CgHCqNwA3ktUoGmCt0PoaQPX3hJ4rcXOgtXUGQ5sPIU,4335
248
248
  agno/os/interfaces/agui/utils.py,sha256=bfWxYh2w2O3aroRlaOc2f4ZJXEVavya1IqvCntqY9Xw,19162
249
249
  agno/os/interfaces/slack/__init__.py,sha256=F095kOcgiyk_KzIozNNieKwpVc_NR8HYpuO4bKiCNN0,70
250
- agno/os/interfaces/slack/router.py,sha256=9FvL12luuzJyTKIO_piQFayHeRAV317JEwUkZ3W9MzY,4034
250
+ agno/os/interfaces/slack/router.py,sha256=RuD0Y0YOdlyqaj37W5outpM7dHTlEX6R63V4IrETSYc,5710
251
251
  agno/os/interfaces/slack/security.py,sha256=nMbW_0g-G_DEMbCQOD8C3PYrRPIpB2cyM6P-xS6GHYk,917
252
- agno/os/interfaces/slack/slack.py,sha256=GIW70TpVPlVzd6EYA8HtUhE9aj9S4UyIOIqdDgBxNJU,879
252
+ agno/os/interfaces/slack/slack.py,sha256=hBW_n3WDdt9q3Ptbd1gB4Kr9iOX7LBD8zQvMuiyEEro,1042
253
253
  agno/os/interfaces/whatsapp/__init__.py,sha256=-sD2W00qj8hrx72ATVMtaDc7GfAsaCQJMlnRjYPwisg,82
254
- agno/os/interfaces/whatsapp/router.py,sha256=48AfJrsmtmGzG32rUrQ76E4kc9F9bSqR4ei21VQRvPc,9620
254
+ agno/os/interfaces/whatsapp/router.py,sha256=pcB2CAxGsfVIr5z0YvFGYk6LVaBdUmgE5JHJpprSgo8,9721
255
255
  agno/os/interfaces/whatsapp/security.py,sha256=WOdjP886O0Wq6CRHSLAv_b39y6pjmn8opPQDSlZf4WA,1735
256
256
  agno/os/interfaces/whatsapp/whatsapp.py,sha256=lPWPsfK-fenpdWPYPKwXOYzev-tE44H1-LwqCSsExRA,833
257
257
  agno/os/routers/__init__.py,sha256=du4LO9aZwiY1t59VcV9M6wiAfftFFlUZc-YXsTGy9LI,97
@@ -273,17 +273,17 @@ agno/os/routers/metrics/schemas.py,sha256=E7F31CXg9_JiBqeNZWFsZCraShqEHIDD8pDfS4
273
273
  agno/os/routers/session/__init__.py,sha256=du4LO9aZwiY1t59VcV9M6wiAfftFFlUZc-YXsTGy9LI,97
274
274
  agno/os/routers/session/session.py,sha256=ajM-ehfThQTxczwkRpEpo_EkmloeRGNNYWWad6Dth18,31923
275
275
  agno/reasoning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
276
- agno/reasoning/azure_ai_foundry.py,sha256=ZCrrQ0wOEO0JNpLxFxp3crqGA9xjBqAcop9xJFlpRng,2600
277
- agno/reasoning/deepseek.py,sha256=nEBIs7X-3dzkPWB_0tht5jNCtg61NBdroiaVPeT0pjw,2237
276
+ agno/reasoning/azure_ai_foundry.py,sha256=VL7DmFpuYMf_gLFAZ9kUCS7Zb3pNhDaEingRZcyUdQY,2594
277
+ agno/reasoning/deepseek.py,sha256=Xj_QkaN9ivbtD_IMojd_hlLBijdnyi8fQd3Iz1k9-hQ,2231
278
278
  agno/reasoning/default.py,sha256=KFOhfgz9ERICRpKakow60SYIRlF7LIrM7fp0TLHma4w,5318
279
- agno/reasoning/groq.py,sha256=B4Ha6QuLwyOEp6V3lyUDv8xDadS_XCJTEw9WyCyMd2A,2644
279
+ agno/reasoning/groq.py,sha256=1rV_-RTy924U3uTshN7fja1E4fiCbx8HYGxuWGjGGcQ,2638
280
280
  agno/reasoning/helpers.py,sha256=77gce_FQDGGVwM1-j5Zc_ds5FRZy9l7EcH2cp0WkJrI,2153
281
- agno/reasoning/ollama.py,sha256=v-XbtBjjRUZHX9I1ZNZAAb-sv8W_a0hCgkhczz_W4HU,2564
282
- agno/reasoning/openai.py,sha256=RkXxZZpr1KykMiDLVdz36d3WKjwlGPucR5RmhU5asHM,3089
281
+ agno/reasoning/ollama.py,sha256=hJPmpBD07W6SOphkg-EifLYqosM330fxv-SbeEhoG74,2558
282
+ agno/reasoning/openai.py,sha256=8c4_tVVvY3shx9YEHSMP3qAgcQsOzpvpYXQEE2hDfzU,3083
283
283
  agno/reasoning/step.py,sha256=6DaOb_0DJRz9Yh1w_mxcRaOSVzIQDrj3lQ6rzHLdIwA,1220
284
284
  agno/run/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
285
285
  agno/run/agent.py,sha256=OmcTPaq466DURhZ2sBd6c4MtwR-7ZyOzwWdSBoVMrzM,22416
286
- agno/run/base.py,sha256=TvIGCos_uNrFpYe8F9j3qWE1YC4-_SW9rxnsFilJvCc,6911
286
+ agno/run/base.py,sha256=z335BSg_-H5ZdM5WpdIYwRe5KysFKaafaW2nCLVMVaA,7481
287
287
  agno/run/cancel.py,sha256=yoSj3fnx8D7Gf-fSngVIgd3GOp3tRaDhHH_4QeHDoAk,2667
288
288
  agno/run/messages.py,sha256=rAC4CLW-xBA6qFS1BOvcjJ9j_qYf0a7sX1mcdY04zMU,1126
289
289
  agno/run/team.py,sha256=J-ZsMIMe-xLMgjAWgMRiSREqn8gJ6uKPQsKLo3RUdNU,22935
@@ -294,7 +294,7 @@ agno/session/summary.py,sha256=2a74rDzrOGkWjrFkHQ6gf1dsZBU0_G1lgDE7b3fPaQw,8405
294
294
  agno/session/team.py,sha256=ckz-h_sYoFEbqLmNYglS0mamI9QzLfh-2ixsrHW6lU0,10383
295
295
  agno/session/workflow.py,sha256=8dWTona5jen1iPYwjcvxq1XG5EQDFnd28BEjcbqzl4s,5004
296
296
  agno/team/__init__.py,sha256=toHidBOo5M3n_TIVtIKHgcDbLL9HR-_U-YQYuIt_XtE,847
297
- agno/team/team.py,sha256=BShduFtMOVDvp7nT5sEHu3GKos43vNIhsmYKHS0EWdo,315086
297
+ agno/team/team.py,sha256=UmVMAPLHqwoW2x2BR4KrjHsJ2emd9dQ989TVNE3-WMw,315032
298
298
  agno/tools/__init__.py,sha256=jNll2sELhPPbqm5nPeT4_uyzRO2_KRTW-8Or60kioS0,210
299
299
  agno/tools/agentql.py,sha256=S82Z9aTNr-E5wnA4fbFs76COljJtiQIjf2grjz3CkHU,4104
300
300
  agno/tools/airflow.py,sha256=uf2rOzZpSU64l_qRJ5Raku-R3Gky-uewmYkh6W0-oxg,2610
@@ -352,6 +352,7 @@ agno/tools/linkup.py,sha256=EzX4_ARW96DkFe1IXAFlPQI5rdhhdhmNTX1tB5IVFWs,2123
352
352
  agno/tools/local_file_system.py,sha256=wWyhM5-lqDgDO_YNzRA8ekG-m2n89k8fWr8M1BWiQWo,3157
353
353
  agno/tools/lumalab.py,sha256=6WnZXbThKY2jL9zLswq1PVsbFm2jz81qshWqBZi59oo,6808
354
354
  agno/tools/mcp.py,sha256=Zox_N0Uv6xRS_rA0pV_nSpQxTbQAiQfSBEOJGGcJnfM,26361
355
+ agno/tools/mcp_toolbox.py,sha256=HOCerjBTTcJ3WnWwkMNlk5zkAAUFUUB-jHTZ6CvApX0,12622
355
356
  agno/tools/mem0.py,sha256=5W5pZwJmBTt-_l4nvBdNQHavXFSKV9mVdJg5aso4JBI,7680
356
357
  agno/tools/memori.py,sha256=tubBYj0rQFbBXadhWxwTjjmb3Rnims536AVPkGdCMcw,13181
357
358
  agno/tools/memory.py,sha256=vpMoKtCqs3m6vkuqmZ4fW9IRf1OhXHQGGaq3exJK0Xo,18449
@@ -374,7 +375,7 @@ agno/tools/reasoning.py,sha256=5k2D89s0mAqJGo5AVBM6XDvJHjfun3GqollhVkZ6rxk,12581
374
375
  agno/tools/reddit.py,sha256=F6lUJFAoQmuZMqppauMteF1BprDj8mpu-lVd1reUJTk,18632
375
376
  agno/tools/replicate.py,sha256=xVh6F2OCjIuCT8qt_ryzHb46ZctQ3_9bQhXQ5-HrzYQ,4459
376
377
  agno/tools/resend.py,sha256=TKsb5W_Yj0SaVBFL2ySACkehIW6bPnQ9GzYwldfordo,1990
377
- agno/tools/scrapegraph.py,sha256=1_-GBuj8vvOfd0_KGjI70uE5drSq5592jdtb-vmBJX8,7388
378
+ agno/tools/scrapegraph.py,sha256=ErKegx2YzPxOjuwFcmqAUSwisYEX_D84ydgeB_ufgfM,8366
378
379
  agno/tools/searxng.py,sha256=aNDeYhBcCeLXj9q8DiD3KlwMIpJB1oQElBn61s6B-x8,4962
379
380
  agno/tools/serpapi.py,sha256=3jTBH93OiN7LvS7zJt4xOhkNsNd_SADHLKzQKDckh2s,3925
380
381
  agno/tools/serper.py,sha256=r_77s2X5-uPD-G-iwpzrHjzFGG_Oz-4YEaxqDZAZqvo,9061
@@ -398,7 +399,7 @@ agno/tools/webbrowser.py,sha256=UuU3I7ynFHUAjAh4Dz6OyXTsfqW8Qjl9hKhc1I0j29o,856
398
399
  agno/tools/webex.py,sha256=8YKxNzinm9sym906KOWOfgX1kXBkKs0j6PQdEXgNib4,2548
399
400
  agno/tools/website.py,sha256=jzcXLEsCfGIEqV88OLePiCEjfDoAbXQDCPAr9JbP8cU,1798
400
401
  agno/tools/webtools.py,sha256=5Dyp8U2ov32DkJMpj-7plzQZcfnCL7wlXbQIfRh8jmw,1305
401
- agno/tools/whatsapp.py,sha256=DEmsThVDl7OvdkEUmSKISwkyG43Lh02EpkHpSXs83oA,11048
402
+ agno/tools/whatsapp.py,sha256=DaDyNogtbgrinJohfU7CmVQJSZsZO-00XUbRJegN_eE,11055
402
403
  agno/tools/wikipedia.py,sha256=u6xhc5wkEGcjng4leVCmo28o6Ti7OzDgRqiOqTMnmoc,2277
403
404
  agno/tools/workflow.py,sha256=PQIGffLe_bQI5EjYWG2FLV21-cFhTUVs-1KSxAX6az4,12638
404
405
  agno/tools/x.py,sha256=gaFCel9FyDPnKLL03nkjsc9NGsfQOsS92XByp3hdwMo,14495
@@ -440,13 +441,13 @@ agno/utils/openai.py,sha256=quhHsggz0uSZc9Lt-aVsveHSS1LT2r1fMgC0IpG43Tg,10300
440
441
  agno/utils/pickle.py,sha256=Ip6CPNxAWF3MVrUhMTW7e3IcpKhYG0IA-NKbdUYr94c,1008
441
442
  agno/utils/pprint.py,sha256=aTg3gfib3x3VK3E-xJrbBeufK7s77ebTVtWoa2VrYgU,7762
442
443
  agno/utils/prompts.py,sha256=Bvvl0yosp6drt1zqHDlDKYIdTSdrZw-KGJ_-TC-78zY,5653
443
- agno/utils/reasoning.py,sha256=xrwAIL-tdxjG4LVQRzm6C_F7sTgEJQm-35tnG05QDJQ,3099
444
+ agno/utils/reasoning.py,sha256=pW5y674EjJ-R6IX8Fyxi_vN9xLG5dLkujPpcfSVL1jU,3862
444
445
  agno/utils/response.py,sha256=VfMfRK_m3teMjoEbZaq2nFt5hSmBYrWFaf0VSEuol58,7218
445
446
  agno/utils/response_iterator.py,sha256=MgtadrOuMcw2vJcVvhJdMKRzpVddhLWUIkGFbBz7ZCQ,379
446
447
  agno/utils/safe_formatter.py,sha256=zLrW6O-nGUZvXoDkZOTgVpjeUFTmMUj8pk3FLvW_XjM,809
447
448
  agno/utils/shell.py,sha256=JaY14Fq3ulodG4SeSdLEoOZDI4JJlmCbdgwK5beJuc8,700
448
449
  agno/utils/streamlit.py,sha256=Bn2kQLiTKKqyN0VXj0NBN_sz8V1bV5vImoSk1PCi52g,17966
449
- agno/utils/string.py,sha256=N2BBdn-gvtFjeWAU_FBDpXBzEZxHEhK85DpA1ZiV4p0,7189
450
+ agno/utils/string.py,sha256=iO1etmjHVxnPMTixAKlpR1vnBnRapYL2pm_cjhS06Ww,7557
450
451
  agno/utils/team.py,sha256=VXdm41WhsC6Rb20fHcpO4H55obQ6R435luAAZ4Jc3yQ,1853
451
452
  agno/utils/timer.py,sha256=Fuax69yh1cVIzCYMmJDB4HpTsPM8Iiq1VaTWz1vJtF8,1282
452
453
  agno/utils/tools.py,sha256=YZjA95pSNhHHcyoz5pe-Wo-yh9O2NU4Pqcbhs5kbefY,3842
@@ -455,8 +456,7 @@ agno/utils/whatsapp.py,sha256=242VwGOdbgkxVeIj4D899mpT3GnG_IpcaKnd5qebhTA,9936
455
456
  agno/utils/yaml_io.py,sha256=cwTqCE-eBGoi87KLDcwB6iyWe0NcvEmadQjWL1cQ7jE,860
456
457
  agno/utils/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
457
458
  agno/utils/models/ai_foundry.py,sha256=PmhETWhdqZCq8NbDe-MdZVuRXx6DbVOePCyPFiPLceo,1511
458
- agno/utils/models/aws_claude.py,sha256=d0PWNNVHiA8Kzg_RzOEvNNkmOsmSzWxOnlA86uLtnQE,5680
459
- agno/utils/models/claude.py,sha256=QYnARhGrLSvP2kfFCa7t-hnaZdU9Nby-B-21ocT9_rA,11293
459
+ agno/utils/models/claude.py,sha256=XkRS4XVIDJt440SlzQFemrIDpIsOs39AvK1fjyMuruU,11229
460
460
  agno/utils/models/cohere.py,sha256=wir2K9u4RmOwq7T7n_2UPZFHfwmnrt_u91Psd_DFqdE,3266
461
461
  agno/utils/models/llama.py,sha256=Z5fdOFUFnov1JgUDcP6ICK3M7o64UB1fkcwAs2XaZkM,2515
462
462
  agno/utils/models/mistral.py,sha256=SVcJ8Q8SFeadNwCr8BARbET0gvGiylmaDKzcSJ9kWq0,4189
@@ -464,8 +464,8 @@ agno/utils/models/openai_responses.py,sha256=63f2UgDFCzrr6xQITrGtn42UUHQBcZFUUFM
464
464
  agno/utils/models/schema_utils.py,sha256=L6TkraMClI471H6xYy7V81lhHR4qQloVKCN0bF4Ajw0,5047
465
465
  agno/utils/models/watsonx.py,sha256=fe6jN0hBvOCQurqjS6_9PIwDHt-4kVod9qW236Zs6DU,1496
466
466
  agno/utils/print_response/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
467
- agno/utils/print_response/agent.py,sha256=Sb21YnoW5e1KzOr4rJjhxAaIKaSVrbxd8J1hSSfiPMQ,33929
468
- agno/utils/print_response/team.py,sha256=5wtmcVlMW1s-qQ0iS7GNH1s5jn3RvkI_2Pwby4Ew4ys,76835
467
+ agno/utils/print_response/agent.py,sha256=IFS_iyKee02krwOiXe452TdFwqscVhxzy82hES08Mzw,33967
468
+ agno/utils/print_response/team.py,sha256=dt-nvTk1E8wDdd1BFetzNT5igTDE7TdjzuQ-TpAkanQ,76949
469
469
  agno/utils/print_response/workflow.py,sha256=qzI09OFS-f4tua27tBXhmle0ezQGFiC6s5IPgPvTq9I,66499
470
470
  agno/vectordb/__init__.py,sha256=P0QP9PUC4j2JtWIfYJX7LeC-oiPuh_QsUaOaP1ZY_dI,64
471
471
  agno/vectordb/base.py,sha256=y5kqBiIp2atgcvV-_NXNXcX6NZFqJZibBaqbkWhtFTk,3054
@@ -519,9 +519,9 @@ agno/workflow/router.py,sha256=ZAiVsh2F_9ssKj0_RzHWzfgimaZ5hfb3Ni1Xx_SkVR0,26625
519
519
  agno/workflow/step.py,sha256=15vZFN5HlO3IkHqsxkM-2InUzCWC0Ee8BtoJ-OAhS5w,52485
520
520
  agno/workflow/steps.py,sha256=uRE4oGWs2cA-TrX881AEa69zu6rheXH81mNOZiRrNvg,23719
521
521
  agno/workflow/types.py,sha256=ZEFyaKH42261_3yx810ABfi70RUfjPGSwiIep7n53yg,17485
522
- agno/workflow/workflow.py,sha256=LhXJ58bCuBnr7NbCgeyhiA_Y6vu5nRzErAHRI4euDgY,112399
523
- agno-2.0.8.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
524
- agno-2.0.8.dist-info/METADATA,sha256=oxhfUVv93ZK-kJTolNwlmetMOAeQI32Rdz76ig_ZzVI,21884
525
- agno-2.0.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
526
- agno-2.0.8.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
527
- agno-2.0.8.dist-info/RECORD,,
522
+ agno/workflow/workflow.py,sha256=yjjVZ0MvkLjGgVaVt8jFWlm2urx7zZdAuJ0We9KRu2U,112738
523
+ agno-2.0.10.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
524
+ agno-2.0.10.dist-info/METADATA,sha256=PKHm3CQY3sd9WdY5O1VGJyQyVeza95ICLnS3lhPuIA0,22018
525
+ agno-2.0.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
526
+ agno-2.0.10.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
527
+ agno-2.0.10.dist-info/RECORD,,
@@ -1,170 +0,0 @@
1
- import json
2
- from typing import Any, Dict, List, Optional, Tuple
3
-
4
- from agno.media import Image
5
- from agno.models.message import Message
6
- from agno.utils.log import log_error, log_warning
7
-
8
- try:
9
- from anthropic.types import (
10
- TextBlock,
11
- ToolUseBlock,
12
- )
13
- except ImportError:
14
- log_error("`anthropic[bedrock]` not installed. Please install it via `pip install anthropic[bedrock]`.")
15
- raise
16
-
17
- ROLE_MAP = {
18
- "system": "system",
19
- "user": "user",
20
- "assistant": "assistant",
21
- "tool": "user",
22
- }
23
-
24
-
25
- def _format_image_for_message(image: Image) -> Optional[Dict[str, Any]]:
26
- """
27
- Add an image to a message by converting it to base64 encoded format.
28
- """
29
- using_filetype = False
30
-
31
- import base64
32
-
33
- # 'imghdr' was deprecated in Python 3.11: https://docs.python.org/3/library/imghdr.html
34
- # 'filetype' used as a fallback
35
- try:
36
- import imghdr
37
- except (ModuleNotFoundError, ImportError):
38
- try:
39
- import filetype
40
-
41
- using_filetype = True
42
- except (ModuleNotFoundError, ImportError):
43
- raise ImportError("`filetype` not installed. Please install using `pip install filetype`")
44
-
45
- type_mapping = {
46
- "jpeg": "image/jpeg",
47
- "jpg": "image/jpeg",
48
- "png": "image/png",
49
- "gif": "image/gif",
50
- "webp": "image/webp",
51
- }
52
-
53
- try:
54
- # Case 1: Image is a URL
55
- if image.url is not None:
56
- content_bytes = image.get_content_bytes() # type: ignore
57
-
58
- # Case 2: Image is a local file path
59
- elif image.filepath is not None:
60
- from pathlib import Path
61
-
62
- path = Path(image.filepath) if isinstance(image.filepath, str) else image.filepath
63
- if path.exists() and path.is_file():
64
- with open(image.filepath, "rb") as f:
65
- content_bytes = f.read()
66
- else:
67
- log_error(f"Image file not found: {image}")
68
- return None
69
-
70
- # Case 3: Image is a bytes object
71
- elif image.content is not None:
72
- content_bytes = image.content
73
-
74
- else:
75
- log_error(f"Unsupported image type: {type(image)}")
76
- return None
77
-
78
- if using_filetype:
79
- kind = filetype.guess(content_bytes)
80
- if not kind:
81
- log_error("Unable to determine image type")
82
- return None
83
-
84
- img_type = kind.extension
85
- else:
86
- img_type = imghdr.what(None, h=content_bytes) # type: ignore
87
-
88
- if not img_type:
89
- log_error("Unable to determine image type")
90
- return None
91
-
92
- media_type = type_mapping.get(img_type)
93
- if not media_type:
94
- log_error(f"Unsupported image type: {img_type}")
95
- return None
96
-
97
- return {
98
- "type": "image",
99
- "source": {
100
- "type": "base64",
101
- "media_type": media_type,
102
- "data": base64.b64encode(content_bytes).decode("utf-8"), # type: ignore
103
- },
104
- }
105
-
106
- except Exception as e:
107
- log_error(f"Error processing image: {e}")
108
- return None
109
-
110
-
111
- def format_messages(messages: List[Message]) -> Tuple[List[Dict[str, str]], str]:
112
- """
113
- Process the list of messages and separate them into API messages and system messages.
114
-
115
- Args:
116
- messages (List[Message]): The list of messages to process.
117
-
118
- Returns:
119
- Tuple[List[Dict[str, str]], str]: A tuple containing the list of API messages and the concatenated system messages.
120
- """
121
-
122
- chat_messages: List[Dict[str, str]] = []
123
- system_messages: List[str] = []
124
-
125
- for message in messages:
126
- content = message.content or ""
127
- if message.role == "system":
128
- if content is not None:
129
- system_messages.append(content) # type: ignore
130
- continue
131
- elif message.role == "user":
132
- if isinstance(content, str):
133
- content = [{"type": "text", "text": content}]
134
-
135
- if message.images is not None:
136
- for image in message.images:
137
- image_content = _format_image_for_message(image)
138
- if image_content:
139
- content.append(image_content)
140
-
141
- if message.files is not None and len(message.files) > 0:
142
- log_warning("Files are not supported for AWS Bedrock Claude")
143
-
144
- if message.audio is not None and len(message.audio) > 0:
145
- log_warning("Audio is not supported for AWS Bedrock Claude")
146
-
147
- if message.videos is not None and len(message.videos) > 0:
148
- log_warning("Video is not supported for AWS Bedrock Claude")
149
-
150
- # Handle tool calls from history
151
- elif message.role == "assistant":
152
- content = []
153
-
154
- if isinstance(message.content, str) and message.content and len(message.content.strip()) > 0:
155
- content.append(TextBlock(text=message.content, type="text"))
156
-
157
- if message.tool_calls:
158
- for tool_call in message.tool_calls:
159
- content.append(
160
- ToolUseBlock(
161
- id=tool_call["id"],
162
- input=json.loads(tool_call["function"]["arguments"])
163
- if "arguments" in tool_call["function"]
164
- else {},
165
- name=tool_call["function"]["name"],
166
- type="tool_use",
167
- )
168
- )
169
- chat_messages.append({"role": ROLE_MAP[message.role], "content": content}) # type: ignore
170
- return chat_messages, " ".join(system_messages)
File without changes