agno 2.3.6__py3-none-any.whl → 2.3.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
agno/workflow/parallel.py CHANGED
@@ -1,6 +1,7 @@
1
1
  import asyncio
2
2
  import warnings
3
3
  from concurrent.futures import ThreadPoolExecutor, as_completed
4
+ from contextvars import copy_context
4
5
  from copy import deepcopy
5
6
  from dataclasses import dataclass
6
7
  from typing import Any, AsyncIterator, Awaitable, Callable, Dict, Iterator, List, Optional, Union
@@ -267,8 +268,9 @@ class Parallel:
267
268
 
268
269
  with ThreadPoolExecutor(max_workers=len(self.steps)) as executor:
269
270
  # Submit all tasks with their original indices
271
+ # Use copy_context().run to propagate context variables to child threads
270
272
  future_to_index = {
271
- executor.submit(execute_step_with_index, indexed_step): indexed_step[0]
273
+ executor.submit(copy_context().run, execute_step_with_index, indexed_step): indexed_step[0]
272
274
  for indexed_step in indexed_steps
273
275
  }
274
276
 
@@ -449,7 +451,11 @@ class Parallel:
449
451
 
450
452
  with ThreadPoolExecutor(max_workers=len(self.steps)) as executor:
451
453
  # Submit all tasks
452
- futures = [executor.submit(execute_step_stream_with_index, indexed_step) for indexed_step in indexed_steps]
454
+ # Use copy_context().run to propagate context variables to child threads
455
+ futures = [
456
+ executor.submit(copy_context().run, execute_step_stream_with_index, indexed_step)
457
+ for indexed_step in indexed_steps
458
+ ]
453
459
 
454
460
  # Process events from queue as they arrive
455
461
  completed_steps = 0
agno/workflow/step.py CHANGED
@@ -644,7 +644,7 @@ class Step:
644
644
  session_state=session_state_copy, # Send a copy to the executor
645
645
  stream=True,
646
646
  stream_events=stream_events,
647
- yield_run_response=True,
647
+ yield_run_output=True,
648
648
  run_context=run_context,
649
649
  **kwargs,
650
650
  )
@@ -653,7 +653,7 @@ class Step:
653
653
  for event in response_stream:
654
654
  if isinstance(event, RunOutput) or isinstance(event, TeamRunOutput):
655
655
  active_executor_run_response = event
656
- break
656
+ continue
657
657
  # Only yield executor events if stream_executor_events is True
658
658
  if stream_executor_events:
659
659
  enriched_event = self._enrich_event_with_context(
@@ -1174,7 +1174,7 @@ class Step:
1174
1174
  stream=True,
1175
1175
  stream_events=stream_events,
1176
1176
  run_context=run_context,
1177
- yield_run_response=True,
1177
+ yield_run_output=True,
1178
1178
  **kwargs,
1179
1179
  )
1180
1180
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agno
3
- Version: 2.3.6
3
+ Version: 2.3.8
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
@@ -153,7 +153,7 @@ Requires-Dist: mcp>=1.9.2; extra == "mcp"
153
153
  Provides-Extra: mem0
154
154
  Requires-Dist: mem0ai; extra == "mem0"
155
155
  Provides-Extra: memori
156
- Requires-Dist: memorisdk==2.3.3; extra == "memori"
156
+ Requires-Dist: memorisdk==3.0.5; extra == "memori"
157
157
  Provides-Extra: newspaper
158
158
  Requires-Dist: newspaper4k; extra == "newspaper"
159
159
  Requires-Dist: lxml_html_clean; extra == "newspaper"
@@ -166,6 +166,8 @@ Requires-Dist: parallel-web; extra == "parallel"
166
166
  Provides-Extra: psycopg
167
167
  Requires-Dist: psycopg-binary; extra == "psycopg"
168
168
  Requires-Dist: psycopg; extra == "psycopg"
169
+ Provides-Extra: redshift
170
+ Requires-Dist: redshift-connector; extra == "redshift"
169
171
  Provides-Extra: reportlab
170
172
  Requires-Dist: reportlab; extra == "reportlab"
171
173
  Provides-Extra: scrapegraph
@@ -327,6 +329,7 @@ Requires-Dist: agno[mem0]; extra == "tools"
327
329
  Requires-Dist: agno[memori]; extra == "tools"
328
330
  Requires-Dist: agno[google_bigquery]; extra == "tools"
329
331
  Requires-Dist: agno[psycopg]; extra == "tools"
332
+ Requires-Dist: agno[redshift]; extra == "tools"
330
333
  Requires-Dist: agno[reportlab]; extra == "tools"
331
334
  Requires-Dist: agno[trafilatura]; extra == "tools"
332
335
  Requires-Dist: agno[neo4j]; extra == "tools"
@@ -6,7 +6,7 @@ agno/media.py,sha256=eTfYb_pwhX_PCIVPSrW4VYRqmoxKABEF1aZClrVvQ30,16500
6
6
  agno/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  agno/table.py,sha256=9hHFnInNsrj0ZKtWjGDP5c6kbmNdtQvDDYT2j2CZJ6o,198
8
8
  agno/agent/__init__.py,sha256=s7S3FgsjZxuaabzi8L5n4aSH8IZAiZ7XaNNcySGR-EQ,1051
9
- agno/agent/agent.py,sha256=kEy31Yl3tlnwwf22FsY7jhMqoHdDQOnj3-V79Jb30v0,487893
9
+ agno/agent/agent.py,sha256=ljgnuhq2UTjMC6-hSSnb4eM66x8ItubRpNWvR4tpNtE,497820
10
10
  agno/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  agno/api/agent.py,sha256=fKlQ62E_C9Rjd7Zus3Gs3R1RG-IhzFV-ICpkb6SLqYc,932
12
12
  agno/api/api.py,sha256=gFhVjxJYkQsw8mBl2fhoStMPGlyJ37DJaqgUOwZVvQI,1021
@@ -35,7 +35,7 @@ agno/culture/__init__.py,sha256=nVScbcUeBmkj8l-rJWGOVGytwp5xB6IfUEL_h6atzQw,118
35
35
  agno/culture/manager.py,sha256=sh48GgfkgwQth2vB5ulgrbv2HGAfVidABrwAYEzWGBs,39833
36
36
  agno/db/__init__.py,sha256=bfd_tpKsIKCjZosnFqID26VoWqy88v8gzkf9kLHToY4,625
37
37
  agno/db/base.py,sha256=X5iJTNCFPXL_ueVKSe09uS0NHsPaXHC3LKwJFhvZyLg,31607
38
- agno/db/utils.py,sha256=eL0prfDrTEfOwNlOZeoZE4pu59bNJET22uh8wgzz-cw,4879
38
+ agno/db/utils.py,sha256=IAMrvy0MrqVr6VIN0ntG17g4nGDV9lUwRzneAAI02kI,4943
39
39
  agno/db/async_postgres/__init__.py,sha256=ja_thcYP3bP0DD3da6iUVDR_w2-S6B3M-UxBlkRfAvY,76
40
40
  agno/db/dynamo/__init__.py,sha256=fZ7NwKbyhoIu7_4T6hVz44HkIINXMnTfFrDrgB6bpEo,67
41
41
  agno/db/dynamo/dynamo.py,sha256=qnrEYxkhLne_R0MXicNdoqZK2a318GHCmMRV_t2boR8,108870
@@ -60,21 +60,21 @@ agno/db/migrations/v1_to_v2.py,sha256=gj8deaEWUxOr0qJyMfjOpV3LxEh-otOSOxDckeUq0q
60
60
  agno/db/migrations/versions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
61
  agno/db/migrations/versions/v2_3_0.py,sha256=WikuOtgQs_Tq8o3JndCMG6HAMzKvz4GVth9V5V5RuvE,35161
62
62
  agno/db/mongo/__init__.py,sha256=NG2WC2jE5PX1kMXTYCVHjhomf5DAJgvzSj45QHdvl2E,466
63
- agno/db/mongo/async_mongo.py,sha256=7s26a6NH5y6Wdb_8vSRG4cHyk2rzkx6rhbFAbizqV1M,108485
64
- agno/db/mongo/mongo.py,sha256=zQG3uyiBgJZQlnkBOth9EXc8KedKr14p7gRkyMn3HNM,99320
63
+ agno/db/mongo/async_mongo.py,sha256=0jh36UmtYqeQOyMT9MB-2GE7aqCUEN0jGWJzuv8ZfCo,107154
64
+ agno/db/mongo/mongo.py,sha256=GHeDRw2VhhuTDtLcXpsf2UMU_WlJbJCc6n131Omn3Bw,98457
65
65
  agno/db/mongo/schemas.py,sha256=Q3JrMZ3zCKZcHilh5CoQePI5d5dRjHAtjs5QuWrxiWc,3098
66
66
  agno/db/mongo/utils.py,sha256=1KrbF1PR_707e9SqXZcquaw_N7mRYm9HjJnvYwBjgG8,9921
67
67
  agno/db/mysql/__init__.py,sha256=ohBMZ1E6ctioEF0XX5PjC4LtUQrc6lFkjsE4ojyXA8g,63
68
- agno/db/mysql/mysql.py,sha256=Ve4ojP3slr_qMxXQ0hi4XDQPtOtgm2jBR4CEg5ao6j8,121370
68
+ agno/db/mysql/mysql.py,sha256=io5bOVEXvcM85DJsJhYUf5w4nCeeF6TtU9ypZAM3eiQ,120209
69
69
  agno/db/mysql/schemas.py,sha256=_4p2IWt0zVq-fHuxFhEpWLWxlp3QPKk8xtNMiB1TNOY,9067
70
70
  agno/db/mysql/utils.py,sha256=PdqN-SxM-ox8HU9CZyxzvs2D1FE2vdZFVCyFgFcQsyU,12366
71
71
  agno/db/postgres/__init__.py,sha256=Ojk00nTCzQFiH2ViD7KIBjgpkTKLRNPCwWnuXMKtNXY,154
72
- agno/db/postgres/async_postgres.py,sha256=tpiqala1ZYRLcD2YTnfQAr6ivbhyito2IChiG5A6CSs,106541
73
- agno/db/postgres/postgres.py,sha256=ouC5XrcGL95R30OEEjfdtMIb7jdJTjS_l6xzf1kS2cw,118023
72
+ agno/db/postgres/async_postgres.py,sha256=pZAVNSk41_nD5B4DtUJ1jDX1l2ZDe-tAdkhGR-ru5pQ,106024
73
+ agno/db/postgres/postgres.py,sha256=rbkI4YJQYHqryMrpZOLtP07i8izbcschg7XQZlVI160,116664
74
74
  agno/db/postgres/schemas.py,sha256=G0BRG9GcUcO43-TU52nKSEog8v3tdJNwIhEjts9dCns,8405
75
75
  agno/db/postgres/utils.py,sha256=UE3UQZ-h7fADAKBsX4BWcDka54YNROEpBrlfTmDvpqc,15471
76
76
  agno/db/redis/__init__.py,sha256=rZWeZ4CpVeKP-enVQ-SRoJ777i0rdGNgoNDRS9gsfAc,63
77
- agno/db/redis/redis.py,sha256=CDv2no3UEycJkKESgsggDyIFfM2rToDp_Gcb2yZuNUA,82524
77
+ agno/db/redis/redis.py,sha256=WgP-f8OfPTUEISY8O8meYbcJsFA3rpmXEthVQZRKdoM,82222
78
78
  agno/db/redis/schemas.py,sha256=90rDTGUyN1kYZ2KgeFjyOu1SwqYoTc1ErePxGqFlbj0,5217
79
79
  agno/db/redis/utils.py,sha256=vQpLI-V442B6m0q_l8IVEJctLD4P-kawbCm5A_Fnotg,11326
80
80
  agno/db/schemas/__init__.py,sha256=g72Zr5_nm00yXHStv4pf9PG9bGLKXEK7Av6YQtrDbCQ,147
@@ -85,12 +85,12 @@ agno/db/schemas/memory.py,sha256=dA7It1cN60dId-GpowmKTORy4Q6r9L49ZpGnnZkXmds,212
85
85
  agno/db/schemas/metrics.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
86
  agno/db/singlestore/__init__.py,sha256=dufbaod8ZZIeZIVi0hYJQ8Eu2DfIfWdIy00cpqAsx9U,87
87
87
  agno/db/singlestore/schemas.py,sha256=gnCpoRAztbPiZOCfx9MGBx1sySijwogajSjxIeGpsaA,8923
88
- agno/db/singlestore/singlestore.py,sha256=Q0MhS41gCm4xgtoHuLQjvUEHJYurqtlJD7aP5_46rx0,118882
88
+ agno/db/singlestore/singlestore.py,sha256=mShU-mGdOamf82VihF96e1tVjzSNol8Zs94f0S--HLs,118169
89
89
  agno/db/singlestore/utils.py,sha256=w2FVFIBpFJK6nKJVt1sgv9N-esmfpGY_8ViFRI69I2I,13677
90
90
  agno/db/sqlite/__init__.py,sha256=09V3i4y0-tBjt60--57ivZ__SaaS67GCsDT4Apzv-5Y,138
91
- agno/db/sqlite/async_sqlite.py,sha256=Amv3zha6FTHCuwAuYUzw0jGoIbNC5s6sv6QTJoMRPEw,123366
91
+ agno/db/sqlite/async_sqlite.py,sha256=62P-HurucmK3pk5aM8vjqHbHuuor5pDSuJW-vCLyE74,121942
92
92
  agno/db/sqlite/schemas.py,sha256=1lrIFWEhXYZJIlQYEnOl3XLp3UfsE5ILj2HUPmOf3cg,8265
93
- agno/db/sqlite/sqlite.py,sha256=3jiDLjs1vM3sTd6526v4JJhrpjL6cMaW9Xik0nTA57k,120340
93
+ agno/db/sqlite/sqlite.py,sha256=XjRJAmClEzYS6itHuPRD6RB9-iTtHgDkBmNLKy2vJOM,119118
94
94
  agno/db/sqlite/utils.py,sha256=sgp-KR7A5naTqTORHYHyP_21hG9LffOzCgqbx5S8RfE,15171
95
95
  agno/db/surrealdb/__init__.py,sha256=C8qp5-Nx9YnSmgKEtGua-sqG_ntCXONBw1qqnNyKPqI,75
96
96
  agno/db/surrealdb/metrics.py,sha256=oKDRyjRQ6KR3HaO8zDHQLVMG7-0NDkOFOKX5I7mD5FA,10336
@@ -181,11 +181,11 @@ agno/memory/strategies/base.py,sha256=13xCiBPtFUrpDaWbiz8zmNGjopT4VSIkcHVxfnvJ4W
181
181
  agno/memory/strategies/summarize.py,sha256=4M9zWTsooC3EtHpZoC7Z-yFaQgQoebRMNfZPitdsvB0,7307
182
182
  agno/memory/strategies/types.py,sha256=b3N5jOG_dM4AxT7vGagFIc9sqUUjxFtRHSoH4_AhEx8,1225
183
183
  agno/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
184
- agno/models/base.py,sha256=_fqSgV6xF2UVaMG5Q66lJ77TJu1AxnSPOayaSWEYQ2s,107116
184
+ agno/models/base.py,sha256=_ldhrYebV77fEzHtnILNILPW2aG4KwMjsT-THnYDwHA,114403
185
185
  agno/models/defaults.py,sha256=1_fe4-ZbNriE8BgqxVRVi4KGzEYxYKYsz4hn6CZNEEM,40
186
186
  agno/models/message.py,sha256=5-Nvqd6rXNca37yiVVQgBJY4w_gudVawg-ZQHcUX4SE,19763
187
187
  agno/models/metrics.py,sha256=81IILXZwGmOTiWK003bi5mg4bM1f4LCWbwyamjFzp18,4500
188
- agno/models/response.py,sha256=uIB2w7Hddut0sSI8oJBXU6r4IParQVQwkghfjJaB1aQ,7109
188
+ agno/models/response.py,sha256=uwSw2wKm5U1ZJ1R-8dMWV1I7TgFlKTJGOFq73WExO6s,7110
189
189
  agno/models/utils.py,sha256=jxAIIG2y7KBypwFlc87GzFnvogRpGLfd-wwr6KXZIj8,7269
190
190
  agno/models/aimlapi/__init__.py,sha256=XQcFRvt4qJ8ol9nCC0XKEkVEDivdNf3nZNoJZMZ5m8M,78
191
191
  agno/models/aimlapi/aimlapi.py,sha256=ELPv8RuEc6qUq4JxWEJVRITsK71rzUxw6_cP3Zd8Vz0,2179
@@ -247,7 +247,7 @@ agno/models/ollama/chat.py,sha256=Szc8rEWRvQ2CW50V5xAuccX4Ozc1BAV9wUPbFJhY_J8,16
247
247
  agno/models/openai/__init__.py,sha256=OssVgQRpsriU6aJZ3lIp_jFuqvX6y78L4Fd3uTlmI3E,225
248
248
  agno/models/openai/chat.py,sha256=KZupbtQxrNiHH9m-y6hrldLq0dGe0XYjvShJQsz-Kjw,40096
249
249
  agno/models/openai/like.py,sha256=wmw9PfAVqluBs4MMY73dgjelKn1yl5JDKyCRvaNFjFw,745
250
- agno/models/openai/responses.py,sha256=270XSJx6HaYi_vn9ENxZ_xL22x3tqmVChmHsm4z6coA,46643
250
+ agno/models/openai/responses.py,sha256=SahBoPgh8KFhRIE1QymhNhQoydFHFEmpBWxmFuixT88,46702
251
251
  agno/models/openrouter/__init__.py,sha256=ZpZhNyy_EGSXp58uC9e2iyjnxBctql7GaY8rUG-599I,90
252
252
  agno/models/openrouter/openrouter.py,sha256=fdFZy-1ZwvDKlO0b9TiXdtNe5ScSU4RJSYw08DojK_4,3284
253
253
  agno/models/perplexity/__init__.py,sha256=JNmOElDLwcZ9_Lk5owkEdgwmAhaH3YJ-VJqOI8rgp5c,90
@@ -284,7 +284,7 @@ agno/os/interfaces/base.py,sha256=vXkr1tRjWHTcmBlQFzvQjqURLhObmFtUAx82uij_j48,54
284
284
  agno/os/interfaces/a2a/__init__.py,sha256=Fs7--dx9drvtVS9QjsCCm0P7c-hJ7TzU8gNwKTQsZDA,62
285
285
  agno/os/interfaces/a2a/a2a.py,sha256=UiTX-GOuXxp1CQzRgtmgSSYNn2iFC_vKYnC37OidygM,1337
286
286
  agno/os/interfaces/a2a/router.py,sha256=OpNCHhYoCUyfcuRtiOdvUrUZnxfFB1jhMWraLA85XMg,10985
287
- agno/os/interfaces/a2a/utils.py,sha256=rTn9x0UGbX53EiAsljf87PmzYwLuvqaobUWpCn35ut0,39285
287
+ agno/os/interfaces/a2a/utils.py,sha256=J_m_l3noqfjjRRQ-kQQMAab1CnvDPh-M1regJ9_o5Yg,39286
288
288
  agno/os/interfaces/agui/__init__.py,sha256=1zrGICk4roXUINwSFZfqH6sBsbHmD5KjGYVJMGg4fKQ,66
289
289
  agno/os/interfaces/agui/agui.py,sha256=PKGoDDbtQFmEC0zRwZmsjS_5t9bJWJ-ZGwxEQsu9P-U,1415
290
290
  agno/os/interfaces/agui/router.py,sha256=U2w26v2oOCCOl5t5XduQChO3_eJBNH4Mk9BH77KKJag,5257
@@ -298,14 +298,14 @@ agno/os/interfaces/whatsapp/router.py,sha256=K7Ex4Xq-4hPcRKoVxBkb8KoGxH6WXC1bubd
298
298
  agno/os/interfaces/whatsapp/security.py,sha256=0GYdG28yeSpV47nMWASaFSTiGESSstcFAeL6amobvFE,1772
299
299
  agno/os/interfaces/whatsapp/whatsapp.py,sha256=tNJncEu_hm0lFOHbjaSoz5-VIKORR_pyW26cseBLfbs,989
300
300
  agno/os/middleware/__init__.py,sha256=EYsNzeixFgL3n8kepKWXT42fTTmrNyD8b8rOdXecMRI,94
301
- agno/os/middleware/jwt.py,sha256=xw9jQkVFMTTzUVird1k-egAYBmPd174L06YflYCvB5Q,9468
301
+ agno/os/middleware/jwt.py,sha256=O3O_h7WeO7xN6uj4NiBMgz9tTvJpfX2c-f4w4-ykBNA,9575
302
302
  agno/os/routers/__init__.py,sha256=du4LO9aZwiY1t59VcV9M6wiAfftFFlUZc-YXsTGy9LI,97
303
303
  agno/os/routers/health.py,sha256=AO3ec6Xi1wXOwUUFJhEcM45488qu6aZRJTwF2GLz6Ak,992
304
304
  agno/os/routers/home.py,sha256=xe8DYJkRgad55qiza0lHt8pUIV5PLSyu2MkybjuPDDE,1708
305
305
  agno/os/routers/evals/__init__.py,sha256=3s0M-Ftg5A3rFyRfTATs-0aNA6wcbj_5tCvtwH9gORQ,87
306
306
  agno/os/routers/evals/evals.py,sha256=S-ybLJtE3oLJrYiHGOAxr2FCYMYd1634GhV_M7SxHlA,18923
307
307
  agno/os/routers/evals/schemas.py,sha256=G6XvlEcl0FtgdsmHUjrEWxwxwGMhuYR2HsjfFT3QXUM,6523
308
- agno/os/routers/evals/utils.py,sha256=cmBuf5HtJLcLaVrb_a1HizEUIrXbdbKu9rzo8FWfG88,5567
308
+ agno/os/routers/evals/utils.py,sha256=TtHodLRbYvOxAPUxBHNm10AavctELUbdq5qDg8ZQbno,5955
309
309
  agno/os/routers/knowledge/__init__.py,sha256=ZSqMQ8X7C_oYn8xt7NaYlriarWUpHgaWDyHXOWooMaU,105
310
310
  agno/os/routers/knowledge/knowledge.py,sha256=6rR1CiHUDmg7kJy7g218IGaFEl0YAMbCciiFNJeEBMo,45320
311
311
  agno/os/routers/knowledge/schemas.py,sha256=GUr5RsRbI7K3qrrOlGVfW0Kf7XO6HjMviMW6nEl6qf8,8847
@@ -333,11 +333,12 @@ agno/reasoning/openai.py,sha256=JYk-mR9cMf1ibprX3MdL8oeCEDyQ3XaJw9PAIYvWeGk,3234
333
333
  agno/reasoning/step.py,sha256=6DaOb_0DJRz9Yh1w_mxcRaOSVzIQDrj3lQ6rzHLdIwA,1220
334
334
  agno/reasoning/vertexai.py,sha256=O9ntvalkIY2jLmWviEH1DnecMskqTL-mRZQBZohoHiU,2974
335
335
  agno/run/__init__.py,sha256=DFjpUomTzHvIDQQE_PUfp4oJM-7Ti8h8a_Fe5Kr8rjM,98
336
- agno/run/agent.py,sha256=nZU-GNyWeSgC22DNfIxsJbdqC6Dkqq_mEyhss1u3Xsg,27511
336
+ agno/run/agent.py,sha256=FWWA01bnmU_64Op0aEpGR5e4SjeWTgm-Tdtd-bm3gzE,28225
337
337
  agno/run/base.py,sha256=Oaq2_JRsTAM4gsfcBGpau2PzcZDscVhzzxCCi-UdvoY,8923
338
338
  agno/run/cancel.py,sha256=yoSj3fnx8D7Gf-fSngVIgd3GOp3tRaDhHH_4QeHDoAk,2667
339
339
  agno/run/messages.py,sha256=rAC4CLW-xBA6qFS1BOvcjJ9j_qYf0a7sX1mcdY04zMU,1126
340
- agno/run/team.py,sha256=OcvQET3iLUHXMMG_KTf9uP_8qRuhjMct5O1Ypib5JQI,27654
340
+ agno/run/requirement.py,sha256=5kblza2keXn48_gS5RjFn11IslWl--cHJRs5uSH4Olo,3311
341
+ agno/run/team.py,sha256=lV12npSB6IaYLSvO89LQqrZPoq0vB2hf9dYSe4z69AU,28083
341
342
  agno/run/workflow.py,sha256=cHH_ArV_Wws__8ug9Dwy3OVu7G2ND_K9E1PNdzk7CZo,25100
342
343
  agno/session/__init__.py,sha256=p6eqzWcLSHiMex2yZvkwv2yrFUNdGs21TGMS49xrEC4,376
343
344
  agno/session/agent.py,sha256=8vVtwwUC5moGWdRcG99Ik6Ay7gbFRrPPnT1ncOUFQIg,10365
@@ -345,7 +346,7 @@ agno/session/summary.py,sha256=9JnDyQyggckd3zx6L8Q5f-lglZvrFQxvPjGU8gLCgR4,10292
345
346
  agno/session/team.py,sha256=-MkB6qQCrnXLKko8L5s9fJOWPsjeK5Gx0SXEPoOwSFQ,13437
346
347
  agno/session/workflow.py,sha256=nPHnh1N0SJby5JRjysCUI-kTDCelQMFfqosEnnLzPIg,19690
347
348
  agno/team/__init__.py,sha256=toHidBOo5M3n_TIVtIKHgcDbLL9HR-_U-YQYuIt_XtE,847
348
- agno/team/team.py,sha256=hFYsNkj1ZLp7wSKSh0MXYFP8nFn0iDQEtslAw4UQe8w,430908
349
+ agno/team/team.py,sha256=TOc7jPk0sTVqV-3nm6By9QlX_632fsJtn-FjIvAC2Co,434423
349
350
  agno/tools/__init__.py,sha256=jNll2sELhPPbqm5nPeT4_uyzRO2_KRTW-8Or60kioS0,210
350
351
  agno/tools/agentql.py,sha256=S82Z9aTNr-E5wnA4fbFs76COljJtiQIjf2grjz3CkHU,4104
351
352
  agno/tools/airflow.py,sha256=uf2rOzZpSU64l_qRJ5Raku-R3Gky-uewmYkh6W0-oxg,2610
@@ -404,7 +405,6 @@ agno/tools/local_file_system.py,sha256=wWyhM5-lqDgDO_YNzRA8ekG-m2n89k8fWr8M1BWiQ
404
405
  agno/tools/lumalab.py,sha256=6WnZXbThKY2jL9zLswq1PVsbFm2jz81qshWqBZi59oo,6808
405
406
  agno/tools/mcp_toolbox.py,sha256=z6qZqUOmYueBoiQtTqRWV9GohhCAd3s5D4GyqtezHeY,12760
406
407
  agno/tools/mem0.py,sha256=5W5pZwJmBTt-_l4nvBdNQHavXFSKV9mVdJg5aso4JBI,7680
407
- agno/tools/memori.py,sha256=tubBYj0rQFbBXadhWxwTjjmb3Rnims536AVPkGdCMcw,13181
408
408
  agno/tools/memory.py,sha256=vpMoKtCqs3m6vkuqmZ4fW9IRf1OhXHQGGaq3exJK0Xo,18449
409
409
  agno/tools/mlx_transcribe.py,sha256=kuiYZAM5ZAdkiOfFdbGJsCb0gacnJRtSTFzuX8eWGLw,6379
410
410
  agno/tools/models_labs.py,sha256=E91DZDJOU2ldgI3U_ueFiZcXLLWfbh0MsZ2pYP9c0eQ,7933
@@ -421,11 +421,12 @@ agno/tools/openweather.py,sha256=vw5gIr9E5psiHpTyN-HyQ1T2upJwE205w-jJs_Pc7fc,869
421
421
  agno/tools/oxylabs.py,sha256=0SuckyOBIVMKCf3VyPDmKIZv4ILdu6N6AcDws7A3NiY,17619
422
422
  agno/tools/pandas.py,sha256=Q3I3-lVMOng06FYs5DQZtOOdujjLWfWL7j5kf-xx8Z0,4882
423
423
  agno/tools/parallel.py,sha256=YYQhPxDSKP7CdKamd6LnP9u5CKy03R8hpWN474unWcg,13976
424
- agno/tools/postgres.py,sha256=16oIQBcTb-3JMnhWEAj6PgXoeB8-gtjSipUQT9kaNhk,10075
424
+ agno/tools/postgres.py,sha256=jBQPzJzSd6I67cvLVgsQhmJRdTcbi9N_yPQH8WzKHHY,11505
425
425
  agno/tools/pubmed.py,sha256=4UVcZXVFFs6jV_7PQAWUGKZDEey1KbIJDztQhaS6m9g,8170
426
426
  agno/tools/python.py,sha256=02uHb30r66D7zbqHEbmniWZUAeeJZ0y-Q0_xWiPXChk,8783
427
427
  agno/tools/reasoning.py,sha256=5k2D89s0mAqJGo5AVBM6XDvJHjfun3GqollhVkZ6rxk,12581
428
428
  agno/tools/reddit.py,sha256=F6lUJFAoQmuZMqppauMteF1BprDj8mpu-lVd1reUJTk,18632
429
+ agno/tools/redshift.py,sha256=VdQOCsJuDgN90YCEXNvD7HICMyut3IXcGqtC0J-cckY,15917
429
430
  agno/tools/replicate.py,sha256=xVh6F2OCjIuCT8qt_ryzHb46ZctQ3_9bQhXQ5-HrzYQ,4459
430
431
  agno/tools/resend.py,sha256=TKsb5W_Yj0SaVBFL2ySACkehIW6bPnQ9GzYwldfordo,1990
431
432
  agno/tools/scrapegraph.py,sha256=j72ZfoITjqcRgGUesgHZddwt9kj1dS1KGyLKI0EFbHE,8328
@@ -442,7 +443,7 @@ agno/tools/tavily.py,sha256=1habkgXXHU8oStWmoZ29DVRBtl-tO-Pss1o9N1MovIU,10464
442
443
  agno/tools/telegram.py,sha256=e78EJlh44EmJNnv3FHyxW-sl72GjFYHpF6aGrCjNijc,1523
443
444
  agno/tools/todoist.py,sha256=p3TCQ0zAfmrhGIHDExVb8bmY0746UbzAbKHNFJlGggw,8177
444
445
  agno/tools/tool_registry.py,sha256=LMKqamTqjbFBD6SAV39PJULPmpfiHwSq6_NQoBxvGl8,85
445
- agno/tools/toolkit.py,sha256=hgVj5dwoQzD5VMgMtSGEqC5NGJvH5vbk_8c6RyUVnD4,6643
446
+ agno/tools/toolkit.py,sha256=c_lE_VkB36eeX1b89qr7cCsgx_p3f5fvoSV7WiNbu0E,7586
446
447
  agno/tools/trafilatura.py,sha256=AK2Q_0jqwOqL8-0neMI6ZjuUt-w0dGvW-w8zE6FrZVs,14792
447
448
  agno/tools/trello.py,sha256=y2fc60ITCIXBOk4TX3w70YjkMvM9SMKsEYpfXOKWtOI,8546
448
449
  agno/tools/twilio.py,sha256=XUbUhFJdLxP3nlNx2UdS9aHva-HSIGHD01cHHuE9Rfg,6752
@@ -455,7 +456,7 @@ agno/tools/website.py,sha256=jzcXLEsCfGIEqV88OLePiCEjfDoAbXQDCPAr9JbP8cU,1798
455
456
  agno/tools/webtools.py,sha256=5Dyp8U2ov32DkJMpj-7plzQZcfnCL7wlXbQIfRh8jmw,1305
456
457
  agno/tools/whatsapp.py,sha256=DaDyNogtbgrinJohfU7CmVQJSZsZO-00XUbRJegN_eE,11055
457
458
  agno/tools/wikipedia.py,sha256=u6xhc5wkEGcjng4leVCmo28o6Ti7OzDgRqiOqTMnmoc,2277
458
- agno/tools/workflow.py,sha256=4EJlPWEf1Y9sGK_cWENevh3NbdKnGZjzW1cJOJVtI30,12556
459
+ agno/tools/workflow.py,sha256=8__QqwLQ0uWXiwk99SoLl2rC3Sr_5nJur6CeGeU0xx4,12744
459
460
  agno/tools/x.py,sha256=gaFCel9FyDPnKLL03nkjsc9NGsfQOsS92XByp3hdwMo,14495
460
461
  agno/tools/yfinance.py,sha256=1bPUMZ7BWxEyblJLxyhzV6y4O-EBmljUM_aKfr0cf0o,11540
461
462
  agno/tools/youtube.py,sha256=H6SbBfWrmkazR8QrgXvLpqBOGAy4eHbRxkgTRJEt91Q,6667
@@ -487,7 +488,7 @@ agno/utils/common.py,sha256=EJaERgzrJnin1i0Aorv0Sf5y8AfMQWM-8yYhuYtD_4Q,4445
487
488
  agno/utils/dttm.py,sha256=MwVpm03DY_sR6NArsSBYg7_sBBsYfWMBQcLCfi7Q4rY,1290
488
489
  agno/utils/enum.py,sha256=wDHnruIf8cQU-_QdryY9LBugPCrlj-nOabQuEFnmeYM,753
489
490
  agno/utils/env.py,sha256=o8OwKhx78vi8MaXPes10mXejmJ13CqAh7ODKMS1pmcM,438
490
- agno/utils/events.py,sha256=eIuLXrZbD-s6owNNOGKww2NR2Xl1oBoP-sGnAbHsGic,28175
491
+ agno/utils/events.py,sha256=_E4AhD89hN1XGRLAAns4MOW_nklIgDUDREWK59rtJ3M,28320
491
492
  agno/utils/format_str.py,sha256=Zp9dDGMABUJzulp2bs41JiNv0MqmMX0qPToL7l_Ab1c,376
492
493
  agno/utils/functions.py,sha256=eHvGqO2uO63TR-QmmhZy2DEnC0xkAfhBG26z77T7jCo,6306
493
494
  agno/utils/gemini.py,sha256=-RrZRk4fKRsNCsFVKqXc1JzZaLU3_vIlzGS-YWbz4Bs,16055
@@ -583,14 +584,14 @@ agno/workflow/__init__.py,sha256=Ze2j811jwnsS8Sjv6u0Ap4l7Pyw_ivRof1uBYNJhb1w,609
583
584
  agno/workflow/agent.py,sha256=fKLB4kop7YYFeM1e-d3IzvVPsVF5cLNX6Z0gPn81ZR4,12170
584
585
  agno/workflow/condition.py,sha256=2zKLgrvwa3Up4aDKWSACOa7vZD0lSLX_lUW-LYJa0Yc,33939
585
586
  agno/workflow/loop.py,sha256=nDBXCRMhXHaRb-jnIbtEgY78h69zCdUrHwiJ6VXl5zo,33986
586
- agno/workflow/parallel.py,sha256=JusRfiYesmjwM2k0d6j3Ulm1_dVD4XupeRjuQFqXX5I,37714
587
+ agno/workflow/parallel.py,sha256=yTtc6dkNmIGU6zOI_7EZ3mATrJZFEArUUcUG47L-DwE,38007
587
588
  agno/workflow/router.py,sha256=HQDOnErjtiQdY_EskJBV_mZq_k6d1gH6JJPIM2Yfelw,32016
588
- agno/workflow/step.py,sha256=2BAZQI9nNs-qR0_r1I4WSuIB_sOXI7Q-OeQtb-bzSXU,74268
589
+ agno/workflow/step.py,sha256=BbzpETSMtlDkUsm47-TwhfGAgRM6TcWnp-orIJgOTQY,74267
589
590
  agno/workflow/steps.py,sha256=rbfue2M4qYEkgHueojCY1-cB4i1MFjO-jX6uTxyoKwk,27118
590
591
  agno/workflow/types.py,sha256=LObJ0VkUtepZ-uewv3j283S4hrCXy0eCplQzIzRG1ic,19175
591
592
  agno/workflow/workflow.py,sha256=6khBK6tbO9i2aSovduwNoQUfbcyEdoKyF4F86Uyj4gM,193181
592
- agno-2.3.6.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
593
- agno-2.3.6.dist-info/METADATA,sha256=gIJVEqmYGSNOqNGuDCgtPzy6kGq8l4fTDr1dnoemx-c,30890
594
- agno-2.3.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
595
- agno-2.3.6.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
596
- agno-2.3.6.dist-info/RECORD,,
593
+ agno-2.3.8.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
594
+ agno-2.3.8.dist-info/METADATA,sha256=ANDODVqjcZLqQzSxWL-lXsxjWQUUjUl8XThT9VSy4Og,31018
595
+ agno-2.3.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
596
+ agno-2.3.8.dist-info/top_level.txt,sha256=MKyeuVesTyOKIXUhc-d_tPa2Hrh0oTA4LM0izowpx70,5
597
+ agno-2.3.8.dist-info/RECORD,,
agno/tools/memori.py DELETED
@@ -1,339 +0,0 @@
1
- import json
2
- from typing import Any, Dict, List, Optional
3
-
4
- from agno.tools.toolkit import Toolkit
5
- from agno.utils.log import log_debug, log_error, log_info, log_warning
6
-
7
- try:
8
- from memori import Memori, create_memory_tool
9
- except ImportError:
10
- raise ImportError("`memorisdk` package not found. Please install it with `pip install memorisdk`")
11
-
12
-
13
- class MemoriTools(Toolkit):
14
- """
15
- Memori ToolKit for Agno Agents and Teams, providing persistent memory capabilities.
16
-
17
- This toolkit integrates Memori's memory system with Agno, allowing Agents and Teams to:
18
- - Store and retrieve conversation history
19
- - Search through past interactions
20
- - Maintain user preferences and context
21
- - Build long-term memory across sessions
22
-
23
- Requirements:
24
- - pip install memorisdk
25
- - Database connection string (SQLite, PostgreSQL, etc.)
26
-
27
- Example:
28
- ```python
29
- from agno.tools.memori import MemoriTools
30
-
31
- # Initialize with SQLite (default)
32
- memori_tools = MemoriTools(
33
- database_connect="sqlite:///agent_memory.db",
34
- namespace="my_agent",
35
- auto_ingest=True # Automatically ingest conversations
36
- )
37
-
38
- # Add to agent
39
- agent = Agent(
40
- model=OpenAIChat(),
41
- tools=[memori_tools],
42
- description="An AI assistant with persistent memory"
43
- )
44
- ```
45
- """
46
-
47
- def __init__(
48
- self,
49
- database_connect: Optional[str] = None,
50
- namespace: Optional[str] = None,
51
- conscious_ingest: bool = True,
52
- auto_ingest: bool = True,
53
- verbose: bool = False,
54
- config: Optional[Dict[str, Any]] = None,
55
- auto_enable: bool = True,
56
- enable_search_memory: bool = True,
57
- enable_record_conversation: bool = True,
58
- enable_get_memory_stats: bool = True,
59
- all: bool = False,
60
- **kwargs,
61
- ):
62
- """
63
- Initialize Memori toolkit.
64
-
65
- Args:
66
- database_connect: Database connection string (e.g., "sqlite:///memory.db")
67
- namespace: Namespace for organizing memories (e.g., "agent_v1", "user_session")
68
- conscious_ingest: Whether to use conscious memory ingestion
69
- auto_ingest: Whether to automatically ingest conversations into memory
70
- verbose: Enable verbose logging from Memori
71
- config: Additional Memori configuration
72
- auto_enable: Automatically enable the memory system on initialization
73
- **kwargs: Additional arguments passed to Toolkit base class
74
- """
75
- tools: List[Any] = []
76
- if all or enable_search_memory:
77
- tools.append(self.search_memory)
78
- if all or enable_record_conversation:
79
- tools.append(self.record_conversation)
80
- if all or enable_get_memory_stats:
81
- tools.append(self.get_memory_stats)
82
-
83
- super().__init__(name="memori_tools", tools=tools, **kwargs)
84
-
85
- # Set default database connection if not provided
86
- if not database_connect:
87
- sqlite_db = "sqlite:///agno_memori_memory.db"
88
- log_info(f"No database connection provided, using default SQLite database at {sqlite_db}")
89
- database_connect = sqlite_db
90
-
91
- self.database_connect = database_connect
92
- self.namespace = namespace or "agno_default"
93
- self.conscious_ingest = conscious_ingest
94
- self.auto_ingest = auto_ingest
95
- self.verbose = verbose
96
- self.config = config or {}
97
-
98
- try:
99
- # Initialize Memori memory system
100
- log_debug(f"Initializing Memori with database: {self.database_connect}")
101
- self.memory_system = Memori(
102
- database_connect=self.database_connect,
103
- conscious_ingest=self.conscious_ingest,
104
- auto_ingest=self.auto_ingest,
105
- verbose=self.verbose,
106
- namespace=self.namespace,
107
- **self.config,
108
- )
109
-
110
- # Enable the memory system if auto_enable is True
111
- if auto_enable:
112
- self.memory_system.enable()
113
- log_debug("Memori memory system enabled")
114
-
115
- # Create the memory tool for internal use
116
- self._memory_tool = create_memory_tool(self.memory_system)
117
-
118
- except Exception as e:
119
- log_error(f"Failed to initialize Memori: {e}")
120
- raise ConnectionError("Failed to initialize Memori memory system") from e
121
-
122
- def search_memory(
123
- self,
124
- query: str,
125
- limit: Optional[int] = None,
126
- ) -> str:
127
- """
128
- Search the Agent's memory for past conversations and information.
129
-
130
- This performs semantic search across all stored memories to find
131
- relevant information based on the provided query.
132
-
133
- Args:
134
- query: What to search for in memory (e.g., "past conversations about AI", "user preferences")
135
- limit: Maximum number of results to return (optional)
136
-
137
- Returns:
138
- str: JSON-encoded search results or error message
139
-
140
- Example:
141
- search_memory("user's favorite programming languages")
142
- search_memory("previous discussions about machine learning")
143
- """
144
- try:
145
- if not query.strip():
146
- return json.dumps({"error": "Please provide a search query"})
147
-
148
- log_debug(f"Searching memory for: {query}")
149
-
150
- # Execute search using Memori's memory tool
151
- result = self._memory_tool.execute(query=query.strip())
152
-
153
- if result:
154
- # If limit is specified, truncate results
155
- if limit and isinstance(result, list):
156
- result = result[:limit]
157
-
158
- return json.dumps(
159
- {
160
- "success": True,
161
- "query": query,
162
- "results": result,
163
- "count": len(result) if isinstance(result, list) else 1,
164
- }
165
- )
166
- else:
167
- return json.dumps(
168
- {
169
- "success": True,
170
- "query": query,
171
- "results": [],
172
- "count": 0,
173
- "message": "No relevant memories found",
174
- }
175
- )
176
-
177
- except Exception as e:
178
- log_error(f"Error searching memory: {e}")
179
- return json.dumps({"success": False, "error": f"Memory search error: {str(e)}"})
180
-
181
- def record_conversation(self, content: str) -> str:
182
- """
183
- Add important information or facts to memory.
184
-
185
- Use this tool to store important information, user preferences, facts, or context that should be remembered
186
- for future conversations.
187
-
188
- Args:
189
- content: The information/facts to store in memory
190
-
191
- Returns:
192
- str: Success message or error details
193
-
194
- Example:
195
- record_conversation("User prefers Python over JavaScript")
196
- record_conversation("User is working on an e-commerce project using Django")
197
- record_conversation("User's name is John and they live in NYC")
198
- """
199
- try:
200
- if not content.strip():
201
- return json.dumps({"success": False, "error": "Content cannot be empty"})
202
-
203
- log_debug(f"Adding conversation: {content}")
204
-
205
- # Extract the actual AI response from the agent's conversation history
206
- ai_output = "I've noted this information and will remember it."
207
-
208
- self.memory_system.record_conversation(user_input=content, ai_output=str(ai_output))
209
- return json.dumps(
210
- {
211
- "success": True,
212
- "message": "Memory added successfully via conversation recording",
213
- "content_length": len(content),
214
- }
215
- )
216
-
217
- except Exception as e:
218
- log_error(f"Error adding memory: {e}")
219
- return json.dumps({"success": False, "error": f"Failed to add memory: {str(e)}"})
220
-
221
- def get_memory_stats(
222
- self,
223
- ) -> str:
224
- """
225
- Get statistics about the memory system.
226
-
227
- Returns information about the current state of the memory system,
228
- including total memories, memory distribution by retention type
229
- (short-term vs long-term), and system configuration.
230
-
231
- Returns:
232
- str: JSON-encoded memory statistics
233
-
234
- Example:
235
- Returns statistics like:
236
- {
237
- "success": true,
238
- "total_memories": 42,
239
- "memories_by_retention": {
240
- "short_term": 5,
241
- "long_term": 37
242
- },
243
- "namespace": "my_agent",
244
- "conscious_ingest": true,
245
- "auto_ingest": true,
246
- "memory_system_enabled": true
247
- }
248
- """
249
- try:
250
- log_debug("Retrieving memory statistics")
251
-
252
- # Base stats about the system configuration
253
- stats = {
254
- "success": True,
255
- "namespace": self.namespace,
256
- "database_connect": self.database_connect,
257
- "conscious_ingest": self.conscious_ingest,
258
- "auto_ingest": self.auto_ingest,
259
- "verbose": self.verbose,
260
- "memory_system_enabled": hasattr(self.memory_system, "_enabled") and self.memory_system._enabled,
261
- }
262
-
263
- # Get Memori's built-in memory statistics
264
- try:
265
- if hasattr(self.memory_system, "get_memory_stats"):
266
- # Use the get_memory_stats method as shown in the example
267
- memori_stats = self.memory_system.get_memory_stats()
268
-
269
- # Add the Memori-specific stats to our response
270
- if isinstance(memori_stats, dict):
271
- # Include total memories
272
- if "total_memories" in memori_stats:
273
- stats["total_memories"] = memori_stats["total_memories"]
274
-
275
- # Include memory distribution by retention type
276
- if "memories_by_retention" in memori_stats:
277
- stats["memories_by_retention"] = memori_stats["memories_by_retention"]
278
-
279
- # Also add individual counts for convenience
280
- retention_info = memori_stats["memories_by_retention"]
281
- stats["short_term_memories"] = retention_info.get("short_term", 0)
282
- stats["long_term_memories"] = retention_info.get("long_term", 0)
283
-
284
- # Include any other available stats
285
- for key, value in memori_stats.items():
286
- if key not in stats:
287
- stats[key] = value
288
-
289
- log_debug(
290
- f"Retrieved memory stats: total={stats.get('total_memories', 0)}, "
291
- f"short_term={stats.get('short_term_memories', 0)}, "
292
- f"long_term={stats.get('long_term_memories', 0)}"
293
- )
294
-
295
- else:
296
- log_debug("get_memory_stats method not available, providing basic stats only")
297
- stats["total_memories"] = 0
298
- stats["memories_by_retention"] = {"short_term": 0, "long_term": 0}
299
- stats["short_term_memories"] = 0
300
- stats["long_term_memories"] = 0
301
-
302
- except Exception as e:
303
- log_debug(f"Could not retrieve detailed memory stats: {e}")
304
- # Provide basic stats if detailed stats fail
305
- stats["total_memories"] = 0
306
- stats["memories_by_retention"] = {"short_term": 0, "long_term": 0}
307
- stats["short_term_memories"] = 0
308
- stats["long_term_memories"] = 0
309
- stats["stats_warning"] = "Detailed memory statistics not available"
310
-
311
- return json.dumps(stats)
312
-
313
- except Exception as e:
314
- log_error(f"Error getting memory stats: {e}")
315
- return json.dumps({"success": False, "error": f"Failed to get memory statistics: {str(e)}"})
316
-
317
- def enable_memory_system(self) -> bool:
318
- """Enable the Memori memory system."""
319
- try:
320
- self.memory_system.enable()
321
- log_debug("Memori memory system enabled")
322
- return True
323
- except Exception as e:
324
- log_error(f"Failed to enable memory system: {e}")
325
- return False
326
-
327
- def disable_memory_system(self) -> bool:
328
- """Disable the Memori memory system."""
329
- try:
330
- if hasattr(self.memory_system, "disable"):
331
- self.memory_system.disable()
332
- log_debug("Memori memory system disabled")
333
- return True
334
- else:
335
- log_warning("Memory system disable method not available")
336
- return False
337
- except Exception as e:
338
- log_error(f"Failed to disable memory system: {e}")
339
- return False
File without changes