letta-nightly 0.6.43.dev20250323104014__py3-none-any.whl → 0.6.44.dev20250325050316__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.

Files changed (42) hide show
  1. letta/__init__.py +1 -1
  2. letta/agent.py +106 -104
  3. letta/agents/voice_agent.py +1 -1
  4. letta/client/streaming.py +3 -1
  5. letta/functions/function_sets/base.py +2 -1
  6. letta/functions/function_sets/multi_agent.py +51 -40
  7. letta/functions/helpers.py +26 -22
  8. letta/helpers/message_helper.py +41 -0
  9. letta/llm_api/anthropic.py +150 -44
  10. letta/llm_api/aws_bedrock.py +5 -3
  11. letta/llm_api/azure_openai.py +0 -1
  12. letta/llm_api/llm_api_tools.py +4 -0
  13. letta/orm/organization.py +1 -0
  14. letta/orm/sqlalchemy_base.py +2 -4
  15. letta/schemas/agent.py +8 -0
  16. letta/schemas/letta_message.py +8 -4
  17. letta/schemas/llm_config.py +6 -0
  18. letta/schemas/message.py +143 -24
  19. letta/schemas/openai/chat_completion_response.py +5 -0
  20. letta/schemas/organization.py +7 -0
  21. letta/schemas/providers.py +17 -0
  22. letta/schemas/tool.py +5 -1
  23. letta/schemas/usage.py +5 -1
  24. letta/serialize_schemas/pydantic_agent_schema.py +1 -1
  25. letta/server/rest_api/interface.py +44 -7
  26. letta/server/rest_api/routers/v1/agents.py +13 -2
  27. letta/server/rest_api/routers/v1/organizations.py +19 -1
  28. letta/server/rest_api/utils.py +1 -1
  29. letta/server/server.py +49 -70
  30. letta/services/agent_manager.py +6 -2
  31. letta/services/helpers/agent_manager_helper.py +24 -38
  32. letta/services/message_manager.py +7 -6
  33. letta/services/organization_manager.py +13 -0
  34. letta/services/tool_execution_sandbox.py +5 -1
  35. letta/services/tool_executor/__init__.py +0 -0
  36. letta/services/tool_executor/tool_execution_manager.py +74 -0
  37. letta/services/tool_executor/tool_executor.py +380 -0
  38. {letta_nightly-0.6.43.dev20250323104014.dist-info → letta_nightly-0.6.44.dev20250325050316.dist-info}/METADATA +2 -3
  39. {letta_nightly-0.6.43.dev20250323104014.dist-info → letta_nightly-0.6.44.dev20250325050316.dist-info}/RECORD +42 -38
  40. {letta_nightly-0.6.43.dev20250323104014.dist-info → letta_nightly-0.6.44.dev20250325050316.dist-info}/LICENSE +0 -0
  41. {letta_nightly-0.6.43.dev20250323104014.dist-info → letta_nightly-0.6.44.dev20250325050316.dist-info}/WHEEL +0 -0
  42. {letta_nightly-0.6.43.dev20250323104014.dist-info → letta_nightly-0.6.44.dev20250325050316.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,380 @@
1
+ import math
2
+ from abc import ABC, abstractmethod
3
+ from typing import Any, Optional, Tuple
4
+
5
+ from letta.constants import COMPOSIO_ENTITY_ENV_VAR_KEY, RETRIEVAL_QUERY_DEFAULT_PAGE_SIZE
6
+ from letta.functions.ast_parsers import coerce_dict_args_by_annotations, get_function_annotations_from_source
7
+ from letta.functions.helpers import execute_composio_action, generate_composio_action_from_func_name
8
+ from letta.helpers.composio_helpers import get_composio_api_key
9
+ from letta.helpers.json_helpers import json_dumps
10
+ from letta.schemas.agent import AgentState
11
+ from letta.schemas.sandbox_config import SandboxRunResult
12
+ from letta.schemas.tool import Tool
13
+ from letta.schemas.user import User
14
+ from letta.services.agent_manager import AgentManager
15
+ from letta.services.message_manager import MessageManager
16
+ from letta.services.passage_manager import PassageManager
17
+ from letta.services.tool_execution_sandbox import ToolExecutionSandbox
18
+ from letta.utils import get_friendly_error_msg
19
+
20
+
21
+ class ToolExecutor(ABC):
22
+ """Abstract base class for tool executors."""
23
+
24
+ @abstractmethod
25
+ def execute(
26
+ self, function_name: str, function_args: dict, agent_state: AgentState, tool: Tool, actor: User
27
+ ) -> Tuple[Any, Optional[SandboxRunResult]]:
28
+ """Execute the tool and return the result."""
29
+
30
+
31
+ class LettaCoreToolExecutor(ToolExecutor):
32
+ """Executor for LETTA core tools with direct implementation of functions."""
33
+
34
+ def execute(
35
+ self, function_name: str, function_args: dict, agent_state: AgentState, tool: Tool, actor: User
36
+ ) -> Tuple[Any, Optional[SandboxRunResult]]:
37
+ # Map function names to method calls
38
+ function_map = {
39
+ "send_message": self.send_message,
40
+ "conversation_search": self.conversation_search,
41
+ "archival_memory_search": self.archival_memory_search,
42
+ }
43
+
44
+ if function_name not in function_map:
45
+ raise ValueError(f"Unknown function: {function_name}")
46
+
47
+ # Execute the appropriate function
48
+ function_args_copy = function_args.copy() # Make a copy to avoid modifying the original
49
+ function_response = function_map[function_name](agent_state, actor, **function_args_copy)
50
+ return function_response, None
51
+
52
+ def send_message(self, agent_state: AgentState, actor: User, message: str) -> Optional[str]:
53
+ """
54
+ Sends a message to the human user.
55
+
56
+ Args:
57
+ message (str): Message contents. All unicode (including emojis) are supported.
58
+
59
+ Returns:
60
+ Optional[str]: None is always returned as this function does not produce a response.
61
+ """
62
+ return None
63
+
64
+ def conversation_search(self, agent_state: AgentState, actor: User, query: str, page: Optional[int] = 0) -> Optional[str]:
65
+ """
66
+ Search prior conversation history using case-insensitive string matching.
67
+
68
+ Args:
69
+ query (str): String to search for.
70
+ page (int): Allows you to page through results. Only use on a follow-up query. Defaults to 0 (first page).
71
+
72
+ Returns:
73
+ str: Query result string
74
+ """
75
+ if page is None or (isinstance(page, str) and page.lower().strip() == "none"):
76
+ page = 0
77
+ try:
78
+ page = int(page)
79
+ except:
80
+ raise ValueError(f"'page' argument must be an integer")
81
+
82
+ count = RETRIEVAL_QUERY_DEFAULT_PAGE_SIZE
83
+ messages = MessageManager().list_user_messages_for_agent(
84
+ agent_id=agent_state.id,
85
+ actor=actor,
86
+ query_text=query,
87
+ limit=count,
88
+ )
89
+
90
+ total = len(messages)
91
+ num_pages = math.ceil(total / count) - 1 # 0 index
92
+
93
+ if len(messages) == 0:
94
+ results_str = f"No results found."
95
+ else:
96
+ results_pref = f"Showing {len(messages)} of {total} results (page {page}/{num_pages}):"
97
+ results_formatted = [message.content[0].text for message in messages]
98
+ results_str = f"{results_pref} {json_dumps(results_formatted)}"
99
+
100
+ return results_str
101
+
102
+ def archival_memory_search(
103
+ self, agent_state: AgentState, actor: User, query: str, page: Optional[int] = 0, start: Optional[int] = 0
104
+ ) -> Optional[str]:
105
+ """
106
+ Search archival memory using semantic (embedding-based) search.
107
+
108
+ Args:
109
+ query (str): String to search for.
110
+ page (Optional[int]): Allows you to page through results. Only use on a follow-up query. Defaults to 0 (first page).
111
+ start (Optional[int]): Starting index for the search results. Defaults to 0.
112
+
113
+ Returns:
114
+ str: Query result string
115
+ """
116
+ if page is None or (isinstance(page, str) and page.lower().strip() == "none"):
117
+ page = 0
118
+ try:
119
+ page = int(page)
120
+ except:
121
+ raise ValueError(f"'page' argument must be an integer")
122
+
123
+ count = RETRIEVAL_QUERY_DEFAULT_PAGE_SIZE
124
+
125
+ try:
126
+ # Get results using passage manager
127
+ all_results = AgentManager().list_passages(
128
+ actor=actor,
129
+ agent_id=agent_state.id,
130
+ query_text=query,
131
+ limit=count + start, # Request enough results to handle offset
132
+ embedding_config=agent_state.embedding_config,
133
+ embed_query=True,
134
+ )
135
+
136
+ # Apply pagination
137
+ end = min(count + start, len(all_results))
138
+ paged_results = all_results[start:end]
139
+
140
+ # Format results to match previous implementation
141
+ formatted_results = [{"timestamp": str(result.created_at), "content": result.text} for result in paged_results]
142
+
143
+ return formatted_results, len(formatted_results)
144
+
145
+ except Exception as e:
146
+ raise e
147
+
148
+ def archival_memory_insert(self, agent_state: AgentState, actor: User, content: str) -> Optional[str]:
149
+ """
150
+ Add to archival memory. Make sure to phrase the memory contents such that it can be easily queried later.
151
+
152
+ Args:
153
+ content (str): Content to write to the memory. All unicode (including emojis) are supported.
154
+
155
+ Returns:
156
+ Optional[str]: None is always returned as this function does not produce a response.
157
+ """
158
+ PassageManager().insert_passage(
159
+ agent_state=agent_state,
160
+ agent_id=agent_state.id,
161
+ text=content,
162
+ actor=actor,
163
+ )
164
+ AgentManager().rebuild_system_prompt(agent_id=agent_state.id, actor=actor, force=True)
165
+ return None
166
+
167
+
168
+ class LettaMultiAgentToolExecutor(ToolExecutor):
169
+ """Executor for LETTA multi-agent core tools."""
170
+
171
+ # TODO: Implement
172
+ # def execute(self, function_name: str, function_args: dict, agent: "Agent", tool: Tool) -> Tuple[
173
+ # Any, Optional[SandboxRunResult]]:
174
+ # callable_func = get_function_from_module(LETTA_MULTI_AGENT_TOOL_MODULE_NAME, function_name)
175
+ # function_args["self"] = agent # need to attach self to arg since it's dynamically linked
176
+ # function_response = callable_func(**function_args)
177
+ # return function_response, None
178
+
179
+
180
+ class LettaMemoryToolExecutor(ToolExecutor):
181
+ """Executor for LETTA memory core tools with direct implementation."""
182
+
183
+ def execute(
184
+ self, function_name: str, function_args: dict, agent_state: AgentState, tool: Tool, actor: User
185
+ ) -> Tuple[Any, Optional[SandboxRunResult]]:
186
+ # Map function names to method calls
187
+ function_map = {
188
+ "core_memory_append": self.core_memory_append,
189
+ "core_memory_replace": self.core_memory_replace,
190
+ }
191
+
192
+ if function_name not in function_map:
193
+ raise ValueError(f"Unknown function: {function_name}")
194
+
195
+ # Execute the appropriate function with the copied state
196
+ function_args_copy = function_args.copy() # Make a copy to avoid modifying the original
197
+ function_response = function_map[function_name](agent_state, **function_args_copy)
198
+
199
+ # Update memory if changed
200
+ AgentManager().update_memory_if_changed(agent_id=agent_state.id, new_memory=agent_state.memory, actor=actor)
201
+
202
+ return function_response, None
203
+
204
+ def core_memory_append(self, agent_state: "AgentState", label: str, content: str) -> Optional[str]:
205
+ """
206
+ Append to the contents of core memory.
207
+
208
+ Args:
209
+ label (str): Section of the memory to be edited (persona or human).
210
+ content (str): Content to write to the memory. All unicode (including emojis) are supported.
211
+
212
+ Returns:
213
+ Optional[str]: None is always returned as this function does not produce a response.
214
+ """
215
+ current_value = str(agent_state.memory.get_block(label).value)
216
+ new_value = current_value + "\n" + str(content)
217
+ agent_state.memory.update_block_value(label=label, value=new_value)
218
+ return None
219
+
220
+ def core_memory_replace(self, agent_state: "AgentState", label: str, old_content: str, new_content: str) -> Optional[str]:
221
+ """
222
+ Replace the contents of core memory. To delete memories, use an empty string for new_content.
223
+
224
+ Args:
225
+ label (str): Section of the memory to be edited (persona or human).
226
+ old_content (str): String to replace. Must be an exact match.
227
+ new_content (str): Content to write to the memory. All unicode (including emojis) are supported.
228
+
229
+ Returns:
230
+ Optional[str]: None is always returned as this function does not produce a response.
231
+ """
232
+ current_value = str(agent_state.memory.get_block(label).value)
233
+ if old_content not in current_value:
234
+ raise ValueError(f"Old content '{old_content}' not found in memory block '{label}'")
235
+ new_value = current_value.replace(str(old_content), str(new_content))
236
+ agent_state.memory.update_block_value(label=label, value=new_value)
237
+ return None
238
+
239
+
240
+ class ExternalComposioToolExecutor(ToolExecutor):
241
+ """Executor for external Composio tools."""
242
+
243
+ def execute(
244
+ self, function_name: str, function_args: dict, agent_state: AgentState, tool: Tool, actor: User
245
+ ) -> Tuple[Any, Optional[SandboxRunResult]]:
246
+ action_name = generate_composio_action_from_func_name(tool.name)
247
+
248
+ # Get entity ID from the agent_state
249
+ entity_id = self._get_entity_id(agent_state)
250
+
251
+ # Get composio_api_key
252
+ composio_api_key = get_composio_api_key(actor=actor)
253
+
254
+ # TODO (matt): Roll in execute_composio_action into this class
255
+ function_response = execute_composio_action(
256
+ action_name=action_name, args=function_args, api_key=composio_api_key, entity_id=entity_id
257
+ )
258
+
259
+ return function_response, None
260
+
261
+ def _get_entity_id(self, agent_state: AgentState) -> Optional[str]:
262
+ """Extract the entity ID from environment variables."""
263
+ for env_var in agent_state.tool_exec_environment_variables:
264
+ if env_var.key == COMPOSIO_ENTITY_ENV_VAR_KEY:
265
+ return env_var.value
266
+ return None
267
+
268
+
269
+ class ExternalMCPToolExecutor(ToolExecutor):
270
+ """Executor for external MCP tools."""
271
+
272
+ # TODO: Implement
273
+ #
274
+ # def execute(self, function_name: str, function_args: dict, agent_state: AgentState, tool: Tool, actor: User) -> Tuple[
275
+ # Any, Optional[SandboxRunResult]]:
276
+ # # Get the server name from the tool tag
277
+ # server_name = self._extract_server_name(tool)
278
+ #
279
+ # # Get the MCPClient
280
+ # mcp_client = self._get_mcp_client(agent, server_name)
281
+ #
282
+ # # Validate tool exists
283
+ # self._validate_tool_exists(mcp_client, function_name, server_name)
284
+ #
285
+ # # Execute the tool
286
+ # function_response, is_error = mcp_client.execute_tool(tool_name=function_name, tool_args=function_args)
287
+ #
288
+ # sandbox_run_result = SandboxRunResult(status="error" if is_error else "success")
289
+ # return function_response, sandbox_run_result
290
+ #
291
+ # def _extract_server_name(self, tool: Tool) -> str:
292
+ # """Extract server name from tool tags."""
293
+ # return tool.tags[0].split(":")[1]
294
+ #
295
+ # def _get_mcp_client(self, agent: "Agent", server_name: str):
296
+ # """Get the MCP client for the given server name."""
297
+ # if not agent.mcp_clients:
298
+ # raise ValueError("No MCP client available to use")
299
+ #
300
+ # if server_name not in agent.mcp_clients:
301
+ # raise ValueError(f"Unknown MCP server name: {server_name}")
302
+ #
303
+ # mcp_client = agent.mcp_clients[server_name]
304
+ # if not isinstance(mcp_client, BaseMCPClient):
305
+ # raise RuntimeError(f"Expected an MCPClient, but got: {type(mcp_client)}")
306
+ #
307
+ # return mcp_client
308
+ #
309
+ # def _validate_tool_exists(self, mcp_client, function_name: str, server_name: str):
310
+ # """Validate that the tool exists in the MCP server."""
311
+ # available_tools = mcp_client.list_tools()
312
+ # available_tool_names = [t.name for t in available_tools]
313
+ #
314
+ # if function_name not in available_tool_names:
315
+ # raise ValueError(
316
+ # f"{function_name} is not available in MCP server {server_name}. " f"Please check your `~/.letta/mcp_config.json` file."
317
+ # )
318
+
319
+
320
+ class SandboxToolExecutor(ToolExecutor):
321
+ """Executor for sandboxed tools."""
322
+
323
+ def execute(
324
+ self, function_name: str, function_args: dict, agent_state: AgentState, tool: Tool, actor: User
325
+ ) -> Tuple[Any, Optional[SandboxRunResult]]:
326
+ # Store original memory state
327
+ orig_memory_str = agent_state.memory.compile()
328
+
329
+ try:
330
+ # Prepare function arguments
331
+ function_args = self._prepare_function_args(function_args, tool, function_name)
332
+
333
+ # Create agent state copy for sandbox
334
+ agent_state_copy = self._create_agent_state_copy(agent_state)
335
+
336
+ # Execute in sandbox
337
+ sandbox_run_result = ToolExecutionSandbox(function_name, function_args, actor, tool_object=tool).run(
338
+ agent_state=agent_state_copy
339
+ )
340
+
341
+ function_response, updated_agent_state = sandbox_run_result.func_return, sandbox_run_result.agent_state
342
+
343
+ # Verify memory integrity
344
+ assert orig_memory_str == agent_state.memory.compile(), "Memory should not be modified in a sandbox tool"
345
+
346
+ # Update agent memory if needed
347
+ if updated_agent_state is not None:
348
+ AgentManager().update_memory_if_changed(agent_state.id, updated_agent_state.memory, actor)
349
+
350
+ return function_response, sandbox_run_result
351
+
352
+ except Exception as e:
353
+ return self._handle_execution_error(e, function_name)
354
+
355
+ def _prepare_function_args(self, function_args: dict, tool: Tool, function_name: str) -> dict:
356
+ """Prepare function arguments with proper type coercion."""
357
+ try:
358
+ # Parse the source code to extract function annotations
359
+ annotations = get_function_annotations_from_source(tool.source_code, function_name)
360
+ # Coerce the function arguments to the correct types based on the annotations
361
+ return coerce_dict_args_by_annotations(function_args, annotations)
362
+ except ValueError:
363
+ # Just log the error and continue with original args
364
+ # This is defensive programming - we try to coerce but fall back if it fails
365
+ return function_args
366
+
367
+ def _create_agent_state_copy(self, agent_state: AgentState):
368
+ """Create a copy of agent state for sandbox execution."""
369
+ agent_state_copy = agent_state.__deepcopy__()
370
+ # Remove tools from copy to prevent nested tool execution
371
+ agent_state_copy.tools = []
372
+ agent_state_copy.tool_rules = []
373
+ return agent_state_copy
374
+
375
+ def _handle_execution_error(self, exception: Exception, function_name: str) -> Tuple[str, SandboxRunResult]:
376
+ """Handle tool execution errors."""
377
+ error_message = get_friendly_error_msg(
378
+ function_name=function_name, exception_name=type(exception).__name__, exception_message=str(exception)
379
+ )
380
+ return error_message, SandboxRunResult(status="error")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.6.43.dev20250323104014
3
+ Version: 0.6.44.dev20250325050316
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -23,7 +23,7 @@ Provides-Extra: qdrant
23
23
  Provides-Extra: server
24
24
  Provides-Extra: tests
25
25
  Requires-Dist: alembic (>=1.13.3,<2.0.0)
26
- Requires-Dist: anthropic (>=0.43.0,<0.44.0)
26
+ Requires-Dist: anthropic (>=0.49.0,<0.50.0)
27
27
  Requires-Dist: autoflake (>=2.3.0,<3.0.0) ; extra == "dev" or extra == "all"
28
28
  Requires-Dist: black[jupyter] (>=24.2.0,<25.0.0) ; extra == "dev" or extra == "all"
29
29
  Requires-Dist: boto3 (>=1.36.24,<2.0.0) ; extra == "bedrock"
@@ -35,7 +35,6 @@ Requires-Dist: datamodel-code-generator[http] (>=0.25.0,<0.26.0) ; extra == "des
35
35
  Requires-Dist: demjson3 (>=3.0.6,<4.0.0)
36
36
  Requires-Dist: docker (>=7.1.0,<8.0.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
37
37
  Requires-Dist: docstring-parser (>=0.16,<0.17)
38
- Requires-Dist: docx2txt (>=0.8,<0.9)
39
38
  Requires-Dist: e2b-code-interpreter (>=1.0.3,<2.0.0) ; extra == "cloud-tool-sandbox"
40
39
  Requires-Dist: faker (>=36.1.0,<37.0.0)
41
40
  Requires-Dist: fastapi (>=0.115.6,<0.116.0) ; extra == "server" or extra == "desktop" or extra == "all"
@@ -1,11 +1,11 @@
1
- letta/__init__.py,sha256=d3F-DwijWs3SOdYADCZaqCu4IbjBND6Ba0ZTRL-G3ro,918
1
+ letta/__init__.py,sha256=a8y2MUDjmfi4RyYx4rOJ6xhzmLqGt5NaKUi6Cldg_y0,918
2
2
  letta/__main__.py,sha256=6Hs2PV7EYc5Tid4g4OtcLXhqVHiNYTGzSBdoOnW2HXA,29
3
- letta/agent.py,sha256=yCae9BKlG9cYyAYMxo-_quW17suAo8ji0zf8hv42UEM,68513
3
+ letta/agent.py,sha256=HpeAm3rycoaSgD6-r5790gJSxdCqhN9xjDm0rxl5nzE,68734
4
4
  letta/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  letta/agents/base_agent.py,sha256=8IMB7UK4ft-Wi-ZYjX7akqQUhk_cSswRgepqeZyvCMs,1550
6
6
  letta/agents/ephemeral_agent.py,sha256=DBMXT50UQoqjkvl_Piwle3Fy7iXopy15oMWwnWzbpvo,2751
7
7
  letta/agents/ephemeral_memory_agent.py,sha256=-Wn7DCQC06UBHkINGOME4oQ8sdr-jJZTb72NRK5u62U,4847
8
- letta/agents/voice_agent.py,sha256=qVHi-LubcQ_LGNeWHxg2vQKgM7TCPVuJEnYGZHYfAMQ,17134
8
+ letta/agents/voice_agent.py,sha256=JtTNYT6l9XyPCBl6W3WtNNUhJaYA-0LvfS8HlaQ7mm4,17135
9
9
  letta/benchmark/benchmark.py,sha256=ebvnwfp3yezaXOQyGXkYCDYpsmre-b9hvNtnyx4xkG0,3701
10
10
  letta/benchmark/constants.py,sha256=aXc5gdpMGJT327VuxsT5FngbCK2J41PQYeICBO7g_RE,536
11
11
  letta/cli/cli.py,sha256=zJz78-qDUz-depb7VQWkg87RBKiETQU4h9DI6ukQBa8,16477
@@ -13,7 +13,7 @@ letta/cli/cli_config.py,sha256=MNMhIAAjXiAy2gX_gAtqiY0Ya6VNbzXJWjIcRVEZa-k,8597
13
13
  letta/cli/cli_load.py,sha256=vER0PwpHnsCZtCHcR2YjEXM-VVuO9jhfQibdo3gI3S0,2703
14
14
  letta/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  letta/client/client.py,sha256=1iey4ovHKVYm4EJtcsq6tZDxTDibzvU22V3J9HaSQBc,137455
16
- letta/client/streaming.py,sha256=lN9vamc07sfQlRbFif327GvURLUPhx-4AC_oUOPvs6w,4543
16
+ letta/client/streaming.py,sha256=UsDS_tDTsA3HgYryIDvGGmx_dWfnfQwtmEwLi4Z89Ik,4701
17
17
  letta/client/utils.py,sha256=VCGV-op5ZSmurd4yw7Vhf93XDQ0BkyBT8qsuV7EqfiU,2859
18
18
  letta/config.py,sha256=JFGY4TWW0Wm5fTbZamOwWqk5G8Nn-TXyhgByGoAqy2c,12375
19
19
  letta/constants.py,sha256=_QI06HD6yLmGFrTqexLkUnUWSsKUiBlM1QtbiLGEq4k,7773
@@ -24,11 +24,11 @@ letta/embeddings.py,sha256=KvC2bl5tARpVY9xcFmw4Cwu1vN0DoH266v2mSUZqwkY,10528
24
24
  letta/errors.py,sha256=6fQXg2unP-2fo3R7db0ayKKWlD2XMusOPNi9TgJplCg,5558
25
25
  letta/functions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  letta/functions/ast_parsers.py,sha256=CQI0rUoIXcLKAev_GYrXcldRIGN5ZQtk5u4FLoHe5sE,5728
27
- letta/functions/function_sets/base.py,sha256=RKc_edeBxP5MXmHEDI_LKP7ktO0XuDGLbqYDAgRbvjQ,6114
27
+ letta/functions/function_sets/base.py,sha256=NfNoUl8n1PfZObPJtK2adgkoBo7j941NuRtiRx_eH8g,6141
28
28
  letta/functions/function_sets/extras.py,sha256=mG7jCd2RUsf1w9G8mVcv26twJWpiDhbWI6VvnLZoEOk,4899
29
- letta/functions/function_sets/multi_agent.py,sha256=odtyxJxwkmv9Ux_AJcdommTVVVGdeu8pTPO2WmdQA7g,6198
29
+ letta/functions/function_sets/multi_agent.py,sha256=y22k0z-u5Qh_V82IxmdIbd_rKbXdx5mZP2pXM1kYNlU,7056
30
30
  letta/functions/functions.py,sha256=NyWLh7a-f4mXti5vM1oWDwXzfA58VmVVqL03O9vosKY,5672
31
- letta/functions/helpers.py,sha256=RBtnKhH5HJ8gG35AYWa2ERsEzLMGNMUzIrj5-EAbabw,27510
31
+ letta/functions/helpers.py,sha256=NDy2iDh3jUeyClavZiAah7PsOXPA6KdZHU_GcSJcfYE,27434
32
32
  letta/functions/interface.py,sha256=s_PPp5WDvGH_y9KUpMlORkdC141ITczFk3wsevrrUD8,2866
33
33
  letta/functions/mcp_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  letta/functions/mcp_client/base_client.py,sha256=TZ98rGk93XRz8qVnTu3-YwuvnZLWEDHdPFZk6QXkkKk,3652
@@ -42,6 +42,7 @@ letta/helpers/composio_helpers.py,sha256=6CWV483vE3N-keQlblexxBiQHxorMAgQuvbok4a
42
42
  letta/helpers/converters.py,sha256=ndAm9p7cfA1YuoLdZOV7rTFADz2iyeUt_OZtaI5GFO0,9037
43
43
  letta/helpers/datetime_helpers.py,sha256=7U5ZJkE0cLki4sG8ukIHZSAoFfQpLWQu2kFekETy6Zg,2633
44
44
  letta/helpers/json_helpers.py,sha256=PWZ5HhSqGXO4e563dM_8M72q7ScirjXQ4Rv1ckohaV8,396
45
+ letta/helpers/message_helper.py,sha256=ZntYIsiOHv9lOPmloCrh9Mxf74l0F9-D99-FM5InI34,1668
45
46
  letta/helpers/tool_execution_helper.py,sha256=lyYUFsP-ogacTT-AeiP2SCuqwleidE17X0NHeGALEmc,7564
46
47
  letta/helpers/tool_rule_solver.py,sha256=Vv_wXLXc5CcSAn5DJDTZmnhC58HgcCA2RusYNYU5quA,6035
47
48
  letta/humans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -52,9 +53,9 @@ letta/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
52
53
  letta/interfaces/openai_chat_completions_streaming_interface.py,sha256=SfqVp7V7AbBqv8D_IwyqrcztNiI0nKhjAvqtZQE_jfM,4729
53
54
  letta/interfaces/utils.py,sha256=c6jvO0dBYHh8DQnlN-B0qeNC64d3CSunhfqlFA4pJTY,278
54
55
  letta/llm_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- letta/llm_api/anthropic.py,sha256=AYERen7Lnu61hVC-wyiEspNotCbhi_a1leSPfEYdobk,37735
56
- letta/llm_api/aws_bedrock.py,sha256=IQzUVNiXpxdRS3UFhcvbK2qcYazTqAoJ_oSGdygLtTo,4152
57
- letta/llm_api/azure_openai.py,sha256=KIcAm7hTDeUdVkmkmbT1kDrVtHAxZNBM6YPLyDr2A7o,5169
56
+ letta/llm_api/anthropic.py,sha256=Nus7ydWbG4jF9h5iMGQpwnydA44bWSFhkkhG5YxdBvw,43516
57
+ letta/llm_api/aws_bedrock.py,sha256=kAPpKPRe4ZUa6fkxFbo8xwQgq4fJf3QoZEAP1LOCfaw,4168
58
+ letta/llm_api/azure_openai.py,sha256=Y8R9vDmruJnCr_EfmPj_oangX8gJPpiyhTppD9T8SHE,5168
58
59
  letta/llm_api/azure_openai_constants.py,sha256=ZaR2IasJThijG0uhLKJThrixdAxLPD2IojfeaJ-KQMQ,294
59
60
  letta/llm_api/cohere.py,sha256=uzSXkvDPg4CV6tNnbX3yYkYsXRXAm4FvclUX8ln1etM,14863
60
61
  letta/llm_api/deepseek.py,sha256=b1mSW8gnBrpAI8d2GcBpDyLYDnuC-P1UP6xJPalfQS4,12456
@@ -64,7 +65,7 @@ letta/llm_api/google_constants.py,sha256=ZdABT9l9l-qKcV2QCkVsv9kQbttx6JyIJoOWS8I
64
65
  letta/llm_api/google_vertex.py,sha256=-8ERH8YPsQIAi6ZuYNcvny7Jz-Q4IFIbV7xqDspUUD4,14399
65
66
  letta/llm_api/google_vertex_client.py,sha256=Cu1AVKxLCSvip1h8lleJ8voatSH2d6XnGmQjdKqmVoo,9648
66
67
  letta/llm_api/helpers.py,sha256=sLYv30UnKBRVPuhU_KDXfKFdbkUONiDAyVEwGr86l3A,16780
67
- letta/llm_api/llm_api_tools.py,sha256=I6JcRe80B_DsB9Z6DRVBLsha4ETjXsfEOTx074eW_7Y,29060
68
+ letta/llm_api/llm_api_tools.py,sha256=keH79NcfoTqyfKbGGhRrd8LnyG9a7peRSBxMagad0ew,29324
68
69
  letta/llm_api/llm_client.py,sha256=u7nnmtSgwhqNDiaNmv6i0G-I-WgwLH35uxJnXM0C33o,1767
69
70
  letta/llm_api/llm_client_base.py,sha256=754JOj33J2kowxSYdP7hkQ_dx47zZ5qCQXy2w5NiywM,4881
70
71
  letta/llm_api/mistral.py,sha256=fHdfD9ug-rQIk2qn8tRKay1U6w9maF11ryhKi91FfXM,1593
@@ -132,13 +133,13 @@ letta/orm/job.py,sha256=G2P-xUpTapD4lhU2FwMZET1b5QR4ju9WOB3uiTKD_mw,2157
132
133
  letta/orm/job_messages.py,sha256=SgwaYPYwwAC3dBtl9Xye_TWUl9H_-m95S95TTcfPyOg,1245
133
134
  letta/orm/message.py,sha256=cdQvpTY8HN-Ld5ky2d7CoADcM70xUhzo8vVNlQvzAjc,3466
134
135
  letta/orm/mixins.py,sha256=9c79Kfr-Z1hL-SDYKeoptx_yMTbBwJJBo9nrKEzSDAc,1622
135
- letta/orm/organization.py,sha256=ALFdILLT09Nm_oH1IxPr6eInasA6OBk0X5rDhCBANPw,3189
136
+ letta/orm/organization.py,sha256=XR59kcobWdsAjP-5lHCKuDdlnMrDuRJBqk5ykGrj5cY,3304
136
137
  letta/orm/passage.py,sha256=tQi-fZZFBFVz0KZxd0foKPkAOaempgiYOHHK6lJ98gw,3332
137
138
  letta/orm/provider.py,sha256=-qA9tvKTZgaM4D7CoDZZiA7zTgjaaWDV4jZvifQv_MM,805
138
139
  letta/orm/sandbox_config.py,sha256=DyOy_1_zCMlp13elCqPcuuA6OwUove6mrjhcpROTg50,4150
139
140
  letta/orm/source.py,sha256=z89VZUHV9K8Ew9JCYoZqUeRb1WEUKmrn0MMFkppaphE,2117
140
141
  letta/orm/sources_agents.py,sha256=Ik_PokCBrXRd9wXWomeNeb8EtLUwjb9VMZ8LWXqpK5A,473
141
- letta/orm/sqlalchemy_base.py,sha256=_-Mw3Iii4nMiC48yubnhLnC0GSyRMT7FgVZCbvQO2t4,27042
142
+ letta/orm/sqlalchemy_base.py,sha256=4DiFj6M-lCtuzXAsx5w07nzcQBRfWJGaZ4Dnz9zS9Bs,26992
142
143
  letta/orm/sqlite_functions.py,sha256=JCScKiRlYCKxy9hChQ8wsk4GMKknZE24MunnG3fM1Gw,4255
143
144
  letta/orm/step.py,sha256=fjm7fLtYLCtFM6Mj6e2boP6P7dHSFG24Nem85VfVqHg,3216
144
145
  letta/orm/tool.py,sha256=ft3BDA7Pt-zsXLyPvS_Z_Ibis6H6vY20F7Li7p6nPu8,2652
@@ -173,7 +174,7 @@ letta/prompts/system/memgpt_offline_memory.txt,sha256=rWEJeF-6aiinjkJM9hgLUYCmlE
173
174
  letta/prompts/system/memgpt_offline_memory_chat.txt,sha256=ituh7gDuio7nC2UKFB7GpBq6crxb8bYedQfJ0ADoPgg,3949
174
175
  letta/pytest.ini,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
176
  letta/round_robin_multi_agent.py,sha256=up9x_9Zb20sPZT-iAkheM5RsrplMAeTdYPkK-18P3y4,6220
176
- letta/schemas/agent.py,sha256=YjjzBIA4txW5LzQjVoDfXHgNZQh8HCYZ7tOyYVlbU0s,14276
177
+ letta/schemas/agent.py,sha256=gB5fV6yhf-hsQquYMOWcnQN6AuguefovHmPIGw20Fxs,14808
177
178
  letta/schemas/block.py,sha256=rMWflyj982qW86dQK-9saXBHKaLCu3aUG2gQTckG3Ik,4984
178
179
  letta/schemas/embedding_config.py,sha256=ufboqW9ctSBJdhwzJRbrGtTzOTwSKfT0LY0mowpr6fs,3398
179
180
  letta/schemas/embedding_config_overrides.py,sha256=lkTa4y-EQ2RnaEKtKDM0sEAk7EwNa67REw8DGNNtGQY,84
@@ -185,29 +186,29 @@ letta/schemas/health.py,sha256=zT6mYovvD17iJRuu2rcaQQzbEEYrkwvAE9TB7iU824c,139
185
186
  letta/schemas/identity.py,sha256=9emyusE65zFSW7IDKDMsGzMwqDbadF0eKjvYNDtpS1s,3220
186
187
  letta/schemas/job.py,sha256=MX9EiLDDIeHm3q52ImOjp7UzXEdYTXAWWobRCAxwV0w,2225
187
188
  letta/schemas/letta_base.py,sha256=DuMqiNFmYwTAsXUHYdX--EWgtFUVzph5ptLZvu7aguI,3988
188
- letta/schemas/letta_message.py,sha256=mMbo6n4iO1cZJXRC7N497agtqcMTvs2o_x0163E8mes,13302
189
+ letta/schemas/letta_message.py,sha256=vPf4r_4pBS8eoXYsesfQeCfTSTWNZ6Ltgk-nrP_9VgI,13664
189
190
  letta/schemas/letta_message_content.py,sha256=CeIgyOy8HYMh_oGoPYlATp6d3Hp5v7SU3St9HPSbIqo,6402
190
191
  letta/schemas/letta_request.py,sha256=dzy3kwb5j2QLaSV0sDlwISEMt2xxH3IiK-vR9xJV65k,1123
191
192
  letta/schemas/letta_response.py,sha256=pq-SxXQy5yZo1-DiAwV2mMURlUvz1Uu7HHR_tB1hMho,7139
192
- letta/schemas/llm_config.py,sha256=bqq4LGE9layPcnnkzd_8d2SB8o1x8XdDzfd2ZkYQwcY,5611
193
+ letta/schemas/llm_config.py,sha256=xEAfwigMc5MDY6hUtLRhsWW6iZPlPUezo-ZOZzWB8cs,5953
193
194
  letta/schemas/llm_config_overrides.py,sha256=-oRglCTcajF6UAK3RAa0FLWVuKODPI1v403fDIWMAtA,1815
194
195
  letta/schemas/memory.py,sha256=GOYDfPKzbWftUWO9Hv4KW7xAi1EIQmC8zpP7qvEkVHw,10245
195
- letta/schemas/message.py,sha256=2bpl6VAqIaz6Rzqcq_NcPjbmlq7zvZx7sYFht1hs1_c,39727
196
+ letta/schemas/message.py,sha256=XnpPZ9HNi0iXJNwYehfzxhZ1sOacH9na0gHoGsG2OWI,45383
196
197
  letta/schemas/openai/chat_completion_request.py,sha256=mxEUq3OgPBjtBv8emFJTFJD58xahUjAtJnRycDWu2Hc,3889
197
- letta/schemas/openai/chat_completion_response.py,sha256=koEb_NTiz5YsAAX81Z0cSqSFX4a6MdD2lhoXtxF_rw4,4100
198
+ letta/schemas/openai/chat_completion_response.py,sha256=yoepGZkg5PIobGqvATJruPdV4odpIUDHWniodSQo3PY,4433
198
199
  letta/schemas/openai/chat_completions.py,sha256=l0e9sT9boTD5VBU5YtJ0s7qUtCfFGB2K-gQLeEZ2LHU,3599
199
200
  letta/schemas/openai/embedding_response.py,sha256=WKIZpXab1Av7v6sxKG8feW3ZtpQUNosmLVSuhXYa_xU,357
200
201
  letta/schemas/openai/openai.py,sha256=Hilo5BiLAGabzxCwnwfzK5QrWqwYD8epaEKFa4Pwndk,7970
201
- letta/schemas/organization.py,sha256=_RR8jlOOdJyG31q53IDdIvBVvIfAZrQWAGuvc5HmW24,788
202
+ letta/schemas/organization.py,sha256=TXrHN4IBQnX-mWvRuCOH57XZSLYCVOY0wWm2_UzDQIA,1279
202
203
  letta/schemas/passage.py,sha256=RG0vkaewEu4a_NAZM-FVyMammHjqpPP0RDYAdu27g6A,3723
203
- letta/schemas/providers.py,sha256=byktB0hSMlbjwsGDwxwmCOpL6bFS0-j9EhVbKmHnQ-4,52601
204
+ letta/schemas/providers.py,sha256=mLoFU-EHBN1TJiSYDSF-pYCzwYDWcXX1m7Wa922NRJA,53310
204
205
  letta/schemas/run.py,sha256=SRqPRziINIiPunjOhE_NlbnQYgxTvqmbauni_yfBQRA,2085
205
206
  letta/schemas/sandbox_config.py,sha256=SZCo3FSMz-DIBMKGu0atT4tsVFXGsqMFPaJnjrxpkX4,5993
206
207
  letta/schemas/source.py,sha256=IuenIFs7B8uOuYJIHXqR1E28wVSa-pUX6NkLZH7cukg,3141
207
208
  letta/schemas/step.py,sha256=WkcVnruUUOWLKwiWPn2Gfal4EQZPNLqlsd9859xhgsw,2224
208
- letta/schemas/tool.py,sha256=_-9V633hz-fU5ZZ8Gh68LCRVg_H3bf9RIpXIHHKrm3s,12532
209
+ letta/schemas/tool.py,sha256=Nj6ztGhpLVj2caEpMxt6e64hp1uBIXe5kng23ONLwiU,12781
209
210
  letta/schemas/tool_rule.py,sha256=tZ-BoyFJcFLMOd8KIng8pw3yCtdV8KGh4Vz730ZA-WQ,5674
210
- letta/schemas/usage.py,sha256=8oYRH-JX0PfjIu2zkT5Uu3UWQ7Unnz_uHiO8hRGI4m0,912
211
+ letta/schemas/usage.py,sha256=b8cNifTm7cqd1MtnqfZqUbn2KtACubX-VkEaYEMLBkg,1153
211
212
  letta/schemas/user.py,sha256=V32Tgl6oqB3KznkxUz12y7agkQicjzW7VocSpj78i6Q,1526
212
213
  letta/serialize_schemas/__init__.py,sha256=cosMjvWz7cubC1azbUofzYrcDBTuSgjJImUdsrSs3p0,77
213
214
  letta/serialize_schemas/marshmallow_agent.py,sha256=Ks0RQK5LcuxOHIyB7GKdD2yKK0mh06RCxb-k6YE9kcc,4304
@@ -218,7 +219,7 @@ letta/serialize_schemas/marshmallow_custom_fields.py,sha256=_rXV4eGY4wKqzZQPyk3o
218
219
  letta/serialize_schemas/marshmallow_message.py,sha256=vkBlIFONzsiREXo507sWl1mjVjCLV97RtB7jyE0N_fw,1336
219
220
  letta/serialize_schemas/marshmallow_tag.py,sha256=ssNGdD-z9UafhoTTOcvWRXju__NSx1bPijae_vljMr4,682
220
221
  letta/serialize_schemas/marshmallow_tool.py,sha256=98dzHzKcH_HE5n_gCkU683iHvg1M9IGmRZ2BWnh__j4,404
221
- letta/serialize_schemas/pydantic_agent_schema.py,sha256=hsf0l1RiAbFrGUYNsRg21L4S7QUD6z_-Wft5QigPiOM,2664
222
+ letta/serialize_schemas/pydantic_agent_schema.py,sha256=4fyoza1T5_39aatBo3y9DDONUDc1crbbz26LHFqDEZk,2674
222
223
  letta/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
223
224
  letta/server/constants.py,sha256=yAdGbLkzlOU_dLTx0lKDmAnj0ZgRXCEaIcPJWO69eaE,92
224
225
  letta/server/db.py,sha256=cA1MHpMCTTC1MX7VWppJ-cKq1XW93Vws_vTV0-bKmTE,3642
@@ -229,20 +230,20 @@ letta/server/rest_api/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
229
230
  letta/server/rest_api/auth/index.py,sha256=fQBGyVylGSRfEMLQ17cZzrHd5Y1xiVylvPqH5Rl-lXQ,1378
230
231
  letta/server/rest_api/auth_token.py,sha256=725EFEIiNj4dh70hrSd94UysmFD8vcJLrTRfNHkzxDo,774
231
232
  letta/server/rest_api/chat_completions_interface.py,sha256=W2Zxm-RuahS5Ll8OzwUJoPC5fGliVGc3yN_icybI3G4,10953
232
- letta/server/rest_api/interface.py,sha256=4wwQmmM1Fqiy4ll4YlH_hv0Wks0skfh-M06HZbo01hM,60776
233
+ letta/server/rest_api/interface.py,sha256=vK4Qjwav0WHykPwZRmJ_u4bJ1C3aTkqjn719XYb0PCE,62809
233
234
  letta/server/rest_api/optimistic_json_parser.py,sha256=vOwkwJi3Q_tmq0i3e3S0ixGO569OTI-Kmbyz1htIPp0,6738
234
235
  letta/server/rest_api/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
235
236
  letta/server/rest_api/routers/openai/chat_completions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
236
237
  letta/server/rest_api/routers/openai/chat_completions/chat_completions.py,sha256=OgjWs4zJaIi5Ps67iCTeOLmLXcW0S5Xccd-TcNa9obQ,5321
237
238
  letta/server/rest_api/routers/v1/__init__.py,sha256=AV_uopcsNQIK-paX-9X23dNmLMUDDe_fgLTfeNyjWk8,1456
238
- letta/server/rest_api/routers/v1/agents.py,sha256=ytRWTFvBW8zQZ0JOStK6QiXMjoNo2QESGZ6nOzW_sOY,29879
239
+ letta/server/rest_api/routers/v1/agents.py,sha256=XNO_13_-uGaW4DnBS7Ynkz8PJRp5emPI1enx5qJTHho,30362
239
240
  letta/server/rest_api/routers/v1/blocks.py,sha256=OqX-YHC8e-yi-IoZ8OQJQjZ4QIjJ4xcio0tUlRhv8H0,4168
240
241
  letta/server/rest_api/routers/v1/groups.py,sha256=v53Ekx9HmcabvBuUsvxlJyRvUiStgVrzAFoqzwC4cOs,9826
241
242
  letta/server/rest_api/routers/v1/health.py,sha256=MoOjkydhGcJXTiuJrKIB0etVXiRMdTa51S8RQ8-50DQ,399
242
243
  letta/server/rest_api/routers/v1/identities.py,sha256=gRTcOXxbpiTzQzzVA_I1Sc9aUSKhW6YcQcJb__HxOX4,5957
243
244
  letta/server/rest_api/routers/v1/jobs.py,sha256=4oeJfI2odNGubU_g7WSORJhn_usFsbRaD-qm86rve1E,2746
244
245
  letta/server/rest_api/routers/v1/llms.py,sha256=lYp5URXtZk1yu_Pe-p1Wq1uQ0qeb6aWtx78rXSB7N_E,881
245
- letta/server/rest_api/routers/v1/organizations.py,sha256=8n-kA9LHtKImdY2xL-v7m6nYAbFWqH1vjBCJhQbv7Is,2077
246
+ letta/server/rest_api/routers/v1/organizations.py,sha256=r7rj-cA3shgAgM0b2JCMqjYsDIFv3ruZjU7SYbPGGqg,2831
246
247
  letta/server/rest_api/routers/v1/providers.py,sha256=qyZsNTXgLVsoLZoCVY4qaqiG34zCEVmRUP2Cn6maK_4,2949
247
248
  letta/server/rest_api/routers/v1/runs.py,sha256=-2_YA2nuxcLqiPjG9CPHeZbyrtlNQZnAsaNohGn5fMg,8278
248
249
  letta/server/rest_api/routers/v1/sandbox_configs.py,sha256=9hqnnMwJ3wCwO-Bezu3Xl8i3TDSIuInw3gSeHaKUXfE,8526
@@ -253,8 +254,8 @@ letta/server/rest_api/routers/v1/tools.py,sha256=k_4kSFMsK2WNSmNMclMdu3GrNo-JDqt
253
254
  letta/server/rest_api/routers/v1/users.py,sha256=G5DBHSkPfBgVHN2Wkm-rVYiLQAudwQczIq2Z3YLdbVo,2277
254
255
  letta/server/rest_api/routers/v1/voice.py,sha256=0lerWjrKLkt4gXLhZl1cIcgstOz9Q2HZwc67L58BCXE,2451
255
256
  letta/server/rest_api/static_files.py,sha256=NG8sN4Z5EJ8JVQdj19tkFa9iQ1kBPTab9f_CUxd_u4Q,3143
256
- letta/server/rest_api/utils.py,sha256=aF0u__Q33-aPWAiHi9JA0jKAjqnwbVKzJdD5NgFpnOU,13828
257
- letta/server/server.py,sha256=kzEJX0RiXaurOmlnG4wSbhJIwn0Vor9tlxld_QK07po,77195
257
+ letta/server/rest_api/utils.py,sha256=gT8gCii9McrNqA6x2-v--s68NbxWZCt091WrpgBmXTk,13854
258
+ letta/server/server.py,sha256=vx0-K_X44RSz1b6qH-YepUxKtbzTFPX3m4ca3b6Mwi4,76097
258
259
  letta/server/startup.sh,sha256=2S_MuvYYY5YZQOYBL-7mq2CC-A7Hhwyd9be2QqmNqzA,2514
259
260
  letta/server/static_files/assets/index-048c9598.js,sha256=mR16XppvselwKCcNgONs4L7kZEVa4OEERm4lNZYtLSk,146819
260
261
  letta/server/static_files/assets/index-0e31b727.css,sha256=SBbja96uiQVLDhDOroHgM6NSl7tS4lpJRCREgSS_hA8,7672
@@ -268,15 +269,15 @@ letta/server/ws_api/interface.py,sha256=TWl9vkcMCnLsUtgsuENZ-ku2oMDA-OUTzLh_yNRo
268
269
  letta/server/ws_api/protocol.py,sha256=5mDgpfNZn_kNwHnpt5Dsuw8gdNH298sgxTGed3etzYg,1836
269
270
  letta/server/ws_api/server.py,sha256=cBSzf-V4zT1bL_0i54OTI3cMXhTIIxqjSRF8pYjk7fg,5835
270
271
  letta/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
271
- letta/services/agent_manager.py,sha256=9fQWIl56P5kYx312S6rzTrLR5znWmHRItKEYMnNjnWE,62530
272
+ letta/services/agent_manager.py,sha256=uJrG4jt5mZky6gETaw85fw72DYTWL6Rcyb2HtjY8Smg,62647
272
273
  letta/services/block_manager.py,sha256=L0_iWq7biycf_LXDqhqs_tXq88o_-zlLRW9SvtL3ETA,6018
273
274
  letta/services/group_manager.py,sha256=rzfy7w1yYtUtI0cBlr3mdQjfcWKqKahT1q2v9s6_RBI,6202
274
- letta/services/helpers/agent_manager_helper.py,sha256=YPlsDrExprwOuaHW6ZDv-j3tkGi6bNYJ2-XcYIzcKLo,18267
275
+ letta/services/helpers/agent_manager_helper.py,sha256=fmpL-8xyDPFdA-pfIV7cMJBBi6w3ELzcJDCI7-9mw28,17316
275
276
  letta/services/helpers/tool_execution_helper.py,sha256=lLoebs1kZKjw62y1PxHbIDkHq_heJN2ZT0gKje-R8oo,6941
276
277
  letta/services/identity_manager.py,sha256=DJzvq5TqzgmVdnH401YAJUycXTE0tNN70KRZTwu6ko8,8505
277
278
  letta/services/job_manager.py,sha256=ejcv_nMljByimiWJjvj7aqUFQktL1kK-vx_cra2L2cs,16317
278
- letta/services/message_manager.py,sha256=H7E7kSDtQdeTQYrSs6ypZrAh0my26avtfty5UxeeCB0,16662
279
- letta/services/organization_manager.py,sha256=dhQ3cFPXWNYLfMjdahr2HsOAMJ1JtCEWj1G8Nei5MQc,3388
279
+ letta/services/message_manager.py,sha256=mgmX4VGRL-d-b6FrMPfDLrlNXNt2XKTcBBYlBd8dcfE,16646
280
+ letta/services/organization_manager.py,sha256=Ax0KmPSc_YYsYaxeld9gc7ST-J6DemHQ542DD7l7AWA,3989
280
281
  letta/services/passage_manager.py,sha256=GeEsQZx3uBe4E509LaZtwKVjIeIw4Lra9jOqFgbk1yg,9102
281
282
  letta/services/per_agent_lock_manager.py,sha256=porM0cKKANQ1FvcGXOO_qM7ARk5Fgi1HVEAhXsAg9-4,546
282
283
  letta/services/provider_manager.py,sha256=QOKMSZOM6eAWa2-nANWQc1frKBh8N3gqDq0V87fnSuc,3748
@@ -286,7 +287,10 @@ letta/services/step_manager.py,sha256=B64iYn6Dt9yRKsSJ5vLxWQR2t-apvPLfUZyzrUsJTp
286
287
  letta/services/summarizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
287
288
  letta/services/summarizer/enums.py,sha256=szzPX2OBRRJEZsBTGYQThrNz02ELFqhuLwvOR7ozi7A,208
288
289
  letta/services/summarizer/summarizer.py,sha256=qPcR7VsHsgUsUtxmKx_73l3XdDhFvDzZ8VeIs4w3NBc,4757
289
- letta/services/tool_execution_sandbox.py,sha256=6AB3rFS34PzoyE9dxtUmuaUUWvKrwdE083NuBRa1eC0,22969
290
+ letta/services/tool_execution_sandbox.py,sha256=yk8waezl0ETDNblpPTC5szw0rN_p_l5h_Z1LkVKs094,23261
291
+ letta/services/tool_executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
292
+ letta/services/tool_executor/tool_execution_manager.py,sha256=fsw_n9YwNf2hEPuaooVT1ntZN66w-IpfhAKOMrRRB-8,2807
293
+ letta/services/tool_executor/tool_executor.py,sha256=ypUB-PlqfR6jrcfa4bNtuyVCfUgcWoJU8pHaTcKtZ6U,16223
290
294
  letta/services/tool_manager.py,sha256=CAXkbw8cv6LZ8Do9lloWw0biKH0lBf-qtsdq0yedhbQ,10053
291
295
  letta/services/user_manager.py,sha256=ScHbdJK9kNF8QXjsd3ZWGEL87n_Uyp3YwfKetOJmpHs,4304
292
296
  letta/settings.py,sha256=UZ4itbmPLsANqK46gG-S56SVw0yURSZ40vH78CQul1M,7392
@@ -296,8 +300,8 @@ letta/supervisor_multi_agent.py,sha256=jMy0J-a1_u5ZCulweXwJ98SgF6Hnvwxh1L3_wavnT
296
300
  letta/system.py,sha256=dnOrS2FlRMwijQnOvfrky0Lg8wEw-FUq2zzfAJOUSKA,8477
297
301
  letta/tracing.py,sha256=RstWXpfWVF77nmb_ISORVWd9IQw2Ky3de40k_S70yKI,8258
298
302
  letta/utils.py,sha256=AdHrQ2OQ3V4XhJ1LtYwbLUO71j2IJY37cIUxXPgaaRY,32125
299
- letta_nightly-0.6.43.dev20250323104014.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
300
- letta_nightly-0.6.43.dev20250323104014.dist-info/METADATA,sha256=YuQxD21VMD1cvHmGlysF8hAmJeuXWnDIS5H8v_OwQ_g,22928
301
- letta_nightly-0.6.43.dev20250323104014.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
302
- letta_nightly-0.6.43.dev20250323104014.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
303
- letta_nightly-0.6.43.dev20250323104014.dist-info/RECORD,,
303
+ letta_nightly-0.6.44.dev20250325050316.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
304
+ letta_nightly-0.6.44.dev20250325050316.dist-info/METADATA,sha256=Lkbc9fUcumula1XzwSY8Xpyt1zg2uTkpGRtTy8RUUPo,22891
305
+ letta_nightly-0.6.44.dev20250325050316.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
306
+ letta_nightly-0.6.44.dev20250325050316.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
307
+ letta_nightly-0.6.44.dev20250325050316.dist-info/RECORD,,