letta-nightly 0.7.3.dev20250424104224__py3-none-any.whl → 0.7.4.dev20250424184820__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.
letta/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "0.7.3"
1
+ __version__ = "0.7.4"
2
2
 
3
3
  # import clients
4
4
  from letta.client.client import LocalClient, RESTClient, create_client
@@ -43,24 +43,21 @@ class SleeptimeMultiAgent(Agent):
43
43
 
44
44
  def _run_async_in_new_thread(self, coro):
45
45
  """Run an async coroutine in a new thread with its own event loop"""
46
- result = None
47
46
 
48
47
  def run_async():
49
- nonlocal result
50
48
  loop = asyncio.new_event_loop()
51
49
  asyncio.set_event_loop(loop)
52
50
  try:
53
- result = loop.run_until_complete(coro)
51
+ loop.run_until_complete(coro)
54
52
  finally:
55
53
  loop.close()
56
54
  asyncio.set_event_loop(None)
57
55
 
58
56
  thread = threading.Thread(target=run_async)
57
+ thread.daemon = True
59
58
  thread.start()
60
- thread.join()
61
- return result
62
59
 
63
- async def _issue_background_task(
60
+ def _issue_background_task(
64
61
  self,
65
62
  participant_agent_id: str,
66
63
  messages: List[Message],
@@ -81,7 +78,7 @@ class SleeptimeMultiAgent(Agent):
81
78
  )
82
79
  run = self.job_manager.create_job(pydantic_job=run, actor=self.user)
83
80
 
84
- asyncio.create_task(
81
+ self._run_async_in_new_thread(
85
82
  self._perform_background_agent_step(
86
83
  participant_agent_id=participant_agent_id,
87
84
  messages=messages,
@@ -239,17 +236,15 @@ class SleeptimeMultiAgent(Agent):
239
236
  )
240
237
  for participant_agent_id in self.agent_ids:
241
238
  try:
242
- run_id = self._run_async_in_new_thread(
243
- self._issue_background_task(
244
- participant_agent_id,
245
- last_response_messages,
246
- chaining,
247
- max_chaining_steps,
248
- token_streaming,
249
- metadata,
250
- put_inner_thoughts_first,
251
- last_processed_message_id,
252
- )
239
+ run_id = self._issue_background_task(
240
+ participant_agent_id,
241
+ last_response_messages,
242
+ chaining,
243
+ max_chaining_steps,
244
+ token_streaming,
245
+ metadata,
246
+ put_inner_thoughts_first,
247
+ last_processed_message_id,
253
248
  )
254
249
  run_ids.append(run_id)
255
250
 
letta/schemas/message.py CHANGED
@@ -699,6 +699,10 @@ class Message(BaseMessage):
699
699
  else:
700
700
  raise ValueError(self.role)
701
701
 
702
+ # Optional field, do not include if null
703
+ if self.name is not None:
704
+ openai_message["name"] = self.name
705
+
702
706
  if parse_content_parts:
703
707
  for content in self.content:
704
708
  if isinstance(content, ReasoningContent):
@@ -47,14 +47,14 @@ class PipRequirement(BaseModel):
47
47
 
48
48
  class LocalSandboxConfig(BaseModel):
49
49
  sandbox_dir: Optional[str] = Field(None, description="Directory for the sandbox environment.")
50
- use_venv: bool = Field(False, description="Whether or not to use the venv, or run directly in the same run loop.")
50
+ force_create_venv: bool = Field(False, description="Whether or not to use the venv, or run directly in the same run loop.")
51
51
  venv_name: str = Field(
52
52
  "venv",
53
53
  description="The name for the venv in the sandbox directory. We first search for an existing venv with this name, otherwise, we make it from the requirements.txt.",
54
54
  )
55
55
  pip_requirements: List[PipRequirement] = Field(
56
56
  default_factory=list,
57
- description="List of pip packages to install with mandatory name and optional version following semantic versioning. This only is considered when use_venv is True.",
57
+ description="List of pip packages to install with mandatory name and optional version following semantic versioning. This only is considered when force_create_venv is True.",
58
58
  )
59
59
 
60
60
  @property
letta/server/server.py CHANGED
@@ -1308,12 +1308,14 @@ class SyncServer(Server):
1308
1308
  tool_execution_result = ToolExecutionSandbox(tool.name, tool_args, actor, tool_object=tool).run(
1309
1309
  agent_state=agent_state, additional_env_vars=tool_env_vars
1310
1310
  )
1311
+ status = "error" if tool_execution_result.stderr else "success"
1312
+ tool_return = str(tool_execution_result.stderr) if tool_execution_result.stderr else str(tool_execution_result.func_return)
1311
1313
  return ToolReturnMessage(
1312
1314
  id="null",
1313
1315
  tool_call_id="null",
1314
1316
  date=get_utc_time(),
1315
- status=tool_execution_result.status,
1316
- tool_return=str(tool_execution_result.func_return),
1317
+ status=status,
1318
+ tool_return=tool_return,
1317
1319
  stdout=tool_execution_result.stdout,
1318
1320
  stderr=tool_execution_result.stderr,
1319
1321
  )
@@ -24,7 +24,7 @@ def find_python_executable(local_configs: LocalSandboxConfig) -> str:
24
24
  """
25
25
  sandbox_dir = os.path.expanduser(local_configs.sandbox_dir) # Expand tilde
26
26
 
27
- if not local_configs.use_venv:
27
+ if not local_configs.force_create_venv:
28
28
  return "python.exe" if platform.system().lower().startswith("win") else "python3"
29
29
 
30
30
  venv_path = os.path.join(sandbox_dir, local_configs.venv_name)
@@ -96,7 +96,7 @@ def install_pip_requirements_for_sandbox(
96
96
  python_exec = find_python_executable(local_configs)
97
97
 
98
98
  # If using a virtual environment, upgrade pip before installing dependencies.
99
- if local_configs.use_venv:
99
+ if local_configs.force_create_venv:
100
100
  ensure_pip_is_up_to_date(python_exec, env=env)
101
101
 
102
102
  # Construct package list
@@ -108,7 +108,7 @@ def install_pip_requirements_for_sandbox(
108
108
  pip_cmd.append("--upgrade")
109
109
  pip_cmd += packages
110
110
 
111
- if user_install_if_no_venv and not local_configs.use_venv:
111
+ if user_install_if_no_venv and not local_configs.force_create_venv:
112
112
  pip_cmd.append("--user")
113
113
 
114
114
  run_subprocess(pip_cmd, env=env, fail_msg=f"Failed to install packages: {', '.join(packages)}")
@@ -1,12 +1,10 @@
1
1
  import ast
2
2
  import base64
3
- import io
4
3
  import os
5
4
  import pickle
6
5
  import subprocess
7
6
  import sys
8
7
  import tempfile
9
- import traceback
10
8
  import uuid
11
9
  from typing import Any, Dict, Optional
12
10
 
@@ -119,89 +117,74 @@ class ToolExecutionSandbox:
119
117
 
120
118
  @trace_method
121
119
  def run_local_dir_sandbox(
122
- self, agent_state: Optional[AgentState] = None, additional_env_vars: Optional[Dict] = None
120
+ self,
121
+ agent_state: Optional[AgentState] = None,
122
+ additional_env_vars: Optional[Dict] = None,
123
123
  ) -> ToolExecutionResult:
124
- sbx_config = self.sandbox_config_manager.get_or_create_default_sandbox_config(sandbox_type=SandboxType.LOCAL, actor=self.user)
124
+ sbx_config = self.sandbox_config_manager.get_or_create_default_sandbox_config(
125
+ sandbox_type=SandboxType.LOCAL,
126
+ actor=self.user,
127
+ )
125
128
  local_configs = sbx_config.get_local_config()
129
+ sandbox_dir = os.path.expanduser(local_configs.sandbox_dir)
130
+ venv_path = os.path.join(sandbox_dir, local_configs.venv_name)
126
131
 
127
- # Get environment variables for the sandbox
132
+ # Aggregate environment variables
128
133
  env = os.environ.copy()
129
- env_vars = self.sandbox_config_manager.get_sandbox_env_vars_as_dict(sandbox_config_id=sbx_config.id, actor=self.user, limit=100)
130
- env.update(env_vars)
131
-
132
- # Get environment variables for this agent specifically
134
+ env.update(self.sandbox_config_manager.get_sandbox_env_vars_as_dict(sandbox_config_id=sbx_config.id, actor=self.user, limit=100))
133
135
  if agent_state:
134
136
  env.update(agent_state.get_agent_env_vars_as_dict())
135
-
136
- # Finally, get any that are passed explicitly into the `run` function call
137
137
  if additional_env_vars:
138
138
  env.update(additional_env_vars)
139
139
 
140
- # Safety checks
141
- if not os.path.exists(local_configs.sandbox_dir) or not os.path.isdir(local_configs.sandbox_dir):
142
- logger.warning(f"Sandbox directory does not exist, creating: {local_configs.sandbox_dir}")
143
- os.makedirs(local_configs.sandbox_dir)
144
-
145
- # Write the code to a temp file in the sandbox_dir
146
- with tempfile.NamedTemporaryFile(mode="w", dir=local_configs.sandbox_dir, suffix=".py", delete=False) as temp_file:
147
- if local_configs.use_venv:
148
- # If using venv, we need to wrap with special string markers to separate out the output and the stdout (since it is all in stdout)
149
- code = self.generate_execution_script(agent_state=agent_state, wrap_print_with_markers=True)
150
- else:
151
- code = self.generate_execution_script(agent_state=agent_state)
140
+ # Ensure sandbox dir exists
141
+ if not os.path.exists(sandbox_dir):
142
+ logger.warning(f"Sandbox directory does not exist, creating: {sandbox_dir}")
143
+ os.makedirs(sandbox_dir)
152
144
 
145
+ # Write the code to a temp file
146
+ with tempfile.NamedTemporaryFile(mode="w", dir=sandbox_dir, suffix=".py", delete=False) as temp_file:
147
+ code = self.generate_execution_script(agent_state=agent_state, wrap_print_with_markers=True)
153
148
  temp_file.write(code)
154
149
  temp_file.flush()
155
150
  temp_file_path = temp_file.name
151
+
156
152
  try:
157
- if local_configs.use_venv:
158
- return self.run_local_dir_sandbox_venv(sbx_config, env, temp_file_path)
153
+ # Decide whether to use venv
154
+ use_venv = os.path.isdir(venv_path)
155
+
156
+ if self.force_recreate_venv or (not use_venv and local_configs.force_create_venv):
157
+ logger.warning(f"Virtual environment not found at {venv_path}. Creating one...")
158
+ log_event(name="start create_venv_for_local_sandbox", attributes={"venv_path": venv_path})
159
+ create_venv_for_local_sandbox(
160
+ sandbox_dir_path=sandbox_dir,
161
+ venv_path=venv_path,
162
+ env=env,
163
+ force_recreate=self.force_recreate_venv,
164
+ )
165
+ log_event(name="finish create_venv_for_local_sandbox")
166
+ use_venv = True
167
+
168
+ if use_venv:
169
+ log_event(name="start install_pip_requirements_for_sandbox", attributes={"local_configs": local_configs.model_dump_json()})
170
+ install_pip_requirements_for_sandbox(local_configs, env=env)
171
+ log_event(name="finish install_pip_requirements_for_sandbox", attributes={"local_configs": local_configs.model_dump_json()})
172
+
173
+ python_executable = find_python_executable(local_configs)
174
+ if not os.path.isfile(python_executable):
175
+ logger.warning(
176
+ f"Python executable not found at expected venv path: {python_executable}. Falling back to system Python."
177
+ )
178
+ python_executable = sys.executable
179
+ else:
180
+ env = dict(env)
181
+ env["VIRTUAL_ENV"] = venv_path
182
+ env["PATH"] = os.path.join(venv_path, "bin") + ":" + env.get("PATH", "")
159
183
  else:
160
- return self.run_local_dir_sandbox_directly(sbx_config, env, temp_file_path)
161
- except Exception as e:
162
- logger.error(f"Executing tool {self.tool_name} has an unexpected error: {e}")
163
- logger.error(f"Logging out tool {self.tool_name} auto-generated code for debugging: \n\n{code}")
164
- raise e
165
- finally:
166
- # Clean up the temp file
167
- os.remove(temp_file_path)
168
-
169
- @trace_method
170
- def run_local_dir_sandbox_venv(
171
- self,
172
- sbx_config: SandboxConfig,
173
- env: Dict[str, str],
174
- temp_file_path: str,
175
- ) -> ToolExecutionResult:
176
- local_configs = sbx_config.get_local_config()
177
- sandbox_dir = os.path.expanduser(local_configs.sandbox_dir) # Expand tilde
178
- venv_path = os.path.join(sandbox_dir, local_configs.venv_name)
179
-
180
- # Recreate venv if required
181
- if self.force_recreate_venv or not os.path.isdir(venv_path):
182
- logger.warning(f"Virtual environment directory does not exist at: {venv_path}, creating one now...")
183
- log_event(name="start create_venv_for_local_sandbox", attributes={"venv_path": venv_path})
184
- create_venv_for_local_sandbox(
185
- sandbox_dir_path=sandbox_dir, venv_path=venv_path, env=env, force_recreate=self.force_recreate_venv
186
- )
187
- log_event(name="finish create_venv_for_local_sandbox")
188
-
189
- log_event(name="start install_pip_requirements_for_sandbox", attributes={"local_configs": local_configs.model_dump_json()})
190
- install_pip_requirements_for_sandbox(local_configs, env=env)
191
- log_event(name="finish install_pip_requirements_for_sandbox", attributes={"local_configs": local_configs.model_dump_json()})
192
-
193
- # Ensure Python executable exists
194
- python_executable = find_python_executable(local_configs)
195
- if not os.path.isfile(python_executable):
196
- raise FileNotFoundError(f"Python executable not found in virtual environment: {python_executable}")
184
+ python_executable = sys.executable
197
185
 
198
- # Set up environment variables
199
- env["VIRTUAL_ENV"] = venv_path
200
- env["PATH"] = os.path.join(venv_path, "bin") + ":" + env["PATH"]
201
- env["PYTHONWARNINGS"] = "ignore"
186
+ env["PYTHONWARNINGS"] = "ignore"
202
187
 
203
- # Execute the code
204
- try:
205
188
  log_event(name="start subprocess")
206
189
  result = subprocess.run(
207
190
  [python_executable, temp_file_path],
@@ -213,19 +196,19 @@ class ToolExecutionSandbox:
213
196
  )
214
197
  log_event(name="finish subprocess")
215
198
  func_result, stdout = self.parse_out_function_results_markers(result.stdout)
216
- func_return, agent_state = self.parse_best_effort(func_result)
199
+ func_return, parsed_agent_state = self.parse_best_effort(func_result)
217
200
 
218
201
  return ToolExecutionResult(
219
202
  status="success",
220
203
  func_return=func_return,
221
- agent_state=agent_state,
204
+ agent_state=parsed_agent_state,
222
205
  stdout=[stdout] if stdout else [],
223
206
  stderr=[result.stderr] if result.stderr else [],
224
207
  sandbox_config_fingerprint=sbx_config.fingerprint(),
225
208
  )
226
209
 
227
210
  except subprocess.CalledProcessError as e:
228
- logger.error(f"Executing tool {self.tool_name} has process error: {e}")
211
+ logger.error(f"Tool execution failed: {e}")
229
212
  func_return = get_friendly_error_msg(
230
213
  function_name=self.tool_name,
231
214
  exception_name=type(e).__name__,
@@ -245,72 +228,11 @@ class ToolExecutionSandbox:
245
228
 
246
229
  except Exception as e:
247
230
  logger.error(f"Executing tool {self.tool_name} has an unexpected error: {e}")
231
+ logger.error(f"Generated script:\n{code}")
248
232
  raise e
249
233
 
250
- @trace_method
251
- def run_local_dir_sandbox_directly(
252
- self,
253
- sbx_config: SandboxConfig,
254
- env: Dict[str, str],
255
- temp_file_path: str,
256
- ) -> ToolExecutionResult:
257
- status = "success"
258
- func_return, agent_state, stderr = None, None, None
259
-
260
- old_stdout = sys.stdout
261
- old_stderr = sys.stderr
262
- captured_stdout, captured_stderr = io.StringIO(), io.StringIO()
263
-
264
- sys.stdout = captured_stdout
265
- sys.stderr = captured_stderr
266
-
267
- try:
268
- with self.temporary_env_vars(env):
269
-
270
- # Read and compile the Python script
271
- with open(temp_file_path, "r", encoding="utf-8") as f:
272
- source = f.read()
273
- code_obj = compile(source, temp_file_path, "exec")
274
-
275
- # Provide a dict for globals
276
- globals_dict = dict(env) # or {}
277
- # If you need to mimic `__main__` behavior:
278
- globals_dict["__name__"] = "__main__"
279
- globals_dict["__file__"] = temp_file_path
280
-
281
- # Execute the compiled code
282
- log_event(name="start exec", attributes={"temp_file_path": temp_file_path})
283
- exec(code_obj, globals_dict)
284
- log_event(name="finish exec", attributes={"temp_file_path": temp_file_path})
285
-
286
- # Get result from the global dict
287
- func_result = globals_dict.get(self.LOCAL_SANDBOX_RESULT_VAR_NAME)
288
- func_return, agent_state = self.parse_best_effort(func_result)
289
-
290
- except Exception as e:
291
- func_return = get_friendly_error_msg(
292
- function_name=self.tool_name,
293
- exception_name=type(e).__name__,
294
- exception_message=str(e),
295
- )
296
- traceback.print_exc(file=sys.stderr)
297
- status = "error"
298
-
299
- # Restore stdout/stderr
300
- sys.stdout = old_stdout
301
- sys.stderr = old_stderr
302
-
303
- stdout_output = [captured_stdout.getvalue()] if captured_stdout.getvalue() else []
304
- stderr_output = [captured_stderr.getvalue()] if captured_stderr.getvalue() else []
305
-
306
- return ToolExecutionResult(
307
- status=status,
308
- func_return=func_return,
309
- agent_state=agent_state,
310
- stdout=stdout_output,
311
- stderr=stderr_output,
312
- sandbox_config_fingerprint=sbx_config.fingerprint(),
313
- )
234
+ finally:
235
+ os.remove(temp_file_path)
314
236
 
315
237
  def parse_out_function_results_markers(self, text: str):
316
238
  if self.LOCAL_SANDBOX_RESULT_START_MARKER not in text:
@@ -69,7 +69,7 @@ class AsyncToolSandboxLocal(AsyncToolSandboxBase):
69
69
  else:
70
70
  sbx_config = self.sandbox_config_manager.get_or_create_default_sandbox_config(sandbox_type=SandboxType.LOCAL, actor=self.user)
71
71
  local_configs = sbx_config.get_local_config()
72
- use_venv = local_configs.use_venv
72
+ force_create_venv = local_configs.force_create_venv
73
73
 
74
74
  # Prepare environment variables
75
75
  env = os.environ.copy()
@@ -92,7 +92,7 @@ class AsyncToolSandboxLocal(AsyncToolSandboxBase):
92
92
 
93
93
  # If using a virtual environment, ensure it's prepared in parallel
94
94
  venv_preparation_task = None
95
- if use_venv:
95
+ if force_create_venv:
96
96
  venv_path = str(os.path.join(sandbox_dir, local_configs.venv_name))
97
97
  venv_preparation_task = asyncio.create_task(self._prepare_venv(local_configs, venv_path, env))
98
98
 
@@ -110,7 +110,7 @@ class AsyncToolSandboxLocal(AsyncToolSandboxBase):
110
110
 
111
111
  # Determine the python executable and environment for the subprocess
112
112
  exec_env = env.copy()
113
- if use_venv:
113
+ if force_create_venv:
114
114
  venv_path = str(os.path.join(sandbox_dir, local_configs.venv_name))
115
115
  python_executable = find_python_executable(local_configs)
116
116
  exec_env["VIRTUAL_ENV"] = venv_path
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.7.3.dev20250424104224
3
+ Version: 0.7.4.dev20250424184820
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -1,4 +1,4 @@
1
- letta/__init__.py,sha256=ShZtnPIM0QOgxGGKrq6VfF4qXaE6_ZDoAQ6zXI0RepM,917
1
+ letta/__init__.py,sha256=syDK9U6HGmZVN3Corz6hxHnV1EA-JVL--ta6nFa6z5s,917
2
2
  letta/__main__.py,sha256=6Hs2PV7EYc5Tid4g4OtcLXhqVHiNYTGzSBdoOnW2HXA,29
3
3
  letta/agent.py,sha256=YmAkpFXHwZ0UhoatyIE-ZrV-kQDwg7f4A1o4cymoI-Y,72170
4
4
  letta/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -42,7 +42,7 @@ letta/functions/schema_generator.py,sha256=OoXDHd5oZMNjljZJplEIMOMmKvxO_rfDFtAi-
42
42
  letta/groups/dynamic_multi_agent.py,sha256=OLCxhICFLYyx8wjKGPr1INc6pniEuk4YGZyZhq2vkiY,12230
43
43
  letta/groups/helpers.py,sha256=Cof7vfZMOT2gApYpROpiAyKSKrofP1UPJxZQWFcZaqA,4336
44
44
  letta/groups/round_robin_multi_agent.py,sha256=uUJff0bO68udOREiKFWeS7eEQlk3bF7hcfLSFXMScqI,6999
45
- letta/groups/sleeptime_multi_agent.py,sha256=sBVcTHKDu5kKG2W3iXib9uSY2T1e_ngmwcVA207Phiw,10245
45
+ letta/groups/sleeptime_multi_agent.py,sha256=aGtL7YiCcy1pjEXHNf85to8Wa2AT4m47Su4qXSmP3Pg,10054
46
46
  letta/groups/supervisor_multi_agent.py,sha256=ml8Gi9gyVjPuVZjAJAkpGZDjnM7GOS50NkKf5SIutvQ,4455
47
47
  letta/helpers/__init__.py,sha256=p0luQ1Oe3Skc6sH4O58aHHA3Qbkyjifpuq0DZ1GAY0U,59
48
48
  letta/helpers/composio_helpers.py,sha256=5SznD1Y0Y1rV4_wu-uCaZdDU2tNedk-RIX0M9-0r6yo,947
@@ -213,7 +213,7 @@ letta/schemas/llm_batch_job.py,sha256=n9ZbWINBECRrZW6vslm-f2pk_rI_gpuxcZsqAphl9b
213
213
  letta/schemas/llm_config.py,sha256=DIJrjHUYohOd0yz3rNK8TAABbFZsLd8EpdscQErjobU,7927
214
214
  letta/schemas/llm_config_overrides.py,sha256=-oRglCTcajF6UAK3RAa0FLWVuKODPI1v403fDIWMAtA,1815
215
215
  letta/schemas/memory.py,sha256=GOYDfPKzbWftUWO9Hv4KW7xAi1EIQmC8zpP7qvEkVHw,10245
216
- letta/schemas/message.py,sha256=oA6vvsqlsXKA42-LsEqwv-UcTPrFEf5z6rjRWvxNSF0,49545
216
+ letta/schemas/message.py,sha256=Is9K5-J-V07-EiyLezsY4JBuENQTogZ_6FraOoLd_mc,49676
217
217
  letta/schemas/openai/chat_completion_request.py,sha256=PZHzx--ooqJLsHTo1NpHwfywm5L8Id-CUXaKR6eXuko,4171
218
218
  letta/schemas/openai/chat_completion_response.py,sha256=7SsfVNsWq_EUajmckU5KjFClkK0iXZF2jHWZZ0nr6T4,6701
219
219
  letta/schemas/openai/chat_completions.py,sha256=l0e9sT9boTD5VBU5YtJ0s7qUtCfFGB2K-gQLeEZ2LHU,3599
@@ -224,7 +224,7 @@ letta/schemas/passage.py,sha256=RG0vkaewEu4a_NAZM-FVyMammHjqpPP0RDYAdu27g6A,3723
224
224
  letta/schemas/providers.py,sha256=lUz9QvMm_-wUUJZ5OGRsefsora0Y_55s3xQwnzL8gOw,51643
225
225
  letta/schemas/response_format.py,sha256=pXNsjbtpA3Tf8HsDyIa40CSmoUbVR_7n2WOfQaX4aFs,2204
226
226
  letta/schemas/run.py,sha256=SRqPRziINIiPunjOhE_NlbnQYgxTvqmbauni_yfBQRA,2085
227
- letta/schemas/sandbox_config.py,sha256=SZCo3FSMz-DIBMKGu0atT4tsVFXGsqMFPaJnjrxpkX4,5993
227
+ letta/schemas/sandbox_config.py,sha256=Uu_GDofZasycarUVjXB1tL5-X1pLXSsrCB_7XycRIuM,6011
228
228
  letta/schemas/source.py,sha256=IuenIFs7B8uOuYJIHXqR1E28wVSa-pUX6NkLZH7cukg,3141
229
229
  letta/schemas/step.py,sha256=WkcVnruUUOWLKwiWPn2Gfal4EQZPNLqlsd9859xhgsw,2224
230
230
  letta/schemas/tool.py,sha256=n1gYBORUwT4pH5NYLLfT8v97JcoI3W6mpnUsa-GzcNg,13063
@@ -278,7 +278,7 @@ letta/server/rest_api/routers/v1/users.py,sha256=G5DBHSkPfBgVHN2Wkm-rVYiLQAudwQc
278
278
  letta/server/rest_api/routers/v1/voice.py,sha256=0lerWjrKLkt4gXLhZl1cIcgstOz9Q2HZwc67L58BCXE,2451
279
279
  letta/server/rest_api/static_files.py,sha256=NG8sN4Z5EJ8JVQdj19tkFa9iQ1kBPTab9f_CUxd_u4Q,3143
280
280
  letta/server/rest_api/utils.py,sha256=OKUWg7u4vmROVweqRrs83bQvS958bZAoR_bUFDwwqsc,14861
281
- letta/server/server.py,sha256=XcZ_vrQkG2CVr_mgCKVAV6EMVjuR4lQVtU3FTAUJIIc,79726
281
+ letta/server/server.py,sha256=lEoFawsNHHa2VI-ipFuYqToi7OgJrVYOLUlNd_CYHqA,79889
282
282
  letta/server/startup.sh,sha256=MRXh1RKbS5lyA7XAsk7O6Q4LEKOqnv5B-dwe0SnTHeQ,2514
283
283
  letta/server/static_files/assets/index-048c9598.js,sha256=mR16XppvselwKCcNgONs4L7kZEVa4OEERm4lNZYtLSk,146819
284
284
  letta/server/static_files/assets/index-0e31b727.css,sha256=SBbja96uiQVLDhDOroHgM6NSl7tS4lpJRCREgSS_hA8,7672
@@ -296,7 +296,7 @@ letta/services/agent_manager.py,sha256=I893THGSJrwQt-NynuY2rUJxTOGVCetIlXdkEZALc
296
296
  letta/services/block_manager.py,sha256=rphbpGBIEDFvCJ5GJt6A1OfbURGFQZ3WardljELQyAc,15225
297
297
  letta/services/group_manager.py,sha256=z1woWRRnjkWrGG_auSicXr2bJaJ653JV6PYl2N_AUfw,12224
298
298
  letta/services/helpers/agent_manager_helper.py,sha256=57ARg5TcmE_JdrWmhz5uaNHAt1NGlJ3wQH1tP2XOiAs,17825
299
- letta/services/helpers/tool_execution_helper.py,sha256=lLoebs1kZKjw62y1PxHbIDkHq_heJN2ZT0gKje-R8oo,6941
299
+ letta/services/helpers/tool_execution_helper.py,sha256=E8knHJUP_EKmAzwKx-z-rd5EKjU-oroyPzyElUmq83o,6968
300
300
  letta/services/identity_manager.py,sha256=PqnUnM3OGCRnd5NPjGonwYBnYAQK8rpiissdNYUouGU,9389
301
301
  letta/services/job_manager.py,sha256=Z9cSD-IqpiOIWE_UOTBUEIxGITrJ10JT1G3ske-0yIY,17166
302
302
  letta/services/llm_batch_manager.py,sha256=jm6MY91hrZdcPOsimSd7Ns3mf0J4SwKV2_ShWXhD02k,16819
@@ -313,13 +313,13 @@ letta/services/summarizer/enums.py,sha256=szzPX2OBRRJEZsBTGYQThrNz02ELFqhuLwvOR7
313
313
  letta/services/summarizer/summarizer.py,sha256=4rbbzcB_lY4-3ybT8HMxM8OskLC38YCs9n5h0NhWRcY,4988
314
314
  letta/services/tool_executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
315
315
  letta/services/tool_executor/tool_execution_manager.py,sha256=RcmnwPougb8AxIwKdC4N9ZxTvOQqJyjI6CaVHF2HBi4,4505
316
- letta/services/tool_executor/tool_execution_sandbox.py,sha256=nEd36843hY_u076RtR2Wl-1HsnIq5XzMun8iGe1kwdU,24754
316
+ letta/services/tool_executor/tool_execution_sandbox.py,sha256=EMQC25mYf7OxsUNPHFNkbcUZHZvf4QaeO94xenQJv4Y,21450
317
317
  letta/services/tool_executor/tool_executor.py,sha256=keWIzQuwqSzcC6kWcbTY_SfclhKtOT5CZNE-r3OBWNk,27372
318
318
  letta/services/tool_manager.py,sha256=a5PyLqYDd1H3snWdQGxl-dscMrBHlXcwg6U4T-tc_IM,10276
319
319
  letta/services/tool_sandbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
320
320
  letta/services/tool_sandbox/base.py,sha256=pUnPFkEg9I5ktMuT4AOOxbTnTmZTGcTA2phLe1H1EdY,8306
321
321
  letta/services/tool_sandbox/e2b_sandbox.py,sha256=umsXfolzM_j67izswECDdVfnlcm03wLpMoZtS6SZ0sc,6147
322
- letta/services/tool_sandbox/local_sandbox.py,sha256=TdtUkzT6lsKqUWvL9iw0CyL3el9r6fqfavLly8jnux4,10475
322
+ letta/services/tool_sandbox/local_sandbox.py,sha256=3TC8bVZerhmVD6T-PxPN-QeQGOKzKjHNG7zhhU1o2ME,10511
323
323
  letta/services/user_manager.py,sha256=ScHbdJK9kNF8QXjsd3ZWGEL87n_Uyp3YwfKetOJmpHs,4304
324
324
  letta/settings.py,sha256=CN48IzOHJ2mUUDvYR1qlh-n9ukXJxNuVDlj_v74UJmg,8046
325
325
  letta/streaming_interface.py,sha256=kDSc5bnodgGzAuLcnq4Zf7p-uS6cdyxSIZ5U_JA_8FU,16300
@@ -327,8 +327,8 @@ letta/streaming_utils.py,sha256=jLqFTVhUL76FeOuYk8TaRQHmPTf3HSRc2EoJwxJNK6U,1194
327
327
  letta/system.py,sha256=dnOrS2FlRMwijQnOvfrky0Lg8wEw-FUq2zzfAJOUSKA,8477
328
328
  letta/tracing.py,sha256=RstWXpfWVF77nmb_ISORVWd9IQw2Ky3de40k_S70yKI,8258
329
329
  letta/utils.py,sha256=IZFvtj9WYcrxUbkoUUYGDxMYQYdn5SgfqsvnARGsAzc,32245
330
- letta_nightly-0.7.3.dev20250424104224.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
331
- letta_nightly-0.7.3.dev20250424104224.dist-info/METADATA,sha256=vkA4D8fksUdoGVsggydzQnSg3UiVVS2AoTdSuUz5CdI,22282
332
- letta_nightly-0.7.3.dev20250424104224.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
333
- letta_nightly-0.7.3.dev20250424104224.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
334
- letta_nightly-0.7.3.dev20250424104224.dist-info/RECORD,,
330
+ letta_nightly-0.7.4.dev20250424184820.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
331
+ letta_nightly-0.7.4.dev20250424184820.dist-info/METADATA,sha256=VuX6foyFknSyK3rzhVvx8iY8IY4yHwnfo_yIpjEFi8I,22282
332
+ letta_nightly-0.7.4.dev20250424184820.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
333
+ letta_nightly-0.7.4.dev20250424184820.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
334
+ letta_nightly-0.7.4.dev20250424184820.dist-info/RECORD,,