letta-nightly 0.6.37.dev20250311104150__py3-none-any.whl → 0.6.39.dev20250313104142__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 (58) hide show
  1. letta/__init__.py +1 -1
  2. letta/agent.py +83 -23
  3. letta/agents/low_latency_agent.py +3 -2
  4. letta/client/client.py +1 -50
  5. letta/constants.py +4 -1
  6. letta/functions/function_sets/base.py +1 -1
  7. letta/functions/function_sets/multi_agent.py +9 -8
  8. letta/functions/helpers.py +47 -6
  9. letta/functions/schema_generator.py +47 -0
  10. letta/helpers/mcp_helpers.py +108 -0
  11. letta/llm_api/cohere.py +1 -1
  12. letta/llm_api/google_ai_client.py +332 -0
  13. letta/llm_api/google_vertex_client.py +214 -0
  14. letta/llm_api/helpers.py +1 -2
  15. letta/llm_api/llm_api_tools.py +0 -1
  16. letta/llm_api/llm_client.py +48 -0
  17. letta/llm_api/llm_client_base.py +129 -0
  18. letta/local_llm/utils.py +30 -20
  19. letta/log.py +1 -1
  20. letta/memory.py +1 -1
  21. letta/orm/__init__.py +1 -0
  22. letta/orm/block.py +8 -0
  23. letta/orm/enums.py +2 -0
  24. letta/orm/identities_blocks.py +13 -0
  25. letta/orm/identity.py +9 -0
  26. letta/orm/sqlalchemy_base.py +4 -4
  27. letta/orm/step.py +1 -0
  28. letta/schemas/block.py +4 -48
  29. letta/schemas/identity.py +3 -0
  30. letta/schemas/letta_message.py +26 -0
  31. letta/schemas/message.py +69 -63
  32. letta/schemas/step.py +1 -0
  33. letta/schemas/tool.py +39 -2
  34. letta/serialize_schemas/agent.py +8 -1
  35. letta/server/rest_api/app.py +15 -0
  36. letta/server/rest_api/chat_completions_interface.py +2 -0
  37. letta/server/rest_api/interface.py +46 -13
  38. letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +2 -7
  39. letta/server/rest_api/routers/v1/agents.py +14 -10
  40. letta/server/rest_api/routers/v1/blocks.py +5 -1
  41. letta/server/rest_api/routers/v1/steps.py +2 -0
  42. letta/server/rest_api/routers/v1/tools.py +71 -1
  43. letta/server/rest_api/routers/v1/voice.py +3 -6
  44. letta/server/server.py +102 -5
  45. letta/services/agent_manager.py +58 -3
  46. letta/services/block_manager.py +10 -1
  47. letta/services/helpers/agent_manager_helper.py +12 -1
  48. letta/services/identity_manager.py +61 -15
  49. letta/services/message_manager.py +40 -0
  50. letta/services/step_manager.py +8 -1
  51. letta/services/summarizer/summarizer.py +1 -1
  52. letta/services/tool_manager.py +6 -0
  53. letta/settings.py +11 -12
  54. {letta_nightly-0.6.37.dev20250311104150.dist-info → letta_nightly-0.6.39.dev20250313104142.dist-info}/METADATA +20 -18
  55. {letta_nightly-0.6.37.dev20250311104150.dist-info → letta_nightly-0.6.39.dev20250313104142.dist-info}/RECORD +58 -52
  56. {letta_nightly-0.6.37.dev20250311104150.dist-info → letta_nightly-0.6.39.dev20250313104142.dist-info}/LICENSE +0 -0
  57. {letta_nightly-0.6.37.dev20250311104150.dist-info → letta_nightly-0.6.39.dev20250313104142.dist-info}/WHEEL +0 -0
  58. {letta_nightly-0.6.37.dev20250311104150.dist-info → letta_nightly-0.6.39.dev20250313104142.dist-info}/entry_points.txt +0 -0
@@ -5,6 +5,7 @@ from sqlalchemy.exc import NoResultFound
5
5
  from sqlalchemy.orm import Session
6
6
 
7
7
  from letta.orm.agent import Agent as AgentModel
8
+ from letta.orm.block import Block as BlockModel
8
9
  from letta.orm.identity import Identity as IdentityModel
9
10
  from letta.schemas.identity import Identity as PydanticIdentity
10
11
  from letta.schemas.identity import IdentityCreate, IdentityType, IdentityUpdate
@@ -58,9 +59,24 @@ class IdentityManager:
58
59
  @enforce_types
59
60
  def create_identity(self, identity: IdentityCreate, actor: PydanticUser) -> PydanticIdentity:
60
61
  with self.session_maker() as session:
61
- new_identity = IdentityModel(**identity.model_dump(exclude={"agent_ids"}, exclude_unset=True))
62
+ new_identity = IdentityModel(**identity.model_dump(exclude={"agent_ids", "block_ids"}, exclude_unset=True))
62
63
  new_identity.organization_id = actor.organization_id
63
- self._process_agent_relationship(session=session, identity=new_identity, agent_ids=identity.agent_ids, allow_partial=False)
64
+ self._process_relationship(
65
+ session=session,
66
+ identity=new_identity,
67
+ relationship_name="agents",
68
+ model_class=AgentModel,
69
+ item_ids=identity.agent_ids,
70
+ allow_partial=False,
71
+ )
72
+ self._process_relationship(
73
+ session=session,
74
+ identity=new_identity,
75
+ relationship_name="blocks",
76
+ model_class=BlockModel,
77
+ item_ids=identity.block_ids,
78
+ allow_partial=False,
79
+ )
64
80
  new_identity.create(session, actor=actor)
65
81
  return new_identity.to_pydantic()
66
82
 
@@ -78,7 +94,13 @@ class IdentityManager:
78
94
  if existing_identity is None:
79
95
  return self.create_identity(identity=identity, actor=actor)
80
96
  else:
81
- identity_update = IdentityUpdate(name=identity.name, identity_type=identity.identity_type, agent_ids=identity.agent_ids)
97
+ identity_update = IdentityUpdate(
98
+ name=identity.name,
99
+ identifier_key=identity.identifier_key,
100
+ identity_type=identity.identity_type,
101
+ agent_ids=identity.agent_ids,
102
+ properties=identity.properties,
103
+ )
82
104
  return self._update_identity(
83
105
  session=session, existing_identity=existing_identity, identity=identity_update, actor=actor, replace=True
84
106
  )
@@ -118,9 +140,26 @@ class IdentityManager:
118
140
  new_properties = existing_identity.properties + [prop.model_dump() for prop in identity.properties]
119
141
  existing_identity.properties = new_properties
120
142
 
121
- self._process_agent_relationship(
122
- session=session, identity=existing_identity, agent_ids=identity.agent_ids, allow_partial=False, replace=replace
123
- )
143
+ if identity.agent_ids is not None:
144
+ self._process_relationship(
145
+ session=session,
146
+ identity=existing_identity,
147
+ relationship_name="agents",
148
+ model_class=AgentModel,
149
+ item_ids=identity.agent_ids,
150
+ allow_partial=False,
151
+ replace=replace,
152
+ )
153
+ if identity.block_ids is not None:
154
+ self._process_relationship(
155
+ session=session,
156
+ identity=existing_identity,
157
+ relationship_name="blocks",
158
+ model_class=BlockModel,
159
+ item_ids=identity.block_ids,
160
+ allow_partial=False,
161
+ replace=replace,
162
+ )
124
163
  existing_identity.update(session, actor=actor)
125
164
  return existing_identity.to_pydantic()
126
165
 
@@ -135,26 +174,33 @@ class IdentityManager:
135
174
  session.delete(identity)
136
175
  session.commit()
137
176
 
138
- def _process_agent_relationship(
139
- self, session: Session, identity: IdentityModel, agent_ids: List[str], allow_partial=False, replace=True
177
+ def _process_relationship(
178
+ self,
179
+ session: Session,
180
+ identity: PydanticIdentity,
181
+ relationship_name: str,
182
+ model_class,
183
+ item_ids: List[str],
184
+ allow_partial=False,
185
+ replace=True,
140
186
  ):
141
- current_relationship = getattr(identity, "agents", [])
142
- if not agent_ids:
187
+ current_relationship = getattr(identity, relationship_name, [])
188
+ if not item_ids:
143
189
  if replace:
144
- setattr(identity, "agents", [])
190
+ setattr(identity, relationship_name, [])
145
191
  return
146
192
 
147
193
  # Retrieve models for the provided IDs
148
- found_items = session.query(AgentModel).filter(AgentModel.id.in_(agent_ids)).all()
194
+ found_items = session.query(model_class).filter(model_class.id.in_(item_ids)).all()
149
195
 
150
196
  # Validate all items are found if allow_partial is False
151
- if not allow_partial and len(found_items) != len(agent_ids):
152
- missing = set(agent_ids) - {item.id for item in found_items}
197
+ if not allow_partial and len(found_items) != len(item_ids):
198
+ missing = set(item_ids) - {item.id for item in found_items}
153
199
  raise NoResultFound(f"Items not found in agents: {missing}")
154
200
 
155
201
  if replace:
156
202
  # Replace the relationship
157
- setattr(identity, "agents", found_items)
203
+ setattr(identity, relationship_name, found_items)
158
204
  else:
159
205
  # Extend the relationship (only add new items)
160
206
  current_ids = {item.id for item in current_relationship}
@@ -1,3 +1,4 @@
1
+ import json
1
2
  from typing import List, Optional
2
3
 
3
4
  from sqlalchemy import and_, or_
@@ -7,6 +8,7 @@ from letta.orm.agent import Agent as AgentModel
7
8
  from letta.orm.errors import NoResultFound
8
9
  from letta.orm.message import Message as MessageModel
9
10
  from letta.schemas.enums import MessageRole
11
+ from letta.schemas.letta_message import LettaMessageUpdateUnion
10
12
  from letta.schemas.message import Message as PydanticMessage
11
13
  from letta.schemas.message import MessageUpdate
12
14
  from letta.schemas.user import User as PydanticUser
@@ -64,6 +66,44 @@ class MessageManager:
64
66
  """Create multiple messages."""
65
67
  return [self.create_message(m, actor=actor) for m in pydantic_msgs]
66
68
 
69
+ @enforce_types
70
+ def update_message_by_letta_message(
71
+ self, message_id: str, letta_message_update: LettaMessageUpdateUnion, actor: PydanticUser
72
+ ) -> PydanticMessage:
73
+ """
74
+ Updated the underlying messages table giving an update specified to the user-facing LettaMessage
75
+ """
76
+ message = self.get_message_by_id(message_id=message_id, actor=actor)
77
+ if letta_message_update.message_type == "assistant_message":
78
+ # modify the tool call for send_message
79
+ # TODO: fix this if we add parallel tool calls
80
+ # TODO: note this only works if the AssistantMessage is generated by the standard send_message
81
+ assert (
82
+ message.tool_calls[0].function.name == "send_message"
83
+ ), f"Expected the first tool call to be send_message, but got {message.tool_calls[0].function.name}"
84
+ original_args = json.loads(message.tool_calls[0].function.arguments)
85
+ original_args["message"] = letta_message_update.content # override the assistant message
86
+ update_tool_call = message.tool_calls[0].__deepcopy__()
87
+ update_tool_call.function.arguments = json.dumps(original_args)
88
+
89
+ update_message = MessageUpdate(tool_calls=[update_tool_call])
90
+ elif letta_message_update.message_type == "reasoning_message":
91
+ update_message = MessageUpdate(content=letta_message_update.reasoning)
92
+ elif letta_message_update.message_type == "user_message" or letta_message_update.message_type == "system_message":
93
+ update_message = MessageUpdate(content=letta_message_update.content)
94
+ else:
95
+ raise ValueError(f"Unsupported message type for modification: {letta_message_update.message_type}")
96
+
97
+ message = self.update_message_by_id(message_id=message_id, message_update=update_message, actor=actor)
98
+
99
+ # convert back to LettaMessage
100
+ for letta_msg in message.to_letta_message(use_assistant_message=True):
101
+ if letta_msg.message_type == letta_message_update.message_type:
102
+ return letta_msg
103
+
104
+ # raise error if message type got modified
105
+ raise ValueError(f"Message type got modified: {letta_message_update.message_type}")
106
+
67
107
  @enforce_types
68
108
  def update_message_by_id(self, message_id: str, message_update: MessageUpdate, actor: PydanticUser) -> PydanticMessage:
69
109
  """
@@ -33,10 +33,15 @@ class StepManager:
33
33
  limit: Optional[int] = 50,
34
34
  order: Optional[str] = None,
35
35
  model: Optional[str] = None,
36
+ agent_id: Optional[str] = None,
36
37
  ) -> List[PydanticStep]:
37
38
  """List all jobs with optional pagination and status filter."""
38
39
  with self.session_maker() as session:
39
- filter_kwargs = {"organization_id": actor.organization_id, "model": model}
40
+ filter_kwargs = {"organization_id": actor.organization_id}
41
+ if model:
42
+ filter_kwargs["model"] = model
43
+ if agent_id:
44
+ filter_kwargs["agent_id"] = agent_id
40
45
 
41
46
  steps = StepModel.list(
42
47
  db_session=session,
@@ -54,6 +59,7 @@ class StepManager:
54
59
  def log_step(
55
60
  self,
56
61
  actor: PydanticUser,
62
+ agent_id: str,
57
63
  provider_name: str,
58
64
  model: str,
59
65
  model_endpoint: Optional[str],
@@ -65,6 +71,7 @@ class StepManager:
65
71
  step_data = {
66
72
  "origin": None,
67
73
  "organization_id": actor.organization_id,
74
+ "agent_id": agent_id,
68
75
  "provider_id": provider_id,
69
76
  "provider_name": provider_name,
70
77
  "model": model,
@@ -96,7 +96,7 @@ class Summarizer:
96
96
  )
97
97
 
98
98
  messages = await self.summarizer_agent.step(UserMessage(content=summary_request_text))
99
- current_summary = "\n".join([m.text for m in messages])
99
+ current_summary = "\n".join([m.content[0].text for m in messages])
100
100
  current_summary = f"{self.summary_prefix}{current_summary}"
101
101
 
102
102
  return updated_in_context_messages, current_summary, True
@@ -56,6 +56,12 @@ class ToolManager:
56
56
 
57
57
  return tool
58
58
 
59
+ @enforce_types
60
+ def create_or_update_mcp_tool(self, tool_create: ToolCreate, actor: PydanticUser) -> PydanticTool:
61
+ return self.create_or_update_tool(
62
+ PydanticTool(tool_type=ToolType.EXTERNAL_MCP, name=tool_create.json_schema["name"], **tool_create.model_dump()), actor
63
+ )
64
+
59
65
  @enforce_types
60
66
  def create_or_update_composio_tool(self, tool_create: ToolCreate, actor: PydanticUser) -> PydanticTool:
61
67
  return self.create_or_update_tool(
letta/settings.py CHANGED
@@ -119,18 +119,17 @@ class ModelSettings(BaseSettings):
119
119
 
120
120
  env_cors_origins = os.getenv("ACCEPTABLE_ORIGINS")
121
121
 
122
- cors_origins = (
123
- [
124
- "http://letta.localhost",
125
- "http://localhost:8283",
126
- "http://localhost:8083",
127
- "http://localhost:3000",
128
- "http://localhost:4200",
129
- ]
130
- + [env_cors_origins]
131
- if env_cors_origins
132
- else []
133
- )
122
+ cors_origins = [
123
+ "http://letta.localhost",
124
+ "http://localhost:8283",
125
+ "http://localhost:8083",
126
+ "http://localhost:3000",
127
+ "http://localhost:4200",
128
+ ]
129
+
130
+ # attach the env_cors_origins to the cors_origins if it exists
131
+ if env_cors_origins:
132
+ cors_origins.extend(env_cors_origins.split(","))
134
133
 
135
134
  # read pg_uri from ~/.letta/pg_uri or set to none, this is to support Letta Desktop
136
135
  default_pg_uri = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.6.37.dev20250311104150
3
+ Version: 0.6.39.dev20250313104142
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -14,6 +14,7 @@ Classifier: Programming Language :: Python :: 3.12
14
14
  Provides-Extra: all
15
15
  Provides-Extra: bedrock
16
16
  Provides-Extra: cloud-tool-sandbox
17
+ Provides-Extra: desktop
17
18
  Provides-Extra: dev
18
19
  Provides-Extra: external-tools
19
20
  Provides-Extra: google
@@ -28,17 +29,17 @@ Requires-Dist: black[jupyter] (>=24.2.0,<25.0.0) ; extra == "dev" or extra == "a
28
29
  Requires-Dist: boto3 (>=1.36.24,<2.0.0) ; extra == "bedrock"
29
30
  Requires-Dist: brotli (>=1.1.0,<2.0.0)
30
31
  Requires-Dist: colorama (>=0.4.6,<0.5.0)
31
- Requires-Dist: composio-core (>=0.7.2,<0.8.0)
32
- Requires-Dist: composio-langchain (>=0.7.2,<0.8.0)
33
- Requires-Dist: datamodel-code-generator[http] (>=0.25.0,<0.26.0)
34
- Requires-Dist: datasets (>=2.14.6,<3.0.0) ; extra == "dev" or extra == "all"
32
+ Requires-Dist: composio-core (>=0.7.7,<0.8.0)
33
+ Requires-Dist: composio-langchain (>=0.7.7,<0.8.0)
34
+ Requires-Dist: datamodel-code-generator[http] (>=0.25.0,<0.26.0) ; extra == "desktop" or extra == "all"
35
+ Requires-Dist: datasets (>=2.14.6,<3.0.0)
35
36
  Requires-Dist: demjson3 (>=3.0.6,<4.0.0)
36
- Requires-Dist: docker (>=7.1.0,<8.0.0) ; extra == "external-tools" or extra == "all"
37
+ Requires-Dist: docker (>=7.1.0,<8.0.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
37
38
  Requires-Dist: docstring-parser (>=0.16,<0.17)
38
39
  Requires-Dist: docx2txt (>=0.8,<0.9)
39
40
  Requires-Dist: e2b-code-interpreter (>=1.0.3,<2.0.0) ; extra == "cloud-tool-sandbox"
40
41
  Requires-Dist: faker (>=36.1.0,<37.0.0)
41
- Requires-Dist: fastapi (>=0.115.6,<0.116.0) ; extra == "server" or extra == "all"
42
+ Requires-Dist: fastapi (>=0.115.6,<0.116.0) ; extra == "server" or extra == "desktop" or extra == "all"
42
43
  Requires-Dist: google-genai (>=1.1.0,<2.0.0) ; extra == "google"
43
44
  Requires-Dist: grpcio (>=1.68.1,<2.0.0)
44
45
  Requires-Dist: grpcio-tools (>=1.68.1,<2.0.0)
@@ -47,13 +48,14 @@ Requires-Dist: httpx (>=0.28.0,<0.29.0)
47
48
  Requires-Dist: httpx-sse (>=0.4.0,<0.5.0)
48
49
  Requires-Dist: isort (>=5.13.2,<6.0.0) ; extra == "dev" or extra == "all"
49
50
  Requires-Dist: jinja2 (>=3.1.5,<4.0.0)
50
- Requires-Dist: langchain (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "all"
51
- Requires-Dist: langchain-community (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "all"
52
- Requires-Dist: letta_client (>=0.1.54,<0.2.0)
51
+ Requires-Dist: langchain (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
52
+ Requires-Dist: langchain-community (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
53
+ Requires-Dist: letta_client (>=0.1.65,<0.2.0)
53
54
  Requires-Dist: llama-index (>=0.12.2,<0.13.0)
54
55
  Requires-Dist: llama-index-embeddings-openai (>=0.3.1,<0.4.0)
55
- Requires-Dist: locust (>=2.31.5,<3.0.0) ; extra == "dev" or extra == "all"
56
+ Requires-Dist: locust (>=2.31.5,<3.0.0) ; extra == "dev" or extra == "desktop" or extra == "all"
56
57
  Requires-Dist: marshmallow-sqlalchemy (>=1.4.1,<2.0.0)
58
+ Requires-Dist: mcp (>=1.3.0,<2.0.0)
57
59
  Requires-Dist: nltk (>=3.8.1,<4.0.0)
58
60
  Requires-Dist: numpy (>=1.26.2,<2.0.0)
59
61
  Requires-Dist: openai (>=1.60.0,<2.0.0)
@@ -63,16 +65,16 @@ Requires-Dist: opentelemetry-instrumentation-requests (==0.51b0)
63
65
  Requires-Dist: opentelemetry-sdk (==1.30.0)
64
66
  Requires-Dist: pathvalidate (>=3.2.1,<4.0.0)
65
67
  Requires-Dist: pexpect (>=4.9.0,<5.0.0) ; extra == "dev" or extra == "all"
66
- Requires-Dist: pg8000 (>=1.30.3,<2.0.0) ; extra == "postgres" or extra == "all"
67
- Requires-Dist: pgvector (>=0.2.3,<0.3.0) ; extra == "postgres" or extra == "all"
68
+ Requires-Dist: pg8000 (>=1.30.3,<2.0.0) ; extra == "postgres" or extra == "desktop" or extra == "all"
69
+ Requires-Dist: pgvector (>=0.2.3,<0.3.0) ; extra == "postgres" or extra == "desktop" or extra == "all"
68
70
  Requires-Dist: pre-commit (>=3.5.0,<4.0.0) ; extra == "dev" or extra == "all"
69
71
  Requires-Dist: prettytable (>=3.9.0,<4.0.0)
70
- Requires-Dist: psycopg2 (>=2.9.10,<3.0.0) ; extra == "postgres" or extra == "all"
71
- Requires-Dist: psycopg2-binary (>=2.9.10,<3.0.0) ; extra == "postgres" or extra == "all"
72
+ Requires-Dist: psycopg2 (>=2.9.10,<3.0.0) ; extra == "postgres" or extra == "desktop" or extra == "all"
73
+ Requires-Dist: psycopg2-binary (>=2.9.10,<3.0.0) ; extra == "postgres" or extra == "desktop" or extra == "all"
72
74
  Requires-Dist: pydantic (>=2.7.4,<2.10.0)
73
75
  Requires-Dist: pydantic-settings (>=2.2.1,<3.0.0)
74
76
  Requires-Dist: pyhumps (>=3.8.0,<4.0.0)
75
- Requires-Dist: pyright (>=1.1.347,<2.0.0) ; extra == "dev" or extra == "all"
77
+ Requires-Dist: pyright (>=1.1.347,<2.0.0) ; extra == "dev" or extra == "desktop" or extra == "all"
76
78
  Requires-Dist: pytest-asyncio (>=0.23.2,<0.24.0) ; extra == "dev" or extra == "all"
77
79
  Requires-Dist: pytest-order (>=1.2.0,<2.0.0) ; extra == "dev" or extra == "all"
78
80
  Requires-Dist: python-box (>=7.1.1,<8.0.0)
@@ -90,8 +92,8 @@ Requires-Dist: sqlalchemy-utils (>=0.41.2,<0.42.0)
90
92
  Requires-Dist: sqlmodel (>=0.0.16,<0.0.17)
91
93
  Requires-Dist: tqdm (>=4.66.1,<5.0.0)
92
94
  Requires-Dist: typer[all] (>=0.9.0,<0.10.0)
93
- Requires-Dist: uvicorn (>=0.24.0.post1,<0.25.0) ; extra == "server" or extra == "all"
94
- Requires-Dist: wikipedia (>=1.4.0,<2.0.0) ; extra == "external-tools" or extra == "tests" or extra == "all"
95
+ Requires-Dist: uvicorn (>=0.24.0.post1,<0.25.0) ; extra == "server" or extra == "desktop" or extra == "all"
96
+ Requires-Dist: wikipedia (>=1.4.0,<2.0.0) ; extra == "external-tools" or extra == "tests" or extra == "desktop" or extra == "all"
95
97
  Description-Content-Type: text/markdown
96
98
 
97
99
  <p align="center">
@@ -1,39 +1,40 @@
1
- letta/__init__.py,sha256=dygpre5_iDLqGclnvhkq6BPMUZ8uZ8GWBua27pnkvGM,918
1
+ letta/__init__.py,sha256=q6k2pwvx7XD4fcSf0faPYn9dD9Yj6778hhgrULdXd6s,918
2
2
  letta/__main__.py,sha256=6Hs2PV7EYc5Tid4g4OtcLXhqVHiNYTGzSBdoOnW2HXA,29
3
- letta/agent.py,sha256=IcLnwnJNeVFJhpU3mJg-609sg_eWBZP8OwfCvEqcN-k,64398
3
+ letta/agent.py,sha256=2n0GTPjWnBT9jQib_qulOlq4_hdcLIfgzIB9A2u1LbE,67778
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=XOQ5rj3cn7i7Imr_aFaL8DbH7oAizrHbmUy8QZuz9yk,2704
7
- letta/agents/low_latency_agent.py,sha256=ZH7BfIS3j4e5mjWRCArwZrGzZDQKUPcsuxfTCg86h-o,13919
7
+ letta/agents/low_latency_agent.py,sha256=CfldT1b0jZ_iTySES4woyXLOQUsIzCnlEHP8treekN4,13990
8
8
  letta/benchmark/benchmark.py,sha256=ebvnwfp3yezaXOQyGXkYCDYpsmre-b9hvNtnyx4xkG0,3701
9
9
  letta/benchmark/constants.py,sha256=aXc5gdpMGJT327VuxsT5FngbCK2J41PQYeICBO7g_RE,536
10
10
  letta/cli/cli.py,sha256=zJz78-qDUz-depb7VQWkg87RBKiETQU4h9DI6ukQBa8,16477
11
11
  letta/cli/cli_config.py,sha256=MNMhIAAjXiAy2gX_gAtqiY0Ya6VNbzXJWjIcRVEZa-k,8597
12
12
  letta/cli/cli_load.py,sha256=vER0PwpHnsCZtCHcR2YjEXM-VVuO9jhfQibdo3gI3S0,2703
13
13
  letta/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- letta/client/client.py,sha256=G2X1QBXOQORzVwViRNax2EPSYwzdxw_L2RiTFS-SS9Q,139150
14
+ letta/client/client.py,sha256=wUhjvA2isZI0-2l0vM3-7lgNZOtjAxF85-F75jZj0eE,137450
15
15
  letta/client/streaming.py,sha256=lN9vamc07sfQlRbFif327GvURLUPhx-4AC_oUOPvs6w,4543
16
16
  letta/client/utils.py,sha256=VCGV-op5ZSmurd4yw7Vhf93XDQ0BkyBT8qsuV7EqfiU,2859
17
17
  letta/config.py,sha256=JFGY4TWW0Wm5fTbZamOwWqk5G8Nn-TXyhgByGoAqy2c,12375
18
- letta/constants.py,sha256=MvctT-wAIq4CKlYn3XerWAYsqiJj7ydJqqCCuwJLQa0,7675
18
+ letta/constants.py,sha256=_QI06HD6yLmGFrTqexLkUnUWSsKUiBlM1QtbiLGEq4k,7773
19
19
  letta/data_sources/connectors.py,sha256=R2AssXpqS7wN6VI8AfxvqaZs5S1ZACc4E_FewmR9iZI,7022
20
20
  letta/data_sources/connectors_helper.py,sha256=oQpVlc-BjSz9sTZ7sp4PsJSXJbBKpZPi3Dam03CURTQ,3376
21
21
  letta/embeddings.py,sha256=zqlfbN3aCgSOlNd9M2NW9zrwx4WwQzketb8oa5BzzE8,10831
22
22
  letta/errors.py,sha256=6fQXg2unP-2fo3R7db0ayKKWlD2XMusOPNi9TgJplCg,5558
23
23
  letta/functions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  letta/functions/ast_parsers.py,sha256=CQI0rUoIXcLKAev_GYrXcldRIGN5ZQtk5u4FLoHe5sE,5728
25
- letta/functions/function_sets/base.py,sha256=M3_1Pge2GiyITp_U73T_Sd9O2rFoNlbuT8KgzMjexfs,5999
25
+ letta/functions/function_sets/base.py,sha256=Rc1fKCExxTR66DmEh4OTCtvHIpC0s28ggx9tFgh_0QQ,6010
26
26
  letta/functions/function_sets/extras.py,sha256=R1a97EKepEPDxJKsxQPFdXXWQrkVppOvKbEkRc_79tc,4852
27
- letta/functions/function_sets/multi_agent.py,sha256=BcMeod0-lMhnKeaVWJp2T1PzRV0qvCuTWAPMJxAbgHI,4073
27
+ letta/functions/function_sets/multi_agent.py,sha256=MmLw42ztpjoZj6bPR6BKq9ttRWa9NMwuod48YQq5Qzw,4024
28
28
  letta/functions/functions.py,sha256=NyWLh7a-f4mXti5vM1oWDwXzfA58VmVVqL03O9vosKY,5672
29
- letta/functions/helpers.py,sha256=QA953uRT_syzTJs3iju2TbK9tH71m08hZXL5-BmUK2c,26704
29
+ letta/functions/helpers.py,sha256=Eh-6FLVCv7eJZP_IwP4Ib374oYzfvdkAOtYJX7p1t6c,27495
30
30
  letta/functions/interface.py,sha256=s_PPp5WDvGH_y9KUpMlORkdC141ITczFk3wsevrrUD8,2866
31
- letta/functions/schema_generator.py,sha256=dLM8pQ9UP1vP9cnKHgA-UhGllMNvyEIjsO-r47RP9LM,20765
31
+ letta/functions/schema_generator.py,sha256=wbV8tDx5RIkrSP9JNVo3PUuulN-WZie1WWLg69QTOjE,22320
32
32
  letta/helpers/__init__.py,sha256=p0luQ1Oe3Skc6sH4O58aHHA3Qbkyjifpuq0DZ1GAY0U,59
33
33
  letta/helpers/composio_helpers.py,sha256=6CWV483vE3N-keQlblexxBiQHxorMAgQuvbok4adGO4,949
34
34
  letta/helpers/converters.py,sha256=yM0slUU4YMW6K260JT88xnCxK2jB4RstSmaOezsT_Ik,6679
35
35
  letta/helpers/datetime_helpers.py,sha256=7U5ZJkE0cLki4sG8ukIHZSAoFfQpLWQu2kFekETy6Zg,2633
36
36
  letta/helpers/json_helpers.py,sha256=PWZ5HhSqGXO4e563dM_8M72q7ScirjXQ4Rv1ckohaV8,396
37
+ letta/helpers/mcp_helpers.py,sha256=kq2CH4PtnawUuO409_G3Q1ZUB0WSB0fzYb7JDpPUxo4,4196
37
38
  letta/helpers/tool_execution_helper.py,sha256=bskCscuz2nqoUboFcYA7sQGeikdEyqiYnNpO4gLQTdc,7469
38
39
  letta/helpers/tool_rule_solver.py,sha256=z-2Zq_qWykgWanFZYxtxUee4FkMnxqvntXe2tomoH68,6774
39
40
  letta/humans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -48,13 +49,17 @@ letta/llm_api/anthropic.py,sha256=pDj9W_Myz4fe05eoMiApO45G8jqzVoO9QyfFpCs-uV0,38
48
49
  letta/llm_api/aws_bedrock.py,sha256=J_oCM810-m2T-tgo3iRwSM0BuykBN5AK3SbkyiOaGbc,3835
49
50
  letta/llm_api/azure_openai.py,sha256=GP50e3WyoU2O_vb_b06GYTA1S157I0G21lF9-qv9nsA,6459
50
51
  letta/llm_api/azure_openai_constants.py,sha256=ZaR2IasJThijG0uhLKJThrixdAxLPD2IojfeaJ-KQMQ,294
51
- letta/llm_api/cohere.py,sha256=A5uUoxoRsXsaMDCIIWiVXeyCbiQ7gUfiASb8Ovv2I_o,14852
52
+ letta/llm_api/cohere.py,sha256=uzSXkvDPg4CV6tNnbX3yYkYsXRXAm4FvclUX8ln1etM,14863
52
53
  letta/llm_api/deepseek.py,sha256=b1mSW8gnBrpAI8d2GcBpDyLYDnuC-P1UP6xJPalfQS4,12456
53
54
  letta/llm_api/google_ai.py,sha256=oeGH6dTKfNTQ1Ip4HWkZ5KkVoujdru6XjQPWsirRBSM,18162
55
+ letta/llm_api/google_ai_client.py,sha256=114KoGp-6AecNE5BITHdjEvXnhqw6m4FSPrbwrl_Bkg,14486
54
56
  letta/llm_api/google_constants.py,sha256=ZdABT9l9l-qKcV2QCkVsv9kQbttx6JyIJoOWS8IMS5o,448
55
57
  letta/llm_api/google_vertex.py,sha256=-8ERH8YPsQIAi6ZuYNcvny7Jz-Q4IFIbV7xqDspUUD4,14399
56
- letta/llm_api/helpers.py,sha256=pXBemF43Ywbwub5dc5V7Slw5K7lNlO0ae8dQBOXgDHs,16773
57
- letta/llm_api/llm_api_tools.py,sha256=OHhwSWRwl4Ubv8_g-zoQZvgWYIkK5PWy6yzLeArIcf8,28427
58
+ letta/llm_api/google_vertex_client.py,sha256=Cu1AVKxLCSvip1h8lleJ8voatSH2d6XnGmQjdKqmVoo,9648
59
+ letta/llm_api/helpers.py,sha256=sLYv30UnKBRVPuhU_KDXfKFdbkUONiDAyVEwGr86l3A,16780
60
+ letta/llm_api/llm_api_tools.py,sha256=g6Rm7srSNzJKDEUDIKA-dJ9W9GLynLOSgt_2lHj2Lqg,28426
61
+ letta/llm_api/llm_client.py,sha256=u7nnmtSgwhqNDiaNmv6i0G-I-WgwLH35uxJnXM0C33o,1767
62
+ letta/llm_api/llm_client_base.py,sha256=754JOj33J2kowxSYdP7hkQ_dx47zZ5qCQXy2w5NiywM,4881
58
63
  letta/llm_api/mistral.py,sha256=fHdfD9ug-rQIk2qn8tRKay1U6w9maF11ryhKi91FfXM,1593
59
64
  letta/llm_api/openai.py,sha256=UnCh2NYYJWpwUai6P2enFop3K_5JS4-VHuoFoBx7yRs,22398
60
65
  letta/local_llm/README.md,sha256=hFJyw5B0TU2jrh9nb0zGZMgdH-Ei1dSRfhvPQG_NSoU,168
@@ -88,31 +93,32 @@ letta/local_llm/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
88
93
  letta/local_llm/settings/deterministic_mirostat.py,sha256=kgRikcxYHfIbPFydHW6W7IO9jmp6NeA7JNAhnI3DPsc,1221
89
94
  letta/local_llm/settings/settings.py,sha256=QBuuOLl3OFxN6koBGxFuXSllf4EryQuJCHB5_0IttFU,2962
90
95
  letta/local_llm/settings/simple.py,sha256=HAO2jBJ_hJCEsXWIJcD0sckR0tI0zs3x2CPdf6ORQLs,719
91
- letta/local_llm/utils.py,sha256=gZar5vm-fqlJCh88pY3Tri9TFuK3ZN8HDNn7IFt20aU,13484
96
+ letta/local_llm/utils.py,sha256=QOOBg8VQdFzwEvn6MPbV85LPUQTTLTqVXhELZqtISXA,14080
92
97
  letta/local_llm/vllm/api.py,sha256=2kAGZjc_GH9ILJnVRq-45yfsfKELVfbC9VEl_cIC6vg,2590
93
98
  letta/local_llm/webui/api.py,sha256=kkxncdCFq1vjgvaHOoQ__j7rcDPgC1F64KcEm94Y6Rs,2639
94
99
  letta/local_llm/webui/legacy_api.py,sha256=k3H3y4qp2Fs-XmP24iSIEyvq6wjWFWBzklY3-wRAJNI,2335
95
100
  letta/local_llm/webui/legacy_settings.py,sha256=BLmd3TSx5StnY3ibjwaxYATPt_Lvq-o1rlcc_-Q1JcU,538
96
101
  letta/local_llm/webui/settings.py,sha256=gmLHfiOl1u4JmlAZU2d2O8YKF9lafdakyjwR_ftVPh8,552
97
- letta/log.py,sha256=p8tJmoPNBg6CJ5PBWjzad1kkQLBjftHvoBUMYXlyL8k,2213
102
+ letta/log.py,sha256=FbFwU9KEX7k0FBYhPl7fJ6uQ3NO3-ZbsnM2OpcTFXjo,2217
98
103
  letta/main.py,sha256=_agyaYPJq70OL0goNwO34zENL2KupnTgqlg-HVcNaTY,15379
99
- letta/memory.py,sha256=Jqh6Uz4mMAC1aAO2sH8zw4TuMWZr1OI-ZgkSUDh2TQI,3353
104
+ letta/memory.py,sha256=26cwXeUxlB_UfTMPjKyXs19foNxMe-gecEggOiR5Eiw,3364
100
105
  letta/offline_memory_agent.py,sha256=P_rm6GmKAH6lg7-njuv7dK29f7v5-tAQy-rMOwcPfwk,7499
101
106
  letta/openai_backcompat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
107
  letta/openai_backcompat/openai_object.py,sha256=GSzeCTwLpLD2fH4X8wVqzwdmoTjKK2I4PnriBY453lc,13505
103
108
  letta/orm/__all__.py,sha256=2gh2MZTkA3Hw67VWVKK3JIStJOqTeLdpCvYSVYNeEDA,692
104
- letta/orm/__init__.py,sha256=I_6UgqHfv5H4OyB48-acXxtY2u0PGdV4Z_Y1UeXr5YQ,939
109
+ letta/orm/__init__.py,sha256=QNrBCBcz4Z-xVObkWngCkJTp7LWJfIZQ1IMWUylFPyg,996
105
110
  letta/orm/agent.py,sha256=LYMAfDfUlLTpOu5hw8mrQ1AKOOkT39BvLMp12IdGrik,7742
106
111
  letta/orm/agents_tags.py,sha256=dYSnHz4IWBjyOiQ4RJomX3P0QN76JTlEZEw5eJM6Emg,925
107
112
  letta/orm/base.py,sha256=VjvxF9TwKF9Trf8BJkDgf7D6KrWWopOkUiF18J3IElk,3071
108
- letta/orm/block.py,sha256=EjH8lXexHtFIHJ8G-RjNo2oAH834x0Hbn4CER9S4U74,3880
113
+ letta/orm/block.py,sha256=Ci_CO54CDb4vpZkrRircmYjc-Y00Zhs9T14s3Bf_dF4,4134
109
114
  letta/orm/blocks_agents.py,sha256=W0dykl9OchAofSuAYZD5zNmhyMabPr9LTJrz-I3A0m4,983
110
115
  letta/orm/custom_columns.py,sha256=UW_qhIJGYlPn7TMMeTILYKXibdZ2CKVlhXDX5UmnNxA,2567
111
- letta/orm/enums.py,sha256=g4qbX_6a1NQpCt3rScAySbwSbkwqGmnOEaNbkMmCWF4,474
116
+ letta/orm/enums.py,sha256=gUmlsCN04RiwtbN1FysjgqDqbR7WiU546iNPjCEzTNk,610
112
117
  letta/orm/errors.py,sha256=Se0Guz-gqi-D36NUWSh7AP9zTVCSph9KgZh_trwng4o,734
113
118
  letta/orm/file.py,sha256=7_p7LxityP3NQZVURQYG0kgcZhEkVuMN0Fj4h9YOe1w,1780
114
119
  letta/orm/identities_agents.py,sha256=cfIQ6UsbwmjxtGVmFt1ArK2zbKr9k6VWoELuISDnLSc,502
115
- letta/orm/identity.py,sha256=jGg7A2hjlH9qWGOJDy7zsFugdshfiPyNRLDK68wNm70,2475
120
+ letta/orm/identities_blocks.py,sha256=oS0DnDXKzcWtlH2dDFREkNF1JHJ3Kyg8fN9GI8DKtcg,501
121
+ letta/orm/identity.py,sha256=DQlyqQtszv8AlP0HYftBbewoHbCr-_vQllzEvNuGrxA,2867
116
122
  letta/orm/job.py,sha256=G2P-xUpTapD4lhU2FwMZET1b5QR4ju9WOB3uiTKD_mw,2157
117
123
  letta/orm/job_messages.py,sha256=SgwaYPYwwAC3dBtl9Xye_TWUl9H_-m95S95TTcfPyOg,1245
118
124
  letta/orm/message.py,sha256=Q3Tx8MqImgmyxiGnfxrgkosZdhWeOiHP9XUOM4Y9KFk,3085
@@ -123,9 +129,9 @@ letta/orm/provider.py,sha256=-qA9tvKTZgaM4D7CoDZZiA7zTgjaaWDV4jZvifQv_MM,805
123
129
  letta/orm/sandbox_config.py,sha256=DyOy_1_zCMlp13elCqPcuuA6OwUove6mrjhcpROTg50,4150
124
130
  letta/orm/source.py,sha256=z89VZUHV9K8Ew9JCYoZqUeRb1WEUKmrn0MMFkppaphE,2117
125
131
  letta/orm/sources_agents.py,sha256=Ik_PokCBrXRd9wXWomeNeb8EtLUwjb9VMZ8LWXqpK5A,473
126
- letta/orm/sqlalchemy_base.py,sha256=8037lD9w5vY7rXhqmXg1mG78UywdHczef7-XGhW7b1U,22511
132
+ letta/orm/sqlalchemy_base.py,sha256=IKkMSQ5LLGqP6gNL_Q4pdsYlOd5XM_8YM0vh606Gyc4,22501
127
133
  letta/orm/sqlite_functions.py,sha256=JCScKiRlYCKxy9hChQ8wsk4GMKknZE24MunnG3fM1Gw,4255
128
- letta/orm/step.py,sha256=Y5hJa7KFJmfIGB21kYBYtooH6esfqUsKK-bh3ZTpHQk,3094
134
+ letta/orm/step.py,sha256=fjm7fLtYLCtFM6Mj6e2boP6P7dHSFG24Nem85VfVqHg,3216
129
135
  letta/orm/tool.py,sha256=x58lmVG5IhXTVt82CnoN-ExuObnQCbeSMx_yOhUMmA4,2515
130
136
  letta/orm/tools_agents.py,sha256=r6t-V21w2_mG8n38zuUb5jOi_3hRxsjgezsLA4sg0m4,626
131
137
  letta/orm/user.py,sha256=rK5N5ViDxmesZMqVVHB7FcQNpcSoM-hB42MyI6q3MnI,1004
@@ -158,23 +164,23 @@ letta/prompts/system/memgpt_offline_memory.txt,sha256=rWEJeF-6aiinjkJM9hgLUYCmlE
158
164
  letta/prompts/system/memgpt_offline_memory_chat.txt,sha256=ituh7gDuio7nC2UKFB7GpBq6crxb8bYedQfJ0ADoPgg,3949
159
165
  letta/pytest.ini,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
166
  letta/schemas/agent.py,sha256=4pTHrTV_FYyJuujtSglRsJQ2ouF0FRYWNmvObbLeL2g,14123
161
- letta/schemas/block.py,sha256=FYYmRWjH4d4QHMUx_nmIXjv_qJna_l-Ip_4i51wDBPA,5942
167
+ letta/schemas/block.py,sha256=rMWflyj982qW86dQK-9saXBHKaLCu3aUG2gQTckG3Ik,4984
162
168
  letta/schemas/embedding_config.py,sha256=ufboqW9ctSBJdhwzJRbrGtTzOTwSKfT0LY0mowpr6fs,3398
163
169
  letta/schemas/embedding_config_overrides.py,sha256=lkTa4y-EQ2RnaEKtKDM0sEAk7EwNa67REw8DGNNtGQY,84
164
170
  letta/schemas/enums.py,sha256=jfuke35XP_AKfHHBnH1rx1wYjUDWqgDsKnRxdrCpTKA,1213
165
171
  letta/schemas/environment_variables.py,sha256=VRtzOjdeQdHcSHXisk7oJUQlheruxhSWNS0xqlfGzbs,2429
166
172
  letta/schemas/file.py,sha256=ChN2CWzLI2TT9WLItcfElEH0E8b7kzPylF2OQBr6Beg,1550
167
173
  letta/schemas/health.py,sha256=zT6mYovvD17iJRuu2rcaQQzbEEYrkwvAE9TB7iU824c,139
168
- letta/schemas/identity.py,sha256=028DseEyCErZ_fifQdFp4ON5QKlDWp-6hrrlekqko_g,2883
174
+ letta/schemas/identity.py,sha256=9emyusE65zFSW7IDKDMsGzMwqDbadF0eKjvYNDtpS1s,3220
169
175
  letta/schemas/job.py,sha256=MX9EiLDDIeHm3q52ImOjp7UzXEdYTXAWWobRCAxwV0w,2225
170
176
  letta/schemas/letta_base.py,sha256=DuMqiNFmYwTAsXUHYdX--EWgtFUVzph5ptLZvu7aguI,3988
171
- letta/schemas/letta_message.py,sha256=QHzIEwnEJEkE02biCwyQo5IvL2fVq_whBRQD3vPYO48,9837
177
+ letta/schemas/letta_message.py,sha256=3AXGiSwXf9m3Ta2A0Z8BlCq80n4fRC3c66V7LkiDUHw,10648
172
178
  letta/schemas/letta_request.py,sha256=dzy3kwb5j2QLaSV0sDlwISEMt2xxH3IiK-vR9xJV65k,1123
173
179
  letta/schemas/letta_response.py,sha256=pq-SxXQy5yZo1-DiAwV2mMURlUvz1Uu7HHR_tB1hMho,7139
174
180
  letta/schemas/llm_config.py,sha256=bqq4LGE9layPcnnkzd_8d2SB8o1x8XdDzfd2ZkYQwcY,5611
175
181
  letta/schemas/llm_config_overrides.py,sha256=-oRglCTcajF6UAK3RAa0FLWVuKODPI1v403fDIWMAtA,1815
176
182
  letta/schemas/memory.py,sha256=GOYDfPKzbWftUWO9Hv4KW7xAi1EIQmC8zpP7qvEkVHw,10245
177
- letta/schemas/message.py,sha256=dJHjvF8K-tHZMXvvPu51AKeo48L6YSo_HulORqFLSpM,38840
183
+ letta/schemas/message.py,sha256=73F0UwRpi1DkQi_MOTLYctIgIUkxoeMqLaA-EiKdqX4,39544
178
184
  letta/schemas/openai/chat_completion_request.py,sha256=3tALmbBV2pv1CcqzNLBxxIPOQ8Z85woucT7FN0fuDic,3402
179
185
  letta/schemas/openai/chat_completion_response.py,sha256=koEb_NTiz5YsAAX81Z0cSqSFX4a6MdD2lhoXtxF_rw4,4100
180
186
  letta/schemas/openai/chat_completions.py,sha256=l0e9sT9boTD5VBU5YtJ0s7qUtCfFGB2K-gQLeEZ2LHU,3599
@@ -186,13 +192,13 @@ letta/schemas/providers.py,sha256=2Ijzjj1gPETiFyl8yb4ZbwaTljw5WSCdGayAgCsBeYE,43
186
192
  letta/schemas/run.py,sha256=SRqPRziINIiPunjOhE_NlbnQYgxTvqmbauni_yfBQRA,2085
187
193
  letta/schemas/sandbox_config.py,sha256=SZCo3FSMz-DIBMKGu0atT4tsVFXGsqMFPaJnjrxpkX4,5993
188
194
  letta/schemas/source.py,sha256=-BQVolcXA2ziCu2ztR6cbTdGUc8G7vGJy7rvpdf1hpg,2880
189
- letta/schemas/step.py,sha256=8rfOW4gbEIB7yp05pqmZn4P3U3XrvXeUd9lPg9yh6x8,2122
190
- letta/schemas/tool.py,sha256=3K3csZrk0m9e1lg05tNrO5WCTBiCT9lS-WCVL8jM7mk,11201
195
+ letta/schemas/step.py,sha256=WkcVnruUUOWLKwiWPn2Gfal4EQZPNLqlsd9859xhgsw,2224
196
+ letta/schemas/tool.py,sha256=A6HS_nHoxAOVyv4u6NMxzMNsp0PG40kY2uDS8FA06M4,12284
191
197
  letta/schemas/tool_rule.py,sha256=2YQZba4fXS3u4j8pIk7BDujfq8rnxSVMwJSyaVgApH4,2149
192
198
  letta/schemas/usage.py,sha256=8oYRH-JX0PfjIu2zkT5Uu3UWQ7Unnz_uHiO8hRGI4m0,912
193
199
  letta/schemas/user.py,sha256=V32Tgl6oqB3KznkxUz12y7agkQicjzW7VocSpj78i6Q,1526
194
200
  letta/serialize_schemas/__init__.py,sha256=mflGEZvM3NuMG9Q6dccEdVk73BUHoX-v7hmfk025Gmc,64
195
- letta/serialize_schemas/agent.py,sha256=AyQJYjQ5Af8GpccpjD32dRwAScJ__Uv5R0-Sx3KIj0k,3149
201
+ letta/serialize_schemas/agent.py,sha256=BqtIBiMbGnupr6CGCF4Z4wKtkT90ACnxLN0qcRgkieM,3281
196
202
  letta/serialize_schemas/agent_environment_variable.py,sha256=IDcivP-xB1j6Fn0onSM4T1l4CSlXhOLWNmKHG2psOoU,641
197
203
  letta/serialize_schemas/base.py,sha256=X5cs1U4P0Vjem4SKNCYBiSAIboThJdM2Oyphu_Nl9Ag,2040
198
204
  letta/serialize_schemas/block.py,sha256=BeZ2FZO59IWUHiPMSNKlZMi9dH9Gbys0rJpsoCFBjdg,420
@@ -205,19 +211,19 @@ letta/server/constants.py,sha256=yAdGbLkzlOU_dLTx0lKDmAnj0ZgRXCEaIcPJWO69eaE,92
205
211
  letta/server/db.py,sha256=cA1MHpMCTTC1MX7VWppJ-cKq1XW93Vws_vTV0-bKmTE,3642
206
212
  letta/server/generate_openapi_schema.sh,sha256=0OtBhkC1g6CobVmNEd_m2B6sTdppjbJLXaM95icejvE,371
207
213
  letta/server/rest_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
- letta/server/rest_api/app.py,sha256=mQJf3KrthYrBTnzoomGIl3aLAhYVMPxnGaZJuoejUsM,12306
214
+ letta/server/rest_api/app.py,sha256=_rJ6XzvmACjaZwtuGbTLPcqd40pa9FIUyAUHPJCTvow,12723
209
215
  letta/server/rest_api/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
216
  letta/server/rest_api/auth/index.py,sha256=fQBGyVylGSRfEMLQ17cZzrHd5Y1xiVylvPqH5Rl-lXQ,1378
211
217
  letta/server/rest_api/auth_token.py,sha256=725EFEIiNj4dh70hrSd94UysmFD8vcJLrTRfNHkzxDo,774
212
- letta/server/rest_api/chat_completions_interface.py,sha256=htY1v3eyP6OmoDkBYog2fPZX_2cHsNKkxUAAAvuUbiE,10862
213
- letta/server/rest_api/interface.py,sha256=0FHLtFKHYyjLIpKUmA87cbd9A1m_yBIh3uB5Jl6Nvro,58262
218
+ letta/server/rest_api/chat_completions_interface.py,sha256=W2Zxm-RuahS5Ll8OzwUJoPC5fGliVGc3yN_icybI3G4,10953
219
+ letta/server/rest_api/interface.py,sha256=4wwQmmM1Fqiy4ll4YlH_hv0Wks0skfh-M06HZbo01hM,60776
214
220
  letta/server/rest_api/optimistic_json_parser.py,sha256=1z4d9unmxMb0ou7owJ62uUQoNjNYf21FmaNdg0ZcqUU,6567
215
221
  letta/server/rest_api/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
216
222
  letta/server/rest_api/routers/openai/chat_completions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
217
- letta/server/rest_api/routers/openai/chat_completions/chat_completions.py,sha256=yJo_oiv75QsD324lC0uR2B9su9WG1FxabQhAJKS--6s,5530
223
+ letta/server/rest_api/routers/openai/chat_completions/chat_completions.py,sha256=OgjWs4zJaIi5Ps67iCTeOLmLXcW0S5Xccd-TcNa9obQ,5321
218
224
  letta/server/rest_api/routers/v1/__init__.py,sha256=Zi2th-okqT_RWAjB8MYGHX8CpHt1OSRyO5V8SJEp6UU,1361
219
- letta/server/rest_api/routers/v1/agents.py,sha256=eA_gHr2fj2gpRaimwla9fNI1IXzhkgMQlxx37KQFIoM,29335
220
- letta/server/rest_api/routers/v1/blocks.py,sha256=0j7JX2BQzk31RyhvPZeEb-zh9ImXsVU4_8y5XMiR_WA,3900
225
+ letta/server/rest_api/routers/v1/agents.py,sha256=ViQuKsVtqYciLXHkQkC03gz5TtF2CORZg4d6fhH9D0M,29458
226
+ letta/server/rest_api/routers/v1/blocks.py,sha256=OqX-YHC8e-yi-IoZ8OQJQjZ4QIjJ4xcio0tUlRhv8H0,4168
221
227
  letta/server/rest_api/routers/v1/health.py,sha256=MoOjkydhGcJXTiuJrKIB0etVXiRMdTa51S8RQ8-50DQ,399
222
228
  letta/server/rest_api/routers/v1/identities.py,sha256=gRTcOXxbpiTzQzzVA_I1Sc9aUSKhW6YcQcJb__HxOX4,5957
223
229
  letta/server/rest_api/routers/v1/jobs.py,sha256=4oeJfI2odNGubU_g7WSORJhn_usFsbRaD-qm86rve1E,2746
@@ -227,14 +233,14 @@ letta/server/rest_api/routers/v1/providers.py,sha256=qyZsNTXgLVsoLZoCVY4qaqiG34z
227
233
  letta/server/rest_api/routers/v1/runs.py,sha256=-2_YA2nuxcLqiPjG9CPHeZbyrtlNQZnAsaNohGn5fMg,8278
228
234
  letta/server/rest_api/routers/v1/sandbox_configs.py,sha256=9hqnnMwJ3wCwO-Bezu3Xl8i3TDSIuInw3gSeHaKUXfE,8526
229
235
  letta/server/rest_api/routers/v1/sources.py,sha256=rpQhaRHyzGUK43LX623L8BBLqL85HJ6fUYPMvI4k3kA,8434
230
- letta/server/rest_api/routers/v1/steps.py,sha256=IpCQuxpS34-4Qpgdv0FQJO-SffkFkW-OaRjWHquB_1w,3136
236
+ letta/server/rest_api/routers/v1/steps.py,sha256=DVVwaxLNbNAgWpr2oQkrNjdS-wi0bP8kVJZUO-hiaf8,3275
231
237
  letta/server/rest_api/routers/v1/tags.py,sha256=coydgvL6-9cuG2Hy5Ea7QY3inhTHlsf69w0tcZenBus,880
232
- letta/server/rest_api/routers/v1/tools.py,sha256=B9zRyc2PeHdPBA6hvHqpTrVWsjgd1uBkyG1J_5E8Rgw,13207
238
+ letta/server/rest_api/routers/v1/tools.py,sha256=1nBJdYijMVf1RYHgVw01QPnAVsFI5LEYqC5z69AE6YQ,16060
233
239
  letta/server/rest_api/routers/v1/users.py,sha256=G5DBHSkPfBgVHN2Wkm-rVYiLQAudwQczIq2Z3YLdbVo,2277
234
- letta/server/rest_api/routers/v1/voice.py,sha256=0Yk-2c4Ec_viqMLMAn_9kZPAYeUgLQoikpocLfK_qKE,2623
240
+ letta/server/rest_api/routers/v1/voice.py,sha256=7J0L-Nkz65m0PXcpQI2ATMIZzumDDSUzgtIus7d-tv8,2461
235
241
  letta/server/rest_api/static_files.py,sha256=NG8sN4Z5EJ8JVQdj19tkFa9iQ1kBPTab9f_CUxd_u4Q,3143
236
242
  letta/server/rest_api/utils.py,sha256=TlVzgtsg0jmaXzvGubtzOE9WSyvRe6_DFoIBK9EDYt8,13820
237
- letta/server/server.py,sha256=LrIVbKJeEhSTbbiUQdg0gGvpXveY6ITJINWZ9gqehEA,58118
243
+ letta/server/server.py,sha256=CaG1oIS_uAI6MwuNDNZA_l7mfWyDn9ouITzmOLTi0HU,62929
238
244
  letta/server/startup.sh,sha256=eo7zz4HGu5ryOshfbOSGbXpUDDyoaP7fTq4z8269uaw,1939
239
245
  letta/server/static_files/assets/index-048c9598.js,sha256=mR16XppvselwKCcNgONs4L7kZEVa4OEERm4lNZYtLSk,146819
240
246
  letta/server/static_files/assets/index-0e31b727.css,sha256=SBbja96uiQVLDhDOroHgM6NSl7tS4lpJRCREgSS_hA8,7672
@@ -248,34 +254,34 @@ letta/server/ws_api/interface.py,sha256=TWl9vkcMCnLsUtgsuENZ-ku2oMDA-OUTzLh_yNRo
248
254
  letta/server/ws_api/protocol.py,sha256=5mDgpfNZn_kNwHnpt5Dsuw8gdNH298sgxTGed3etzYg,1836
249
255
  letta/server/ws_api/server.py,sha256=cBSzf-V4zT1bL_0i54OTI3cMXhTIIxqjSRF8pYjk7fg,5835
250
256
  letta/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
251
- letta/services/agent_manager.py,sha256=ATqXxVKd-yQyD9rIaUd1JZVn-yBES-7-J4bngiUtak8,57903
252
- letta/services/block_manager.py,sha256=PkbiO59VimLyK6PolWR5O29uHxksCH6pP6K4Vkov3NA,5573
253
- letta/services/helpers/agent_manager_helper.py,sha256=uvQsmk2ZCAvG4AuI9r3Cs3IDe3Ra8X-qP3B3RbBVMtg,11179
257
+ letta/services/agent_manager.py,sha256=Lb3dr3n-La2-yKsQQPwQDjZIgiQetjaqTsu3QFYusD4,60233
258
+ letta/services/block_manager.py,sha256=vfFs7T00WZWKfyKn50QjK5N1T7b2xjuxou7ffjGVf0Y,5838
259
+ letta/services/helpers/agent_manager_helper.py,sha256=0xpFUQlLoben1_1sARDFSULOk2_ueWiCtGvl1UMJqTg,11643
254
260
  letta/services/helpers/tool_execution_helper.py,sha256=lLoebs1kZKjw62y1PxHbIDkHq_heJN2ZT0gKje-R8oo,6941
255
- letta/services/identity_manager.py,sha256=o1XMd5NG2gZ_YWrPOmisfFN0i-2ohoq8n1GM8F49Lf4,7144
261
+ letta/services/identity_manager.py,sha256=DJzvq5TqzgmVdnH401YAJUycXTE0tNN70KRZTwu6ko8,8505
256
262
  letta/services/job_manager.py,sha256=ejcv_nMljByimiWJjvj7aqUFQktL1kK-vx_cra2L2cs,16317
257
- letta/services/message_manager.py,sha256=rRd3eMpW_SWbAU_dHAzsX6om9E2yfXno4FwmUEOnZCk,10751
263
+ letta/services/message_manager.py,sha256=ZcHn3xQC86LY0_6mecux9WyxPQqMDAhMRjXIjAFLVdc,13079
258
264
  letta/services/organization_manager.py,sha256=dhQ3cFPXWNYLfMjdahr2HsOAMJ1JtCEWj1G8Nei5MQc,3388
259
265
  letta/services/passage_manager.py,sha256=mwShFO_xRaTi82fvANb_ngO0TmGaZPA9FPu8KuZ6Gd8,8643
260
266
  letta/services/per_agent_lock_manager.py,sha256=porM0cKKANQ1FvcGXOO_qM7ARk5Fgi1HVEAhXsAg9-4,546
261
267
  letta/services/provider_manager.py,sha256=QOKMSZOM6eAWa2-nANWQc1frKBh8N3gqDq0V87fnSuc,3748
262
268
  letta/services/sandbox_config_manager.py,sha256=ATgZNWNpkdIQDUPy4ABsguHQba2PZf51-c4Ji60MzLE,13361
263
269
  letta/services/source_manager.py,sha256=SE24AiPPhpvZMGDD047H3_ZDD7OM4zHbTW1JXjPEv7U,7672
264
- letta/services/step_manager.py,sha256=5wAxv3OzoYwW9aDcg26hC3foQqOl5qA0tno3vg_Ai5U,5107
270
+ letta/services/step_manager.py,sha256=B64iYn6Dt9yRKsSJ5vLxWQR2t-apvPLfUZyzrUsJTpI,5335
265
271
  letta/services/summarizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
266
272
  letta/services/summarizer/enums.py,sha256=szzPX2OBRRJEZsBTGYQThrNz02ELFqhuLwvOR7ozi7A,208
267
- letta/services/summarizer/summarizer.py,sha256=u3WNTPAK0hSyUS8Jb6NDz-BWIZ7bEQj9RBW6AfP4BAc,4746
273
+ letta/services/summarizer/summarizer.py,sha256=qPcR7VsHsgUsUtxmKx_73l3XdDhFvDzZ8VeIs4w3NBc,4757
268
274
  letta/services/tool_execution_sandbox.py,sha256=6AB3rFS34PzoyE9dxtUmuaUUWvKrwdE083NuBRa1eC0,22969
269
- letta/services/tool_manager.py,sha256=HJIDtXmBjoaAfHtuVDBi-j-L4akHelqjkPkeWlLfQo8,9555
275
+ letta/services/tool_manager.py,sha256=rXOdB2quTWE9EGjkg9Q4EY6-hAwX2R9gGBCXFs8hR4w,9862
270
276
  letta/services/user_manager.py,sha256=ScHbdJK9kNF8QXjsd3ZWGEL87n_Uyp3YwfKetOJmpHs,4304
271
- letta/settings.py,sha256=Z7Zlwk8bmk4RFl_8KMQMQIk_g8k6_ysDA2KvS0n8bjk,6840
277
+ letta/settings.py,sha256=wBgZgIFQaoUOyeTRl-vD61gY2M1Q89FHP0X1IS0yz50,6885
272
278
  letta/streaming_interface.py,sha256=1vuAckIxo1p1UsXtDzE8LTUve5RoTZRdXUe-WBIYDWU,15818
273
279
  letta/streaming_utils.py,sha256=jLqFTVhUL76FeOuYk8TaRQHmPTf3HSRc2EoJwxJNK6U,11946
274
280
  letta/system.py,sha256=dnOrS2FlRMwijQnOvfrky0Lg8wEw-FUq2zzfAJOUSKA,8477
275
281
  letta/tracing.py,sha256=h_-c2lIKHmA7yCLOvgaHijMabmRC__FAl2rZtVKufUM,8017
276
282
  letta/utils.py,sha256=AdHrQ2OQ3V4XhJ1LtYwbLUO71j2IJY37cIUxXPgaaRY,32125
277
- letta_nightly-0.6.37.dev20250311104150.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
278
- letta_nightly-0.6.37.dev20250311104150.dist-info/METADATA,sha256=5kQNnpGTB11YpdDwyd3n0_WUCxZEg9UdTxDh2WUR4bs,22600
279
- letta_nightly-0.6.37.dev20250311104150.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
280
- letta_nightly-0.6.37.dev20250311104150.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
281
- letta_nightly-0.6.37.dev20250311104150.dist-info/RECORD,,
283
+ letta_nightly-0.6.39.dev20250313104142.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
284
+ letta_nightly-0.6.39.dev20250313104142.dist-info/METADATA,sha256=eZHLP3nnMg2yRtFa_8YOolT1efPgbAnEqfTH_oIWQ_Q,22928
285
+ letta_nightly-0.6.39.dev20250313104142.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
286
+ letta_nightly-0.6.39.dev20250313104142.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
287
+ letta_nightly-0.6.39.dev20250313104142.dist-info/RECORD,,