letta-nightly 0.6.4.dev20241217104233__py3-none-any.whl → 0.6.5.dev20241218055539__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.

Potentially problematic release.


This version of letta-nightly might be problematic. Click here for more details.

@@ -10,16 +10,17 @@ import tempfile
10
10
  import traceback
11
11
  import uuid
12
12
  import venv
13
- from typing import Any, Dict, Optional, TextIO
13
+ from typing import Any, Dict, Optional
14
14
 
15
15
  from letta.log import get_logger
16
16
  from letta.schemas.agent import AgentState
17
17
  from letta.schemas.sandbox_config import SandboxConfig, SandboxRunResult, SandboxType
18
18
  from letta.schemas.tool import Tool
19
+ from letta.schemas.user import User
19
20
  from letta.services.sandbox_config_manager import SandboxConfigManager
20
21
  from letta.services.tool_manager import ToolManager
21
- from letta.services.user_manager import UserManager
22
22
  from letta.settings import tool_settings
23
+ from letta.utils import get_friendly_error_msg
23
24
 
24
25
  logger = get_logger(__name__)
25
26
 
@@ -37,14 +38,10 @@ class ToolExecutionSandbox:
37
38
  # We make this a long random string to avoid collisions with any variables in the user's code
38
39
  LOCAL_SANDBOX_RESULT_VAR_NAME = "result_ZQqiequkcFwRwwGQMqkt"
39
40
 
40
- def __init__(self, tool_name: str, args: dict, user_id: str, force_recreate=False, tool_object: Optional[Tool] = None):
41
+ def __init__(self, tool_name: str, args: dict, user: User, force_recreate=False, tool_object: Optional[Tool] = None):
41
42
  self.tool_name = tool_name
42
43
  self.args = args
43
-
44
- # Get the user
45
- # This user corresponds to the agent_state's user_id field
46
- # agent_state is the state of the agent that invoked this run
47
- self.user = UserManager().get_user_by_id(user_id=user_id)
44
+ self.user = user
48
45
 
49
46
  # If a tool object is provided, we use it directly, otherwise pull via name
50
47
  if tool_object is not None:
@@ -79,11 +76,11 @@ class ToolExecutionSandbox:
79
76
  logger.debug(f"Using local sandbox to execute {self.tool_name}")
80
77
  result = self.run_local_dir_sandbox(agent_state=agent_state)
81
78
 
82
- # Log out any stdout from the tool run
83
- logger.debug(f"Executed tool '{self.tool_name}', logging stdout from tool run: \n")
84
- for log_line in result.stdout:
79
+ # Log out any stdout/stderr from the tool run
80
+ logger.debug(f"Executed tool '{self.tool_name}', logging output from tool run: \n")
81
+ for log_line in (result.stdout or []) + (result.stderr or []):
85
82
  logger.debug(f"{log_line}")
86
- logger.debug(f"Ending stdout log from tool run.")
83
+ logger.debug(f"Ending output log from tool run.")
87
84
 
88
85
  # Return result
89
86
  return result
@@ -126,30 +123,24 @@ class ToolExecutionSandbox:
126
123
  temp_file.flush()
127
124
  temp_file_path = temp_file.name
128
125
 
129
- # Save the old stdout
130
- old_stdout = sys.stdout
131
- old_stderr = sys.stderr
132
126
  try:
133
127
  if local_configs.use_venv:
134
128
  return self.run_local_dir_sandbox_venv(sbx_config, env, temp_file_path)
135
129
  else:
136
- return self.run_local_dir_sandbox_runpy(sbx_config, env_vars, temp_file_path, old_stdout, old_stderr)
130
+ return self.run_local_dir_sandbox_runpy(sbx_config, env_vars, temp_file_path)
137
131
  except Exception as e:
138
132
  logger.error(f"Executing tool {self.tool_name} has an unexpected error: {e}")
139
133
  logger.error(f"Logging out tool {self.tool_name} auto-generated code for debugging: \n\n{code}")
140
134
  raise e
141
135
  finally:
142
- # Clean up the temp file and restore stdout
143
- sys.stdout = old_stdout
144
- sys.stderr = old_stderr
136
+ # Clean up the temp file
145
137
  os.remove(temp_file_path)
146
138
 
147
139
  def run_local_dir_sandbox_venv(self, sbx_config: SandboxConfig, env: Dict[str, str], temp_file_path: str) -> SandboxRunResult:
148
140
  local_configs = sbx_config.get_local_config()
149
141
  venv_path = os.path.join(local_configs.sandbox_dir, local_configs.venv_name)
150
142
 
151
- # Safety checks for the venv
152
- # Verify that the venv path exists and is a directory
143
+ # Safety checks for the venv: verify that the venv path exists and is a directory
153
144
  if not os.path.isdir(venv_path):
154
145
  logger.warning(f"Virtual environment directory does not exist at: {venv_path}, creating one now...")
155
146
  self.create_venv_for_local_sandbox(sandbox_dir_path=local_configs.sandbox_dir, venv_path=venv_path, env=env)
@@ -180,27 +171,42 @@ class ToolExecutionSandbox:
180
171
  return SandboxRunResult(
181
172
  func_return=func_return,
182
173
  agent_state=agent_state,
183
- stdout=[stdout],
184
- stderr=[result.stderr],
174
+ stdout=[stdout] if stdout else [],
175
+ stderr=[result.stderr] if result.stderr else [],
176
+ status="success",
185
177
  sandbox_config_fingerprint=sbx_config.fingerprint(),
186
178
  )
187
179
 
188
- except subprocess.TimeoutExpired:
189
- raise TimeoutError(f"Executing tool {self.tool_name} has timed out.")
190
180
  except subprocess.CalledProcessError as e:
191
181
  logger.error(f"Executing tool {self.tool_name} has process error: {e}")
192
- raise e
182
+ func_return = get_friendly_error_msg(
183
+ function_name=self.tool_name,
184
+ exception_name=type(e).__name__,
185
+ exception_message=str(e),
186
+ )
187
+ return SandboxRunResult(
188
+ func_return=func_return,
189
+ agent_state=None,
190
+ stdout=[e.stdout] if e.stdout else [],
191
+ stderr=[e.stderr] if e.stderr else [],
192
+ status="error",
193
+ sandbox_config_fingerprint=sbx_config.fingerprint(),
194
+ )
195
+
196
+ except subprocess.TimeoutExpired:
197
+ raise TimeoutError(f"Executing tool {self.tool_name} has timed out.")
198
+
193
199
  except Exception as e:
194
200
  logger.error(f"Executing tool {self.tool_name} has an unexpected error: {e}")
195
201
  raise e
196
-
197
202
 
198
- def run_local_dir_sandbox_runpy(
199
- self, sbx_config: SandboxConfig, env_vars: Dict[str, str], temp_file_path: str, old_stdout: TextIO, old_stderr: TextIO
200
- ) -> SandboxRunResult:
201
- func_return, agent_state, error_msg = None, None, None
203
+ def run_local_dir_sandbox_runpy(self, sbx_config: SandboxConfig, env_vars: Dict[str, str], temp_file_path: str) -> SandboxRunResult:
204
+ status = "success"
205
+ agent_state, stderr = None, None
202
206
 
203
207
  # Redirect stdout and stderr to capture script output
208
+ old_stdout = sys.stdout
209
+ old_stderr = sys.stderr
204
210
  captured_stdout, captured_stderr = io.StringIO(), io.StringIO()
205
211
  sys.stdout = captured_stdout
206
212
  sys.stderr = captured_stderr
@@ -215,27 +221,28 @@ class ToolExecutionSandbox:
215
221
  func_return, agent_state = self.parse_best_effort(func_result)
216
222
 
217
223
  except Exception as e:
224
+ func_return = get_friendly_error_msg(function_name=self.tool_name, exception_name=type(e).__name__, exception_message=str(e))
218
225
  traceback.print_exc(file=sys.stderr)
219
- error_msg = f"{type(e).__name__}: {str(e)}"
226
+ status = "error"
220
227
 
221
228
  # Restore stdout and stderr and collect captured output
222
229
  sys.stdout = old_stdout
223
230
  sys.stderr = old_stderr
224
- stdout_output = [captured_stdout.getvalue()]
225
- stderr_output = [captured_stderr.getvalue()]
226
- stderr_output.append(error_msg if error_msg else '')
231
+ stdout_output = [captured_stdout.getvalue()] if captured_stdout.getvalue() else []
232
+ stderr_output = [captured_stderr.getvalue()] if captured_stderr.getvalue() else []
227
233
 
228
234
  return SandboxRunResult(
229
235
  func_return=func_return,
230
236
  agent_state=agent_state,
231
237
  stdout=stdout_output,
232
238
  stderr=stderr_output,
239
+ status=status,
233
240
  sandbox_config_fingerprint=sbx_config.fingerprint(),
234
241
  )
235
242
 
236
243
  def parse_out_function_results_markers(self, text: str):
237
244
  if self.LOCAL_SANDBOX_RESULT_START_MARKER not in text:
238
- return '', text
245
+ return "", text
239
246
  marker_len = len(self.LOCAL_SANDBOX_RESULT_START_MARKER)
240
247
  start_index = text.index(self.LOCAL_SANDBOX_RESULT_START_MARKER) + marker_len
241
248
  end_index = text.index(self.LOCAL_SANDBOX_RESULT_END_MARKER)
@@ -280,20 +287,24 @@ class ToolExecutionSandbox:
280
287
  env_vars = self.sandbox_config_manager.get_sandbox_env_vars_as_dict(sandbox_config_id=sbx_config.id, actor=self.user, limit=100)
281
288
  code = self.generate_execution_script(agent_state=agent_state)
282
289
  execution = sbx.run_code(code, envs=env_vars)
283
- func_return, agent_state = None, None
284
- if execution.error is not None:
290
+
291
+ if execution.results:
292
+ func_return, agent_state = self.parse_best_effort(execution.results[0].text)
293
+ elif execution.error:
285
294
  logger.error(f"Executing tool {self.tool_name} failed with {execution.error}")
286
- execution.logs.stderr.append(execution.error.traceback)
287
- execution.logs.stderr.append(f"{execution.error.name}: {execution.error.value}")
288
- elif len(execution.results) == 0:
289
- raise ValueError(f"Tool {self.tool_name} returned execution with None")
295
+ func_return = get_friendly_error_msg(
296
+ function_name=self.tool_name, exception_name=execution.error.name, exception_message=execution.error.value
297
+ )
298
+ execution.logs.stderr.append(execution.error.traceback)
290
299
  else:
291
- func_return, agent_state = self.parse_best_effort(execution.results[0].text)
300
+ raise ValueError(f"Tool {self.tool_name} returned execution with None")
301
+
292
302
  return SandboxRunResult(
293
303
  func_return=func_return,
294
304
  agent_state=agent_state,
295
305
  stdout=execution.logs.stdout,
296
306
  stderr=execution.logs.stderr,
307
+ status="error" if execution.error else "success",
297
308
  sandbox_config_fingerprint=sbx_config.fingerprint(),
298
309
  )
299
310
 
@@ -481,5 +492,3 @@ class ToolExecutionSandbox:
481
492
 
482
493
  func_call_str = self.tool.name + "(" + params + ")"
483
494
  return func_call_str
484
-
485
- #
letta/settings.py CHANGED
@@ -17,7 +17,7 @@ class ToolSettings(BaseSettings):
17
17
 
18
18
  class ModelSettings(BaseSettings):
19
19
 
20
- model_config = SettingsConfigDict(env_file='.env', extra='ignore')
20
+ model_config = SettingsConfigDict(env_file=".env", extra="ignore")
21
21
 
22
22
  # env_prefix='my_prefix_'
23
23
 
@@ -64,7 +64,7 @@ cors_origins = ["http://letta.localhost", "http://localhost:8283", "http://local
64
64
 
65
65
 
66
66
  class Settings(BaseSettings):
67
- model_config = SettingsConfigDict(env_prefix="letta_", extra='ignore')
67
+ model_config = SettingsConfigDict(env_prefix="letta_", extra="ignore")
68
68
 
69
69
  letta_dir: Optional[Path] = Field(Path.home() / ".letta", env="LETTA_DIR")
70
70
  debug: Optional[bool] = False
@@ -76,7 +76,12 @@ class Settings(BaseSettings):
76
76
  pg_password: Optional[str] = None
77
77
  pg_host: Optional[str] = None
78
78
  pg_port: Optional[int] = None
79
- pg_uri: Optional[str] = None # option to specifiy full uri
79
+ pg_uri: Optional[str] = None # option to specify full uri
80
+ pg_pool_size: int = 20 # Concurrent connections
81
+ pg_max_overflow: int = 10 # Overflow limit
82
+ pg_pool_timeout: int = 30 # Seconds to wait for a connection
83
+ pg_pool_recycle: int = 1800 # When to recycle connections
84
+ pg_echo: bool = False # Logging
80
85
 
81
86
  # tools configuration
82
87
  load_default_external_tools: Optional[bool] = None
@@ -103,7 +108,7 @@ class Settings(BaseSettings):
103
108
 
104
109
 
105
110
  class TestSettings(Settings):
106
- model_config = SettingsConfigDict(env_prefix="letta_test_", extra='ignore')
111
+ model_config = SettingsConfigDict(env_prefix="letta_test_", extra="ignore")
107
112
 
108
113
  letta_dir: Optional[Path] = Field(Path.home() / ".letta/test", env="LETTA_TEST_DIR")
109
114
 
letta/utils.py CHANGED
@@ -1118,3 +1118,11 @@ def sanitize_filename(filename: str) -> str:
1118
1118
 
1119
1119
  # Return the sanitized filename
1120
1120
  return sanitized_filename
1121
+
1122
+ def get_friendly_error_msg(function_name: str, exception_name: str, exception_message: str):
1123
+ from letta.constants import MAX_ERROR_MESSAGE_CHAR_LIMIT
1124
+
1125
+ error_msg = f"Error executing function {function_name}: {exception_name}: {exception_message}"
1126
+ if len(error_msg) > MAX_ERROR_MESSAGE_CHAR_LIMIT:
1127
+ error_msg = error_msg[:MAX_ERROR_MESSAGE_CHAR_LIMIT]
1128
+ return error_msg
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.6.4.dev20241217104233
3
+ Version: 0.6.5.dev20241218055539
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -1,6 +1,6 @@
1
- letta/__init__.py,sha256=35NM-KIYubYvjLNsP6WHh70k7F5yDmwZ7x0E7Qm0dwg,1014
1
+ letta/__init__.py,sha256=zY_5By7t8Jgl0Nejq2i4yOTJQg0lzJNlwdmp8sB-W9Y,1014
2
2
  letta/__main__.py,sha256=6Hs2PV7EYc5Tid4g4OtcLXhqVHiNYTGzSBdoOnW2HXA,29
3
- letta/agent.py,sha256=UI6_FobXC95kamzQXx8mrx4C0lH9ASnIez7MHW9YNHE,77498
3
+ letta/agent.py,sha256=I4qbwYEkq9ZXYb_ToRRdGfNnMIkeI715vXRziQu731Y,77721
4
4
  letta/benchmark/benchmark.py,sha256=ebvnwfp3yezaXOQyGXkYCDYpsmre-b9hvNtnyx4xkG0,3701
5
5
  letta/benchmark/constants.py,sha256=aXc5gdpMGJT327VuxsT5FngbCK2J41PQYeICBO7g_RE,536
6
6
  letta/chat_only_agent.py,sha256=3wBCzddcfF6IMbPdDtTZFze5-HJSYxHd8w6jkkSwzsw,4628
@@ -8,22 +8,22 @@ letta/cli/cli.py,sha256=N6jCmysldhAGTQPkGDmRVMAIID7GlgECXqarcMV5h3M,16502
8
8
  letta/cli/cli_config.py,sha256=tB0Wgz3O9j6KiCsU1HWfsKmhNM9RqLsAxzxEDFQFGnM,8565
9
9
  letta/cli/cli_load.py,sha256=xFw-CuzjChcIptaqQ1XpDROENt0JSjyPeiQ0nmEeO1k,2706
10
10
  letta/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- letta/client/client.py,sha256=K34HttR6t07Kdi5VciYwbXoXNaDJfU9KYWsEEeAHO5A,126613
11
+ letta/client/client.py,sha256=VG2I6YwAOUwENuqpgzU2PZh5QHl6Web09OpIL3Tz8eA,126667
12
12
  letta/client/streaming.py,sha256=Hh5pjlyrdCuO2V75ZCxSSOCPd3BmHdKFGaIUJC6fBp0,4775
13
13
  letta/client/utils.py,sha256=OJlAKWrldc4I6M1WpcTWNtPJ4wfxlzlZqWLfCozkFtI,2872
14
14
  letta/config.py,sha256=JFGY4TWW0Wm5fTbZamOwWqk5G8Nn-TXyhgByGoAqy2c,12375
15
- letta/constants.py,sha256=l2IyZpVG-d_raFFX5bN6mCbprnnc1IA-z-oCKPoyPSM,6902
15
+ letta/constants.py,sha256=1cyuDmvdkmt9px5N3IqzxvcKJ_ERrYUdSzN60Ky-HBs,7054
16
16
  letta/credentials.py,sha256=D9mlcPsdDWlIIXQQD8wSPE9M_QvsRrb0p3LB5i9OF5Q,5806
17
17
  letta/data_sources/connectors.py,sha256=Bwgf6mW55rDrdX69dY3bLzQW9Uuk_o9w4skwbx1NioY,7039
18
18
  letta/data_sources/connectors_helper.py,sha256=2TQjCt74fCgT5sw1AP8PalDEk06jPBbhrPG4HVr-WLs,3371
19
- letta/embeddings.py,sha256=XyecUdJaG3ENi5v3wAexVcgpG2g7_oTEEYLgUpm-Zvs,9080
19
+ letta/embeddings.py,sha256=r1jWuZplYZl8GzfObBZxPdKWg2O0Msd8D164qSoCPIM,8855
20
20
  letta/errors.py,sha256=Voy_BP0W_M816-vWudKLBlgydRufPPA-Q2PNd-SvZYc,3897
21
21
  letta/functions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- letta/functions/function_sets/base.py,sha256=_zXCIPgSefTSt-tYOSi-EP5jWlnFbT5m2sHWdfVInPc,9693
22
+ letta/functions/function_sets/base.py,sha256=OcjkPBfurAGWSXfvG8i108c5cpA9lnykC9COXXmzbM8,8173
23
23
  letta/functions/function_sets/extras.py,sha256=Jik3UiDqYTm4Lam1XPTvuVjvgUHwIAhopsnbmVhGMBg,4732
24
24
  letta/functions/functions.py,sha256=evH6GKnIJwVVre1Xre2gaSIqREv4eNM4DiWOhn8PMqg,3299
25
25
  letta/functions/helpers.py,sha256=fJo4gPvWpkvR7jn0HucRorz4VlpYVqmYsiX1RetnnSY,8569
26
- letta/functions/schema_generator.py,sha256=YtjN1S9eKrhmE9Q442jt2WOH5JrWPwBM-jAA_peqbaU,19276
26
+ letta/functions/schema_generator.py,sha256=sN0QurH69H9jfRnRV5CBSYS7bVU9BKBdF0SSCGrwuQA,19256
27
27
  letta/helpers/__init__.py,sha256=p0luQ1Oe3Skc6sH4O58aHHA3Qbkyjifpuq0DZ1GAY0U,59
28
28
  letta/helpers/tool_rule_solver.py,sha256=YCwawbRUQw10ZVR17WYXo8b5roxdGe-B5nNVMqlAgBE,4826
29
29
  letta/humans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -31,20 +31,20 @@ letta/humans/examples/basic.txt,sha256=Lcp8YESTWvOJgO4Yf_yyQmgo5bKakeB1nIVrwEGG6
31
31
  letta/humans/examples/cs_phd.txt,sha256=9C9ZAV_VuG7GB31ksy3-_NAyk8rjE6YtVOkhp08k1xw,297
32
32
  letta/interface.py,sha256=QI4hFP0WrNsgM5qX6TbnhH1ZZxsLYr5DaccuxpEQ8S4,12768
33
33
  letta/llm_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
- letta/llm_api/anthropic.py,sha256=Q-6QLwSHC_YTqWJWIMjxMWsnjxgN1cnCzle5-m5A70s,13077
34
+ letta/llm_api/anthropic.py,sha256=bJRkcPYqow5vbFsos94XM3gIAvXNYOidZ-7v_LmNtt8,14242
35
35
  letta/llm_api/azure_openai.py,sha256=Y1HKPog1XzM_f7ujUK_Gv2zQkoy5pU-1bKiUnvSxSrs,6297
36
36
  letta/llm_api/azure_openai_constants.py,sha256=oXtKrgBFHf744gyt5l1thILXgyi8NDNUrKEa2GGGpjw,278
37
37
  letta/llm_api/cohere.py,sha256=vDRd-SUGp1t_JUIdwC3RkIhwMl0OY7n-tAU9uPORYkY,14826
38
38
  letta/llm_api/google_ai.py,sha256=xKz9JDZs3m6yzSfcgCAAUD_rjI20BBIINoiSvlcnOw0,17621
39
39
  letta/llm_api/helpers.py,sha256=F8xZDZgDojWX5v-0vakyeUQyCyBr1HmzmsITRdOsmVg,13457
40
- letta/llm_api/llm_api_tools.py,sha256=TfRBesbYkIoQRhntKaZkCY9uYk0efBIOJBEdjcQA8g4,17337
40
+ letta/llm_api/llm_api_tools.py,sha256=MadPiVSc_JYwf5dwpeCc5lRBN3rBmsops5EQy2HW-gw,17687
41
41
  letta/llm_api/mistral.py,sha256=fHdfD9ug-rQIk2qn8tRKay1U6w9maF11ryhKi91FfXM,1593
42
42
  letta/llm_api/openai.py,sha256=4GEGROTv4vLawSgODnAHCI-DeIWDqrhuxtKrqYzHvso,24160
43
43
  letta/local_llm/README.md,sha256=hFJyw5B0TU2jrh9nb0zGZMgdH-Ei1dSRfhvPQG_NSoU,168
44
44
  letta/local_llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
45
  letta/local_llm/chat_completion_proxy.py,sha256=SiohxsjGTku4vOryOZx7I0t0xoO_sUuhXgoe62fKq3c,12995
46
46
  letta/local_llm/constants.py,sha256=GIu0184EIiOLEqGeupLUYQvkgT_imIjLg3T-KM9TcFM,1125
47
- letta/local_llm/function_parser.py,sha256=0P6xn2Dk0jMoYK90NACfNZqx_ymRPBy3VLq9lal-mLQ,2627
47
+ letta/local_llm/function_parser.py,sha256=eRAiP1CmfpiZTHgKZ2gbbMpA1SV8TlMLlgG1Wdfug2I,2607
48
48
  letta/local_llm/grammars/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
49
  letta/local_llm/grammars/gbnf_grammar_generator.py,sha256=zrATMMTZ3Trhg3egnk7N7p5qwH90hmfT_TVV7tjabGI,56377
50
50
  letta/local_llm/grammars/json.gbnf,sha256=LNnIFYaChKuE7GU9H7tLThVi8vFnZNzrFJYBU7_HVsY,667
@@ -93,7 +93,7 @@ letta/orm/block.py,sha256=U2fOXdab9ynQscOqzUo3xv1a_GjqHLIgoNSZq-U0mYg,3308
93
93
  letta/orm/blocks_agents.py,sha256=W0dykl9OchAofSuAYZD5zNmhyMabPr9LTJrz-I3A0m4,983
94
94
  letta/orm/custom_columns.py,sha256=EEiPx9AuMI4JeLmGAOD8L_XWh4JwQB166zBJHuJmQS0,4891
95
95
  letta/orm/enums.py,sha256=KfHcFt_fR6GUmSlmfsa-TetvmuRxGESNve8MStRYW64,145
96
- letta/orm/errors.py,sha256=nv1HnF3z4-u9m_g7SO5TO5u2nmJN677_n8F0iIjluUI,460
96
+ letta/orm/errors.py,sha256=Se0Guz-gqi-D36NUWSh7AP9zTVCSph9KgZh_trwng4o,734
97
97
  letta/orm/file.py,sha256=0qfqmBFizwtYriCz_qrshjxw3A9lMaRFKtwsZecviyo,1765
98
98
  letta/orm/job.py,sha256=If-qSTJW4t5h-6Jolw3tS3-xMZEaPIbXe3S0GMf_FXI,1102
99
99
  letta/orm/message.py,sha256=yWf46-adgYGqhxjn_QREW19jvVjYU0eD11uwlVSrdT4,1490
@@ -103,7 +103,7 @@ letta/orm/passage.py,sha256=fsETrGtmiGI45N5Rc2pMLy-9Mzggn6FZ-fRwI-0x-Hg,3249
103
103
  letta/orm/sandbox_config.py,sha256=PCMHE-eJPzBT-90OYtXjEMRF4f9JB8AJIGETE7bu-f0,2870
104
104
  letta/orm/source.py,sha256=SlX08BnoJYMh34cGTuPbo2kraCuXSy25xGdNWb7d7DQ,1782
105
105
  letta/orm/sources_agents.py,sha256=q5Wf5TFNI9KH6cGW93roNhvFD3n39UE2bYQhnSJwlME,433
106
- letta/orm/sqlalchemy_base.py,sha256=lP3KVyafy1SX5Q95mdBgmszjd1uufD-OnBX6H0G_PyU,17508
106
+ letta/orm/sqlalchemy_base.py,sha256=b4O-TPZKNf22Prr0yNtjhCRUXF5mroZC_eSY0ThBCAc,17774
107
107
  letta/orm/sqlite_functions.py,sha256=PVJXVw_e3cC5yIWkfsCP_yBjuXwIniLEGdXP6lx6Wgs,4380
108
108
  letta/orm/tool.py,sha256=qvDul85Gq0XORx6gyMGk0As3C1bSt9nASqezdPOikQ4,2216
109
109
  letta/orm/tools_agents.py,sha256=r6t-V21w2_mG8n38zuUb5jOi_3hRxsjgezsLA4sg0m4,626
@@ -134,9 +134,9 @@ letta/prompts/system/memgpt_modified_chat.txt,sha256=F_yD4ZcR4aGDE3Z98tI7e609GYe
134
134
  letta/prompts/system/memgpt_modified_o1.txt,sha256=objnDgnxpF3-MmU28ZqZ7-TOG8UlHBM_HMyAdSDWK88,5492
135
135
  letta/prompts/system/memgpt_offline_memory.txt,sha256=rWEJeF-6aiinjkJM9hgLUYCmlEcC_HekYB1bjEUYq6M,2460
136
136
  letta/prompts/system/memgpt_offline_memory_chat.txt,sha256=ituh7gDuio7nC2UKFB7GpBq6crxb8bYedQfJ0ADoPgg,3949
137
- letta/providers.py,sha256=0j6WPRn70WNSOjWS7smhTI3ZZOlfVAVF0ZFcrdQDmMY,25321
137
+ letta/providers.py,sha256=LUIxZ882dv_jFD3ngq3LVHhNbKgUcGGcJSCsjOZ5jR4,25416
138
138
  letta/pytest.ini,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
- letta/schemas/agent.py,sha256=amul3_5fVcut0wB9_wnuAjYpWe-ERAHuMpDZUQcOD4E,8715
139
+ letta/schemas/agent.py,sha256=8zorIkzmsC2IBpO3r-I5p18VA-7BGDe_rxXqfPUJ9lE,10212
140
140
  letta/schemas/block.py,sha256=pVDH8jr5r-oxdX4cK9dX2wXyLBzgGKQOBWOzqZSeBog,5944
141
141
  letta/schemas/embedding_config.py,sha256=u6n-MjUgLfKeDCMdG8f_7qCxJBxo0I8d3KIggmhwjfA,3236
142
142
  letta/schemas/enums.py,sha256=F396hXs57up4Jqj1vwWVknMpoVo7MkccVBALvKGHPpE,1032
@@ -157,7 +157,7 @@ letta/schemas/openai/embedding_response.py,sha256=WKIZpXab1Av7v6sxKG8feW3ZtpQUNo
157
157
  letta/schemas/openai/openai.py,sha256=Hilo5BiLAGabzxCwnwfzK5QrWqwYD8epaEKFa4Pwndk,7970
158
158
  letta/schemas/organization.py,sha256=d2oN3IK2HeruEHKXwIzCbJ3Fxdi_BEe9JZ8J9aDbHwQ,698
159
159
  letta/schemas/passage.py,sha256=t_bSI8hpEuh-mj8bV8qOiIA1tAgyjGKrZMVe9l5oIaY,3675
160
- letta/schemas/sandbox_config.py,sha256=d-eCsU7oLAAnzZbVgZsAV3O6LN16H2vmSh-Drik9jmw,5609
160
+ letta/schemas/sandbox_config.py,sha256=3CZyClISK3722MWstwOcKp_ppOI1LOE98i84Q4E2U4Y,5737
161
161
  letta/schemas/source.py,sha256=B1VbaDJV-EGPv1nQXwCx_RAzeAJd50UqP_1m1cIRT8c,2854
162
162
  letta/schemas/tool.py,sha256=_9_JkGSlIn2PCbyJ18aQrNueZgxHFUT093GcJSWYqT4,10346
163
163
  letta/schemas/tool_rule.py,sha256=jVGdGsp2K-qnrcaWF3WjCSvxpDlF2wVxeNMXzmoYLtc,1072
@@ -167,7 +167,7 @@ letta/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
167
  letta/server/constants.py,sha256=yAdGbLkzlOU_dLTx0lKDmAnj0ZgRXCEaIcPJWO69eaE,92
168
168
  letta/server/generate_openapi_schema.sh,sha256=0OtBhkC1g6CobVmNEd_m2B6sTdppjbJLXaM95icejvE,371
169
169
  letta/server/rest_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
170
- letta/server/rest_api/app.py,sha256=ZINnNkdR3SV6rtzAYrsvXX2FQPNuD1yOSrkxGPuauJM,10408
170
+ letta/server/rest_api/app.py,sha256=ulEJeVgH5w9TdzqDJntmDfs8DCjIlImwLDoe6X1sPOc,11417
171
171
  letta/server/rest_api/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
172
  letta/server/rest_api/auth/index.py,sha256=fQBGyVylGSRfEMLQ17cZzrHd5Y1xiVylvPqH5Rl-lXQ,1378
173
173
  letta/server/rest_api/auth_token.py,sha256=725EFEIiNj4dh70hrSd94UysmFD8vcJLrTRfNHkzxDo,774
@@ -188,11 +188,11 @@ letta/server/rest_api/routers/v1/llms.py,sha256=TcyvSx6MEM3je5F4DysL7ligmssL_pFl
188
188
  letta/server/rest_api/routers/v1/organizations.py,sha256=tyqVzXTpMtk3sKxI3Iz4aS6RhbGEbXDzFBB_CpW18v4,2080
189
189
  letta/server/rest_api/routers/v1/sandbox_configs.py,sha256=pG3X3bYbmsq90kRc-06qfnM6yalvYEpVVEQnTuZVm0o,5134
190
190
  letta/server/rest_api/routers/v1/sources.py,sha256=bLvxyYBOLx1VD5YPuoCBrQrua0AruzUzvCMIiekjVQg,9974
191
- letta/server/rest_api/routers/v1/tools.py,sha256=wG-9pUyQa8b9sIk7mG8qPu_mcVGH44B8JmIKfI3NQ1U,11767
191
+ letta/server/rest_api/routers/v1/tools.py,sha256=g6LKwz6aamNwMrjMqUSYDu8X0FjKAzCtOKJRAwcuZEk,11762
192
192
  letta/server/rest_api/routers/v1/users.py,sha256=EBQe9IfCG3kzHpKmotz4yVGZioXz3SCSRy5yEhJK8hU,2293
193
193
  letta/server/rest_api/static_files.py,sha256=NG8sN4Z5EJ8JVQdj19tkFa9iQ1kBPTab9f_CUxd_u4Q,3143
194
194
  letta/server/rest_api/utils.py,sha256=5GO52-3EehRFZPDkvk4pUoHa0GZXvbPuQsmX298gbJg,3905
195
- letta/server/server.py,sha256=8WO6ozUrl4K_zdiOmjFWTZsv6xwZhbY4KVrtpllyNCk,58609
195
+ letta/server/server.py,sha256=xL1hZ3pS7Imc8CKahTXVkzL-gKjW0pgzJz_jpMrBb7I,60291
196
196
  letta/server/startup.sh,sha256=722uKJWB2C4q3vjn39De2zzPacaZNw_1fN1SpLGjKIo,1569
197
197
  letta/server/static_files/assets/index-048c9598.js,sha256=mR16XppvselwKCcNgONs4L7kZEVa4OEERm4lNZYtLSk,146819
198
198
  letta/server/static_files/assets/index-0e31b727.css,sha256=DjG3J3RSFLcinzoisOYYLiyTAIe5Uaxge3HE-DmQIsU,7688
@@ -206,7 +206,7 @@ letta/server/ws_api/interface.py,sha256=TWl9vkcMCnLsUtgsuENZ-ku2oMDA-OUTzLh_yNRo
206
206
  letta/server/ws_api/protocol.py,sha256=M_-gM5iuDBwa1cuN2IGNCG5GxMJwU2d3XW93XALv9s8,1821
207
207
  letta/server/ws_api/server.py,sha256=cBSzf-V4zT1bL_0i54OTI3cMXhTIIxqjSRF8pYjk7fg,5835
208
208
  letta/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
209
- letta/services/agent_manager.py,sha256=eYXiL5MetvHf0s82fGPFd49JKKTYmp3qA_hE1gQWHyk,30523
209
+ letta/services/agent_manager.py,sha256=5XODToGznZjdH4J3y-j-ToaP1rsbxQ82YxldEAO6kVU,30678
210
210
  letta/services/block_manager.py,sha256=HUj9HKW2LvAsENEsgCO3Pf3orvSy6XOimev38VKmRZ8,4929
211
211
  letta/services/helpers/agent_manager_helper.py,sha256=4AoJJI3ELDZrfhx38vc2OwgQflb7mkdppucln0MkgYg,3457
212
212
  letta/services/job_manager.py,sha256=FrkSXloke48CZKuzlYdysxM5gKWoTu7FRigPrs_YW4A,3645
@@ -216,17 +216,17 @@ letta/services/passage_manager.py,sha256=3wR9ZV3nIkJ-oSywA2SVR2yLoNe2Nv5WyfaLtoN
216
216
  letta/services/per_agent_lock_manager.py,sha256=porM0cKKANQ1FvcGXOO_qM7ARk5Fgi1HVEAhXsAg9-4,546
217
217
  letta/services/sandbox_config_manager.py,sha256=USTXwEEWexKRZjng4NepP4_eetrxCJ5n16cl2AHJ_VM,13220
218
218
  letta/services/source_manager.py,sha256=ZtLQikeJjwAq49f0d4WxUzyUN3LZBqWCZI4a-AzEMWQ,7643
219
- letta/services/tool_execution_sandbox.py,sha256=XaP3-Bsw1TJ-6btFdWJ_DwOnX6QOxE9o9mZVIXR4_4s,21090
219
+ letta/services/tool_execution_sandbox.py,sha256=NtjSXdm86_lbTeW2gF08tyf2KSoxBP0Bxq7qSNudrGE,21567
220
220
  letta/services/tool_manager.py,sha256=lfrfWyxiFUWcEf-nATHs7r76XWutMYbOPyePs543ZOo,7681
221
221
  letta/services/tool_sandbox_env/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
222
222
  letta/services/user_manager.py,sha256=oqLF9C4mGbN0TaGj7wMpb2RH2bUg6OJJcdyaWv370rQ,4272
223
- letta/settings.py,sha256=72WZ1KdXkMNJfraaK9jZJQx16Rhi_VSf2mcLuFKfX_4,3713
223
+ letta/settings.py,sha256=sC4gS8Po1NyPmSMTk-TTxrKEoJUi8qgou1K3-BqtNA4,3979
224
224
  letta/streaming_interface.py,sha256=_FPUWy58j50evHcpXyd7zB1wWqeCc71NCFeWh_TBvnw,15736
225
225
  letta/streaming_utils.py,sha256=329fsvj1ZN0r0LpQtmMPZ2vSxkDBIUUwvGHZFkjm2I8,11745
226
226
  letta/system.py,sha256=buKYPqG5n2x41hVmWpu6JUpyd7vTWED9Km2_M7dLrvk,6960
227
- letta/utils.py,sha256=Z2OOxSJbiLSlcGzYiX9gBCv-jfkDjew_J_qaOrLIyx4,32947
228
- letta_nightly-0.6.4.dev20241217104233.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
229
- letta_nightly-0.6.4.dev20241217104233.dist-info/METADATA,sha256=OSirAVVNOZTfu8Wc_RNo_0pMhhdg3CyduV0nHUNbw4M,21695
230
- letta_nightly-0.6.4.dev20241217104233.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
231
- letta_nightly-0.6.4.dev20241217104233.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
232
- letta_nightly-0.6.4.dev20241217104233.dist-info/RECORD,,
227
+ letta/utils.py,sha256=AlGH2fADkU5VkGISj9-hwMSZVKQUiI1whWTvXCKOiYw,33338
228
+ letta_nightly-0.6.5.dev20241218055539.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
229
+ letta_nightly-0.6.5.dev20241218055539.dist-info/METADATA,sha256=UQ74_gcFuPtqH5eEH8RbvN-v_-kXuvTU7fy-pD0GOmI,21695
230
+ letta_nightly-0.6.5.dev20241218055539.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
231
+ letta_nightly-0.6.5.dev20241218055539.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
232
+ letta_nightly-0.6.5.dev20241218055539.dist-info/RECORD,,