letta-nightly 0.6.4.dev20241213193437__py3-none-any.whl → 0.6.4.dev20241214104034__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 +54 -45
- letta/chat_only_agent.py +6 -8
- letta/cli/cli.py +2 -10
- letta/client/client.py +121 -138
- letta/config.py +0 -161
- letta/main.py +3 -8
- letta/memory.py +3 -14
- letta/o1_agent.py +1 -5
- letta/offline_memory_agent.py +2 -6
- letta/orm/__init__.py +2 -0
- letta/orm/agent.py +109 -0
- letta/orm/agents_tags.py +10 -18
- letta/orm/block.py +29 -4
- letta/orm/blocks_agents.py +5 -11
- letta/orm/custom_columns.py +152 -0
- letta/orm/message.py +3 -38
- letta/orm/organization.py +2 -7
- letta/orm/passage.py +10 -32
- letta/orm/source.py +5 -25
- letta/orm/sources_agents.py +13 -0
- letta/orm/sqlalchemy_base.py +54 -30
- letta/orm/tool.py +1 -19
- letta/orm/tools_agents.py +7 -24
- letta/orm/user.py +3 -4
- letta/schemas/agent.py +48 -65
- letta/schemas/memory.py +2 -1
- letta/schemas/sandbox_config.py +12 -1
- letta/server/rest_api/app.py +0 -5
- letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +1 -1
- letta/server/rest_api/routers/v1/agents.py +99 -78
- letta/server/rest_api/routers/v1/blocks.py +22 -25
- letta/server/rest_api/routers/v1/jobs.py +4 -4
- letta/server/rest_api/routers/v1/sandbox_configs.py +10 -10
- letta/server/rest_api/routers/v1/sources.py +12 -12
- letta/server/rest_api/routers/v1/tools.py +35 -15
- letta/server/rest_api/routers/v1/users.py +0 -46
- letta/server/server.py +172 -716
- letta/server/ws_api/server.py +0 -5
- letta/services/agent_manager.py +405 -0
- letta/services/block_manager.py +13 -21
- letta/services/helpers/agent_manager_helper.py +90 -0
- letta/services/organization_manager.py +0 -1
- letta/services/passage_manager.py +62 -62
- letta/services/sandbox_config_manager.py +3 -3
- letta/services/source_manager.py +22 -1
- letta/services/user_manager.py +11 -6
- letta/utils.py +2 -2
- {letta_nightly-0.6.4.dev20241213193437.dist-info → letta_nightly-0.6.4.dev20241214104034.dist-info}/METADATA +1 -1
- {letta_nightly-0.6.4.dev20241213193437.dist-info → letta_nightly-0.6.4.dev20241214104034.dist-info}/RECORD +53 -57
- letta/metadata.py +0 -407
- letta/schemas/agents_tags.py +0 -33
- letta/schemas/api_key.py +0 -21
- letta/schemas/blocks_agents.py +0 -32
- letta/schemas/tools_agents.py +0 -32
- letta/server/rest_api/routers/openai/assistants/threads.py +0 -338
- letta/services/agents_tags_manager.py +0 -64
- letta/services/blocks_agents_manager.py +0 -106
- letta/services/tools_agents_manager.py +0 -94
- {letta_nightly-0.6.4.dev20241213193437.dist-info → letta_nightly-0.6.4.dev20241214104034.dist-info}/LICENSE +0 -0
- {letta_nightly-0.6.4.dev20241213193437.dist-info → letta_nightly-0.6.4.dev20241214104034.dist-info}/WHEEL +0 -0
- {letta_nightly-0.6.4.dev20241213193437.dist-info → letta_nightly-0.6.4.dev20241214104034.dist-info}/entry_points.txt +0 -0
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
from typing import List, Optional, Dict, Tuple
|
|
2
|
-
from letta.constants import MAX_EMBEDDING_DIM
|
|
3
1
|
from datetime import datetime
|
|
4
|
-
import
|
|
2
|
+
from typing import List, Optional
|
|
5
3
|
|
|
6
|
-
|
|
7
|
-
from letta.utils import enforce_types
|
|
4
|
+
import numpy as np
|
|
8
5
|
|
|
6
|
+
from letta.constants import MAX_EMBEDDING_DIM
|
|
9
7
|
from letta.embeddings import embedding_model, parse_and_chunk_text
|
|
10
|
-
from letta.
|
|
11
|
-
|
|
8
|
+
from letta.orm.errors import NoResultFound
|
|
12
9
|
from letta.orm.passage import Passage as PassageModel
|
|
13
|
-
from letta.orm.sqlalchemy_base import AccessType
|
|
14
10
|
from letta.schemas.agent import AgentState
|
|
11
|
+
from letta.schemas.embedding_config import EmbeddingConfig
|
|
15
12
|
from letta.schemas.passage import Passage as PydanticPassage
|
|
16
13
|
from letta.schemas.user import User as PydanticUser
|
|
14
|
+
from letta.utils import enforce_types
|
|
15
|
+
|
|
17
16
|
|
|
18
17
|
class PassageManager:
|
|
19
18
|
"""Manager class to handle business logic related to Passages."""
|
|
20
19
|
|
|
21
20
|
def __init__(self):
|
|
22
21
|
from letta.server.server import db_context
|
|
22
|
+
|
|
23
23
|
self.session_maker = db_context
|
|
24
24
|
|
|
25
25
|
@enforce_types
|
|
@@ -43,20 +43,20 @@ class PassageManager:
|
|
|
43
43
|
return [self.create_passage(p, actor) for p in passages]
|
|
44
44
|
|
|
45
45
|
@enforce_types
|
|
46
|
-
def insert_passage(
|
|
46
|
+
def insert_passage(
|
|
47
|
+
self,
|
|
47
48
|
agent_state: AgentState,
|
|
48
49
|
agent_id: str,
|
|
49
|
-
text: str,
|
|
50
|
-
actor: PydanticUser,
|
|
51
|
-
return_ids: bool = False
|
|
50
|
+
text: str,
|
|
51
|
+
actor: PydanticUser,
|
|
52
52
|
) -> List[PydanticPassage]:
|
|
53
|
-
"""
|
|
53
|
+
"""Insert passage(s) into archival memory"""
|
|
54
54
|
|
|
55
55
|
embedding_chunk_size = agent_state.embedding_config.embedding_chunk_size
|
|
56
56
|
embed_model = embedding_model(agent_state.embedding_config)
|
|
57
57
|
|
|
58
58
|
passages = []
|
|
59
|
-
|
|
59
|
+
|
|
60
60
|
try:
|
|
61
61
|
# breakup string into passages
|
|
62
62
|
for text in parse_and_chunk_text(text, embedding_chunk_size):
|
|
@@ -75,12 +75,12 @@ class PassageManager:
|
|
|
75
75
|
agent_id=agent_id,
|
|
76
76
|
text=text,
|
|
77
77
|
embedding=embedding,
|
|
78
|
-
embedding_config=agent_state.embedding_config
|
|
78
|
+
embedding_config=agent_state.embedding_config,
|
|
79
79
|
),
|
|
80
|
-
actor=actor
|
|
80
|
+
actor=actor,
|
|
81
81
|
)
|
|
82
82
|
passages.append(passage)
|
|
83
|
-
|
|
83
|
+
|
|
84
84
|
return passages
|
|
85
85
|
|
|
86
86
|
except Exception as e:
|
|
@@ -125,20 +125,21 @@ class PassageManager:
|
|
|
125
125
|
raise ValueError(f"Passage with id {passage_id} not found.")
|
|
126
126
|
|
|
127
127
|
@enforce_types
|
|
128
|
-
def list_passages(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
128
|
+
def list_passages(
|
|
129
|
+
self,
|
|
130
|
+
actor: PydanticUser,
|
|
131
|
+
agent_id: Optional[str] = None,
|
|
132
|
+
file_id: Optional[str] = None,
|
|
133
|
+
cursor: Optional[str] = None,
|
|
134
|
+
limit: Optional[int] = 50,
|
|
135
|
+
query_text: Optional[str] = None,
|
|
136
|
+
start_date: Optional[datetime] = None,
|
|
137
|
+
end_date: Optional[datetime] = None,
|
|
138
|
+
ascending: bool = True,
|
|
139
|
+
source_id: Optional[str] = None,
|
|
140
|
+
embed_query: bool = False,
|
|
141
|
+
embedding_config: Optional[EmbeddingConfig] = None,
|
|
142
|
+
) -> List[PydanticPassage]:
|
|
142
143
|
"""List passages with pagination."""
|
|
143
144
|
with self.session_maker() as session:
|
|
144
145
|
filters = {"organization_id": actor.organization_id}
|
|
@@ -148,7 +149,7 @@ class PassageManager:
|
|
|
148
149
|
filters["file_id"] = file_id
|
|
149
150
|
if source_id:
|
|
150
151
|
filters["source_id"] = source_id
|
|
151
|
-
|
|
152
|
+
|
|
152
153
|
embedded_text = None
|
|
153
154
|
if embed_query:
|
|
154
155
|
assert embedding_config is not None
|
|
@@ -161,7 +162,7 @@ class PassageManager:
|
|
|
161
162
|
embedded_text = np.pad(embedded_text, (0, MAX_EMBEDDING_DIM - embedded_text.shape[0]), mode="constant").tolist()
|
|
162
163
|
|
|
163
164
|
results = PassageModel.list(
|
|
164
|
-
db_session=session,
|
|
165
|
+
db_session=session,
|
|
165
166
|
cursor=cursor,
|
|
166
167
|
start_date=start_date,
|
|
167
168
|
end_date=end_date,
|
|
@@ -169,17 +170,12 @@ class PassageManager:
|
|
|
169
170
|
ascending=ascending,
|
|
170
171
|
query_text=query_text if not embedded_text else None,
|
|
171
172
|
query_embedding=embedded_text,
|
|
172
|
-
**filters
|
|
173
|
+
**filters,
|
|
173
174
|
)
|
|
174
175
|
return [p.to_pydantic() for p in results]
|
|
175
|
-
|
|
176
|
+
|
|
176
177
|
@enforce_types
|
|
177
|
-
def size(
|
|
178
|
-
self,
|
|
179
|
-
actor : PydanticUser,
|
|
180
|
-
agent_id : Optional[str] = None,
|
|
181
|
-
**kwargs
|
|
182
|
-
) -> int:
|
|
178
|
+
def size(self, actor: PydanticUser, agent_id: Optional[str] = None, **kwargs) -> int:
|
|
183
179
|
"""Get the total count of messages with optional filters.
|
|
184
180
|
|
|
185
181
|
Args:
|
|
@@ -189,28 +185,32 @@ class PassageManager:
|
|
|
189
185
|
with self.session_maker() as session:
|
|
190
186
|
return PassageModel.size(db_session=session, actor=actor, agent_id=agent_id, **kwargs)
|
|
191
187
|
|
|
192
|
-
def delete_passages(
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
188
|
+
def delete_passages(
|
|
189
|
+
self,
|
|
190
|
+
actor: PydanticUser,
|
|
191
|
+
agent_id: Optional[str] = None,
|
|
192
|
+
file_id: Optional[str] = None,
|
|
193
|
+
start_date: Optional[datetime] = None,
|
|
194
|
+
end_date: Optional[datetime] = None,
|
|
195
|
+
limit: Optional[int] = 50,
|
|
196
|
+
cursor: Optional[str] = None,
|
|
197
|
+
query_text: Optional[str] = None,
|
|
198
|
+
source_id: Optional[str] = None,
|
|
199
|
+
) -> bool:
|
|
200
|
+
|
|
204
201
|
passages = self.list_passages(
|
|
205
|
-
actor=actor,
|
|
206
|
-
agent_id=agent_id,
|
|
207
|
-
file_id=file_id,
|
|
208
|
-
cursor=cursor,
|
|
202
|
+
actor=actor,
|
|
203
|
+
agent_id=agent_id,
|
|
204
|
+
file_id=file_id,
|
|
205
|
+
cursor=cursor,
|
|
209
206
|
limit=limit,
|
|
210
|
-
start_date=start_date,
|
|
211
|
-
end_date=end_date,
|
|
212
|
-
query_text=query_text,
|
|
213
|
-
source_id=source_id
|
|
214
|
-
|
|
207
|
+
start_date=start_date,
|
|
208
|
+
end_date=end_date,
|
|
209
|
+
query_text=query_text,
|
|
210
|
+
source_id=source_id,
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
# TODO: This is very inefficient
|
|
214
|
+
# TODO: We should have a base `delete_all_matching_filters`-esque function
|
|
215
215
|
for passage in passages:
|
|
216
216
|
self.delete_passage_by_id(passage_id=passage.id, actor=actor)
|
|
@@ -5,7 +5,7 @@ from letta.log import get_logger
|
|
|
5
5
|
from letta.orm.errors import NoResultFound
|
|
6
6
|
from letta.orm.sandbox_config import SandboxConfig as SandboxConfigModel
|
|
7
7
|
from letta.orm.sandbox_config import SandboxEnvironmentVariable as SandboxEnvVarModel
|
|
8
|
-
from letta.schemas.sandbox_config import
|
|
8
|
+
from letta.schemas.sandbox_config import LocalSandboxConfig
|
|
9
9
|
from letta.schemas.sandbox_config import SandboxConfig as PydanticSandboxConfig
|
|
10
10
|
from letta.schemas.sandbox_config import SandboxConfigCreate, SandboxConfigUpdate
|
|
11
11
|
from letta.schemas.sandbox_config import SandboxEnvironmentVariable as PydanticEnvVar
|
|
@@ -27,7 +27,6 @@ class SandboxConfigManager:
|
|
|
27
27
|
from letta.server.server import db_context
|
|
28
28
|
|
|
29
29
|
self.session_maker = db_context
|
|
30
|
-
self.e2b_template_id = settings.e2b_sandbox_template_id
|
|
31
30
|
|
|
32
31
|
@enforce_types
|
|
33
32
|
def get_or_create_default_sandbox_config(self, sandbox_type: SandboxType, actor: PydanticUser) -> PydanticSandboxConfig:
|
|
@@ -37,8 +36,9 @@ class SandboxConfigManager:
|
|
|
37
36
|
|
|
38
37
|
# TODO: Add more sandbox types later
|
|
39
38
|
if sandbox_type == SandboxType.E2B:
|
|
40
|
-
default_config =
|
|
39
|
+
default_config = {} # Empty
|
|
41
40
|
else:
|
|
41
|
+
# TODO: May want to move this to environment variables v.s. persisting in database
|
|
42
42
|
default_local_sandbox_path = str(Path(__file__).parent / "tool_sandbox_env")
|
|
43
43
|
default_config = LocalSandboxConfig(sandbox_dir=default_local_sandbox_path).model_dump(exclude_none=True)
|
|
44
44
|
|
letta/services/source_manager.py
CHANGED
|
@@ -3,6 +3,7 @@ from typing import List, Optional
|
|
|
3
3
|
from letta.orm.errors import NoResultFound
|
|
4
4
|
from letta.orm.file import FileMetadata as FileMetadataModel
|
|
5
5
|
from letta.orm.source import Source as SourceModel
|
|
6
|
+
from letta.schemas.agent import AgentState as PydanticAgentState
|
|
6
7
|
from letta.schemas.file import FileMetadata as PydanticFileMetadata
|
|
7
8
|
from letta.schemas.source import Source as PydanticSource
|
|
8
9
|
from letta.schemas.source import SourceUpdate
|
|
@@ -60,7 +61,7 @@ class SourceManager:
|
|
|
60
61
|
"""Delete a source by its ID."""
|
|
61
62
|
with self.session_maker() as session:
|
|
62
63
|
source = SourceModel.read(db_session=session, identifier=source_id)
|
|
63
|
-
source.
|
|
64
|
+
source.hard_delete(db_session=session, actor=actor)
|
|
64
65
|
return source.to_pydantic()
|
|
65
66
|
|
|
66
67
|
@enforce_types
|
|
@@ -76,6 +77,26 @@ class SourceManager:
|
|
|
76
77
|
)
|
|
77
78
|
return [source.to_pydantic() for source in sources]
|
|
78
79
|
|
|
80
|
+
@enforce_types
|
|
81
|
+
def list_attached_agents(self, source_id: str, actor: Optional[PydanticUser] = None) -> List[PydanticAgentState]:
|
|
82
|
+
"""
|
|
83
|
+
Lists all agents that have the specified source attached.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
source_id: ID of the source to find attached agents for
|
|
87
|
+
actor: User performing the action (optional for now, following existing pattern)
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
List[PydanticAgentState]: List of agents that have this source attached
|
|
91
|
+
"""
|
|
92
|
+
with self.session_maker() as session:
|
|
93
|
+
# Verify source exists and user has permission to access it
|
|
94
|
+
source = SourceModel.read(db_session=session, identifier=source_id, actor=actor)
|
|
95
|
+
|
|
96
|
+
# The agents relationship is already loaded due to lazy="selectin" in the Source model
|
|
97
|
+
# and will be properly filtered by organization_id due to the OrganizationMixin
|
|
98
|
+
return [agent.to_pydantic() for agent in source.agents]
|
|
99
|
+
|
|
79
100
|
# TODO: We make actor optional for now, but should most likely be enforced due to security reasons
|
|
80
101
|
@enforce_types
|
|
81
102
|
def get_source_by_id(self, source_id: str, actor: Optional[PydanticUser] = None) -> Optional[PydanticSource]:
|
letta/services/user_manager.py
CHANGED
|
@@ -73,12 +73,6 @@ class UserManager:
|
|
|
73
73
|
user = UserModel.read(db_session=session, identifier=user_id)
|
|
74
74
|
user.hard_delete(session)
|
|
75
75
|
|
|
76
|
-
# TODO: Integrate this via the ORM models for the Agent, Source, and AgentSourceMapping
|
|
77
|
-
# Cascade delete for related models: Agent, Source, AgentSourceMapping
|
|
78
|
-
# session.query(AgentModel).filter(AgentModel.user_id == user_id).delete()
|
|
79
|
-
# session.query(SourceModel).filter(SourceModel.user_id == user_id).delete()
|
|
80
|
-
# session.query(AgentSourceMappingModel).filter(AgentSourceMappingModel.user_id == user_id).delete()
|
|
81
|
-
|
|
82
76
|
session.commit()
|
|
83
77
|
|
|
84
78
|
@enforce_types
|
|
@@ -93,6 +87,17 @@ class UserManager:
|
|
|
93
87
|
"""Fetch the default user."""
|
|
94
88
|
return self.get_user_by_id(self.DEFAULT_USER_ID)
|
|
95
89
|
|
|
90
|
+
@enforce_types
|
|
91
|
+
def get_user_or_default(self, user_id: Optional[str] = None):
|
|
92
|
+
"""Fetch the user or default user."""
|
|
93
|
+
if not user_id:
|
|
94
|
+
return self.get_default_user()
|
|
95
|
+
|
|
96
|
+
try:
|
|
97
|
+
return self.get_user_by_id(user_id=user_id)
|
|
98
|
+
except NoResultFound:
|
|
99
|
+
return self.get_default_user()
|
|
100
|
+
|
|
96
101
|
@enforce_types
|
|
97
102
|
def list_users(self, cursor: Optional[str] = None, limit: Optional[int] = 50) -> Tuple[Optional[str], List[PydanticUser]]:
|
|
98
103
|
"""List users with pagination using cursor (id) and limit."""
|
letta/utils.py
CHANGED
|
@@ -548,13 +548,13 @@ def enforce_types(func):
|
|
|
548
548
|
for arg_name, arg_value in args_with_hints.items():
|
|
549
549
|
hint = hints.get(arg_name)
|
|
550
550
|
if hint and not matches_type(arg_value, hint):
|
|
551
|
-
raise ValueError(f"Argument {arg_name} does not match type {hint}")
|
|
551
|
+
raise ValueError(f"Argument {arg_name} does not match type {hint}; is {arg_value}")
|
|
552
552
|
|
|
553
553
|
# Check types of keyword arguments
|
|
554
554
|
for arg_name, arg_value in kwargs.items():
|
|
555
555
|
hint = hints.get(arg_name)
|
|
556
556
|
if hint and not matches_type(arg_value, hint):
|
|
557
|
-
raise ValueError(f"Argument {arg_name} does not match type {hint}")
|
|
557
|
+
raise ValueError(f"Argument {arg_name} does not match type {hint}; is {arg_value}")
|
|
558
558
|
|
|
559
559
|
return func(*args, **kwargs)
|
|
560
560
|
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
letta/__init__.py,sha256=
|
|
1
|
+
letta/__init__.py,sha256=35NM-KIYubYvjLNsP6WHh70k7F5yDmwZ7x0E7Qm0dwg,1014
|
|
2
2
|
letta/__main__.py,sha256=6Hs2PV7EYc5Tid4g4OtcLXhqVHiNYTGzSBdoOnW2HXA,29
|
|
3
|
-
letta/agent.py,sha256=
|
|
3
|
+
letta/agent.py,sha256=yWsjhxIAVLfHLBotXpVOJ5Svvh3g8TY0jlIQFv_e0A4,78418
|
|
4
4
|
letta/benchmark/benchmark.py,sha256=ebvnwfp3yezaXOQyGXkYCDYpsmre-b9hvNtnyx4xkG0,3701
|
|
5
5
|
letta/benchmark/constants.py,sha256=aXc5gdpMGJT327VuxsT5FngbCK2J41PQYeICBO7g_RE,536
|
|
6
|
-
letta/chat_only_agent.py,sha256=
|
|
7
|
-
letta/cli/cli.py,sha256=
|
|
6
|
+
letta/chat_only_agent.py,sha256=3wBCzddcfF6IMbPdDtTZFze5-HJSYxHd8w6jkkSwzsw,4628
|
|
7
|
+
letta/cli/cli.py,sha256=N6jCmysldhAGTQPkGDmRVMAIID7GlgECXqarcMV5h3M,16502
|
|
8
8
|
letta/cli/cli_config.py,sha256=tB0Wgz3O9j6KiCsU1HWfsKmhNM9RqLsAxzxEDFQFGnM,8565
|
|
9
9
|
letta/cli/cli_load.py,sha256=xFw-CuzjChcIptaqQ1XpDROENt0JSjyPeiQ0nmEeO1k,2706
|
|
10
10
|
letta/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
-
letta/client/client.py,sha256=
|
|
11
|
+
letta/client/client.py,sha256=K34HttR6t07Kdi5VciYwbXoXNaDJfU9KYWsEEeAHO5A,126613
|
|
12
12
|
letta/client/streaming.py,sha256=Hh5pjlyrdCuO2V75ZCxSSOCPd3BmHdKFGaIUJC6fBp0,4775
|
|
13
13
|
letta/client/utils.py,sha256=OJlAKWrldc4I6M1WpcTWNtPJ4wfxlzlZqWLfCozkFtI,2872
|
|
14
|
-
letta/config.py,sha256=
|
|
14
|
+
letta/config.py,sha256=JFGY4TWW0Wm5fTbZamOwWqk5G8Nn-TXyhgByGoAqy2c,12375
|
|
15
15
|
letta/constants.py,sha256=l2IyZpVG-d_raFFX5bN6mCbprnnc1IA-z-oCKPoyPSM,6902
|
|
16
16
|
letta/credentials.py,sha256=D9mlcPsdDWlIIXQQD8wSPE9M_QvsRrb0p3LB5i9OF5Q,5806
|
|
17
17
|
letta/data_sources/connectors.py,sha256=Bwgf6mW55rDrdX69dY3bLzQW9Uuk_o9w4skwbx1NioY,7039
|
|
@@ -78,34 +78,36 @@ letta/local_llm/webui/legacy_api.py,sha256=k3H3y4qp2Fs-XmP24iSIEyvq6wjWFWBzklY3-
|
|
|
78
78
|
letta/local_llm/webui/legacy_settings.py,sha256=BLmd3TSx5StnY3ibjwaxYATPt_Lvq-o1rlcc_-Q1JcU,538
|
|
79
79
|
letta/local_llm/webui/settings.py,sha256=gmLHfiOl1u4JmlAZU2d2O8YKF9lafdakyjwR_ftVPh8,552
|
|
80
80
|
letta/log.py,sha256=FxkAk2f8Bl-u9dfImSj1DYnjAsmV6PL3tjTSnEiNP48,2218
|
|
81
|
-
letta/main.py,sha256=
|
|
82
|
-
letta/memory.py,sha256=
|
|
83
|
-
letta/
|
|
84
|
-
letta/
|
|
85
|
-
letta/offline_memory_agent.py,sha256=Pa4HmKMFYhmkzl6SyHHtHpdYIZkrJqbG0-fwPAU6Muo,7912
|
|
81
|
+
letta/main.py,sha256=C0e8ELd0OwnGN-Yraa7ax694LPzFrw4_lfnlnqZRPhw,18890
|
|
82
|
+
letta/memory.py,sha256=tt7xuknsId1c9LK0gNIfsMQgcrPXFa6aWHALlDeoHMc,3277
|
|
83
|
+
letta/o1_agent.py,sha256=lQ7nX61DFhICWLdh8KpJnAurpwnR1V7PnOVIoCHXdas,2950
|
|
84
|
+
letta/offline_memory_agent.py,sha256=swCkuUB8IsSfMFGr41QTwlKo63s6JOFMgiaB59FFw6o,7768
|
|
86
85
|
letta/openai_backcompat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
87
86
|
letta/openai_backcompat/openai_object.py,sha256=Y1ZS1sATP60qxJiOsjOP3NbwSzuzvkNAvb3DeuhM5Uk,13490
|
|
88
87
|
letta/orm/__all__.py,sha256=2gh2MZTkA3Hw67VWVKK3JIStJOqTeLdpCvYSVYNeEDA,692
|
|
89
|
-
letta/orm/__init__.py,sha256=
|
|
90
|
-
letta/orm/
|
|
88
|
+
letta/orm/__init__.py,sha256=FJUULjCVe3OUtjTbRjAqz7bdPZz6ZoquUkTI5GhEij4,665
|
|
89
|
+
letta/orm/agent.py,sha256=qyYr-3qFU_PkiaGdGChgMWkfhGGZddOXgubkUsJSuj4,4944
|
|
90
|
+
letta/orm/agents_tags.py,sha256=dYSnHz4IWBjyOiQ4RJomX3P0QN76JTlEZEw5eJM6Emg,925
|
|
91
91
|
letta/orm/base.py,sha256=K_LpNUURbsj44ycHbzvNXG_n8pBOjf1YvDaikIPDpQA,2716
|
|
92
|
-
letta/orm/block.py,sha256=
|
|
93
|
-
letta/orm/blocks_agents.py,sha256=
|
|
92
|
+
letta/orm/block.py,sha256=U2fOXdab9ynQscOqzUo3xv1a_GjqHLIgoNSZq-U0mYg,3308
|
|
93
|
+
letta/orm/blocks_agents.py,sha256=W0dykl9OchAofSuAYZD5zNmhyMabPr9LTJrz-I3A0m4,983
|
|
94
|
+
letta/orm/custom_columns.py,sha256=EEiPx9AuMI4JeLmGAOD8L_XWh4JwQB166zBJHuJmQS0,4891
|
|
94
95
|
letta/orm/enums.py,sha256=KfHcFt_fR6GUmSlmfsa-TetvmuRxGESNve8MStRYW64,145
|
|
95
96
|
letta/orm/errors.py,sha256=nv1HnF3z4-u9m_g7SO5TO5u2nmJN677_n8F0iIjluUI,460
|
|
96
97
|
letta/orm/file.py,sha256=xUhWGBiYeOG0xL_-N2lzk135Rhm2IEXLPTw1wdgeyPw,1659
|
|
97
98
|
letta/orm/job.py,sha256=If-qSTJW4t5h-6Jolw3tS3-xMZEaPIbXe3S0GMf_FXI,1102
|
|
98
|
-
letta/orm/message.py,sha256=
|
|
99
|
+
letta/orm/message.py,sha256=yWf46-adgYGqhxjn_QREW19jvVjYU0eD11uwlVSrdT4,1490
|
|
99
100
|
letta/orm/mixins.py,sha256=xXPpOBvq5XuxiPOHS1aSc6j1UVpxookOCXMLnrxI6cM,1783
|
|
100
|
-
letta/orm/organization.py,sha256=
|
|
101
|
-
letta/orm/passage.py,sha256=
|
|
101
|
+
letta/orm/organization.py,sha256=26k9Ga4zMdNwFq0KQJXypf7kQf-WKXa6n3AObEptwYY,2086
|
|
102
|
+
letta/orm/passage.py,sha256=wMiCDVtB0qbUBA-nwIyun-tBe_kIi8ULm87BaMhW6to,2131
|
|
102
103
|
letta/orm/sandbox_config.py,sha256=PCMHE-eJPzBT-90OYtXjEMRF4f9JB8AJIGETE7bu-f0,2870
|
|
103
|
-
letta/orm/source.py,sha256=
|
|
104
|
-
letta/orm/
|
|
104
|
+
letta/orm/source.py,sha256=oSJTJE5z-aF-SjSWVqkGgw_hT5bKPH91NMWVPnD4DiE,1521
|
|
105
|
+
letta/orm/sources_agents.py,sha256=q5Wf5TFNI9KH6cGW93roNhvFD3n39UE2bYQhnSJwlME,433
|
|
106
|
+
letta/orm/sqlalchemy_base.py,sha256=aBUWccVS5W-TiLeBoIKukCtpcWLU4pN71wvr5VbKfxw,17474
|
|
105
107
|
letta/orm/sqlite_functions.py,sha256=PVJXVw_e3cC5yIWkfsCP_yBjuXwIniLEGdXP6lx6Wgs,4380
|
|
106
|
-
letta/orm/tool.py,sha256=
|
|
107
|
-
letta/orm/tools_agents.py,sha256=
|
|
108
|
-
letta/orm/user.py,sha256=
|
|
108
|
+
letta/orm/tool.py,sha256=qvDul85Gq0XORx6gyMGk0As3C1bSt9nASqezdPOikQ4,2216
|
|
109
|
+
letta/orm/tools_agents.py,sha256=r6t-V21w2_mG8n38zuUb5jOi_3hRxsjgezsLA4sg0m4,626
|
|
110
|
+
letta/orm/user.py,sha256=rK5N5ViDxmesZMqVVHB7FcQNpcSoM-hB42MyI6q3MnI,1004
|
|
109
111
|
letta/personas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
110
112
|
letta/personas/examples/anna_pa.txt,sha256=zgiNdSNhy1HQy58cF_6RFPzcg2i37F9v38YuL1CW40A,1849
|
|
111
113
|
letta/personas/examples/google_search_persona.txt,sha256=RyObU80MIk2oeJJDWOK1aX5pHOtbHSSjIrbUpxov240,1194
|
|
@@ -134,11 +136,8 @@ letta/prompts/system/memgpt_offline_memory.txt,sha256=rWEJeF-6aiinjkJM9hgLUYCmlE
|
|
|
134
136
|
letta/prompts/system/memgpt_offline_memory_chat.txt,sha256=ituh7gDuio7nC2UKFB7GpBq6crxb8bYedQfJ0ADoPgg,3949
|
|
135
137
|
letta/providers.py,sha256=0j6WPRn70WNSOjWS7smhTI3ZZOlfVAVF0ZFcrdQDmMY,25321
|
|
136
138
|
letta/pytest.ini,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
137
|
-
letta/schemas/agent.py,sha256=
|
|
138
|
-
letta/schemas/agents_tags.py,sha256=9DGr8fN2DHYdWvZ_qcXmrKI0w7YKCGz2lfEcrX2KAkI,1130
|
|
139
|
-
letta/schemas/api_key.py,sha256=u07yzzMn-hBAHZIIKbWY16KsgiFjSNR8lAghpMUo3_4,682
|
|
139
|
+
letta/schemas/agent.py,sha256=amul3_5fVcut0wB9_wnuAjYpWe-ERAHuMpDZUQcOD4E,8715
|
|
140
140
|
letta/schemas/block.py,sha256=pVDH8jr5r-oxdX4cK9dX2wXyLBzgGKQOBWOzqZSeBog,5944
|
|
141
|
-
letta/schemas/blocks_agents.py,sha256=31KoTqQ9cGvqxqmuagtXiQLoaHLq7DlyGdjJTGncxTs,1333
|
|
142
141
|
letta/schemas/embedding_config.py,sha256=1kD6NpiXeH4roVumxqDAKk7xt8SpXGWNhZs_XXUSlEU,2855
|
|
143
142
|
letta/schemas/enums.py,sha256=F396hXs57up4Jqj1vwWVknMpoVo7MkccVBALvKGHPpE,1032
|
|
144
143
|
letta/schemas/file.py,sha256=ChN2CWzLI2TT9WLItcfElEH0E8b7kzPylF2OQBr6Beg,1550
|
|
@@ -149,7 +148,7 @@ letta/schemas/letta_message.py,sha256=fBPKrHBRS9eTo8NAmLiaP5TNJATsrVn9QCxYmD6a7U
|
|
|
149
148
|
letta/schemas/letta_request.py,sha256=Hfb66FB1tXmrpEX4_yLQVfTrTSMbPYeEvZY-vqW9Tj8,981
|
|
150
149
|
letta/schemas/letta_response.py,sha256=vQV5uqe-kq9fc4wCo-sVB_PJt5yUk8DB2zOgHsrmN-k,6189
|
|
151
150
|
letta/schemas/llm_config.py,sha256=RbgnCaqYd_yl-Xs7t-DEI1NhpKD8WiVWjxcwq5mZd5M,4467
|
|
152
|
-
letta/schemas/memory.py,sha256=
|
|
151
|
+
letta/schemas/memory.py,sha256=iWEm15qMa4pWQQUMIt6mnlrBQvACII0MpfNX8QujGE8,10072
|
|
153
152
|
letta/schemas/message.py,sha256=QF6OrCVfh5ETo-KJ2KZpleAuvisBIMMsIL3uH6h_kMM,34161
|
|
154
153
|
letta/schemas/openai/chat_completion_request.py,sha256=AOIwgbN3CZKVqkuXeMHeSa53u4h0wVq69t3T_LJ0vIE,3389
|
|
155
154
|
letta/schemas/openai/chat_completion_response.py,sha256=ub-oVSyLpuJd-5_yzCSIRR8tD3GM83IeDO1c1uAATa4,3970
|
|
@@ -158,18 +157,17 @@ letta/schemas/openai/embedding_response.py,sha256=WKIZpXab1Av7v6sxKG8feW3ZtpQUNo
|
|
|
158
157
|
letta/schemas/openai/openai.py,sha256=Hilo5BiLAGabzxCwnwfzK5QrWqwYD8epaEKFa4Pwndk,7970
|
|
159
158
|
letta/schemas/organization.py,sha256=d2oN3IK2HeruEHKXwIzCbJ3Fxdi_BEe9JZ8J9aDbHwQ,698
|
|
160
159
|
letta/schemas/passage.py,sha256=HeplPyKzcy4d8DLnjfIVukXRMHMZdGkerQY65RN70FI,3682
|
|
161
|
-
letta/schemas/sandbox_config.py,sha256=
|
|
160
|
+
letta/schemas/sandbox_config.py,sha256=d-eCsU7oLAAnzZbVgZsAV3O6LN16H2vmSh-Drik9jmw,5609
|
|
162
161
|
letta/schemas/source.py,sha256=B1VbaDJV-EGPv1nQXwCx_RAzeAJd50UqP_1m1cIRT8c,2854
|
|
163
162
|
letta/schemas/tool.py,sha256=_9_JkGSlIn2PCbyJ18aQrNueZgxHFUT093GcJSWYqT4,10346
|
|
164
163
|
letta/schemas/tool_rule.py,sha256=jVGdGsp2K-qnrcaWF3WjCSvxpDlF2wVxeNMXzmoYLtc,1072
|
|
165
|
-
letta/schemas/tools_agents.py,sha256=DGfmX7qXSBMCjykHyy0FRxgep2tJgYXf1rqDTmP6Tfo,1313
|
|
166
164
|
letta/schemas/usage.py,sha256=lvn1ooHwLEdv6gwQpw5PBUbcwn_gwdT6HA-fCiix6sY,817
|
|
167
165
|
letta/schemas/user.py,sha256=V32Tgl6oqB3KznkxUz12y7agkQicjzW7VocSpj78i6Q,1526
|
|
168
166
|
letta/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
169
167
|
letta/server/constants.py,sha256=yAdGbLkzlOU_dLTx0lKDmAnj0ZgRXCEaIcPJWO69eaE,92
|
|
170
168
|
letta/server/generate_openapi_schema.sh,sha256=0OtBhkC1g6CobVmNEd_m2B6sTdppjbJLXaM95icejvE,371
|
|
171
169
|
letta/server/rest_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
172
|
-
letta/server/rest_api/app.py,sha256=
|
|
170
|
+
letta/server/rest_api/app.py,sha256=LwZYglpFvvLerAPTtPSVHWT-LzyMyEbl6Fe8GGoOVfI,9967
|
|
173
171
|
letta/server/rest_api/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
174
172
|
letta/server/rest_api/auth/index.py,sha256=fQBGyVylGSRfEMLQ17cZzrHd5Y1xiVylvPqH5Rl-lXQ,1378
|
|
175
173
|
letta/server/rest_api/auth_token.py,sha256=725EFEIiNj4dh70hrSd94UysmFD8vcJLrTRfNHkzxDo,774
|
|
@@ -179,23 +177,22 @@ letta/server/rest_api/routers/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
|
|
|
179
177
|
letta/server/rest_api/routers/openai/assistants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
180
178
|
letta/server/rest_api/routers/openai/assistants/assistants.py,sha256=PXv5vLFDa3ptMBY6QJUkMaPqk2HFP0IpirJUCmgOY6k,4828
|
|
181
179
|
letta/server/rest_api/routers/openai/assistants/schemas.py,sha256=d3LdBLUI-mMUCP-Q3X9Z_DqIu-ko9_KLMt8og799aNg,5630
|
|
182
|
-
letta/server/rest_api/routers/openai/assistants/threads.py,sha256=g8iu98__tQEMY9iclg1jwapackM0QZGFayiAtb4ZrlQ,14046
|
|
183
180
|
letta/server/rest_api/routers/openai/chat_completions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
184
|
-
letta/server/rest_api/routers/openai/chat_completions/chat_completions.py,sha256=
|
|
181
|
+
letta/server/rest_api/routers/openai/chat_completions/chat_completions.py,sha256=Yvhcr1FVk1JltXg8PRwkJf8TD1fO4ARDAVsMmHY5xzc,4849
|
|
185
182
|
letta/server/rest_api/routers/v1/__init__.py,sha256=RZc0fIHNN4BGretjU6_TGK7q49RyV4jfYNudoiK_sUo,762
|
|
186
|
-
letta/server/rest_api/routers/v1/agents.py,sha256=
|
|
187
|
-
letta/server/rest_api/routers/v1/blocks.py,sha256=
|
|
183
|
+
letta/server/rest_api/routers/v1/agents.py,sha256=ryzV4R0Tfhkk0MDuSQFg1DXuHOpLgtYsajx6toAlK3g,30295
|
|
184
|
+
letta/server/rest_api/routers/v1/blocks.py,sha256=IJ2pppwNooaUjIwyBALnKL4sJ8idW8cVJlY-VH_J9HY,4803
|
|
188
185
|
letta/server/rest_api/routers/v1/health.py,sha256=pKCuVESlVOhGIb4VC4K-H82eZqfghmT6kvj2iOkkKuc,401
|
|
189
|
-
letta/server/rest_api/routers/v1/jobs.py,sha256
|
|
186
|
+
letta/server/rest_api/routers/v1/jobs.py,sha256=-tEyuIxlXZfPREeMks-sRzHwhKE2xxgzbXeEbBAS2Q8,2730
|
|
190
187
|
letta/server/rest_api/routers/v1/llms.py,sha256=TcyvSx6MEM3je5F4DysL7ligmssL_pFlJaaO4uL95VY,877
|
|
191
188
|
letta/server/rest_api/routers/v1/organizations.py,sha256=tyqVzXTpMtk3sKxI3Iz4aS6RhbGEbXDzFBB_CpW18v4,2080
|
|
192
|
-
letta/server/rest_api/routers/v1/sandbox_configs.py,sha256=
|
|
193
|
-
letta/server/rest_api/routers/v1/sources.py,sha256=
|
|
194
|
-
letta/server/rest_api/routers/v1/tools.py,sha256=
|
|
195
|
-
letta/server/rest_api/routers/v1/users.py,sha256=
|
|
189
|
+
letta/server/rest_api/routers/v1/sandbox_configs.py,sha256=pG3X3bYbmsq90kRc-06qfnM6yalvYEpVVEQnTuZVm0o,5134
|
|
190
|
+
letta/server/rest_api/routers/v1/sources.py,sha256=bLvxyYBOLx1VD5YPuoCBrQrua0AruzUzvCMIiekjVQg,9974
|
|
191
|
+
letta/server/rest_api/routers/v1/tools.py,sha256=wG-9pUyQa8b9sIk7mG8qPu_mcVGH44B8JmIKfI3NQ1U,11767
|
|
192
|
+
letta/server/rest_api/routers/v1/users.py,sha256=EBQe9IfCG3kzHpKmotz4yVGZioXz3SCSRy5yEhJK8hU,2293
|
|
196
193
|
letta/server/rest_api/static_files.py,sha256=NG8sN4Z5EJ8JVQdj19tkFa9iQ1kBPTab9f_CUxd_u4Q,3143
|
|
197
194
|
letta/server/rest_api/utils.py,sha256=6Z0T0kHIwDAgTIFh38Q1JQ_nhANgdqXcSlsuY41pL6M,3158
|
|
198
|
-
letta/server/server.py,sha256
|
|
195
|
+
letta/server/server.py,sha256=-i_AvHqUX3PJYORqouh9QylyLkePGoHDZhqNpKVo9rM,61787
|
|
199
196
|
letta/server/startup.sh,sha256=722uKJWB2C4q3vjn39De2zzPacaZNw_1fN1SpLGjKIo,1569
|
|
200
197
|
letta/server/static_files/assets/index-048c9598.js,sha256=mR16XppvselwKCcNgONs4L7kZEVa4OEERm4lNZYtLSk,146819
|
|
201
198
|
letta/server/static_files/assets/index-0e31b727.css,sha256=DjG3J3RSFLcinzoisOYYLiyTAIe5Uaxge3HE-DmQIsU,7688
|
|
@@ -207,30 +204,29 @@ letta/server/ws_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
|
207
204
|
letta/server/ws_api/example_client.py,sha256=95AA5UFgTlNJ0FUQkLxli8dKNx48MNm3eWGlSgKaWEk,4064
|
|
208
205
|
letta/server/ws_api/interface.py,sha256=TWl9vkcMCnLsUtgsuENZ-ku2oMDA-OUTzLh_yNRoMa4,4120
|
|
209
206
|
letta/server/ws_api/protocol.py,sha256=M_-gM5iuDBwa1cuN2IGNCG5GxMJwU2d3XW93XALv9s8,1821
|
|
210
|
-
letta/server/ws_api/server.py,sha256=
|
|
207
|
+
letta/server/ws_api/server.py,sha256=8t8E2YmHuqKaC-AY4E4EXHUstNb5SpabVKgBRAtJ8wU,5834
|
|
211
208
|
letta/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
212
|
-
letta/services/
|
|
213
|
-
letta/services/block_manager.py,sha256=
|
|
214
|
-
letta/services/
|
|
209
|
+
letta/services/agent_manager.py,sha256=T_HnaqdR1odJksF20rsbYI2QDZfBZD8DcmS6CLJSLCY,16759
|
|
210
|
+
letta/services/block_manager.py,sha256=HUj9HKW2LvAsENEsgCO3Pf3orvSy6XOimev38VKmRZ8,4929
|
|
211
|
+
letta/services/helpers/agent_manager_helper.py,sha256=4AoJJI3ELDZrfhx38vc2OwgQflb7mkdppucln0MkgYg,3457
|
|
215
212
|
letta/services/job_manager.py,sha256=FrkSXloke48CZKuzlYdysxM5gKWoTu7FRigPrs_YW4A,3645
|
|
216
213
|
letta/services/message_manager.py,sha256=ucFJLbK835YSfEENoxdKB3wPZgO-NYFO9EvDV0W-sc0,7682
|
|
217
|
-
letta/services/organization_manager.py,sha256=
|
|
218
|
-
letta/services/passage_manager.py,sha256=
|
|
214
|
+
letta/services/organization_manager.py,sha256=hJI86_FErkRaW-VLBBmvmmciIXN59LN0mEMm78C36kQ,3331
|
|
215
|
+
letta/services/passage_manager.py,sha256=J1PPy1HNVqB1HBy0V5xcxAuj_paU_djeEX89aI9SXGc,8229
|
|
219
216
|
letta/services/per_agent_lock_manager.py,sha256=porM0cKKANQ1FvcGXOO_qM7ARk5Fgi1HVEAhXsAg9-4,546
|
|
220
|
-
letta/services/sandbox_config_manager.py,sha256=
|
|
221
|
-
letta/services/source_manager.py,sha256=
|
|
217
|
+
letta/services/sandbox_config_manager.py,sha256=USTXwEEWexKRZjng4NepP4_eetrxCJ5n16cl2AHJ_VM,13220
|
|
218
|
+
letta/services/source_manager.py,sha256=ZtLQikeJjwAq49f0d4WxUzyUN3LZBqWCZI4a-AzEMWQ,7643
|
|
222
219
|
letta/services/tool_execution_sandbox.py,sha256=XaP3-Bsw1TJ-6btFdWJ_DwOnX6QOxE9o9mZVIXR4_4s,21090
|
|
223
220
|
letta/services/tool_manager.py,sha256=lfrfWyxiFUWcEf-nATHs7r76XWutMYbOPyePs543ZOo,7681
|
|
224
221
|
letta/services/tool_sandbox_env/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
225
|
-
letta/services/
|
|
226
|
-
letta/services/user_manager.py,sha256=cfXgnVlnfqPCk7c-wYRsU3RegHs-4stksk186RW89Do,4403
|
|
222
|
+
letta/services/user_manager.py,sha256=oqLF9C4mGbN0TaGj7wMpb2RH2bUg6OJJcdyaWv370rQ,4272
|
|
227
223
|
letta/settings.py,sha256=o3eydtE_NrNz5GJ37VPQPXZri-qlz671PxFIJIzveRU,3712
|
|
228
224
|
letta/streaming_interface.py,sha256=_FPUWy58j50evHcpXyd7zB1wWqeCc71NCFeWh_TBvnw,15736
|
|
229
225
|
letta/streaming_utils.py,sha256=329fsvj1ZN0r0LpQtmMPZ2vSxkDBIUUwvGHZFkjm2I8,11745
|
|
230
226
|
letta/system.py,sha256=buKYPqG5n2x41hVmWpu6JUpyd7vTWED9Km2_M7dLrvk,6960
|
|
231
|
-
letta/utils.py,sha256=
|
|
232
|
-
letta_nightly-0.6.4.
|
|
233
|
-
letta_nightly-0.6.4.
|
|
234
|
-
letta_nightly-0.6.4.
|
|
235
|
-
letta_nightly-0.6.4.
|
|
236
|
-
letta_nightly-0.6.4.
|
|
227
|
+
letta/utils.py,sha256=Z2OOxSJbiLSlcGzYiX9gBCv-jfkDjew_J_qaOrLIyx4,32947
|
|
228
|
+
letta_nightly-0.6.4.dev20241214104034.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
|
|
229
|
+
letta_nightly-0.6.4.dev20241214104034.dist-info/METADATA,sha256=6AUOMx2DGfCQtppaCTb4vuF5fuoLj6D6K-ywm4t6W-I,21689
|
|
230
|
+
letta_nightly-0.6.4.dev20241214104034.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
231
|
+
letta_nightly-0.6.4.dev20241214104034.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
|
|
232
|
+
letta_nightly-0.6.4.dev20241214104034.dist-info/RECORD,,
|