letta-nightly 0.6.43.dev20250324104208__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.
- letta/__init__.py +1 -1
- letta/agent.py +106 -104
- letta/agents/voice_agent.py +1 -1
- letta/client/streaming.py +3 -1
- letta/functions/function_sets/base.py +2 -1
- letta/functions/function_sets/multi_agent.py +51 -40
- letta/functions/helpers.py +26 -22
- letta/helpers/message_helper.py +41 -0
- letta/llm_api/anthropic.py +150 -44
- letta/llm_api/aws_bedrock.py +5 -3
- letta/llm_api/azure_openai.py +0 -1
- letta/llm_api/llm_api_tools.py +4 -0
- letta/orm/organization.py +1 -0
- letta/orm/sqlalchemy_base.py +2 -4
- letta/schemas/agent.py +8 -0
- letta/schemas/letta_message.py +8 -4
- letta/schemas/llm_config.py +6 -0
- letta/schemas/message.py +143 -24
- letta/schemas/openai/chat_completion_response.py +5 -0
- letta/schemas/organization.py +7 -0
- letta/schemas/providers.py +17 -0
- letta/schemas/tool.py +5 -1
- letta/schemas/usage.py +5 -1
- letta/serialize_schemas/pydantic_agent_schema.py +1 -1
- letta/server/rest_api/interface.py +44 -7
- letta/server/rest_api/routers/v1/agents.py +13 -2
- letta/server/rest_api/routers/v1/organizations.py +19 -1
- letta/server/rest_api/utils.py +1 -1
- letta/server/server.py +49 -70
- letta/services/agent_manager.py +6 -2
- letta/services/helpers/agent_manager_helper.py +24 -38
- letta/services/message_manager.py +7 -6
- letta/services/organization_manager.py +13 -0
- letta/services/tool_execution_sandbox.py +5 -1
- letta/services/tool_executor/__init__.py +0 -0
- letta/services/tool_executor/tool_execution_manager.py +74 -0
- letta/services/tool_executor/tool_executor.py +380 -0
- {letta_nightly-0.6.43.dev20250324104208.dist-info → letta_nightly-0.6.44.dev20250325050316.dist-info}/METADATA +2 -3
- {letta_nightly-0.6.43.dev20250324104208.dist-info → letta_nightly-0.6.44.dev20250325050316.dist-info}/RECORD +42 -38
- {letta_nightly-0.6.43.dev20250324104208.dist-info → letta_nightly-0.6.44.dev20250325050316.dist-info}/LICENSE +0 -0
- {letta_nightly-0.6.43.dev20250324104208.dist-info → letta_nightly-0.6.44.dev20250325050316.dist-info}/WHEEL +0 -0
- {letta_nightly-0.6.43.dev20250324104208.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.
|
|
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.
|
|
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=
|
|
1
|
+
letta/__init__.py,sha256=a8y2MUDjmfi4RyYx4rOJ6xhzmLqGt5NaKUi6Cldg_y0,918
|
|
2
2
|
letta/__main__.py,sha256=6Hs2PV7EYc5Tid4g4OtcLXhqVHiNYTGzSBdoOnW2HXA,29
|
|
3
|
-
letta/agent.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
56
|
-
letta/llm_api/aws_bedrock.py,sha256=
|
|
57
|
-
letta/llm_api/azure_openai.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
257
|
-
letta/server/server.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
279
|
-
letta/services/organization_manager.py,sha256=
|
|
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=
|
|
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.
|
|
300
|
-
letta_nightly-0.6.
|
|
301
|
-
letta_nightly-0.6.
|
|
302
|
-
letta_nightly-0.6.
|
|
303
|
-
letta_nightly-0.6.
|
|
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,,
|
|
File without changes
|
|
File without changes
|