letta-nightly 0.6.3.dev20241213104231__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.

Files changed (63) hide show
  1. letta/__init__.py +2 -2
  2. letta/agent.py +54 -45
  3. letta/chat_only_agent.py +6 -8
  4. letta/cli/cli.py +2 -10
  5. letta/client/client.py +121 -138
  6. letta/config.py +0 -161
  7. letta/main.py +3 -8
  8. letta/memory.py +3 -14
  9. letta/o1_agent.py +1 -5
  10. letta/offline_memory_agent.py +2 -6
  11. letta/orm/__init__.py +2 -0
  12. letta/orm/agent.py +109 -0
  13. letta/orm/agents_tags.py +10 -18
  14. letta/orm/block.py +29 -4
  15. letta/orm/blocks_agents.py +5 -11
  16. letta/orm/custom_columns.py +152 -0
  17. letta/orm/message.py +3 -38
  18. letta/orm/organization.py +2 -7
  19. letta/orm/passage.py +10 -32
  20. letta/orm/source.py +5 -25
  21. letta/orm/sources_agents.py +13 -0
  22. letta/orm/sqlalchemy_base.py +54 -30
  23. letta/orm/tool.py +1 -19
  24. letta/orm/tools_agents.py +7 -24
  25. letta/orm/user.py +3 -4
  26. letta/schemas/agent.py +48 -65
  27. letta/schemas/memory.py +2 -1
  28. letta/schemas/sandbox_config.py +12 -1
  29. letta/server/rest_api/app.py +0 -5
  30. letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +1 -1
  31. letta/server/rest_api/routers/v1/agents.py +99 -78
  32. letta/server/rest_api/routers/v1/blocks.py +22 -25
  33. letta/server/rest_api/routers/v1/jobs.py +4 -4
  34. letta/server/rest_api/routers/v1/sandbox_configs.py +10 -10
  35. letta/server/rest_api/routers/v1/sources.py +12 -12
  36. letta/server/rest_api/routers/v1/tools.py +35 -15
  37. letta/server/rest_api/routers/v1/users.py +0 -46
  38. letta/server/server.py +172 -718
  39. letta/server/ws_api/server.py +0 -5
  40. letta/services/agent_manager.py +405 -0
  41. letta/services/block_manager.py +13 -21
  42. letta/services/helpers/agent_manager_helper.py +90 -0
  43. letta/services/organization_manager.py +0 -1
  44. letta/services/passage_manager.py +62 -62
  45. letta/services/sandbox_config_manager.py +3 -3
  46. letta/services/source_manager.py +22 -1
  47. letta/services/tool_execution_sandbox.py +4 -4
  48. letta/services/user_manager.py +11 -6
  49. letta/utils.py +2 -2
  50. {letta_nightly-0.6.3.dev20241213104231.dist-info → letta_nightly-0.6.4.dev20241214104034.dist-info}/METADATA +1 -1
  51. {letta_nightly-0.6.3.dev20241213104231.dist-info → letta_nightly-0.6.4.dev20241214104034.dist-info}/RECORD +54 -58
  52. letta/metadata.py +0 -407
  53. letta/schemas/agents_tags.py +0 -33
  54. letta/schemas/api_key.py +0 -21
  55. letta/schemas/blocks_agents.py +0 -32
  56. letta/schemas/tools_agents.py +0 -32
  57. letta/server/rest_api/routers/openai/assistants/threads.py +0 -338
  58. letta/services/agents_tags_manager.py +0 -64
  59. letta/services/blocks_agents_manager.py +0 -106
  60. letta/services/tools_agents_manager.py +0 -94
  61. {letta_nightly-0.6.3.dev20241213104231.dist-info → letta_nightly-0.6.4.dev20241214104034.dist-info}/LICENSE +0 -0
  62. {letta_nightly-0.6.3.dev20241213104231.dist-info → letta_nightly-0.6.4.dev20241214104034.dist-info}/WHEEL +0 -0
  63. {letta_nightly-0.6.3.dev20241213104231.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 numpy as np
2
+ from typing import List, Optional
5
3
 
6
- from letta.orm.errors import NoResultFound
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.schemas.embedding_config import EmbeddingConfig
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(self,
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
- """ Insert passage(s) into archival memory """
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(self,
129
- actor : PydanticUser,
130
- agent_id : Optional[str] = None,
131
- file_id : Optional[str] = None,
132
- cursor : Optional[str] = None,
133
- limit : Optional[int] = 50,
134
- query_text : Optional[str] = None,
135
- start_date : Optional[datetime] = None,
136
- end_date : Optional[datetime] = None,
137
- ascending : bool = True,
138
- source_id : Optional[str] = None,
139
- embed_query : bool = False,
140
- embedding_config: Optional[EmbeddingConfig] = None
141
- ) -> List[PydanticPassage]:
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(self,
193
- actor: PydanticUser,
194
- agent_id: Optional[str] = None,
195
- file_id: Optional[str] = None,
196
- start_date: Optional[datetime] = None,
197
- end_date: Optional[datetime] = None,
198
- limit: Optional[int] = 50,
199
- cursor: Optional[str] = None,
200
- query_text: Optional[str] = None,
201
- source_id: Optional[str] = None
202
- ) -> bool:
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 E2BSandboxConfig, LocalSandboxConfig
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 = E2BSandboxConfig(template=self.e2b_template_id).model_dump(exclude_none=True)
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
 
@@ -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.delete(db_session=session, actor=actor)
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]:
@@ -62,7 +62,7 @@ class ToolExecutionSandbox:
62
62
  self.sandbox_config_manager = SandboxConfigManager(tool_settings)
63
63
  self.force_recreate = force_recreate
64
64
 
65
- def run(self, agent_state: Optional[AgentState] = None) -> Optional[SandboxRunResult]:
65
+ def run(self, agent_state: Optional[AgentState] = None) -> SandboxRunResult:
66
66
  """
67
67
  Run the tool in a sandbox environment.
68
68
 
@@ -101,7 +101,7 @@ class ToolExecutionSandbox:
101
101
  os.environ.clear()
102
102
  os.environ.update(original_env) # Restore original environment variables
103
103
 
104
- def run_local_dir_sandbox(self, agent_state: AgentState) -> Optional[SandboxRunResult]:
104
+ def run_local_dir_sandbox(self, agent_state: AgentState) -> SandboxRunResult:
105
105
  sbx_config = self.sandbox_config_manager.get_or_create_default_sandbox_config(sandbox_type=SandboxType.LOCAL, actor=self.user)
106
106
  local_configs = sbx_config.get_local_config()
107
107
 
@@ -266,7 +266,7 @@ class ToolExecutionSandbox:
266
266
 
267
267
  # e2b sandbox specific functions
268
268
 
269
- def run_e2b_sandbox(self, agent_state: AgentState) -> Optional[SandboxRunResult]:
269
+ def run_e2b_sandbox(self, agent_state: AgentState) -> SandboxRunResult:
270
270
  sbx_config = self.sandbox_config_manager.get_or_create_default_sandbox_config(sandbox_type=SandboxType.E2B, actor=self.user)
271
271
  sbx = self.get_running_e2b_sandbox_with_same_state(sbx_config)
272
272
  if not sbx or self.force_recreate:
@@ -286,7 +286,7 @@ class ToolExecutionSandbox:
286
286
  execution.logs.stderr.append(execution.error.traceback)
287
287
  execution.logs.stderr.append(f"{execution.error.name}: {execution.error.value}")
288
288
  elif len(execution.results) == 0:
289
- return None
289
+ raise ValueError(f"Tool {self.tool_name} returned execution with None")
290
290
  else:
291
291
  func_return, agent_state = self.parse_best_effort(execution.results[0].text)
292
292
  return SandboxRunResult(
@@ -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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.6.3.dev20241213104231
3
+ Version: 0.6.4.dev20241214104034
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -1,17 +1,17 @@
1
- letta/__init__.py,sha256=XzSCdK-rlcvOAsPJarW8Ri5qelGVdpX237ds-yjHniY,1035
1
+ letta/__init__.py,sha256=35NM-KIYubYvjLNsP6WHh70k7F5yDmwZ7x0E7Qm0dwg,1014
2
2
  letta/__main__.py,sha256=6Hs2PV7EYc5Tid4g4OtcLXhqVHiNYTGzSBdoOnW2HXA,29
3
- letta/agent.py,sha256=qyhY89tylfFfXytlNdoKIlmlKDJMxKqX01tlVv81inY,78012
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=606FQybmeN9s04rIFQlDkWOHirrT0p48_3pMKY8d5Ts,4740
7
- letta/cli/cli.py,sha256=w05rgSquJrkT7gq13NplT6Eag0rdF7YG9uMz-WV2INs,16913
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=x1GAvNhHkrD4f7CyyaTtXDuQ68NoS8tapaY2TRh5Q7o,127162
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=06F-kPu9r6AMOvz5uX6WKVrgE8h6QqSxWni3TT16ZdY,18923
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=3rvn5rHMpChmgDsYKAH8GX7lLVsIzxLmkPhDJt6nFKA,19067
82
- letta/memory.py,sha256=DO7aevi0HQBSX94wB5NVTe-rPgsXiYC1in9mJxTUnUo,3579
83
- letta/metadata.py,sha256=iU2KZewl_oqyB6mjKeSGH33BsvRUPeWb1K_qRgme5jo,15507
84
- letta/o1_agent.py,sha256=Jbc4Id15tMQ_1ek74hxRUJdfTegmsaIHQyRNc31g6dA,3092
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=NswamGS2dTrzCmwALtKu-Jn5LnVE6w6niuptYnXFQFc,580
90
- letta/orm/agents_tags.py,sha256=Qa7Yt9imL8xbGP57fflccAMy7Z32CQiU_7eZKSSPngc,1119
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=xymYeCTJJFkzADW6wjfP2LXNZZN9yg4mCSybbvEEMMM,2356
93
- letta/orm/blocks_agents.py,sha256=o6cfblODja7so4444npW0vusqKcvDPp8YJdsWsOePus,1164
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=IcG2UkwmUCq0PiIlV_U7L0bKynPEahgqgo0luAgtfQo,2538
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=LmF2UrA9xS6ljTM1jei6AU8irXPIhemupfQ51f_u0Ck,2543
101
- letta/orm/passage.py,sha256=1auqwtifFy3Kwvr7mO_Rt_-efrP_0TX3_B8HDimrhz4,2863
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=Ib0XHCMt345RjBSC30A398rZ21W5mA4PXX00XNXyd24,2021
104
- letta/orm/sqlalchemy_base.py,sha256=AmFfyNZAT7HhdNuBXMbjmqqSjR2W7lVu3FTRreZbYhg,16543
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=seND1kw-GvdtIumGDrsUH0EtE7F59YUzK-XYenOZ4vE,3070
107
- letta/orm/tools_agents.py,sha256=mBMGQsTEx_ckfhZb2-2nqbxHBEMhvDXim6w6tFHHWBQ,1195
108
- letta/orm/user.py,sha256=0qdnBQiwXx3TGQLZKIGiI2WWyt0VceA8s5FRcRt7St0,1163
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=BxUuewMX3TLLvcOMV_A9gmauDlaG2rIidl8DRZvGypE,8592
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=80Y7gqWQQndhNkJ-0j38d2m619gTlfes_qJNA6_ant8,10040
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=A-pcBcrpnxp-XJ0OB1ferYu8hGtDkR2YDOa8FzDr0C0,5217
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=GG5pfsgzqljS2TCy2WVTyo70pgr-yFJm4M1hAYaM-9U,10177
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=qFMpxfYIlJ-PW08IQt09RW44u6hwkssdsUT-h_GuOvE,4836
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=qeBtbZCxBvJuUz64ih3ucKOFPyJK1u3-eeUFqsqTB2w,28380
187
- letta/server/rest_api/routers/v1/blocks.py,sha256=hLGwm56xCA09KdEi8P0V3s__pD_yyl07p17cdSfDj8g,4878
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=gnu__rjcd9SpKdQkSD_sci-xJYH0fw828PuHMcYwsCw,2678
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=4tkTH8z9vpuBiGzxrS_wxkFdznnWZx-U-9F08czHMP8,5004
193
- letta/server/rest_api/routers/v1/sources.py,sha256=1zIkopcyHDMarOGJISy5yXpi9-yeBRBitJ6_yiIJGdY,9818
194
- letta/server/rest_api/routers/v1/tools.py,sha256=ajYUo_cgUBDfm4Ja_EufxSdhBWoAb5N8MOUbAN6bJJY,10791
195
- letta/server/rest_api/routers/v1/users.py,sha256=M1wEr2IyHzuRwINYxLXTkrbAH3osLe_cWjzrWrzR1aw,3729
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=CQgbe-eKvNkZbLyQqLwBnOBJCNQPYcD0bK9T15iMVHQ,86599
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=C2Kv48PCwl46DQFb0ZP30s86KJLQ6dZk2AhWQEZn9pY,6004
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/agents_tags_manager.py,sha256=zNqeXDpaf4dQ77jrRHiQfITdk4FawBzcND-9tWrj8gw,3127
213
- letta/services/block_manager.py,sha256=BmuK0k3yl9byT703syGtZNfjUdM2FkOwlE6bQYIQtjI,5448
214
- letta/services/blocks_agents_manager.py,sha256=mfO3EMW9os_E1_r4SRlC2wmBFFLpt8p-yhdOH_Iotaw,5627
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=B7BgHkZcAOP1fzbg2fFF8eTfKmqOiGvoojQ8ys7JVY4,3412
218
- letta/services/passage_manager.py,sha256=BbufA8pu6kwXlGYWt1wKZV6xRP5AoJcSx20bgVjvIIU,8716
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=PqlS47FAYYmiUFd9bUV4W1t4FjhMqiDoh3Blw_1tiCM,13269
221
- letta/services/source_manager.py,sha256=yfb6fYcuoit7d4-w62Mip4fpPbpl8EmTSQ-A49o3FeA,6596
222
- letta/services/tool_execution_sandbox.py,sha256=e1ELWNQ527W2ALXYzRMMWrcaboXSpYzzgVHnGamZ3oo,21060
217
+ letta/services/sandbox_config_manager.py,sha256=USTXwEEWexKRZjng4NepP4_eetrxCJ5n16cl2AHJ_VM,13220
218
+ letta/services/source_manager.py,sha256=ZtLQikeJjwAq49f0d4WxUzyUN3LZBqWCZI4a-AzEMWQ,7643
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/tools_agents_manager.py,sha256=kF6yIsUO154_Q3l-cEeSU56QW-VUr_M6B-9csqhHBkg,4847
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=L8c6S77gyMYFgVP6ncGRaNbGjWtg6BOU_whI1vjt9Ts,32915
232
- letta_nightly-0.6.3.dev20241213104231.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
233
- letta_nightly-0.6.3.dev20241213104231.dist-info/METADATA,sha256=l0TbSA87o4firlixBhCk2grn7XMtvG3XlEX1FHG8Crc,21689
234
- letta_nightly-0.6.3.dev20241213104231.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
235
- letta_nightly-0.6.3.dev20241213104231.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
236
- letta_nightly-0.6.3.dev20241213104231.dist-info/RECORD,,
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,,