letta-nightly 0.11.7.dev20250910104051__py3-none-any.whl → 0.11.7.dev20250911104039__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 (37) hide show
  1. letta/adapters/letta_llm_request_adapter.py +4 -2
  2. letta/adapters/letta_llm_stream_adapter.py +4 -2
  3. letta/agents/agent_loop.py +23 -0
  4. letta/agents/letta_agent_v2.py +5 -4
  5. letta/functions/helpers.py +3 -2
  6. letta/groups/sleeptime_multi_agent_v2.py +4 -2
  7. letta/groups/sleeptime_multi_agent_v3.py +4 -2
  8. letta/interfaces/anthropic_streaming_interface.py +10 -6
  9. letta/llm_api/google_vertex_client.py +1 -1
  10. letta/orm/agent.py +4 -1
  11. letta/orm/block.py +1 -0
  12. letta/orm/blocks_agents.py +1 -0
  13. letta/orm/sources_agents.py +2 -1
  14. letta/orm/tools_agents.py +5 -2
  15. letta/schemas/message.py +19 -2
  16. letta/server/rest_api/interface.py +34 -2
  17. letta/server/rest_api/json_parser.py +2 -0
  18. letta/server/rest_api/redis_stream_manager.py +2 -1
  19. letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +4 -2
  20. letta/server/rest_api/routers/v1/agents.py +47 -180
  21. letta/server/rest_api/routers/v1/folders.py +2 -2
  22. letta/server/rest_api/routers/v1/sources.py +2 -2
  23. letta/server/rest_api/streaming_response.py +2 -1
  24. letta/server/server.py +7 -5
  25. letta/services/agent_serialization_manager.py +4 -3
  26. letta/services/mcp_manager.py +2 -2
  27. letta/services/summarizer/summarizer.py +2 -1
  28. letta/services/tool_executor/multi_agent_tool_executor.py +17 -14
  29. letta/services/tool_sandbox/local_sandbox.py +2 -2
  30. letta/services/tool_sandbox/modal_version_manager.py +2 -1
  31. letta/streaming_utils.py +29 -4
  32. letta/utils.py +72 -3
  33. {letta_nightly-0.11.7.dev20250910104051.dist-info → letta_nightly-0.11.7.dev20250911104039.dist-info}/METADATA +1 -1
  34. {letta_nightly-0.11.7.dev20250910104051.dist-info → letta_nightly-0.11.7.dev20250911104039.dist-info}/RECORD +37 -36
  35. {letta_nightly-0.11.7.dev20250910104051.dist-info → letta_nightly-0.11.7.dev20250911104039.dist-info}/WHEEL +0 -0
  36. {letta_nightly-0.11.7.dev20250910104051.dist-info → letta_nightly-0.11.7.dev20250911104039.dist-info}/entry_points.txt +0 -0
  37. {letta_nightly-0.11.7.dev20250910104051.dist-info → letta_nightly-0.11.7.dev20250911104039.dist-info}/licenses/LICENSE +0 -0
letta/streaming_utils.py CHANGED
@@ -99,6 +99,15 @@ class JSONInnerThoughtsExtractor:
99
99
  else:
100
100
  updates_main_json += c
101
101
  self.main_buffer += c
102
+ # NOTE (fix): Streaming JSON can arrive token-by-token from the LLM.
103
+ # In the old implementation we pre-inserted an opening quote after every
104
+ # key's colon (i.e. we emitted '"key":"' immediately). That implicitly
105
+ # assumed all values are strings. When a non-string value (e.g. true/false,
106
+ # numbers, null, or a nested object/array) streamed in next, the stream
107
+ # ended up with an unmatched '"' and appeared as a "missing end-quote" to
108
+ # clients. We now only emit an opening quote when we actually enter a
109
+ # string value (see below). This keeps values like booleans unquoted and
110
+ # avoids generating dangling quotes mid-stream.
102
111
  elif c == '"':
103
112
  if not self.escaped:
104
113
  self.in_string = not self.in_string
@@ -112,6 +121,14 @@ class JSONInnerThoughtsExtractor:
112
121
  self.main_buffer += self.main_json_held_buffer
113
122
  self.main_json_held_buffer = ""
114
123
  self.hold_main_json = False
124
+ elif self.state == "value":
125
+ # Opening quote for a string value (non-inner-thoughts only)
126
+ if not self.is_inner_thoughts_value:
127
+ if self.hold_main_json:
128
+ self.main_json_held_buffer += '"'
129
+ else:
130
+ updates_main_json += '"'
131
+ self.main_buffer += '"'
115
132
  else:
116
133
  if self.state == "key":
117
134
  self.state = "colon"
@@ -156,18 +173,26 @@ class JSONInnerThoughtsExtractor:
156
173
  updates_main_json += c
157
174
  self.main_buffer += c
158
175
  else:
176
+ # NOTE (fix): Do NOT pre-insert an opening quote after ':' any more.
177
+ # The value may not be a string; we only emit quotes when we actually
178
+ # see a string begin (handled in the '"' branch above). This prevents
179
+ # forced-quoting of non-string values and eliminates the common
180
+ # streaming artifact of "... 'request_heartbeat':'true}" missing the
181
+ # final quote.
159
182
  if c == ":" and self.state == "colon":
183
+ # Transition to reading a value; don't pre-insert quotes
160
184
  self.state = "value"
161
185
  self.is_inner_thoughts_value = self.current_key == self.inner_thoughts_key
162
186
  if self.is_inner_thoughts_value:
163
- pass # Do not include 'inner_thoughts' key in main_json
187
+ # Do not include 'inner_thoughts' key in main_json
188
+ pass
164
189
  else:
165
190
  key_colon = f'"{self.current_key}":'
166
191
  if self.hold_main_json:
167
- self.main_json_held_buffer += key_colon + '"'
192
+ self.main_json_held_buffer += key_colon
168
193
  else:
169
- updates_main_json += key_colon + '"'
170
- self.main_buffer += key_colon + '"'
194
+ updates_main_json += key_colon
195
+ self.main_buffer += key_colon
171
196
  elif c == "," and self.state == "comma_or_end":
172
197
  if self.is_inner_thoughts_value:
173
198
  # Inner thoughts value ended
letta/utils.py CHANGED
@@ -39,6 +39,7 @@ from letta.constants import (
39
39
  )
40
40
  from letta.helpers.json_helpers import json_dumps, json_loads
41
41
  from letta.log import get_logger
42
+ from letta.otel.tracing import log_attributes, trace_method
42
43
  from letta.schemas.openai.chat_completion_response import ChatCompletionResponse
43
44
 
44
45
  logger = get_logger(__name__)
@@ -1093,14 +1094,68 @@ def make_key(*args, **kwargs):
1093
1094
  return str((args, tuple(sorted(kwargs.items()))))
1094
1095
 
1095
1096
 
1096
- def safe_create_task(coro, logger: Logger, label: str = "background task"):
1097
+ # Global set to keep strong references to background tasks
1098
+ _background_tasks: set = set()
1099
+
1100
+
1101
+ def get_background_task_count() -> int:
1102
+ """Get the current number of background tasks for debugging/monitoring."""
1103
+ return len(_background_tasks)
1104
+
1105
+
1106
+ @trace_method
1107
+ def safe_create_task(coro, label: str = "background task"):
1097
1108
  async def wrapper():
1098
1109
  try:
1099
1110
  await coro
1100
1111
  except Exception as e:
1101
1112
  logger.exception(f"{label} failed with {type(e).__name__}: {e}")
1102
1113
 
1103
- return asyncio.create_task(wrapper())
1114
+ task = asyncio.create_task(wrapper())
1115
+
1116
+ # Add task to the set to maintain strong reference
1117
+ _background_tasks.add(task)
1118
+
1119
+ # Log task count to trace
1120
+ log_attributes({"total_background_task_count": get_background_task_count()})
1121
+
1122
+ # Remove task from set when done to prevent memory leaks
1123
+ task.add_done_callback(_background_tasks.discard)
1124
+
1125
+ return task
1126
+
1127
+
1128
+ def safe_create_shielded_task(coro, label: str = "shielded background task"):
1129
+ """
1130
+ Create a shielded background task that cannot be cancelled externally.
1131
+
1132
+ This is useful for critical operations that must complete even if the
1133
+ parent operation is cancelled. The task is internally shielded but the
1134
+ returned task can still have callbacks added to it.
1135
+ """
1136
+
1137
+ async def shielded_wrapper():
1138
+ try:
1139
+ # Shield the original coroutine to prevent cancellation
1140
+ result = await asyncio.shield(coro)
1141
+ return result
1142
+ except Exception as e:
1143
+ logger.exception(f"{label} failed with {type(e).__name__}: {e}")
1144
+ raise
1145
+
1146
+ # Create the task with the shielded wrapper
1147
+ task = asyncio.create_task(shielded_wrapper())
1148
+
1149
+ # Add task to the set to maintain strong reference
1150
+ _background_tasks.add(task)
1151
+
1152
+ # Log task count to trace
1153
+ log_attributes({"total_background_task_count": get_background_task_count()})
1154
+
1155
+ # Remove task from set when done to prevent memory leaks
1156
+ task.add_done_callback(_background_tasks.discard)
1157
+
1158
+ return task
1104
1159
 
1105
1160
 
1106
1161
  def safe_create_file_processing_task(coro, file_metadata, server, actor, logger: Logger, label: str = "file processing task"):
@@ -1137,7 +1192,15 @@ def safe_create_file_processing_task(coro, file_metadata, server, actor, logger:
1137
1192
  except Exception as update_error:
1138
1193
  logger.error(f"Failed to update file status to ERROR for {file_metadata.id}: {update_error}")
1139
1194
 
1140
- return asyncio.create_task(wrapper())
1195
+ task = asyncio.create_task(wrapper())
1196
+
1197
+ # Add task to the set to maintain strong reference
1198
+ _background_tasks.add(task)
1199
+
1200
+ # Remove task from set when done to prevent memory leaks
1201
+ task.add_done_callback(_background_tasks.discard)
1202
+
1203
+ return task
1141
1204
 
1142
1205
 
1143
1206
  class CancellationSignal:
@@ -1289,6 +1352,12 @@ def fire_and_forget(coro, task_name: Optional[str] = None, error_callback: Optio
1289
1352
 
1290
1353
  task = asyncio.create_task(coro)
1291
1354
 
1355
+ # Add task to the set to maintain strong reference
1356
+ _background_tasks.add(task)
1357
+
1358
+ # Remove task from set when done to prevent memory leaks
1359
+ task.add_done_callback(_background_tasks.discard)
1360
+
1292
1361
  def callback(t):
1293
1362
  try:
1294
1363
  t.result() # this re-raises exceptions from the task
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: letta-nightly
3
- Version: 0.11.7.dev20250910104051
3
+ Version: 0.11.7.dev20250911104039
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  Author-email: Letta Team <contact@letta.com>
6
6
  License: Apache License
@@ -11,13 +11,14 @@ letta/memory.py,sha256=l5iNhLAR_xzgTb0GBlQx4SVgH8kuZh8siJdC_CFPKEs,4278
11
11
  letta/pytest.ini,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  letta/settings.py,sha256=QEjNUwRXGBgsQpQAs2kksQmGN5CbxKlxPPydrklx_Ms,15011
13
13
  letta/streaming_interface.py,sha256=rPMfwUcjqITWk2tVqFQm1hmP99tU2IOHg9gU2dgPSo8,16400
14
- letta/streaming_utils.py,sha256=g6QPibjT5kwnJ55IwLb7mBQ9EYp61aBWgYeV_IUuTr8,12009
14
+ letta/streaming_utils.py,sha256=_UhLa0EtUkd6WL_oBYIU65tDcJ9jf3uWEHuzfQ4HCa8,13769
15
15
  letta/system.py,sha256=kHF7n3Viq7gV5UIUEXixod2gWa2jroUgztpEzMC1Sew,8925
16
- letta/utils.py,sha256=VdDPyWUlyjFSMI-Mmz1oXM8KaXJpMLAn5OshfWVWbAI,41101
16
+ letta/utils.py,sha256=bSq3St7MUw9gN1g0ICdOhNNaUFYBC3EfJLG6qsRLSFA,43290
17
17
  letta/adapters/letta_llm_adapter.py,sha256=11wkOkEQfPXUuJoJxbK22wCa-8gnWiDAb3UOXOxLt5U,3427
18
- letta/adapters/letta_llm_request_adapter.py,sha256=gYQmM8elvwZohyih5L7aOgMz36wNyVN6Eaph4V5RHf0,4749
19
- letta/adapters/letta_llm_stream_adapter.py,sha256=GZhRoJyEwiaQ1JwAhq70ZTaZKFTASp_80QIIzVxk8HE,7548
18
+ letta/adapters/letta_llm_request_adapter.py,sha256=wJhK5M_qOhRPAhgMmYI7EJcM8Op19tClnXe0kJ29a3Q,4831
19
+ letta/adapters/letta_llm_stream_adapter.py,sha256=Q6nFr8uKc1DyAHHiHxHGNmqhRIScEKXO3TwsBgqW5QI,7630
20
20
  letta/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ letta/agents/agent_loop.py,sha256=cTSlGt1g9aZWG5vIMYtzdeJG1UcrqfjpLGmZU6j89zU,854
21
22
  letta/agents/base_agent.py,sha256=rUAcPxWmTnmi50AWOXwrWc-v5sPIod0W_xXaPQShjcE,8540
22
23
  letta/agents/base_agent_v2.py,sha256=t7XtUv3RZNvKwk1uqmSKxAV_2ZGSXYektlzyhXB3N-M,2558
23
24
  letta/agents/ephemeral_agent.py,sha256=el-SUF_16vv_7OouIR-6z0pAE9Yc0PLibygvfCKwqfo,2736
@@ -26,7 +27,7 @@ letta/agents/exceptions.py,sha256=BQY4D4w32OYHM63CM19ko7dPwZiAzUs3NbKvzmCTcJg,31
26
27
  letta/agents/helpers.py,sha256=eCHsvZEkTe0L_uZHYkfNAztsEJW0FTnKZMgVbqlI0Yg,11618
27
28
  letta/agents/letta_agent.py,sha256=6nRTh5kzUpqK7eNMk4DlcgEoPmDxFmRb5ysoVHa-vh8,99488
28
29
  letta/agents/letta_agent_batch.py,sha256=17RpYVXpGh9dlKxdMOLMCOHWFsi6N5S9FJHxooxkJCI,27998
29
- letta/agents/letta_agent_v2.py,sha256=tmaxcUhnLz2V5h75s88KADZZR6tAIQI19j6ROhF7Xbo,58179
30
+ letta/agents/letta_agent_v2.py,sha256=EDQ7ShQXS09cCMTMj0i3J2eECp5-ISDrB4QQWT9ALlg,58257
30
31
  letta/agents/voice_agent.py,sha256=y-n6qadfKsswvGODzXH02pLIQQ44wnaDSE6oUgKHVkA,23381
31
32
  letta/agents/voice_sleeptime_agent.py,sha256=_JzCbWBOKrmo1cTaqZFTrQudpJEapwAyrXYtAHUILGo,8675
32
33
  letta/cli/cli.py,sha256=tKtghlX36Rp0_HbkMosvlAapL07JXhA0vKLGTNKnxSQ,1615
@@ -43,7 +44,7 @@ letta/functions/ast_parsers.py,sha256=0dXAN4qx3pWL_Y0aoEkaBpMKwI-kpoLEJftjW3v2I4
43
44
  letta/functions/async_composio_toolset.py,sha256=IuhZTVghPDXRsehOOZsEEiJGYyjWjDTQc2xrjTg0yBo,4786
44
45
  letta/functions/composio_helpers.py,sha256=mpybCYcB93HWoKrmQIqcuRQG9IH2lHWhsPQx2i8XP_8,3593
45
46
  letta/functions/functions.py,sha256=bSYEcUPzbKXx6IztZkE1o7O7zuhFgbLzKSG5SuP8JVk,16009
46
- letta/functions/helpers.py,sha256=-NeFjYNhKm_qAwZaxZsVr65Pi3PNvcNKwO1IykKIgtc,25155
47
+ letta/functions/helpers.py,sha256=KALhhEBbFND1Ft5WWcCDvtWx-jvE26QQfppOR0pF8p4,25273
47
48
  letta/functions/interface.py,sha256=pN1gpDnLISW44gRcic1IX6I6pDwOT9UbkST_4ICuMvQ,2936
48
49
  letta/functions/prompts.py,sha256=jNl83xjNpoSs8KzGtuc6jzN8jp_T4BC_5f4FMJ88_K0,1145
49
50
  letta/functions/schema_generator.py,sha256=EgHC3UHRNF4FG7CKWNIxajUyryLo5UIZB2KJP9MrKMg,30903
@@ -62,8 +63,8 @@ letta/groups/dynamic_multi_agent.py,sha256=-IugnQJTxe4FOTKd0UX3lbSKVcD-S0noZDjwo
62
63
  letta/groups/helpers.py,sha256=yAr05Keoz_7vdzPG6A9x5CsWrJjtvF8A0GSQWDe29UM,4660
63
64
  letta/groups/round_robin_multi_agent.py,sha256=uUJff0bO68udOREiKFWeS7eEQlk3bF7hcfLSFXMScqI,6999
64
65
  letta/groups/sleeptime_multi_agent.py,sha256=MCmgLyJubzgst_FaPOCR8BfDmss4MCGEdvnZOLXD8z8,10461
65
- letta/groups/sleeptime_multi_agent_v2.py,sha256=yT7MHhrjec7QZ1_9goo1L1c2V3W7mkkcz4BxpxC7i8I,13733
66
- letta/groups/sleeptime_multi_agent_v3.py,sha256=9R2aBSu_-dDPtb5gKddzCBEUKjtDlPKbSggu03qCYrE,9128
66
+ letta/groups/sleeptime_multi_agent_v2.py,sha256=t2Ef-066RxB6DksRXcRO5tMCWaLi0ovkjCoq5RVPayE,13838
67
+ letta/groups/sleeptime_multi_agent_v3.py,sha256=KjeHsuXNZup3FIw2CaqBuLo21j1nzI2fAcNyRPUYjHU,9233
67
68
  letta/groups/supervisor_multi_agent.py,sha256=IWe5sNg6JoTaXwsN_8T9aiGHnFpJc7UVnlC3ly2rlBU,4459
68
69
  letta/helpers/__init__.py,sha256=p0luQ1Oe3Skc6sH4O58aHHA3Qbkyjifpuq0DZ1GAY0U,59
69
70
  letta/helpers/composio_helpers.py,sha256=X3RaJSqa8z-oXmHJjJjAs1fJroZ5A8yu4-Yg2oDiTdA,1712
@@ -82,7 +83,7 @@ letta/humans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
83
  letta/humans/examples/basic.txt,sha256=Lcp8YESTWvOJgO4Yf_yyQmgo5bKakeB1nIVrwEGG6PA,17
83
84
  letta/humans/examples/cs_phd.txt,sha256=9C9ZAV_VuG7GB31ksy3-_NAyk8rjE6YtVOkhp08k1xw,297
84
85
  letta/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
- letta/interfaces/anthropic_streaming_interface.py,sha256=rsrznVkNl8Ov06RE2QTAcY-pkWwGll76jyz2-VO40uI,25378
86
+ letta/interfaces/anthropic_streaming_interface.py,sha256=0VyK8kTRgCLNDLQN6vX1gJ0dfJhqguL_NL1GYgFr6fU,25614
86
87
  letta/interfaces/openai_chat_completions_streaming_interface.py,sha256=3xHXh8cW79EkiMUTYfvcH_s92nkLjxXfvtVOVC3bfLo,5050
87
88
  letta/interfaces/openai_streaming_interface.py,sha256=m2QeZo4w5lclwTypqAcHOJ4disaHqwb9yeqQaukfesA,28157
88
89
  letta/interfaces/utils.py,sha256=c6jvO0dBYHh8DQnlN-B0qeNC64d3CSunhfqlFA4pJTY,278
@@ -98,7 +99,7 @@ letta/llm_api/bedrock_client.py,sha256=gNKSFGCbrrLMPvtBItAOz1nme4K_opgkZdFa3cUzp
98
99
  letta/llm_api/deepseek_client.py,sha256=di6ApSQu1DewXw0_JIP7AK4IHvXQHd0e32tQfFf5F34,16975
99
100
  letta/llm_api/google_ai_client.py,sha256=JweTUHZXvK6kcZBGXA7XEU53KP4vM7_zdD7AorCtsdI,8166
100
101
  letta/llm_api/google_constants.py,sha256=eOjOv-FImyJ4b4QGIaod-mEROMtrBFz0yhuYHqOEkwY,797
101
- letta/llm_api/google_vertex_client.py,sha256=3bM3O1XwZJfE2t2Vzoa51_xhiVwOTDCyB00S_rFNdaY,28670
102
+ letta/llm_api/google_vertex_client.py,sha256=PUTUa2DM-nIVhE7H3pDwPqgPl2gLAAgGgANzABV6Xfc,28680
102
103
  letta/llm_api/groq_client.py,sha256=nNeWSgDVOLn3iFiicDKyhHj7f73JxrB9-7_M2Pv2e1I,3192
103
104
  letta/llm_api/helpers.py,sha256=GXV_SuaU7uSCDj6bxDcCCF7CUjuZQCVWd5qZ3OsHVNk,17587
104
105
  letta/llm_api/llm_api_tools.py,sha256=lsZ6OeIHesyOfbNQi5CVw5hn1lTQP5gJyforp-D0nk8,12294
@@ -152,14 +153,14 @@ letta/local_llm/webui/settings.py,sha256=gmLHfiOl1u4JmlAZU2d2O8YKF9lafdakyjwR_ft
152
153
  letta/openai_backcompat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
153
154
  letta/openai_backcompat/openai_object.py,sha256=GSzeCTwLpLD2fH4X8wVqzwdmoTjKK2I4PnriBY453lc,13505
154
155
  letta/orm/__init__.py,sha256=CNDfeCRle9h5EnqFMXadlUCFN0AtlPihMrlAjt9Ikv0,1637
155
- letta/orm/agent.py,sha256=9N8eDhyIxPfMhylSrmjedUoYa5yF1JGNxr-Q5TyRPPc,17147
156
+ letta/orm/agent.py,sha256=MF4MvWEP9-51ynhgct_B7zvr6ikkUnjXHDhLj_FFpaA,17224
156
157
  letta/orm/agents_tags.py,sha256=-rWR8DoEiHM4yc9vAHgHuvjIwgMXMWzKnTKFlBBu3TQ,1076
157
158
  letta/orm/archive.py,sha256=82engq9ZfNrp1yu8QS5df4vsIwQC33CADZA-05doNko,3920
158
159
  letta/orm/archives_agents.py,sha256=hIhaIRQPuNv-etQVWnIQhEomiumLC1OWR-T_s0Y7snM,1273
159
160
  letta/orm/base.py,sha256=7XoaeFP-EbypTaEZqALTIOXyW1PqI2bJOKT85FWoRGU,3044
160
- letta/orm/block.py,sha256=ZqgE_qqGtFjSc1nCo13_0nrgxfcDfPev0cODajGcCDA,6059
161
+ letta/orm/block.py,sha256=arPKI9vNrDtl3fJQgOTIWjqYjj1V-WuMK6NDTSBHNcc,6101
161
162
  letta/orm/block_history.py,sha256=XLbdTkc9Ga_W5oolzRPRxry7x5rS-PHqW11MKpBxyrA,2109
162
- letta/orm/blocks_agents.py,sha256=NttkDNp6-sZ-uDkRzowibXkUmuMZ0YX8F3f17oszSTg,1128
163
+ letta/orm/blocks_agents.py,sha256=b5PWmA4CrDJvMMcTVVdt7tWIFFWPK6XhMna_2SUTCjg,1184
163
164
  letta/orm/custom_columns.py,sha256=gVq4opV0sIuThphX7z3QdyF8RKbcxUO6IHX2J4al27U,5585
164
165
  letta/orm/errors.py,sha256=Se0Guz-gqi-D36NUWSh7AP9zTVCSph9KgZh_trwng4o,734
165
166
  letta/orm/file.py,sha256=LynuEajZM7QeO4Y_J84iAB9dqXHPCY-xTur0q022n48,5298
@@ -186,13 +187,13 @@ letta/orm/provider.py,sha256=DYh-rvK0Bwl540hS902zK02mTiK5YJNmxD2GgBhgbpc,1656
186
187
  letta/orm/provider_trace.py,sha256=CJMGz-rLqagJ-yXh9SJRbiGr5nAYdxY524hmiTgDFx4,1153
187
188
  letta/orm/sandbox_config.py,sha256=XmBfYSQzocewuCGkuXNq4QwBpzfJpygX0dBVag0ELOc,4189
188
189
  letta/orm/source.py,sha256=tRxqjWM8n1LBhlDTIiKhJ82-tpWErTeiDXMFz1rwY4g,1715
189
- letta/orm/sources_agents.py,sha256=Ik_PokCBrXRd9wXWomeNeb8EtLUwjb9VMZ8LWXqpK5A,473
190
+ letta/orm/sources_agents.py,sha256=Fvo8ujDNeeqleiiqXk-0VUPiQDawLAN-d28RxdvWnbs,554
190
191
  letta/orm/sqlalchemy_base.py,sha256=mw_leKRvSskRswfiUTYP3Jk9Q7Io9rQJWyVEUGWyTaw,44900
191
192
  letta/orm/sqlite_functions.py,sha256=tbwePL5XciJIttoehyt1H17zdUXWAdjFqH0t-XaFJfk,7256
192
193
  letta/orm/step.py,sha256=S5G4uPMx74_629Fa1IZAdttTk0BQw-an3Amw6fhw9VA,4495
193
194
  letta/orm/step_metrics.py,sha256=5UDJYyGIYMsidKzBDru5CzJXzA0AycaO_e23xFIvEvE,4391
194
195
  letta/orm/tool.py,sha256=W31LI3zT-2cPg8rWwqdLfIZqhG5dg87_Qeb8TTHKOzw,3055
195
- letta/orm/tools_agents.py,sha256=r6t-V21w2_mG8n38zuUb5jOi_3hRxsjgezsLA4sg0m4,626
196
+ letta/orm/tools_agents.py,sha256=aUvXqoE9VrEBIEbGUVdWtSIt0yEtAVbZScNUVr8PgoM,700
196
197
  letta/orm/user.py,sha256=rK5N5ViDxmesZMqVVHB7FcQNpcSoM-hB42MyI6q3MnI,1004
197
198
  letta/otel/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
199
  letta/otel/context.py,sha256=GUTxFpWMdCmib1Qy80TpAs0Qb5fNH_m5sCYZ1LN3HmM,789
@@ -275,7 +276,7 @@ letta/schemas/llm_config.py,sha256=8nyi9r3o3feh_hUy6pdRWp3E6M612xZhvV3gkFB4aqE,1
275
276
  letta/schemas/llm_config_overrides.py,sha256=E6qJuVA8TwAAy3VjGitJ5jSQo5PbN-6VPcZOF5qhP9A,1815
276
277
  letta/schemas/mcp.py,sha256=JMz-e2qlttNIgICJHm6Q_Pu908i41060EBQc6MGKIDM,8985
277
278
  letta/schemas/memory.py,sha256=MH5Cha-HtezSWg3W7ij0fBOxvCERnu59h-sE8lyRGH4,15010
278
- letta/schemas/message.py,sha256=8yt1m4fc3vW_ani0Eytovw5pLEvSK_GPaDh8VFvPX78,55336
279
+ letta/schemas/message.py,sha256=zgDFz87xBRnkGFCp4xqpi4CdRysiAOWRRs10Ddlh0ew,55855
279
280
  letta/schemas/npm_requirement.py,sha256=HkvBF7KjHUH-MG-RAEYJHO2MLRS2rxFUcmbpbZVznLk,457
280
281
  letta/schemas/organization.py,sha256=TXrHN4IBQnX-mWvRuCOH57XZSLYCVOY0wWm2_UzDQIA,1279
281
282
  letta/schemas/passage.py,sha256=_bO19zOIQtQ3F3VqDSgIJqh15V0IIrJ_KdlbCt6-4D0,3940
@@ -332,18 +333,18 @@ letta/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
332
333
  letta/server/constants.py,sha256=yAdGbLkzlOU_dLTx0lKDmAnj0ZgRXCEaIcPJWO69eaE,92
333
334
  letta/server/db.py,sha256=AULPiuS0b_EmNsQIS9b0yy3WBTpJv41vqF6Hxq9VXYg,17854
334
335
  letta/server/generate_openapi_schema.sh,sha256=14Q6r0fbNNVVdf4X3Z-H0ZtyrVw5zYLzL5Doom3kM9k,351
335
- letta/server/server.py,sha256=fvIYO5NSMTIYliAIb7XOJiLACuuZ4grPxLH_pUbR6Rw,109160
336
+ letta/server/server.py,sha256=KFFbyl7Djn8CS0aPxz3jL8RwmXPr9nKY3wDu3ymUWjI,109265
336
337
  letta/server/startup.sh,sha256=z-Fea-7LiuS_aG1tJqS8JAsDQaamwC_kuDhv9D3PPPY,2698
337
338
  letta/server/utils.py,sha256=rRvW6L1lzau4u9boamiyZH54lf5tQ91ypXzUW9cfSPA,1667
338
339
  letta/server/rest_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
339
340
  letta/server/rest_api/app.py,sha256=W3lCWe2iGumNIAyuDyH2sNO1EwGKqh7iSo82NXCXrVw,19270
340
341
  letta/server/rest_api/auth_token.py,sha256=725EFEIiNj4dh70hrSd94UysmFD8vcJLrTRfNHkzxDo,774
341
342
  letta/server/rest_api/chat_completions_interface.py,sha256=-7wO7pNBWXMqblVkJpuZ8JPJ-LjudLTtT6BJu-q_XAM,11138
342
- letta/server/rest_api/interface.py,sha256=CSPxpSjffLwoAJawxJ9zvSypLM2iEUSDQYXs5hd_36U,68911
343
- letta/server/rest_api/json_parser.py,sha256=K3dEbXXEo6SRdy-_x-rYZp0cHlZXuADiWgFjgh0j2qA,9086
344
- letta/server/rest_api/redis_stream_manager.py,sha256=d-4ZbMYXn6v5nlPptaG3946xQ1QTQfvNFTeBFB43S7E,10111
343
+ letta/server/rest_api/interface.py,sha256=X5NZ8oerDcipG9y1AfD92zJ_2TgVMO4eJ42RP82GFF8,70952
344
+ letta/server/rest_api/json_parser.py,sha256=yoakaCkSMdf0Y_pyILoFKZlvzXeqF-E1KNeHzatLMDc,9157
345
+ letta/server/rest_api/redis_stream_manager.py,sha256=YR9daW5kG-s31-lyg4YVPU8lClS6UG7zuzZWKVUXBQg,10179
345
346
  letta/server/rest_api/static_files.py,sha256=NG8sN4Z5EJ8JVQdj19tkFa9iQ1kBPTab9f_CUxd_u4Q,3143
346
- letta/server/rest_api/streaming_response.py,sha256=j1OZuLGRelrt7ChkqOxdjPKdnolG09CiPrdd7D5YL40,14397
347
+ letta/server/rest_api/streaming_response.py,sha256=wfhby6skucjGtw9d9pcfa856lI1r6JKaosCYbutKD2k,14458
347
348
  letta/server/rest_api/utils.py,sha256=IT3RnZJWNIaTdFEEyveZb47o9PIzDT_2pIgpPBVN7iU,19326
348
349
  letta/server/rest_api/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
349
350
  letta/server/rest_api/auth/index.py,sha256=oaWNZREyuTyldHBx0vQYlqtePruL21H1atZj_TO_nyg,1377
@@ -352,12 +353,12 @@ letta/server/rest_api/middleware/check_password.py,sha256=LKR_rlhzZ-93o0FpkwDn8v
352
353
  letta/server/rest_api/middleware/profiler_context.py,sha256=MbOFOXhkOCuq6vlOiv0DGgmlLVKxC-9tRZ0OTOn_0GA,859
353
354
  letta/server/rest_api/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
354
355
  letta/server/rest_api/routers/openai/chat_completions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
355
- letta/server/rest_api/routers/openai/chat_completions/chat_completions.py,sha256=QBWab1fn2LXVDMtc6li3gOzmrNzDiUw5WUJsMeeMZII,5076
356
+ letta/server/rest_api/routers/openai/chat_completions/chat_completions.py,sha256=ohM1i8BsNxTiw8duuRT5X_0tSUzBwctQM4fJ5DXURic,5157
356
357
  letta/server/rest_api/routers/v1/__init__.py,sha256=9MnEA7CgtIxyU_dDNG0jm-Ziqu1somBml-e5gKjgd9I,1997
357
- letta/server/rest_api/routers/v1/agents.py,sha256=8GVSCv4pXr2cTyf3_l2LTvrdmRAUWEanXt6gYM0Jgpo,81902
358
+ letta/server/rest_api/routers/v1/agents.py,sha256=VQyGsi6Ci7Ili8rSoKnwY9RZYBcSXzcj7lnpz4OopSk,75580
358
359
  letta/server/rest_api/routers/v1/blocks.py,sha256=ykI77xnmIxPLqdAy5kzGyGw0w0ZRyVXn-O5Xcdj6-70,7690
359
360
  letta/server/rest_api/routers/v1/embeddings.py,sha256=PRaQlrmEXPiIdWsTbadrFsv3Afyv5oEFUdhgHA8FTi8,989
360
- letta/server/rest_api/routers/v1/folders.py,sha256=x2sc1p73Wgebq_QONbFStRgoJnD-htsZIzPrwAptRIM,23519
361
+ letta/server/rest_api/routers/v1/folders.py,sha256=8Yb-bw2JdXBxMfrJNIZQk9_FKN2fet9Ccp8T83_c2sc,23539
361
362
  letta/server/rest_api/routers/v1/groups.py,sha256=PlCKfG1ZUubg-bNVRBmqJNBMvvZtHDvT50LUKKd0w9I,11466
362
363
  letta/server/rest_api/routers/v1/health.py,sha256=MoOjkydhGcJXTiuJrKIB0etVXiRMdTa51S8RQ8-50DQ,399
363
364
  letta/server/rest_api/routers/v1/identities.py,sha256=KUfw6avQIVHNw2lWz4pXOyTOPVy1g19CJGG-zayORl8,7858
@@ -369,7 +370,7 @@ letta/server/rest_api/routers/v1/organizations.py,sha256=OnG2vMDZEmN4eEvj24CPwiV
369
370
  letta/server/rest_api/routers/v1/providers.py,sha256=rypNWQ1VMjmZJYd48uvNGJsE2N22jDTxn89qvbDaOMs,4765
370
371
  letta/server/rest_api/routers/v1/runs.py,sha256=WnYwoFNjHNZicTnCkvoXCxl0XiyVAEvF70TTaMCBhPw,12982
371
372
  letta/server/rest_api/routers/v1/sandbox_configs.py,sha256=f0xEOwR3PXqCS2HOjEv7UKfMWTwEaTHx105HW_X-LI4,8852
372
- letta/server/rest_api/routers/v1/sources.py,sha256=2Tsk74QkN_r78R_wqt7ZYG-9SyZUTUnKXQAgD492xRc,22659
373
+ letta/server/rest_api/routers/v1/sources.py,sha256=nXZxtHi40281VltWmx1RwGBbau_00UpzDS6teTLvt2w,22679
373
374
  letta/server/rest_api/routers/v1/steps.py,sha256=bTzfz1GR3VEZdJRYUGiSr6ZLd12i5faPsf3oAqu1eMk,5570
374
375
  letta/server/rest_api/routers/v1/tags.py,sha256=ef94QitUSJ3NQVffWF1ZqANUZ2b2jRyGHp_I3UUjhno,912
375
376
  letta/server/rest_api/routers/v1/telemetry.py,sha256=eSTg7mWbuwPb2OTHQxwRM0EUEl49wHzNB6i1xJtH8BQ,1036
@@ -389,7 +390,7 @@ letta/server/ws_api/server.py,sha256=_16TQafm509rqRztZYqo0HKKZoe8ccBrNftd_kbIJTE
389
390
  letta/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
390
391
  letta/services/agent_file_manager.py,sha256=bgYTyQA90Iqo3W-LprPtyyOKf2itoqivcRhh4EOUXss,30847
391
392
  letta/services/agent_manager.py,sha256=KaJRTWwvA1SpfKQFPPVCeYxIOKwpKmLMioeyHuGw63Y,168884
392
- letta/services/agent_serialization_manager.py,sha256=QMfxh3n3hLrxJdCojcwbVOequ9nyk1b7RL9UFJS__jo,46295
393
+ letta/services/agent_serialization_manager.py,sha256=lWXTzYItqVxJMyy9ZYlcCDQwC3ZKk9XPCHvBkoVuszA,46388
393
394
  letta/services/archive_manager.py,sha256=P10BjZ2PxLoIkCwJ8rx7qLzchNVBsqNG3_KzxTanCLQ,14060
394
395
  letta/services/block_manager.py,sha256=mohj12QqHenSBbBx0Xmry1Rw25Gy5DSljOITzAwqMtw,33683
395
396
  letta/services/file_manager.py,sha256=d4uX8RblmqNGk1MsfeGzQ5uDWKVFP-AH63Jz5xOkj2c,31364
@@ -398,7 +399,7 @@ letta/services/group_manager.py,sha256=dD4DDHjOptMrtbWqw1ErlhpBqChw2ubLJdILjeLTY
398
399
  letta/services/identity_manager.py,sha256=JI9Xc7EsBagSwDS2na4rFNhoO_LuaxlkVO_1oIK_ITQ,11841
399
400
  letta/services/job_manager.py,sha256=31AKBwQWkjOFH2n4Cx3KCv1g_n499C_1VRIVviUGsLI,35312
400
401
  letta/services/llm_batch_manager.py,sha256=iDzLFfmgpQooGY4zpN_w8q1SZ27fr2Cv6Ks3ltZErL8,20929
401
- letta/services/mcp_manager.py,sha256=__q2rQB_VsLKVeSUT3_XDonHvJfXmop9AAKfPV0AO6w,45035
402
+ letta/services/mcp_manager.py,sha256=aenw1-UgjecmQ6BLrTWVvpKJmeFcGslocdhRKT_PqEk,45077
402
403
  letta/services/message_manager.py,sha256=tomsZidPT-I95sJsEsls-vj3qglehV7XNTs-m2zF8Bg,60629
403
404
  letta/services/organization_manager.py,sha256=JMW5oS_sr6vQQ27OgRV3BR1JL0MqyoGUDcpEOs3SLRY,5800
404
405
  letta/services/passage_manager.py,sha256=kOQjlJFz7Dy6e0NEECoFHhcH8hPIMNeEHxZ1JJ-R2Cs,52372
@@ -441,14 +442,14 @@ letta/services/mcp/streamable_http_client.py,sha256=d-5wmrZ7MjLTFbaAUAITEC699TBz
441
442
  letta/services/mcp/types.py,sha256=8LYlBwWvdbvfy6ZdXJoin-7QmgmJC7samYXjQZL4KZs,1662
442
443
  letta/services/summarizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
443
444
  letta/services/summarizer/enums.py,sha256=lo2E1DKB-s2Ydx4PcLia1PIRUOY5yTSsFt_0EZVV2r0,279
444
- letta/services/summarizer/summarizer.py,sha256=BzosRSrAnP1tnrN-utx0TN806uphif2mrWDHMs7LfX4,18903
445
+ letta/services/summarizer/summarizer.py,sha256=hRGkiPvcX3u5PSOxCrbwL4G1RCSlFaHAaB5FObZCuSY,18977
445
446
  letta/services/tool_executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
446
447
  letta/services/tool_executor/builtin_tool_executor.py,sha256=QKPFXbgzYQobqWRuFs9RhVcQ1d53q8-yV_GFdR2IX88,9718
447
448
  letta/services/tool_executor/composio_tool_executor.py,sha256=ia2AA_WDOseR8Ylam-HEayR7OiyfNSb1sSUrjwqlmFM,2308
448
449
  letta/services/tool_executor/core_tool_executor.py,sha256=bd9x0M9Ttj3FqoIUU66k2FHa2PVY0OlUHqs1aLZYxFI,22624
449
450
  letta/services/tool_executor/files_tool_executor.py,sha256=HyJ2RXYMVOhvKoLAamgMA2YsgQJmu6CcjioXiaGfAn0,37808
450
451
  letta/services/tool_executor/mcp_tool_executor.py,sha256=2zEXmkKsH-IGbMG2Xw1S9op4eL21g25RA4vGImB29KY,2000
451
- letta/services/tool_executor/multi_agent_tool_executor.py,sha256=h_LVtn-TGFn1febe561D23l2ouvf7PDA4CiSPN7ETfY,5512
452
+ letta/services/tool_executor/multi_agent_tool_executor.py,sha256=LIg9yh8BlfYokP_29WryLZPPSMqEsJUwc0mZGMlhc00,5724
452
453
  letta/services/tool_executor/sandbox_tool_executor.py,sha256=LamEZUVqsiBfBL9S1uQMXFGQOXqJlXK9ZrfpZBk5jsA,6258
453
454
  letta/services/tool_executor/tool_execution_manager.py,sha256=Jz05CfUJAiVngwLV_qAgY8LwSHZGmp7poRcVJxOJPRE,6950
454
455
  letta/services/tool_executor/tool_execution_sandbox.py,sha256=mDK8ZrtC-Fe8MY9gmhONMsjxiiSCJtL4bTrpECKksgQ,25908
@@ -456,12 +457,12 @@ letta/services/tool_executor/tool_executor_base.py,sha256=4b1GU0LZc8iwbM3TisqBVO
456
457
  letta/services/tool_sandbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
457
458
  letta/services/tool_sandbox/base.py,sha256=afzDoYo-Jw9shnAEzQubIV6H8Q2kJQ_6elWlQUr-sGY,8120
458
459
  letta/services/tool_sandbox/e2b_sandbox.py,sha256=7h7quhbJRV1eIztZPVPgJLYwgHS3ZiaaMvTPrt01F1U,10294
459
- letta/services/tool_sandbox/local_sandbox.py,sha256=DymefshNLr_OqsbBzmxi3cszRTcaOAVgcvTw2OkigFU,11955
460
+ letta/services/tool_sandbox/local_sandbox.py,sha256=4DnzszQ0VRIKo9kejfYyp4UTOQW_NTTfebhjeLtqOIs,11992
460
461
  letta/services/tool_sandbox/modal_constants.py,sha256=AaXPxSlCj2BhfY5DGwQvqHXfikpurhV2iFsN7zxM3Is,454
461
462
  letta/services/tool_sandbox/modal_deployment_manager.py,sha256=rNDcaHSC3ALA8gAgwAnMG-sbz67zqm6Oa8lgSku0Ah0,9157
462
463
  letta/services/tool_sandbox/modal_sandbox.py,sha256=bgzcj1ysGiFanr1pYkiWxWd1YjHv9OkXd32iuwDpRA8,17814
463
464
  letta/services/tool_sandbox/modal_sandbox_v2.py,sha256=8GcGG20lirNU33375SFfhecS6EvGlYojjUGzwU34sQ0,18483
464
- letta/services/tool_sandbox/modal_version_manager.py,sha256=Arcwf8c0SOWVWkSQpmvhJvyIgbpBjHT4K4ZG-m5d-Jk,11401
465
+ letta/services/tool_sandbox/modal_version_manager.py,sha256=Xj1xwAjdHq7IafwaKnhzXkWEjxywsm7OrI396Zfo4G4,11485
465
466
  letta/services/tool_sandbox/safe_pickle.py,sha256=p8NJy3zVj-LrvXj8pwJ-SG8r-VhD86NVGWoboaF3ir4,5964
466
467
  letta/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
467
468
  letta/templates/sandbox_code_file.py.j2,sha256=eXga5J_04Z8-pGdwfOCDjcRnMceIqcF5ii0rUY3lmq4,2270
@@ -469,8 +470,8 @@ letta/templates/sandbox_code_file_async.py.j2,sha256=lb7nh_P2W9VZHzU_9TxSCEMUod7
469
470
  letta/templates/summary_request_text.j2,sha256=ZttQwXonW2lk4pJLYzLK0pmo4EO4EtUUIXjgXKiizuc,842
470
471
  letta/templates/template_helper.py,sha256=HkG3zwRc5NVGmSTQu5PUTpz7LevK43bzXVaQuN8urf0,1634
471
472
  letta/types/__init__.py,sha256=hokKjCVFGEfR7SLMrtZsRsBfsC7yTIbgKPLdGg4K1eY,147
472
- letta_nightly-0.11.7.dev20250910104051.dist-info/METADATA,sha256=fLEDVsUHdCNMkPO6bBilKXO-jDHEjh1_ga57YN2Nric,24436
473
- letta_nightly-0.11.7.dev20250910104051.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
474
- letta_nightly-0.11.7.dev20250910104051.dist-info/entry_points.txt,sha256=m-94Paj-kxiR6Ktu0us0_2qfhn29DzF2oVzqBE6cu8w,41
475
- letta_nightly-0.11.7.dev20250910104051.dist-info/licenses/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
476
- letta_nightly-0.11.7.dev20250910104051.dist-info/RECORD,,
473
+ letta_nightly-0.11.7.dev20250911104039.dist-info/METADATA,sha256=toGJ1-WRYUWzjt9UP7FnP49pm3M_vjCliXaUV3yLsw0,24436
474
+ letta_nightly-0.11.7.dev20250911104039.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
475
+ letta_nightly-0.11.7.dev20250911104039.dist-info/entry_points.txt,sha256=m-94Paj-kxiR6Ktu0us0_2qfhn29DzF2oVzqBE6cu8w,41
476
+ letta_nightly-0.11.7.dev20250911104039.dist-info/licenses/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
477
+ letta_nightly-0.11.7.dev20250911104039.dist-info/RECORD,,