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 +1 -1
- letta/groups/sleeptime_multi_agent.py +13 -18
- letta/schemas/message.py +4 -0
- letta/schemas/sandbox_config.py +2 -2
- letta/server/server.py +4 -2
- letta/services/helpers/tool_execution_helper.py +3 -3
- letta/services/tool_executor/tool_execution_sandbox.py +57 -135
- letta/services/tool_sandbox/local_sandbox.py +3 -3
- {letta_nightly-0.7.3.dev20250424104224.dist-info → letta_nightly-0.7.4.dev20250424184820.dist-info}/METADATA +1 -1
- {letta_nightly-0.7.3.dev20250424104224.dist-info → letta_nightly-0.7.4.dev20250424184820.dist-info}/RECORD +13 -13
- {letta_nightly-0.7.3.dev20250424104224.dist-info → letta_nightly-0.7.4.dev20250424184820.dist-info}/LICENSE +0 -0
- {letta_nightly-0.7.3.dev20250424104224.dist-info → letta_nightly-0.7.4.dev20250424184820.dist-info}/WHEEL +0 -0
- {letta_nightly-0.7.3.dev20250424104224.dist-info → letta_nightly-0.7.4.dev20250424184820.dist-info}/entry_points.txt +0 -0
letta/__init__.py
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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.
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
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):
|
letta/schemas/sandbox_config.py
CHANGED
@@ -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
|
-
|
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
|
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=
|
1316
|
-
tool_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.
|
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.
|
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.
|
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,
|
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(
|
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
|
-
#
|
132
|
+
# Aggregate environment variables
|
128
133
|
env = os.environ.copy()
|
129
|
-
|
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
|
-
#
|
141
|
-
if not os.path.exists(
|
142
|
-
logger.warning(f"Sandbox directory does not exist, creating: {
|
143
|
-
os.makedirs(
|
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
|
-
|
158
|
-
|
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
|
-
|
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
|
-
|
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,
|
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=
|
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"
|
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
|
-
|
251
|
-
|
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
|
-
|
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
|
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
|
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,4 +1,4 @@
|
|
1
|
-
letta/__init__.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
331
|
-
letta_nightly-0.7.
|
332
|
-
letta_nightly-0.7.
|
333
|
-
letta_nightly-0.7.
|
334
|
-
letta_nightly-0.7.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|