agno 2.0.4__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 (41) hide show
  1. agno/agent/agent.py +74 -85
  2. agno/db/dynamo/dynamo.py +2 -2
  3. agno/db/firestore/firestore.py +3 -2
  4. agno/db/gcs_json/gcs_json_db.py +2 -2
  5. agno/db/json/json_db.py +2 -2
  6. agno/db/migrations/v1_to_v2.py +191 -23
  7. agno/db/mongo/mongo.py +61 -2
  8. agno/db/mysql/mysql.py +5 -5
  9. agno/db/mysql/schemas.py +27 -27
  10. agno/db/postgres/postgres.py +5 -5
  11. agno/db/redis/redis.py +2 -2
  12. agno/db/singlestore/singlestore.py +2 -2
  13. agno/db/sqlite/sqlite.py +6 -5
  14. agno/db/utils.py +0 -14
  15. agno/integrations/discord/client.py +1 -0
  16. agno/knowledge/knowledge.py +7 -7
  17. agno/knowledge/reader/reader_factory.py +7 -3
  18. agno/knowledge/reader/web_search_reader.py +12 -6
  19. agno/models/message.py +109 -0
  20. agno/models/openai/responses.py +6 -0
  21. agno/os/app.py +162 -42
  22. agno/os/interfaces/agui/utils.py +98 -134
  23. agno/os/routers/health.py +0 -1
  24. agno/os/routers/home.py +52 -0
  25. agno/os/routers/knowledge/knowledge.py +2 -2
  26. agno/os/schema.py +21 -0
  27. agno/os/utils.py +0 -8
  28. agno/run/agent.py +3 -3
  29. agno/run/team.py +3 -3
  30. agno/team/team.py +33 -38
  31. agno/tools/duckduckgo.py +15 -11
  32. agno/tools/googlesearch.py +1 -1
  33. agno/utils/string.py +32 -0
  34. agno/utils/tools.py +1 -1
  35. agno/workflow/step.py +4 -3
  36. {agno-2.0.4.dist-info → agno-2.0.5.dist-info}/METADATA +6 -5
  37. {agno-2.0.4.dist-info → agno-2.0.5.dist-info}/RECORD +40 -40
  38. agno/knowledge/reader/url_reader.py +0 -128
  39. {agno-2.0.4.dist-info → agno-2.0.5.dist-info}/WHEEL +0 -0
  40. {agno-2.0.4.dist-info → agno-2.0.5.dist-info}/licenses/LICENSE +0 -0
  41. {agno-2.0.4.dist-info → agno-2.0.5.dist-info}/top_level.txt +0 -0
agno/team/team.py CHANGED
@@ -104,7 +104,7 @@ from agno.utils.response import (
104
104
  generator_wrapper,
105
105
  )
106
106
  from agno.utils.safe_formatter import SafeFormatter
107
- from agno.utils.string import parse_response_model_str
107
+ from agno.utils.string import generate_id_from_name, parse_response_model_str
108
108
  from agno.utils.team import format_member_agent_task, get_member_id
109
109
  from agno.utils.timer import Timer
110
110
 
@@ -580,10 +580,7 @@ class Team:
580
580
  If the name is not provided, generate a random UUID.
581
581
  """
582
582
  if self.id is None:
583
- if self.name is not None:
584
- self.id = self.name.lower().replace(" ", "-")
585
- else:
586
- self.id = str(uuid4())
583
+ self.id = generate_id_from_name(self.name)
587
584
 
588
585
  def _set_debug(self, debug_mode: Optional[bool] = None) -> None:
589
586
  if self.debug_mode or debug_mode or getenv("AGNO_DEBUG", "false").lower() == "true":
@@ -659,8 +656,6 @@ class Team:
659
656
  member.set_id()
660
657
 
661
658
  elif isinstance(member, Team):
662
- if member.id is None:
663
- member.id = str(uuid4())
664
659
  member.parent_team_id = self.id
665
660
  for sub_member in member.members:
666
661
  self._initialize_member(sub_member, debug_mode=debug_mode)
@@ -853,7 +848,15 @@ class Team:
853
848
  else:
854
849
  self._scrub_media_from_run_output(run_response)
855
850
 
856
- # 3. Update Team Memory
851
+ run_response.status = RunStatus.completed
852
+
853
+ # Parse team response model
854
+ self._convert_response_to_structured_format(run_response=run_response)
855
+
856
+ # 3. Add the RunOutput to Team Session
857
+ session.upsert_run(run_response=run_response)
858
+
859
+ # 4. Update Team Memory
857
860
  response_iterator = self._make_memories_and_summaries(
858
861
  run_response=run_response,
859
862
  run_messages=run_messages,
@@ -862,14 +865,6 @@ class Team:
862
865
  )
863
866
  deque(response_iterator, maxlen=0)
864
867
 
865
- run_response.status = RunStatus.completed
866
-
867
- # Parse team response model
868
- self._convert_response_to_structured_format(run_response=run_response)
869
-
870
- # 4. Add the RunOutput to Team Session
871
- session.upsert_run(run_response=run_response)
872
-
873
868
  # 5. Calculate session metrics
874
869
  self._update_session_metrics(session=session)
875
870
 
@@ -978,7 +973,12 @@ class Team:
978
973
  session=session, run_response=run_response, stream_intermediate_steps=stream_intermediate_steps
979
974
  )
980
975
 
981
- # 3. Update Team Memory
976
+ run_response.status = RunStatus.completed
977
+
978
+ # 3. Add the run to Team Session
979
+ session.upsert_run(run_response=run_response)
980
+
981
+ # 4. Update Team Memory
982
982
  yield from self._make_memories_and_summaries(
983
983
  run_response=run_response,
984
984
  run_messages=run_messages,
@@ -986,11 +986,6 @@ class Team:
986
986
  user_id=user_id,
987
987
  )
988
988
 
989
- run_response.status = RunStatus.completed
990
-
991
- # 4. Add the run to memory
992
- session.upsert_run(run_response=run_response)
993
-
994
989
  # 5. Calculate session metrics
995
990
  self._update_session_metrics(session=session)
996
991
 
@@ -1435,7 +1430,15 @@ class Team:
1435
1430
  else:
1436
1431
  self._scrub_media_from_run_output(run_response)
1437
1432
 
1438
- # 5. Update Team Memory
1433
+ run_response.status = RunStatus.completed
1434
+
1435
+ # Parse team response model
1436
+ self._convert_response_to_structured_format(run_response=run_response)
1437
+
1438
+ # 5. Add the run to memory
1439
+ session.upsert_run(run_response=run_response)
1440
+
1441
+ # 6. Update Team Memory
1439
1442
  async for _ in self._amake_memories_and_summaries(
1440
1443
  run_response=run_response,
1441
1444
  session=session,
@@ -1444,14 +1447,6 @@ class Team:
1444
1447
  ):
1445
1448
  pass
1446
1449
 
1447
- run_response.status = RunStatus.completed
1448
-
1449
- # Parse team response model
1450
- self._convert_response_to_structured_format(run_response=run_response)
1451
-
1452
- # 6. Add the run to memory
1453
- session.upsert_run(run_response=run_response)
1454
-
1455
1450
  # 7. Calculate session metrics
1456
1451
  self._update_session_metrics(session=session)
1457
1452
 
@@ -1599,6 +1594,11 @@ class Team:
1599
1594
  ):
1600
1595
  yield event
1601
1596
 
1597
+ run_response.status = RunStatus.completed
1598
+
1599
+ # 5. Add the run to Team Session
1600
+ session.upsert_run(run_response=run_response)
1601
+
1602
1602
  # 6. Update Team Memory
1603
1603
  async for event in self._amake_memories_and_summaries(
1604
1604
  run_response=run_response,
@@ -1608,19 +1608,14 @@ class Team:
1608
1608
  ):
1609
1609
  yield event
1610
1610
 
1611
- run_response.status = RunStatus.completed
1612
-
1613
- # 7. Add the run to memory
1614
- session.upsert_run(run_response=run_response)
1615
-
1616
- # 8. Calculate session metrics
1611
+ # 7. Calculate session metrics
1617
1612
  self._update_session_metrics(session=session)
1618
1613
 
1619
1614
  completed_event = self._handle_event(
1620
1615
  create_team_run_completed_event(from_run_response=run_response), run_response, workflow_context
1621
1616
  )
1622
1617
 
1623
- # 9. Save session to storage
1618
+ # 8. Save session to storage
1624
1619
  self.save_session(session=session)
1625
1620
 
1626
1621
  if stream_intermediate_steps:
agno/tools/duckduckgo.py CHANGED
@@ -12,14 +12,16 @@ except ImportError:
12
12
 
13
13
  class DuckDuckGoTools(Toolkit):
14
14
  """
15
- DuckDuckGo is a toolkit for searching DuckDuckGo easily.
15
+ DuckDuckGo is a toolkit for searching using DuckDuckGo easily.
16
+ It uses the meta-search library DDGS, so it also has access to other backends.
16
17
  Args:
17
- search (bool): Enable DuckDuckGo search function.
18
- news (bool): Enable DuckDuckGo news function.
18
+ enable_search (bool): Enable DDGS search function.
19
+ enable_news (bool): Enable DDGS news function.
19
20
  modifier (Optional[str]): A modifier to be used in the search request.
20
21
  fixed_max_results (Optional[int]): A fixed number of maximum results.
21
22
  proxy (Optional[str]): Proxy to be used in the search request.
22
23
  timeout (Optional[int]): The maximum number of seconds to wait for a response.
24
+ backend (Optional[str]): The backend to be used in the search request.
23
25
 
24
26
  """
25
27
 
@@ -28,6 +30,7 @@ class DuckDuckGoTools(Toolkit):
28
30
  enable_search: bool = True,
29
31
  enable_news: bool = True,
30
32
  all: bool = False,
33
+ backend: str = "duckduckgo",
31
34
  modifier: Optional[str] = None,
32
35
  fixed_max_results: Optional[int] = None,
33
36
  proxy: Optional[str] = None,
@@ -40,6 +43,7 @@ class DuckDuckGoTools(Toolkit):
40
43
  self.fixed_max_results: Optional[int] = fixed_max_results
41
44
  self.modifier: Optional[str] = modifier
42
45
  self.verify_ssl: bool = verify_ssl
46
+ self.backend: str = backend
43
47
 
44
48
  tools: List[Any] = []
45
49
  if all or enable_search:
@@ -50,38 +54,38 @@ class DuckDuckGoTools(Toolkit):
50
54
  super().__init__(name="duckduckgo", tools=tools, **kwargs)
51
55
 
52
56
  def duckduckgo_search(self, query: str, max_results: int = 5) -> str:
53
- """Use this function to search DuckDuckGo for a query.
57
+ """Use this function to search DDGS for a query.
54
58
 
55
59
  Args:
56
60
  query(str): The query to search for.
57
61
  max_results (optional, default=5): The maximum number of results to return.
58
62
 
59
63
  Returns:
60
- The result from DuckDuckGo.
64
+ The result from DDGS.
61
65
  """
62
66
  actual_max_results = self.fixed_max_results or max_results
63
67
  search_query = f"{self.modifier} {query}" if self.modifier else query
64
68
 
65
- log_debug(f"Searching DDG for: {search_query}")
69
+ log_debug(f"Searching DDG for: {search_query} using backend: {self.backend}")
66
70
  with DDGS(proxy=self.proxy, timeout=self.timeout, verify=self.verify_ssl) as ddgs:
67
- results = ddgs.text(query=search_query, max_results=actual_max_results)
71
+ results = ddgs.text(query=search_query, max_results=actual_max_results, backend=self.backend)
68
72
 
69
73
  return json.dumps(results, indent=2)
70
74
 
71
75
  def duckduckgo_news(self, query: str, max_results: int = 5) -> str:
72
- """Use this function to get the latest news from DuckDuckGo.
76
+ """Use this function to get the latest news from DDGS.
73
77
 
74
78
  Args:
75
79
  query(str): The query to search for.
76
80
  max_results (optional, default=5): The maximum number of results to return.
77
81
 
78
82
  Returns:
79
- The latest news from DuckDuckGo.
83
+ The latest news from DDGS.
80
84
  """
81
85
  actual_max_results = self.fixed_max_results or max_results
82
86
 
83
- log_debug(f"Searching DDG news for: {query}")
87
+ log_debug(f"Searching DDG news for: {query} using backend: {self.backend}")
84
88
  with DDGS(proxy=self.proxy, timeout=self.timeout, verify=self.verify_ssl) as ddgs:
85
- results = ddgs.news(query=query, max_results=actual_max_results)
89
+ results = ddgs.news(query=query, max_results=actual_max_results, backend=self.backend)
86
90
 
87
91
  return json.dumps(results, indent=2)
@@ -82,7 +82,7 @@ class GoogleSearchTools(Toolkit):
82
82
  log_debug(f"Searching Google [{language}] for: {query}")
83
83
 
84
84
  # Perform Google search using the googlesearch-python package
85
- results = list(search(query, num=max_results, lang=language))
85
+ results = list(search(query, num_results=max_results, lang=language))
86
86
 
87
87
  # Collect the search results
88
88
  res: List[Dict[str, str]] = []
agno/utils/string.py CHANGED
@@ -1,7 +1,9 @@
1
1
  import hashlib
2
2
  import json
3
3
  import re
4
+ import uuid
4
5
  from typing import Optional, Type
6
+ from uuid import uuid4
5
7
 
6
8
  from pydantic import BaseModel, ValidationError
7
9
 
@@ -188,3 +190,33 @@ def parse_response_model_str(content: str, output_schema: Type[BaseModel]) -> Op
188
190
  logger.warning("All parsing attempts failed.")
189
191
 
190
192
  return structured_output
193
+
194
+
195
+ def generate_id(seed: Optional[str] = None) -> str:
196
+ """
197
+ Generate a deterministic UUID5 based on a seed string.
198
+ If no seed is provided, generate a random UUID4.
199
+
200
+ Args:
201
+ seed (str): The seed string to generate the UUID from.
202
+
203
+ Returns:
204
+ str: A deterministic UUID5 string.
205
+ """
206
+ if seed is None:
207
+ return str(uuid4())
208
+ return str(uuid.uuid5(uuid.NAMESPACE_DNS, seed))
209
+
210
+
211
+ def generate_id_from_name(name: Optional[str] = None) -> str:
212
+ """
213
+ Generate a deterministic ID from a name string.
214
+ If no name is provided, generate a random UUID4.
215
+
216
+ Args:
217
+ name (str): The name string to generate the ID from.
218
+ """
219
+ if name:
220
+ return name.lower().replace(" ", "-").replace("_", "-")
221
+ else:
222
+ return str(uuid4())
agno/utils/tools.py CHANGED
@@ -13,7 +13,7 @@ def get_function_call_for_tool_call(
13
13
  _tool_call_function = tool_call.get("function")
14
14
  if _tool_call_function is not None:
15
15
  _tool_call_function_name = _tool_call_function.get("name")
16
- _tool_call_function_arguments_str = _tool_call_function.get("arguments")
16
+ _tool_call_function_arguments_str = _tool_call_function.get("arguments") or "{}"
17
17
  if _tool_call_function_name is not None:
18
18
  return get_function_call(
19
19
  name=_tool_call_function_name,
agno/workflow/step.py CHANGED
@@ -499,7 +499,7 @@ class Step:
499
499
  if store_executor_outputs and workflow_run_response is not None:
500
500
  self._store_executor_response(workflow_run_response, active_executor_run_response) # type: ignore
501
501
 
502
- final_response = self._process_step_output(active_executor_run_response) # type: ignore
502
+ final_response = active_executor_run_response # type: ignore
503
503
 
504
504
  else:
505
505
  raise ValueError(f"Unsupported executor type: {self._executor_type}")
@@ -513,6 +513,7 @@ class Step:
513
513
  use_workflow_logger()
514
514
 
515
515
  # Yield the step output
516
+ final_response = self._process_step_output(final_response)
516
517
  yield final_response
517
518
 
518
519
  # Emit StepCompletedEvent
@@ -865,7 +866,6 @@ class Step:
865
866
 
866
867
  active_executor_run_response = None
867
868
  async for event in response_stream:
868
- log_debug(f"Received async event from agent: {type(event).__name__}")
869
869
  if isinstance(event, RunOutput) or isinstance(event, TeamRunOutput):
870
870
  active_executor_run_response = event
871
871
  break
@@ -877,7 +877,7 @@ class Step:
877
877
  if store_executor_outputs and workflow_run_response is not None:
878
878
  self._store_executor_response(workflow_run_response, active_executor_run_response) # type: ignore
879
879
 
880
- final_response = self._process_step_output(active_executor_run_response) # type: ignore
880
+ final_response = active_executor_run_response # type: ignore
881
881
  else:
882
882
  raise ValueError(f"Unsupported executor type: {self._executor_type}")
883
883
 
@@ -889,6 +889,7 @@ class Step:
889
889
  use_workflow_logger()
890
890
 
891
891
  # Yield the final response
892
+ final_response = self._process_step_output(final_response)
892
893
  yield final_response
893
894
 
894
895
  if stream_intermediate_steps and workflow_run_response:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.0.4
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=FW7N41t1WV1X1-fGd7MVMHkfIZTYMZKC7Qp2SngY15M,326393
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
@@ -29,40 +29,40 @@ agno/cloud/aws/s3/bucket.py,sha256=5dkKhjWVmf8dyQEyCTd6DkQlKADBnm0-_VKQgKqtJQM,7
29
29
  agno/cloud/aws/s3/object.py,sha256=ttZPbLm3o63oGIhKgAr_bIf9DOpJlXRmrEVlkbTcJbk,1766
30
30
  agno/db/__init__.py,sha256=bfd_tpKsIKCjZosnFqID26VoWqy88v8gzkf9kLHToY4,625
31
31
  agno/db/base.py,sha256=POGw6M85Dwt1YD_69KbtB1iuTyrqYl4ZIWU07GO_4yc,7898
32
- agno/db/utils.py,sha256=1Xow9cXhY8yrZzA58USOVqdnhYZuEvvwie9gPTPMPgE,3800
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=LLYUrQ0n6XsMMwFuDZjEpVKp1cnRljIcqO1bqmcOjsg,66505
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=iBZxduaABoVqAT3A6LtvlZR2fNY0qThbXtIbl6do3gE,56959
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=Eko2Rw2f5fLj6fwaUStazAgmkfp17qZNzh3W24V_QS8,42331
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=JguHIEOytBTRgT_SO1yrhE6TX9IFGsz_cGb1KlUIGoo,42252
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=6JcHxc9u372x52i_DZNdqBfqNo7hUlDu0ilY0zSNdHk,55427
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=tVHhV7RGbtPVFnvI1LZqRfSyTbsImeI89ad-uO-UXlk,70250
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=bZgfBe1o2HZuwH6sVW2K5txuQOSjr1w5UScxZUNKVzs,69273
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=4ayPZHEb4ffjLrFcLt2gwFoZL0_fv8ZP4lHc-da6ldg,51561
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
@@ -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=Hd2ztlqqBwzGwQgY3d0x3dEAgXGXlhoyWuz4sn9ctCI,69563
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=rf_7rQVmmG3aFFYwUYER3jUEgwYKNJzXcdmIMVrYZLI,68171
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=oVQ6vGnb-pkrh7_uo_-bq_k3iPL5eDH3aicJ4Y0LoMI,63456
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
@@ -149,7 +148,7 @@ agno/memory/manager.py,sha256=eCgy4KLVM97x8ypqx1-0hKubbTcwEYrOlzI-rNOinec,42219
149
148
  agno/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
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
153
  agno/models/response.py,sha256=Tq36PoxFrp-_OA6SZPfM7Kd858kQ6cG4BcIlDUGBlZ8,4168
155
154
  agno/models/utils.py,sha256=PprNlVI8d8loHayjRsrc4TL38sfkFMS3EVZcF5cLXoA,669
@@ -207,7 +206,7 @@ agno/models/ollama/chat.py,sha256=QGJetMU5qL6oPrI-yFSAMt_rfjb2T0XsquGx6r3z91k,13
207
206
  agno/models/openai/__init__.py,sha256=OssVgQRpsriU6aJZ3lIp_jFuqvX6y78L4Fd3uTlmI3E,225
208
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=JxQ2IZ-8P6wiiyhB2PQF-xccFCQXLssvkl-j5iyZe00,46805
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
@@ -227,20 +226,20 @@ agno/models/vllm/vllm.py,sha256=anBt3gshctbmda-OZJ51tOgbHHemsrSbQLMDqB39HIA,2707
227
226
  agno/models/xai/__init__.py,sha256=ukcCxnCHxTtkJNA2bAMTX4MhCv1wJcbiq8ZIfYczIxs,55
228
227
  agno/models/xai/xai.py,sha256=2BaoRSBxL2KXNqbSOv7iVmKPJIWoEPRh0er_9fu8yfc,4120
229
228
  agno/os/__init__.py,sha256=h8oQu7vhD5RZf09jkyM_Kt1Kdq_d5kFB9gJju8QPwcY,55
230
- agno/os/app.py,sha256=BdSKAOBAy9HHOvS868eRKynm3EX4LBtkLL1UunpTByw,18841
229
+ agno/os/app.py,sha256=FuhU3tz2CoWER4cJ4NvFT0UgUE23LHolPUlE1EBSuZI,24636
231
230
  agno/os/auth.py,sha256=FyBtAKWtg-qSunCas5m5pK1dVEmikOSZvcCp5r25tTA,1844
232
231
  agno/os/config.py,sha256=u4R9yazQXIcKjR3QzEIZw_XAe_OHp3xn0ff7SVkj2jA,2893
233
232
  agno/os/mcp.py,sha256=5L0TZwInuCWM7TQ7MI_DjMWfVIIB0jxVCqaVEdR62UU,8114
234
233
  agno/os/router.py,sha256=Ic9M3eDS-01zpGHzn1ODR8ox-7B-xe-7xjA7VIb-OAg,61658
235
- agno/os/schema.py,sha256=hhALK0j6I1DUa-bHXklFRjOFH0nKHlRxGEQ16XCjnIw,37123
234
+ agno/os/schema.py,sha256=n1DseZbkqR_Fy1bFSoog17rljYj3RFLMxUM2r_6gwF4,38222
236
235
  agno/os/settings.py,sha256=Cn5_8lZI8Vx1UaUYqs9h6Qp4IMDFn4f3c35uppiaMy4,1343
237
- agno/os/utils.py,sha256=uEVyNN7Prb3K5YPlHyamdsUt2oimMJRX-oN1yvBpcvg,9307
236
+ agno/os/utils.py,sha256=_UIq19VBwIa09YP7WYLvkX3LYNJLFAtayPvNzEjLG-4,9115
238
237
  agno/os/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
239
238
  agno/os/interfaces/base.py,sha256=NIqG5vCQDaKczcQZWRc9tK1L1v5_wD6haXTHFViMCpo,443
240
239
  agno/os/interfaces/agui/__init__.py,sha256=1zrGICk4roXUINwSFZfqH6sBsbHmD5KjGYVJMGg4fKQ,66
241
240
  agno/os/interfaces/agui/agui.py,sha256=Gf05amiSeDrEfCe7KcQaEJ8Tq9JdX1D7It9hYh1k-a8,902
242
241
  agno/os/interfaces/agui/router.py,sha256=CgHCqNwA3ktUoGmCt0PoaQPX3hJ4rcXOgtXUGQ5sPIU,4335
243
- agno/os/interfaces/agui/utils.py,sha256=HPk01BtNEjpOJe283tlCA6h4wEUzMFG-2LbQU6SXoG4,17940
242
+ agno/os/interfaces/agui/utils.py,sha256=VykZ-SGN5UzBpP5Pv4TmZgMsZRNPgSryO5z5ir48-N0,15892
244
243
  agno/os/interfaces/slack/__init__.py,sha256=F095kOcgiyk_KzIozNNieKwpVc_NR8HYpuO4bKiCNN0,70
245
244
  agno/os/interfaces/slack/router.py,sha256=9FvL12luuzJyTKIO_piQFayHeRAV317JEwUkZ3W9MzY,4034
246
245
  agno/os/interfaces/slack/security.py,sha256=nMbW_0g-G_DEMbCQOD8C3PYrRPIpB2cyM6P-xS6GHYk,917
@@ -250,13 +249,14 @@ agno/os/interfaces/whatsapp/router.py,sha256=48AfJrsmtmGzG32rUrQ76E4kc9F9bSqR4ei
250
249
  agno/os/interfaces/whatsapp/security.py,sha256=WOdjP886O0Wq6CRHSLAv_b39y6pjmn8opPQDSlZf4WA,1735
251
250
  agno/os/interfaces/whatsapp/whatsapp.py,sha256=NpkenUHFhILEZgEIjbicCXq61rdaXhbx5Md1aFy7UjY,837
252
251
  agno/os/routers/__init__.py,sha256=du4LO9aZwiY1t59VcV9M6wiAfftFFlUZc-YXsTGy9LI,97
253
- agno/os/routers/health.py,sha256=4yMp-H1odAKW0O8wmpKiy87MSi9VR3SvAXuw3BMjvl0,748
252
+ agno/os/routers/health.py,sha256=MpJrg488T0m8jU0mtoBNPiLhlR2r2gFihvyZwdQh_oc,725
253
+ agno/os/routers/home.py,sha256=gbqBP2-G5_aFSdsXMdc77jtanI8XSRZ8QcxKjX8_qkw,1717
254
254
  agno/os/routers/evals/__init__.py,sha256=3s0M-Ftg5A3rFyRfTATs-0aNA6wcbj_5tCvtwH9gORQ,87
255
255
  agno/os/routers/evals/evals.py,sha256=zjsgoTCyKbj9clPtTyg3veFFkHNxMBPtcLGuy5Zlnck,16965
256
256
  agno/os/routers/evals/schemas.py,sha256=3Ebm3IrpX22Hg3ZatMRkozgS4TfnMki4_UbqCNtQvJ4,4800
257
257
  agno/os/routers/evals/utils.py,sha256=ZdQd5Rz7rBFwMT6Z380cP1MvJG24I_lgTfaQItvva3g,5519
258
258
  agno/os/routers/knowledge/__init__.py,sha256=ZSqMQ8X7C_oYn8xt7NaYlriarWUpHgaWDyHXOWooMaU,105
259
- agno/os/routers/knowledge/knowledge.py,sha256=bqK_eZx_OhdaBsD67-YaAReApjnYvNB53ybk8EAltO0,38628
259
+ agno/os/routers/knowledge/knowledge.py,sha256=nCbVU2aCenIvpbmIIWjupgICO3GHbiD76q81P-lD0r8,38604
260
260
  agno/os/routers/knowledge/schemas.py,sha256=w8XZZsWCVNmd2s_rihq2PDcgXhF7H_yO7WHU_OgY6OU,4397
261
261
  agno/os/routers/memory/__init__.py,sha256=9hrYFc1dkbsLBqKfqyfioQeLX9TTbLrJx6lWDKNNWbc,93
262
262
  agno/os/routers/memory/memory.py,sha256=pi_3omyZ54usHNTVBvkoPwIXBgu1p-Q7s4jYD2wUYYM,16798
@@ -276,11 +276,11 @@ agno/reasoning/ollama.py,sha256=v-XbtBjjRUZHX9I1ZNZAAb-sv8W_a0hCgkhczz_W4HU,2564
276
276
  agno/reasoning/openai.py,sha256=RkXxZZpr1KykMiDLVdz36d3WKjwlGPucR5RmhU5asHM,3089
277
277
  agno/reasoning/step.py,sha256=6DaOb_0DJRz9Yh1w_mxcRaOSVzIQDrj3lQ6rzHLdIwA,1220
278
278
  agno/run/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
279
- agno/run/agent.py,sha256=1RyQ6QGwTji2s2u76vuuRFmKw-YvJbyHHHCuhmnmMBY,21648
279
+ agno/run/agent.py,sha256=xZ6yZA8T7QEJLDyogbpmTz8GJlRdxznUT1pKzugnGQw,21633
280
280
  agno/run/base.py,sha256=TvIGCos_uNrFpYe8F9j3qWE1YC4-_SW9rxnsFilJvCc,6911
281
281
  agno/run/cancel.py,sha256=yoSj3fnx8D7Gf-fSngVIgd3GOp3tRaDhHH_4QeHDoAk,2667
282
282
  agno/run/messages.py,sha256=rAC4CLW-xBA6qFS1BOvcjJ9j_qYf0a7sX1mcdY04zMU,1126
283
- agno/run/team.py,sha256=z7qsULJfIQ54iikrXyF2fJ_XQDY9Lvc9Bxjf5HSnSOY,22187
283
+ agno/run/team.py,sha256=FSgPjfTqyHSNKrrNC0tVGUo-208w27xA9k2PxLYZlfE,22172
284
284
  agno/run/workflow.py,sha256=MuNvgDKBoNRsg81S-fw7URt_k36xIOYiL64uWDDHxSg,22624
285
285
  agno/session/__init__.py,sha256=p6eqzWcLSHiMex2yZvkwv2yrFUNdGs21TGMS49xrEC4,376
286
286
  agno/session/agent.py,sha256=0o8QJRc6HclC7X5MjPTSqtRIwuyjJ9un4ck9FK8lBlA,9686
@@ -288,7 +288,7 @@ agno/session/summary.py,sha256=2a74rDzrOGkWjrFkHQ6gf1dsZBU0_G1lgDE7b3fPaQw,8405
288
288
  agno/session/team.py,sha256=ttb5MquVYEAtcXZNPttcBYgELu2cEwQRknveVyddr-Y,10250
289
289
  agno/session/workflow.py,sha256=8dWTona5jen1iPYwjcvxq1XG5EQDFnd28BEjcbqzl4s,5004
290
290
  agno/team/__init__.py,sha256=toHidBOo5M3n_TIVtIKHgcDbLL9HR-_U-YQYuIt_XtE,847
291
- agno/team/team.py,sha256=xclnY-fJQyeun7_WMnc_23grSV28fvPMz7ol9a8aha8,306307
291
+ agno/team/team.py,sha256=AoTeRtDFI9g2MybcMFc4Z7t5HqEe9s6Xt8jCTsVhsgE,306165
292
292
  agno/tools/__init__.py,sha256=jNll2sELhPPbqm5nPeT4_uyzRO2_KRTW-8Or60kioS0,210
293
293
  agno/tools/agentql.py,sha256=S82Z9aTNr-E5wnA4fbFs76COljJtiQIjf2grjz3CkHU,4104
294
294
  agno/tools/airflow.py,sha256=uf2rOzZpSU64l_qRJ5Raku-R3Gky-uewmYkh6W0-oxg,2610
@@ -317,7 +317,7 @@ agno/tools/desi_vocal.py,sha256=dTeIaD7pabaZxPG9IxtQhaVpC6-A3-4hX4xIt5C7kA4,3661
317
317
  agno/tools/discord.py,sha256=KkqArWVMtwpqOC-fQ7MxHAOAL9-G0CqlXUWgjQNgvOA,5819
318
318
  agno/tools/docker.py,sha256=pk1OXW3Pk318gMoFjV2vXGA0HBc93DLs8eftOM7eRIQ,25837
319
319
  agno/tools/duckdb.py,sha256=cYs1cgMUqZOydYC_ow65mTMSlRoAyws7k-Hx_RfVgrM,14668
320
- agno/tools/duckduckgo.py,sha256=SAwfZX3ZVVdEu68hPWzeu95WK_H3f28-AYKF6AccBVA,3151
320
+ agno/tools/duckduckgo.py,sha256=7IdggRnw6kuhPARRPIjWxrxGOt9TwP4W1oSILFhF_0Y,3474
321
321
  agno/tools/e2b.py,sha256=InuGclzz93kbqWfrXSAtLvpCn-DzwuN1H26lWyUP0qQ,25958
322
322
  agno/tools/eleven_labs.py,sha256=dYdyjxsLL9fLQBwY6_e-bPG-XgSNIB2y91avZskbg_Y,7184
323
323
  agno/tools/email.py,sha256=YmqNngDMDfJn-TCrxGV9IxRh2xcLmxQh7NOuuKTyUwU,2359
@@ -334,7 +334,7 @@ agno/tools/gmail.py,sha256=MlLlEvxHly_2oKAZaKxXDmoHLTbWDSXcjOASGt7RpY8,28067
334
334
  agno/tools/google_bigquery.py,sha256=j0c14CgGK8KvD7eEirsdAx7RSwcfMheugn84ySq6miU,4483
335
335
  agno/tools/google_maps.py,sha256=AqPEIt4u6B2kQtzOnL5PH3RXoefCfjT_Uvm3coAqzaY,9513
336
336
  agno/tools/googlecalendar.py,sha256=s8BPKvDZGeLD2idlQG-vqDqVpza6PupF5AzAElnAK_M,27457
337
- agno/tools/googlesearch.py,sha256=MB2LoNWras9vUXRO0Uyb6wXSulZbuMaPPPEkEOcqfT8,3558
337
+ agno/tools/googlesearch.py,sha256=xRuaEqn7N6JIQC6z9jFuA0Kdtoe5MafGqRMtZ8jW2AQ,3566
338
338
  agno/tools/googlesheets.py,sha256=Xb5y5ka_K3T-ZlYs-aVCl0RC5NFy3GOh7R8SGUb3i-o,14911
339
339
  agno/tools/hackernews.py,sha256=h5w-L5FkGGMAHr6Jjez6164-UYZ_2r2qFAzwMrKLdRM,2776
340
340
  agno/tools/jina.py,sha256=xa0yxcxsSZ1-BzxO3PJKNWnWrv64DxbpvRHTPFXWhC4,4036
@@ -439,10 +439,10 @@ agno/utils/response_iterator.py,sha256=MgtadrOuMcw2vJcVvhJdMKRzpVddhLWUIkGFbBz7Z
439
439
  agno/utils/safe_formatter.py,sha256=zLrW6O-nGUZvXoDkZOTgVpjeUFTmMUj8pk3FLvW_XjM,809
440
440
  agno/utils/shell.py,sha256=JaY14Fq3ulodG4SeSdLEoOZDI4JJlmCbdgwK5beJuc8,700
441
441
  agno/utils/streamlit.py,sha256=Bn2kQLiTKKqyN0VXj0NBN_sz8V1bV5vImoSk1PCi52g,17966
442
- agno/utils/string.py,sha256=F6yvMIwnD6CJTmui0tARyXakHFjh7610nEtRKAbNd90,6367
442
+ agno/utils/string.py,sha256=N2BBdn-gvtFjeWAU_FBDpXBzEZxHEhK85DpA1ZiV4p0,7189
443
443
  agno/utils/team.py,sha256=VXdm41WhsC6Rb20fHcpO4H55obQ6R435luAAZ4Jc3yQ,1853
444
444
  agno/utils/timer.py,sha256=Fuax69yh1cVIzCYMmJDB4HpTsPM8Iiq1VaTWz1vJtF8,1282
445
- agno/utils/tools.py,sha256=aBidpfPWd7Q2MtATubbNVerFoPJJVVIBD595H8dTIb0,3834
445
+ agno/utils/tools.py,sha256=YZjA95pSNhHHcyoz5pe-Wo-yh9O2NU4Pqcbhs5kbefY,3842
446
446
  agno/utils/web.py,sha256=JwLKspkLcuFyA19T5tf4-Rs8BGPwTEySp531A3t0sC4,655
447
447
  agno/utils/whatsapp.py,sha256=242VwGOdbgkxVeIj4D899mpT3GnG_IpcaKnd5qebhTA,9936
448
448
  agno/utils/yaml_io.py,sha256=cwTqCE-eBGoi87KLDcwB6iyWe0NcvEmadQjWL1cQ7jE,860
@@ -509,12 +509,12 @@ agno/workflow/condition.py,sha256=JFWPnwEeOIkQWexGYDK9pToPyf_siRCW92rkFdA4yTc,28
509
509
  agno/workflow/loop.py,sha256=cTVkRX5pwfZH5O19Q3W3YS9bcSKmEszkDwfR0V72rV8,30635
510
510
  agno/workflow/parallel.py,sha256=K_fT51xzYLI2k48dafNHH4uki-HoT6H2aNwCSeHWE2c,29859
511
511
  agno/workflow/router.py,sha256=ZAiVsh2F_9ssKj0_RzHWzfgimaZ5hfb3Ni1Xx_SkVR0,26625
512
- agno/workflow/step.py,sha256=DMmwOgh5fMeR6jwoRjsccOhWLgdjrqKF94i3c9vGclM,52487
512
+ agno/workflow/step.py,sha256=15vZFN5HlO3IkHqsxkM-2InUzCWC0Ee8BtoJ-OAhS5w,52485
513
513
  agno/workflow/steps.py,sha256=uRE4oGWs2cA-TrX881AEa69zu6rheXH81mNOZiRrNvg,23719
514
514
  agno/workflow/types.py,sha256=ZEFyaKH42261_3yx810ABfi70RUfjPGSwiIep7n53yg,17485
515
515
  agno/workflow/workflow.py,sha256=40t5CqcQk_cRLfQwkUXodCBPEcWMvvQaPPLd-vKB62Y,110539
516
- agno-2.0.4.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
517
- agno-2.0.4.dist-info/METADATA,sha256=ySWEL6FC7FN3NHNIrtHoc9-AOgleC3xOKA41bGaPJHI,21617
518
- agno-2.0.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
519
- agno-2.0.4.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
520
- agno-2.0.4.dist-info/RECORD,,
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,,