agno 2.1.8__py3-none-any.whl → 2.1.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 (57) hide show
  1. agno/agent/agent.py +646 -133
  2. agno/culture/__init__.py +3 -0
  3. agno/culture/manager.py +954 -0
  4. agno/db/async_postgres/async_postgres.py +232 -0
  5. agno/db/async_postgres/schemas.py +15 -0
  6. agno/db/async_postgres/utils.py +58 -0
  7. agno/db/base.py +83 -6
  8. agno/db/dynamo/dynamo.py +162 -0
  9. agno/db/dynamo/schemas.py +44 -0
  10. agno/db/dynamo/utils.py +59 -0
  11. agno/db/firestore/firestore.py +231 -0
  12. agno/db/firestore/schemas.py +10 -0
  13. agno/db/firestore/utils.py +96 -0
  14. agno/db/gcs_json/gcs_json_db.py +190 -0
  15. agno/db/gcs_json/utils.py +58 -0
  16. agno/db/in_memory/in_memory_db.py +118 -0
  17. agno/db/in_memory/utils.py +58 -0
  18. agno/db/json/json_db.py +129 -0
  19. agno/db/json/utils.py +58 -0
  20. agno/db/mongo/mongo.py +222 -0
  21. agno/db/mongo/schemas.py +10 -0
  22. agno/db/mongo/utils.py +59 -0
  23. agno/db/mysql/mysql.py +232 -1
  24. agno/db/mysql/schemas.py +14 -0
  25. agno/db/mysql/utils.py +58 -0
  26. agno/db/postgres/postgres.py +242 -0
  27. agno/db/postgres/schemas.py +15 -0
  28. agno/db/postgres/utils.py +58 -0
  29. agno/db/redis/redis.py +181 -0
  30. agno/db/redis/schemas.py +14 -0
  31. agno/db/redis/utils.py +58 -0
  32. agno/db/schemas/__init__.py +2 -1
  33. agno/db/schemas/culture.py +120 -0
  34. agno/db/singlestore/schemas.py +14 -0
  35. agno/db/singlestore/singlestore.py +231 -0
  36. agno/db/singlestore/utils.py +58 -0
  37. agno/db/sqlite/schemas.py +14 -0
  38. agno/db/sqlite/sqlite.py +274 -7
  39. agno/db/sqlite/utils.py +62 -0
  40. agno/db/surrealdb/models.py +51 -1
  41. agno/db/surrealdb/surrealdb.py +154 -0
  42. agno/db/surrealdb/utils.py +61 -1
  43. agno/knowledge/knowledge.py +4 -0
  44. agno/knowledge/reader/field_labeled_csv_reader.py +0 -2
  45. agno/memory/manager.py +28 -11
  46. agno/models/message.py +4 -0
  47. agno/os/app.py +28 -6
  48. agno/team/team.py +9 -9
  49. agno/tools/gmail.py +59 -14
  50. agno/tools/googlecalendar.py +13 -20
  51. agno/workflow/condition.py +31 -9
  52. agno/workflow/router.py +31 -9
  53. {agno-2.1.8.dist-info → agno-2.1.10.dist-info}/METADATA +1 -1
  54. {agno-2.1.8.dist-info → agno-2.1.10.dist-info}/RECORD +57 -54
  55. {agno-2.1.8.dist-info → agno-2.1.10.dist-info}/WHEEL +0 -0
  56. {agno-2.1.8.dist-info → agno-2.1.10.dist-info}/licenses/LICENSE +0 -0
  57. {agno-2.1.8.dist-info → agno-2.1.10.dist-info}/top_level.txt +0 -0
@@ -165,7 +165,7 @@ class GoogleCalendarTools(Toolkit):
165
165
 
166
166
  try:
167
167
  service = cast(Resource, self.service)
168
-
168
+
169
169
  events_result = (
170
170
  service.events()
171
171
  .list(
@@ -247,9 +247,9 @@ class GoogleCalendarTools(Toolkit):
247
247
 
248
248
  # Determine sendUpdates value based on notify_attendees parameter
249
249
  send_updates = "all" if notify_attendees and attendees else "none"
250
-
250
+
251
251
  service = cast(Resource, self.service)
252
-
252
+
253
253
  event_result = (
254
254
  service.events()
255
255
  .insert(
@@ -298,7 +298,7 @@ class GoogleCalendarTools(Toolkit):
298
298
  """
299
299
  try:
300
300
  service = cast(Resource, self.service)
301
-
301
+
302
302
  # First get the existing event to preserve its structure
303
303
  event = service.events().get(calendarId=self.calendar_id, eventId=event_id).execute()
304
304
 
@@ -333,16 +333,13 @@ class GoogleCalendarTools(Toolkit):
333
333
 
334
334
  # Determine sendUpdates value based on notify_attendees parameter
335
335
  send_updates = "all" if notify_attendees and attendees else "none"
336
-
336
+
337
337
  # Update the event
338
-
338
+
339
339
  updated_event = (
340
- service.events().update(
341
- calendarId=self.calendar_id,
342
- eventId=event_id,
343
- body=event,
344
- sendUpdates=send_updates
345
- ).execute()
340
+ service.events()
341
+ .update(calendarId=self.calendar_id, eventId=event_id, body=event, sendUpdates=send_updates)
342
+ .execute()
346
343
  )
347
344
 
348
345
  log_debug(f"Event {event_id} updated successfully.")
@@ -366,14 +363,10 @@ class GoogleCalendarTools(Toolkit):
366
363
  try:
367
364
  # Determine sendUpdates value based on notify_attendees parameter
368
365
  send_updates = "all" if notify_attendees else "none"
369
-
366
+
370
367
  service = cast(Resource, self.service)
371
-
372
- service.events().delete(
373
- calendarId=self.calendar_id,
374
- eventId=event_id,
375
- sendUpdates=send_updates
376
- ).execute()
368
+
369
+ service.events().delete(calendarId=self.calendar_id, eventId=event_id, sendUpdates=send_updates).execute()
377
370
 
378
371
  log_debug(f"Event {event_id} deleted successfully.")
379
372
  return json.dumps({"success": True, "message": f"Event {event_id} deleted successfully."})
@@ -400,7 +393,7 @@ class GoogleCalendarTools(Toolkit):
400
393
  """
401
394
  try:
402
395
  service = cast(Resource, self.service)
403
-
396
+
404
397
  params = {
405
398
  "calendarId": self.calendar_id,
406
399
  "maxResults": min(max_results, 100),
@@ -111,13 +111,16 @@ class Condition:
111
111
  audio=current_audio + all_audio,
112
112
  )
113
113
 
114
- def _evaluate_condition(self, step_input: StepInput) -> bool:
114
+ def _evaluate_condition(self, step_input: StepInput, session_state: Optional[Dict[str, Any]] = None) -> bool:
115
115
  """Evaluate the condition and return boolean result"""
116
116
  if isinstance(self.evaluator, bool):
117
117
  return self.evaluator
118
118
 
119
119
  if callable(self.evaluator):
120
- result = self.evaluator(step_input)
120
+ if session_state is not None and self._evaluator_has_session_state_param():
121
+ result = self.evaluator(step_input, session_state=session_state) # type: ignore[call-arg]
122
+ else:
123
+ result = self.evaluator(step_input)
121
124
 
122
125
  if isinstance(result, bool):
123
126
  return result
@@ -127,16 +130,24 @@ class Condition:
127
130
 
128
131
  return False
129
132
 
130
- async def _aevaluate_condition(self, step_input: StepInput) -> bool:
133
+ async def _aevaluate_condition(self, step_input: StepInput, session_state: Optional[Dict[str, Any]] = None) -> bool:
131
134
  """Async version of condition evaluation"""
132
135
  if isinstance(self.evaluator, bool):
133
136
  return self.evaluator
134
137
 
135
138
  if callable(self.evaluator):
139
+ has_session_state = session_state is not None and self._evaluator_has_session_state_param()
140
+
136
141
  if inspect.iscoroutinefunction(self.evaluator):
137
- result = await self.evaluator(step_input)
142
+ if has_session_state:
143
+ result = await self.evaluator(step_input, session_state=session_state) # type: ignore[call-arg]
144
+ else:
145
+ result = await self.evaluator(step_input)
138
146
  else:
139
- result = self.evaluator(step_input)
147
+ if has_session_state:
148
+ result = self.evaluator(step_input, session_state=session_state) # type: ignore[call-arg]
149
+ else:
150
+ result = self.evaluator(step_input)
140
151
 
141
152
  if isinstance(result, bool):
142
153
  return result
@@ -146,6 +157,17 @@ class Condition:
146
157
 
147
158
  return False
148
159
 
160
+ def _evaluator_has_session_state_param(self) -> bool:
161
+ """Check if the evaluator function has a session_state parameter"""
162
+ if not callable(self.evaluator):
163
+ return False
164
+
165
+ try:
166
+ sig = inspect.signature(self.evaluator)
167
+ return "session_state" in sig.parameters
168
+ except Exception:
169
+ return False
170
+
149
171
  def execute(
150
172
  self,
151
173
  step_input: StepInput,
@@ -166,7 +188,7 @@ class Condition:
166
188
  self._prepare_steps()
167
189
 
168
190
  # Evaluate the condition
169
- condition_result = self._evaluate_condition(step_input)
191
+ condition_result = self._evaluate_condition(step_input, session_state)
170
192
  log_debug(f"Condition {self.name} evaluated to: {condition_result}")
171
193
 
172
194
  if not condition_result:
@@ -275,7 +297,7 @@ class Condition:
275
297
  self._prepare_steps()
276
298
 
277
299
  # Evaluate the condition
278
- condition_result = self._evaluate_condition(step_input)
300
+ condition_result = self._evaluate_condition(step_input, session_state)
279
301
  log_debug(f"Condition {self.name} evaluated to: {condition_result}")
280
302
 
281
303
  if stream_intermediate_steps and workflow_run_response:
@@ -434,7 +456,7 @@ class Condition:
434
456
  self._prepare_steps()
435
457
 
436
458
  # Evaluate the condition
437
- condition_result = await self._aevaluate_condition(step_input)
459
+ condition_result = await self._aevaluate_condition(step_input, session_state)
438
460
  log_debug(f"Condition {self.name} evaluated to: {condition_result}")
439
461
 
440
462
  if not condition_result:
@@ -543,7 +565,7 @@ class Condition:
543
565
  self._prepare_steps()
544
566
 
545
567
  # Evaluate the condition
546
- condition_result = await self._aevaluate_condition(step_input)
568
+ condition_result = await self._aevaluate_condition(step_input, session_state)
547
569
  log_debug(f"Condition {self.name} evaluated to: {condition_result}")
548
570
 
549
571
  if stream_intermediate_steps and workflow_run_response:
agno/workflow/router.py CHANGED
@@ -108,10 +108,13 @@ class Router:
108
108
  audio=current_audio + all_audio,
109
109
  )
110
110
 
111
- def _route_steps(self, step_input: StepInput) -> List[Step]: # type: ignore[return-value]
111
+ def _route_steps(self, step_input: StepInput, session_state: Optional[Dict[str, Any]] = None) -> List[Step]: # type: ignore[return-value]
112
112
  """Route to the appropriate steps based on input"""
113
113
  if callable(self.selector):
114
- result = self.selector(step_input)
114
+ if session_state is not None and self._selector_has_session_state_param():
115
+ result = self.selector(step_input, session_state) # type: ignore[call-arg]
116
+ else:
117
+ result = self.selector(step_input)
115
118
 
116
119
  # Handle the result based on its type
117
120
  if isinstance(result, Step):
@@ -124,13 +127,21 @@ class Router:
124
127
 
125
128
  return []
126
129
 
127
- async def _aroute_steps(self, step_input: StepInput) -> List[Step]: # type: ignore[return-value]
130
+ async def _aroute_steps(self, step_input: StepInput, session_state: Optional[Dict[str, Any]] = None) -> List[Step]: # type: ignore[return-value]
128
131
  """Async version of step routing"""
129
132
  if callable(self.selector):
133
+ has_session_state = session_state is not None and self._selector_has_session_state_param()
134
+
130
135
  if inspect.iscoroutinefunction(self.selector):
131
- result = await self.selector(step_input)
136
+ if has_session_state:
137
+ result = await self.selector(step_input, session_state) # type: ignore[call-arg]
138
+ else:
139
+ result = await self.selector(step_input)
132
140
  else:
133
- result = self.selector(step_input)
141
+ if has_session_state:
142
+ result = self.selector(step_input, session_state) # type: ignore[call-arg]
143
+ else:
144
+ result = self.selector(step_input)
134
145
 
135
146
  # Handle the result based on its type
136
147
  if isinstance(result, Step):
@@ -143,6 +154,17 @@ class Router:
143
154
 
144
155
  return []
145
156
 
157
+ def _selector_has_session_state_param(self) -> bool:
158
+ """Check if the selector function has a session_state parameter"""
159
+ if not callable(self.selector):
160
+ return False
161
+
162
+ try:
163
+ sig = inspect.signature(self.selector)
164
+ return "session_state" in sig.parameters
165
+ except Exception:
166
+ return False
167
+
146
168
  def execute(
147
169
  self,
148
170
  step_input: StepInput,
@@ -163,7 +185,7 @@ class Router:
163
185
  self._prepare_steps()
164
186
 
165
187
  # Route to appropriate steps
166
- steps_to_execute = self._route_steps(step_input)
188
+ steps_to_execute = self._route_steps(step_input, session_state)
167
189
  log_debug(f"Router {self.name}: Selected {len(steps_to_execute)} steps to execute")
168
190
 
169
191
  if not steps_to_execute:
@@ -263,7 +285,7 @@ class Router:
263
285
  router_step_id = str(uuid4())
264
286
 
265
287
  # Route to appropriate steps
266
- steps_to_execute = self._route_steps(step_input)
288
+ steps_to_execute = self._route_steps(step_input, session_state)
267
289
  log_debug(f"Router {self.name}: Selected {len(steps_to_execute)} steps to execute")
268
290
 
269
291
  if stream_intermediate_steps and workflow_run_response:
@@ -413,7 +435,7 @@ class Router:
413
435
  self._prepare_steps()
414
436
 
415
437
  # Route to appropriate steps
416
- steps_to_execute = await self._aroute_steps(step_input)
438
+ steps_to_execute = await self._aroute_steps(step_input, session_state)
417
439
  log_debug(f"Router {self.name} selected: {len(steps_to_execute)} steps to execute")
418
440
 
419
441
  if not steps_to_execute:
@@ -516,7 +538,7 @@ class Router:
516
538
  router_step_id = str(uuid4())
517
539
 
518
540
  # Route to appropriate steps
519
- steps_to_execute = await self._aroute_steps(step_input)
541
+ steps_to_execute = await self._aroute_steps(step_input, session_state)
520
542
  log_debug(f"Router {self.name} selected: {len(steps_to_execute)} steps to execute")
521
543
 
522
544
  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.1.8
3
+ Version: 2.1.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
@@ -4,7 +4,7 @@ agno/exceptions.py,sha256=7xqLur8sWHugnViIJz4PvPKSHljSiVKNAqaKQOJgZiU,4982
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=njNPl3_M1_prsIiByfq5IYh_h9jYDTl1AZF76h0fDkc,409672
7
+ agno/agent/agent.py,sha256=UYBn-uX2WyayZeJnRLTz7EBerrChaX7QyQWGSI6IQPY,428776
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
@@ -27,67 +27,70 @@ agno/cloud/aws/s3/__init__.py,sha256=6t_fONFVV9pr04svE63yWSCWreBZ_pNTdhw4lqRnLb0
27
27
  agno/cloud/aws/s3/api_client.py,sha256=nW-Jn8WPILIvdH8niQOPpKMXlAIDB2xYTz0GHRy4PHs,1438
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
+ agno/culture/__init__.py,sha256=nVScbcUeBmkj8l-rJWGOVGytwp5xB6IfUEL_h6atzQw,118
31
+ agno/culture/manager.py,sha256=Y5vfysyoCeEg_g9GnkDKlMqQa2zUXSP0k3wO5kWweIg,40037
30
32
  agno/db/__init__.py,sha256=bfd_tpKsIKCjZosnFqID26VoWqy88v8gzkf9kLHToY4,625
31
- agno/db/base.py,sha256=6TH1o793gLUdQELqryid7UITLoSreXjVziRwXpK060k,16648
33
+ agno/db/base.py,sha256=8Zf5bf2jHOwpLFQz8oOYQnNfjnHFdKjsVRhb4ZxfAHw,18998
32
34
  agno/db/utils.py,sha256=eL0prfDrTEfOwNlOZeoZE4pu59bNJET22uh8wgzz-cw,4879
33
35
  agno/db/async_postgres/__init__.py,sha256=hrSt23PFoBqje-AdZV3z0lBRtR8M3NagPH052A4DlqM,97
34
- agno/db/async_postgres/async_postgres.py,sha256=DzQ5bU1oMn5rG7lCi1xKIGs0zbiFR_d8qyv5RnJ0IbQ,69277
35
- agno/db/async_postgres/schemas.py,sha256=3N9aeJWlW3TTzqQGjpzk3wS7cNTuUwwQr47C-40E5q8,5280
36
- agno/db/async_postgres/utils.py,sha256=YQ_ueeRdJdZ8-Jrs0qhmHOxAVKjWKockB5iVQffdkj8,9993
36
+ agno/db/async_postgres/async_postgres.py,sha256=DxthDb16rnUxGpTdadC-jcJ8vbaXaC0B1eo2-_3Z2XE,78476
37
+ agno/db/async_postgres/schemas.py,sha256=M2c4Mr7_pG_R8_cGJTiX-h1QGckMePipcpKat0MVfLQ,6006
38
+ agno/db/async_postgres/utils.py,sha256=JDHZ-6JkTZQ3DA-71cmlZpgKfqx5cEkQEj2Phq4hyZQ,12268
37
39
  agno/db/dynamo/__init__.py,sha256=fZ7NwKbyhoIu7_4T6hVz44HkIINXMnTfFrDrgB6bpEo,67
38
- agno/db/dynamo/dynamo.py,sha256=i76y8aVZO2yuk1f0us4Q6Y2AhCmEMo8-WcFGNxYZ7ug,71616
39
- agno/db/dynamo/schemas.py,sha256=vCB9-BN255muGpw5wt-5aolm8rHO5QI2SEfwfSc2HeY,11079
40
- agno/db/dynamo/utils.py,sha256=WnFKxZJtnfyJ6rdU2oUCofUyFqjlo2_hB9Q5fkez8V4,25058
40
+ agno/db/dynamo/dynamo.py,sha256=ayii2yLJ267ZwzCyF6GAxSXaOjE7-HAStnLQGneYwg8,78220
41
+ agno/db/dynamo/schemas.py,sha256=Pdtpa0wV_M8G_inM2rA8pBn2LdxdjG-irltQpYIQPMo,12932
42
+ agno/db/dynamo/utils.py,sha256=dKVLfZOGvyCrEcVZZ6t1mHwyqZvqSNFzq0l-xVhGyIU,27390
41
43
  agno/db/firestore/__init__.py,sha256=lYAJjUs4jMxJFty1GYZw464K35zeuBlcoFR9uuIQYtI,79
42
- agno/db/firestore/firestore.py,sha256=m43nqyp9kOqGrEGYZAbJMJCUgy2zL9t5bpl6Zkm7sn4,61575
43
- agno/db/firestore/schemas.py,sha256=k8YuG_PC_Hd3WCLaDkk4bAJP8BmAWmrt6VXuG1wr2Ak,4132
44
- agno/db/firestore/utils.py,sha256=OT1qvVGnf8iChCb-nw57HBSQRMALmNC_KaqFxuT7VoA,10311
44
+ agno/db/firestore/firestore.py,sha256=dFAIRpRP3kyz5WpP3TgW7uUSR4SAqyLdMavDyBIqB0U,70635
45
+ agno/db/firestore/schemas.py,sha256=sPbi2teuzCfRECnCyj6LrNNu0drSqbBHpH-o1xoJYfs,4392
46
+ agno/db/firestore/utils.py,sha256=ddmij9sdKDPbAnpUIyA74G1L55md9JWrrwGAssjy1Es,13808
45
47
  agno/db/gcs_json/__init__.py,sha256=aTR4o3aFrzfANHtRw7nX9uc5_GsY52ch0rmoo7uXuc4,76
46
- agno/db/gcs_json/gcs_json_db.py,sha256=v0wE62gyMkFUPZ5OilARTUEqNdoW86YhyxmvIlhu0HY,47077
47
- agno/db/gcs_json/utils.py,sha256=Ist4HuQoYvC2BKr01oTxDp9mfMirz1UBBDKElbXg2bg,6610
48
+ agno/db/gcs_json/gcs_json_db.py,sha256=_9mBnZw9RUFWU4aMZTPW6Kl_N4bOE58EhVYYlid5INA,54793
49
+ agno/db/gcs_json/utils.py,sha256=wl7Pl88uMacRiYxxnq9VeDT1qA9QY-VhQjClH49E43o,8887
48
50
  agno/db/in_memory/__init__.py,sha256=OvR_FONhOh9PmcRfUA_6gvplZT5UGIBAgVKqVg6SWTA,80
49
- agno/db/in_memory/in_memory_db.py,sha256=9RQvbBdZ1ekD2p8E4EZxoWk9TWGJAgYDGpa7_hmM7hk,41355
50
- agno/db/in_memory/utils.py,sha256=X02wny18w5uvGE3caokPbCQTG6t7OErWNPkK3Umru3s,5780
51
+ agno/db/in_memory/in_memory_db.py,sha256=QXt4EYU6DsqQBErlDLkktbjaXfyp7mLAdpTNKDQeWQ4,46222
52
+ agno/db/in_memory/utils.py,sha256=c50_QSw2DHeujjl5iHlJlgWxlmNHXwKl3ZwyLvVgED4,8057
51
53
  agno/db/json/__init__.py,sha256=zyPTmVF9S-OwXCL7FSkrDmunZ_Q14YZO3NYUv1Pa14Y,62
52
- agno/db/json/json_db.py,sha256=ep1edUGQA-pUGAGxROLECrspEycZxVxHOk-y7qRVcmE,47655
53
- agno/db/json/utils.py,sha256=__c14xMdyw1AlyV7-DAGDr8YicqhfCbSS5C8OkVN2So,6658
54
+ agno/db/json/json_db.py,sha256=f511KuD2ibawSSlgRKJVG7U3naFDxs5_cZuS8OPFGm0,52925
55
+ agno/db/json/utils.py,sha256=zt47kshV7Bm7fniukAvUj87UlGexaVPe9hztOGWBbgM,8935
54
56
  agno/db/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
57
  agno/db/migrations/v1_to_v2.py,sha256=gj8deaEWUxOr0qJyMfjOpV3LxEh-otOSOxDckeUq0qU,24938
56
58
  agno/db/mongo/__init__.py,sha256=EPa9QkGNVwnuej72LhZDCeASMXa-e0pR20jsgwa9BhY,63
57
- agno/db/mongo/mongo.py,sha256=PjUEFjiOI0HywlDxj8DF1jhsv9-hejjJoiclpwMGkWk,68548
58
- agno/db/mongo/schemas.py,sha256=MAhfwx7_zxKucnZpgq_YSZANaF5MqiZ6qDByhdIREk8,2054
59
- agno/db/mongo/utils.py,sha256=D173PoWr6CF9QeLpXOuENIM8rzK8d__Kj3fJIPwMEW8,6902
59
+ agno/db/mongo/mongo.py,sha256=G2iu5KzTi9jXwMZXF2OmcqGXTndh5GbXY-aEjLXxLZ0,77128
60
+ agno/db/mongo/schemas.py,sha256=d2ZxqqzKYwz0Iexgrv1HWArGnmk3KUKJ37PCzFykodI,2314
61
+ agno/db/mongo/utils.py,sha256=UO-mI3w2-EUzgFQ3gzfT7-SeXlofau_eUzWknOhPvjY,9248
60
62
  agno/db/mysql/__init__.py,sha256=ohBMZ1E6ctioEF0XX5PjC4LtUQrc6lFkjsE4ojyXA8g,63
61
- agno/db/mysql/mysql.py,sha256=kP2XlzodZgWeQdyP6kDnla72d0U_r5uXgjA7X_neXhk,86151
62
- agno/db/mysql/schemas.py,sha256=2OAaX7ILykFCJBcEWH6kFXzNI8JnnYZCXClbVUoRbLc,5482
63
- agno/db/mysql/utils.py,sha256=7E83u2gKOkr7lxFPGM2ucLvfJarbEtNRxOeZQhLYKzU,10066
63
+ agno/db/mysql/mysql.py,sha256=_TXCD-_eVCyjAMhj4WOGVFTtjwRkkL28D7C-vZqPDdU,95380
64
+ agno/db/mysql/schemas.py,sha256=OpdAWhh-ElwQ5JOg1MKJqGJ16qzVTuyS56iH9Zw3oHs,6171
65
+ agno/db/mysql/utils.py,sha256=jF06bYYASQYdpmR6lwjD4iAp3-fq7moezjOnEYpju8g,12356
64
66
  agno/db/postgres/__init__.py,sha256=OQS1Glq2fn86wZXFp9KYS_pysHb435c-xdqDTwWf6iU,145
65
- agno/db/postgres/postgres.py,sha256=bnz-FG-x_mNwlvCHtrZcdbtGeKLJskj1mavpPZoY6jY,82101
66
- agno/db/postgres/schemas.py,sha256=adbKcMapqeXsEYeF6feWe2ja1paRzCMOkQSHHN6Psp8,5275
67
- agno/db/postgres/utils.py,sha256=iaY0ZqJgzadCitxSbsRchCtBE5WeUApfIj-VbdH9MJI,9447
67
+ agno/db/postgres/postgres.py,sha256=uHPjaIn2M1whqVPVR2mXvxCdVb0FXAlJrB3VzjCX5Bw,91621
68
+ agno/db/postgres/schemas.py,sha256=O049oyPU07tHwnyuOzYyiKcK1NYvh6cQmmsFOvA7LTs,5971
69
+ agno/db/postgres/utils.py,sha256=902GcRbXodhEl_0MwIZHKlvJoTBVD8oqM1uKieTOPnw,11737
68
70
  agno/db/redis/__init__.py,sha256=rZWeZ4CpVeKP-enVQ-SRoJ777i0rdGNgoNDRS9gsfAc,63
69
- agno/db/redis/redis.py,sha256=33oRsaBur0rInV9iXPwlHoDLpuq0keqggKm6wx2E_b8,55859
70
- agno/db/redis/schemas.py,sha256=LE1NApES1ao5X770HXB7jvrk2n31KiOWAsl5Z0xMG08,3637
71
- agno/db/redis/utils.py,sha256=z1pyakjlCQ_FyQUXe8pPer-pQDG70GLDOYQLNl4Oxrg,8955
72
- agno/db/schemas/__init__.py,sha256=HIKc2Apyk6ENJb_Py6sgNdbl6H7eo6PD5QMTmkdJSwI,72
71
+ agno/db/redis/redis.py,sha256=cg-kqHaPfBw1XnJ3ZT2zAWSGZ-jul1ziOFa0B84RANY,62938
72
+ agno/db/redis/schemas.py,sha256=3WilZq3NqZqRONyu_mAjjmQpClgYDYoWjfkvlOh0Tfw,4038
73
+ agno/db/redis/utils.py,sha256=b6FthFWSgrkMtjHSclPAyjW-ZwYLFn_3r-WFiCkuntI,11232
74
+ agno/db/schemas/__init__.py,sha256=g72Zr5_nm00yXHStv4pf9PG9bGLKXEK7Av6YQtrDbCQ,147
75
+ agno/db/schemas/culture.py,sha256=w4azKAVLf5X4xyRUFXMIEq0CA0pnyeN03W3eMpqScxo,4342
73
76
  agno/db/schemas/evals.py,sha256=T1zIiwrN5fxZVD2em85wQ9CV-HSVZvNF4D4v9_w30VA,786
74
77
  agno/db/schemas/knowledge.py,sha256=qVL6jEdaUG92WJw70-FrA7atetPqrpZnLYkYZDuiYho,1227
75
78
  agno/db/schemas/memory.py,sha256=kKlJ6AWpbwz-ZJfBJieartPP0QqeeoKAXx2Ity4Yj-Y,1461
76
79
  agno/db/schemas/metrics.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
80
  agno/db/singlestore/__init__.py,sha256=dufbaod8ZZIeZIVi0hYJQ8Eu2DfIfWdIy00cpqAsx9U,87
78
- agno/db/singlestore/schemas.py,sha256=yDXBGtswAuVxKX1_GvKIBt6IlEor2HiAbYPrwX5SSJ8,5489
79
- agno/db/singlestore/singlestore.py,sha256=YlugM8NEVLClL2tcpplIv2crwpdGc-jiqtzxxK87AGs,84072
80
- agno/db/singlestore/utils.py,sha256=LG0NhOx5B5oJY-Kcc_3ipNzBT1J-mBGx8TARUkRtWv8,11377
81
+ agno/db/singlestore/schemas.py,sha256=Eb9wipCjWr48dlF3CMDa53WDvFsr7QhLOSaTgbUkMKg,6178
82
+ agno/db/singlestore/singlestore.py,sha256=JQsHRPv-D36e0klJnYc2__0DRFxyjfXKN0XXYXKafkI,93288
83
+ agno/db/singlestore/utils.py,sha256=ZYkpaSwFE_EiJ06vOd_bpr22RvdercFObTTlw3hfq2M,13667
81
84
  agno/db/sqlite/__init__.py,sha256=LocJ-suv6xpdun8HUxgbD3bTgmQArQvLJkbpb1pRGy0,67
82
- agno/db/sqlite/schemas.py,sha256=-L3hmlg80PAPmfexPrWtnepSzlmZHrbyPZ754nJlVdE,5191
83
- agno/db/sqlite/sqlite.py,sha256=zhCY_bOsKfH5dAsi2FJGGjnSW4SiupywZplSj7DqAsc,84074
84
- agno/db/sqlite/utils.py,sha256=DgG9G2g37ry9KscNOdi5AC8DYlSEbIAlRI0qGMfTyIs,9637
85
+ agno/db/sqlite/schemas.py,sha256=NyEvAFG-hi3Inm5femgJdorxJ5l2-bXLWBhxJ4r7jW0,5832
86
+ agno/db/sqlite/sqlite.py,sha256=kjByY--whzmwLsc8KpiB3Ncgxp4LKtMTfEggmn5DK8s,93910
87
+ agno/db/sqlite/utils.py,sha256=BLpiCOsydc9qIG-3aBtTibk3egmD272whUkM8dE0GE0,12068
85
88
  agno/db/surrealdb/__init__.py,sha256=C8qp5-Nx9YnSmgKEtGua-sqG_ntCXONBw1qqnNyKPqI,75
86
89
  agno/db/surrealdb/metrics.py,sha256=oKDRyjRQ6KR3HaO8zDHQLVMG7-0NDkOFOKX5I7mD5FA,10336
87
- agno/db/surrealdb/models.py,sha256=tFQMiVp4FH0WSHI6Co5TLTa76oUB8fTnpRG5eFUQslc,9507
90
+ agno/db/surrealdb/models.py,sha256=2KBxSxiEI4yQ2OTOr1HVeL8Fd52tQfWkM53kwzqUmyw,11512
88
91
  agno/db/surrealdb/queries.py,sha256=s__yJSFIx387IEflcDdti7T5j6H9NX_-zIj13F9CN9s,2051
89
- agno/db/surrealdb/surrealdb.py,sha256=uUySaUstsmejAwz5lrAWiMXC5KO8k2TO1lypj63HDu4,46095
90
- agno/db/surrealdb/utils.py,sha256=CtgL48uFXsh-tQgWHtakH78QT4Z9LZTrhP15C6oIJds,3160
92
+ agno/db/surrealdb/surrealdb.py,sha256=QAmtMUdJIWY7E1xmZJggHi43h7V4pDSS4eLwhxun0xs,52190
93
+ agno/db/surrealdb/utils.py,sha256=PcZo_cTy-jI59I-XhzAomRLdV9-m0irtO4C-AYGSghs,5405
91
94
  agno/eval/__init__.py,sha256=vCYcIbfOkT2lL8vZJ9zsea6j3byp5A-mxEb_45VaD8I,449
92
95
  agno/eval/accuracy.py,sha256=vfJ9Kx33YGsXenNKVHPK5h0IeB2tZMlfSKu6OA-mj9g,33065
93
96
  agno/eval/performance.py,sha256=b4BuSlGkraym9EQick4KraA1OyMa0U7LMjoFozpNbIs,30528
@@ -103,7 +106,7 @@ agno/integrations/discord/__init__.py,sha256=MS08QSnegGgpDZd9LyLjK4pWIk9dXlbzgD7
103
106
  agno/integrations/discord/client.py,sha256=2IWkA-kCDsDXByKOGq2QJG6MtFsbouzNN105rsXn95A,8375
104
107
  agno/knowledge/__init__.py,sha256=PJCt-AGKGFztzR--Ok2TNKW5QEqllZzqiI_7f8-1u80,79
105
108
  agno/knowledge/content.py,sha256=q2bjcjDhfge_UrQAcygrv5R9ZTk7vozzKnQpatDQWRo,2295
106
- agno/knowledge/knowledge.py,sha256=LnBQ-feIaaHwusgBMGWvXzj4_hiZBCg-ZglfkBYE6nA,77963
109
+ agno/knowledge/knowledge.py,sha256=P3-aEys4nYbLWs-vCoMQ1vf5A3s6wiKNp4yqscH-wGg,78103
107
110
  agno/knowledge/types.py,sha256=ciwDLK9MXwi_W_g4nUChEmK6meDQyqTqGK2Ad-wM1os,754
108
111
  agno/knowledge/utils.py,sha256=_uhEFtz4p7-cIKffdj5UZ__c-u96rs2UWP6dv5HpOMk,6490
109
112
  agno/knowledge/chunking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -140,7 +143,7 @@ agno/knowledge/reader/arxiv_reader.py,sha256=PtqP3bB4eZAYUlK9_ytPCFiy4icvMj7bIZN
140
143
  agno/knowledge/reader/base.py,sha256=9D3GU6RdGIvVD1cdOHNieA8vCIZxUBJ6HLbwl1Ol-1I,3631
141
144
  agno/knowledge/reader/csv_reader.py,sha256=GZiRh9yx0TM_GAEOQiBp3VfffbwGBZ7M2e5eSs45gIs,6491
142
145
  agno/knowledge/reader/docx_reader.py,sha256=oLQzbtZJg3wNFFzddrV77iDIV2Az4gvM32DLA0QrKZE,3309
143
- agno/knowledge/reader/field_labeled_csv_reader.py,sha256=ECcg9Fr0DtxKiAF0bLRwTIxVaM3Ivp_EPTgaeWTHNwA,11764
146
+ agno/knowledge/reader/field_labeled_csv_reader.py,sha256=cHjmEtmLNF9DRk0N5OtKOxAwYHJlMLQ0_7BScRqAxkc,11643
144
147
  agno/knowledge/reader/firecrawl_reader.py,sha256=SCbcRLkMrUb2WiC6SPuAoZULtHITa2VAmBtZlGmamGM,6855
145
148
  agno/knowledge/reader/json_reader.py,sha256=KfDgHno_XHORIGaoA1Q2Y5M7nkcTFM9IUzWXkjVjYKQ,3245
146
149
  agno/knowledge/reader/markdown_reader.py,sha256=HoSEkX2Svl2tEMDyzAmRNmwxsterb3i3-1-EQR6N4IU,5272
@@ -160,11 +163,11 @@ agno/knowledge/reranker/cohere.py,sha256=2Be5blVyeZ3vYlnFa2NYvJuytjaCB8G2OWJ11pQ
160
163
  agno/knowledge/reranker/infinity.py,sha256=N9geg9xZqRdJZksfQcvbGJgMymXrQVJl_K5KICWqH8o,7193
161
164
  agno/knowledge/reranker/sentence_transformer.py,sha256=ZN4SqnMZsUhg5G7AzlONM1_UjezfNrjFYXpNVHD4U-U,1912
162
165
  agno/memory/__init__.py,sha256=XWKJU5SJObYZqEKMZ2XYwgH8-YeuWUoSRfT4dEI5HnY,101
163
- agno/memory/manager.py,sha256=qQYnrCWCA2P_z_sKR1_sJ5kGgtCL2WnpLRSyAL5unfU,51717
166
+ agno/memory/manager.py,sha256=IWMnFxRF604zLY1jQArOggMwLjUUKXiPWt7RtLlpHUk,51907
164
167
  agno/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
168
  agno/models/base.py,sha256=bjP0Xt5-Jlk1I_7wHmuv8lhUPE75WzZ_iF3U-d81TUI,85214
166
169
  agno/models/defaults.py,sha256=1_fe4-ZbNriE8BgqxVRVi4KGzEYxYKYsz4hn6CZNEEM,40
167
- agno/models/message.py,sha256=yHiNMsgadNEjAYAvtSJgktwsXqlRYC8N_DRShCzjYtc,18914
170
+ agno/models/message.py,sha256=HMlY71ZCDWCUrNTqIbRezWZK5FfWcvcs5eg_hhjbuqo,19023
168
171
  agno/models/metrics.py,sha256=81IILXZwGmOTiWK003bi5mg4bM1f4LCWbwyamjFzp18,4500
169
172
  agno/models/response.py,sha256=UIuqTBVfXOpxlpf8wOzc6wIrb0vR0FFO6JIkASaPfOQ,4213
170
173
  agno/models/utils.py,sha256=PprNlVI8d8loHayjRsrc4TL38sfkFMS3EVZcF5cLXoA,669
@@ -252,7 +255,7 @@ agno/models/vllm/vllm.py,sha256=UtiiSvUR4pG_1CzuhY5MWduRgzM2hGVTakKJ6ZBdQmo,2730
252
255
  agno/models/xai/__init__.py,sha256=ukcCxnCHxTtkJNA2bAMTX4MhCv1wJcbiq8ZIfYczIxs,55
253
256
  agno/models/xai/xai.py,sha256=jA6_39tfapkjkHKdzbKaNq1t9qIvO1IaZY1hQqEmFVs,4181
254
257
  agno/os/__init__.py,sha256=h8oQu7vhD5RZf09jkyM_Kt1Kdq_d5kFB9gJju8QPwcY,55
255
- agno/os/app.py,sha256=tkMf3zl1cVtx_UMc8hhAXYm78xWCxpdaDB4xmTKqIeM,26723
258
+ agno/os/app.py,sha256=xCO4zaTzsWArRjLD0jsNZcP5ixjZxKQyPlXs6fljbJ4,27819
256
259
  agno/os/auth.py,sha256=FyBtAKWtg-qSunCas5m5pK1dVEmikOSZvcCp5r25tTA,1844
257
260
  agno/os/config.py,sha256=u4R9yazQXIcKjR3QzEIZw_XAe_OHp3xn0ff7SVkj2jA,2893
258
261
  agno/os/mcp.py,sha256=vJhjjSm1KC61HLoxPj24lSrjkjo7plkoFfcQX2BmTp0,10253
@@ -323,7 +326,7 @@ agno/session/summary.py,sha256=THBbzE48V81p4dKUX2W8OvbpsNO5dI6BdtqDyjfcVqw,8433
323
326
  agno/session/team.py,sha256=0lS-9ljtG17iyC0n8sq_7aEy9MZsdfMf8VgObqJ_3tg,10384
324
327
  agno/session/workflow.py,sha256=tluE_3ERMBYJtffpwlrhdETWlzJk6Xw2x06FZ1Y3fXg,7397
325
328
  agno/team/__init__.py,sha256=toHidBOo5M3n_TIVtIKHgcDbLL9HR-_U-YQYuIt_XtE,847
326
- agno/team/team.py,sha256=TinwhqZQLf-ouVIlfemIEd11h4efSjQUdDBijSoLT2U,377665
329
+ agno/team/team.py,sha256=doNSshovZr4_amrHGgEDyVtCG0WrUe6IaSNNXC2eZ0M,377664
327
330
  agno/tools/__init__.py,sha256=jNll2sELhPPbqm5nPeT4_uyzRO2_KRTW-8Or60kioS0,210
328
331
  agno/tools/agentql.py,sha256=S82Z9aTNr-E5wnA4fbFs76COljJtiQIjf2grjz3CkHU,4104
329
332
  agno/tools/airflow.py,sha256=uf2rOzZpSU64l_qRJ5Raku-R3Gky-uewmYkh6W0-oxg,2610
@@ -366,11 +369,11 @@ agno/tools/firecrawl.py,sha256=sMV6XRaSIyTSkTJbtMdIQPTsN11ozJ78YDDi04kBvQE,5341
366
369
  agno/tools/function.py,sha256=QDbGgK8BYvFHuPRnVxMb-bXCao8z1hvkwBm8eaKe4m0,45671
367
370
  agno/tools/giphy.py,sha256=_wOCWVnMdFByE9Yoz4Pf2MoKxSjkUTiPJZ928_BNe2M,3070
368
371
  agno/tools/github.py,sha256=wct6P00YzF3zgWoV2c5aHeXX_2dgb9LqRwJAboi6QXw,70286
369
- agno/tools/gmail.py,sha256=MlLlEvxHly_2oKAZaKxXDmoHLTbWDSXcjOASGt7RpY8,28067
372
+ agno/tools/gmail.py,sha256=gcpLfTQP--TJz9bPD12SDwwHickSLZ7yugWZcNNIuGg,29799
370
373
  agno/tools/google_bigquery.py,sha256=j0c14CgGK8KvD7eEirsdAx7RSwcfMheugn84ySq6miU,4483
371
374
  agno/tools/google_drive.py,sha256=dxGr_NhMsqFsr_tR3w4MgLXm7_nlCTI43sCmKw60N_4,11159
372
375
  agno/tools/google_maps.py,sha256=AqPEIt4u6B2kQtzOnL5PH3RXoefCfjT_Uvm3coAqzaY,9513
373
- agno/tools/googlecalendar.py,sha256=A6UeelPYOpo-51q6YwYjkGGR9HH4Gw025jUAP5Vm1XI,28919
376
+ agno/tools/googlecalendar.py,sha256=4WxmPIaxxsxAYP56XT7ehnmKEwicn9w_KOe8LMy5KB0,28670
374
377
  agno/tools/googlesearch.py,sha256=xRuaEqn7N6JIQC6z9jFuA0Kdtoe5MafGqRMtZ8jW2AQ,3566
375
378
  agno/tools/googlesheets.py,sha256=m8K0A8I5d68HG19OajDLCgGJzXnsnh33OQQOc6K5Qbg,15704
376
379
  agno/tools/hackernews.py,sha256=h5w-L5FkGGMAHr6Jjez6164-UYZ_2r2qFAzwMrKLdRM,2776
@@ -544,16 +547,16 @@ agno/vectordb/weaviate/__init__.py,sha256=FIoFJgqSmGuFgpvmsg8EjAn8FDAhuqAXed7fja
544
547
  agno/vectordb/weaviate/index.py,sha256=y4XYPRZFksMfrrF85B4hn5AtmXM4SH--4CyLo27EHgM,253
545
548
  agno/vectordb/weaviate/weaviate.py,sha256=8KNa5a-RuksE6w9poD4vi_ixUBeoB96PkzCL9DHSs5o,39406
546
549
  agno/workflow/__init__.py,sha256=lwavZXIkgqajbSf1jMqzE7kbXBIFmk5niI_NgpVI-gA,542
547
- agno/workflow/condition.py,sha256=MgJnHRPEJ2qCjUkcHKyZfOuAn-C38ZTgVcYjY8iTgrI,30122
550
+ agno/workflow/condition.py,sha256=9nnwzaf4SiaMKgSIbZ_mekP6ndx3daAas3vNyyUyclE,31327
548
551
  agno/workflow/loop.py,sha256=q2XssC179htRC7KPiebUcvr0lKexfZUB9aUO4D3tOrk,32305
549
552
  agno/workflow/parallel.py,sha256=Gb6XZbwDJgmBBbuiZTFHvphQqrsMVgM-HTOMoiIHweg,34843
550
- agno/workflow/router.py,sha256=-gPT43a1mP0tnE6wQa4tEAuGWNppel8DbmCg0ajo-L0,28295
553
+ agno/workflow/router.py,sha256=uMUvjOgBcqpCzulM-9kVjdzXheqaMmuGz60F5JXPXTw,29449
551
554
  agno/workflow/step.py,sha256=2vBv97QoDLtFJnWAueDLLbzWvB3dxPd5Cl_dwqdl5Ew,60251
552
555
  agno/workflow/steps.py,sha256=1qOcH0SuPTPE0Ac3sRyRLjFoMcKyTo44hlJXdbOBNnM,25389
553
556
  agno/workflow/types.py,sha256=DutB4UkEppJoWRiNaGEnPk6xFNpg0oCBwOb7VJ8T_xE,18646
554
557
  agno/workflow/workflow.py,sha256=AD2mKXap840IwPb2WMnVJM30lQLAFUfWxd7nqQJ52hU,137906
555
- agno-2.1.8.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
556
- agno-2.1.8.dist-info/METADATA,sha256=v-MZ_AVGcZZ6oE5_GEsZR8kzP4MBxC38IZ9CFKhBhZo,24504
557
- agno-2.1.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
558
- agno-2.1.8.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
559
- agno-2.1.8.dist-info/RECORD,,
558
+ agno-2.1.10.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
559
+ agno-2.1.10.dist-info/METADATA,sha256=g07lktwrtIdLn4D35ScRdHjz2TXIZnMD96VQXIHW1sY,24505
560
+ agno-2.1.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
561
+ agno-2.1.10.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
562
+ agno-2.1.10.dist-info/RECORD,,
File without changes