letta-nightly 0.11.7.dev20250914103918__py3-none-any.whl → 0.11.7.dev20250916104104__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.
- letta/functions/function_sets/multi_agent.py +1 -1
- letta/functions/helpers.py +1 -1
- letta/prompts/gpt_system.py +13 -15
- letta/prompts/system_prompts/__init__.py +27 -0
- letta/prompts/{system/memgpt_chat.txt → system_prompts/memgpt_chat.py} +2 -0
- letta/prompts/{system/memgpt_generate_tool.txt → system_prompts/memgpt_generate_tool.py} +4 -2
- letta/prompts/{system/memgpt_v2_chat.txt → system_prompts/memgpt_v2_chat.py} +2 -0
- letta/prompts/{system/react.txt → system_prompts/react.py} +2 -0
- letta/prompts/{system/sleeptime_doc_ingest.txt → system_prompts/sleeptime_doc_ingest.py} +2 -0
- letta/prompts/{system/sleeptime_v2.txt → system_prompts/sleeptime_v2.py} +2 -0
- letta/prompts/{system/summary_system_prompt.txt → system_prompts/summary_system_prompt.py} +2 -0
- letta/prompts/{system/voice_chat.txt → system_prompts/voice_chat.py} +2 -0
- letta/prompts/{system/voice_sleeptime.txt → system_prompts/voice_sleeptime.py} +2 -0
- letta/prompts/{system/workflow.txt → system_prompts/workflow.py} +2 -0
- letta/server/rest_api/dependencies.py +37 -0
- letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +4 -3
- letta/server/rest_api/routers/v1/agents.py +112 -109
- letta/server/rest_api/routers/v1/blocks.py +44 -20
- letta/server/rest_api/routers/v1/embeddings.py +3 -3
- letta/server/rest_api/routers/v1/folders.py +107 -47
- letta/server/rest_api/routers/v1/groups.py +52 -32
- letta/server/rest_api/routers/v1/health.py +2 -2
- letta/server/rest_api/routers/v1/identities.py +110 -21
- letta/server/rest_api/routers/v1/internal_templates.py +28 -13
- letta/server/rest_api/routers/v1/jobs.py +12 -12
- letta/server/rest_api/routers/v1/llms.py +6 -8
- letta/server/rest_api/routers/v1/messages.py +53 -36
- letta/server/rest_api/routers/v1/organizations.py +1 -1
- letta/server/rest_api/routers/v1/providers.py +47 -20
- letta/server/rest_api/routers/v1/runs.py +19 -19
- letta/server/rest_api/routers/v1/sandbox_configs.py +25 -25
- letta/server/rest_api/routers/v1/sources.py +44 -45
- letta/server/rest_api/routers/v1/steps.py +50 -22
- letta/server/rest_api/routers/v1/tags.py +25 -10
- letta/server/rest_api/routers/v1/telemetry.py +11 -6
- letta/server/rest_api/routers/v1/tools.py +71 -54
- letta/server/rest_api/routers/v1/users.py +1 -1
- letta/server/rest_api/routers/v1/voice.py +6 -5
- letta/server/rest_api/utils.py +1 -18
- letta/services/agent_manager.py +31 -7
- letta/services/file_manager.py +6 -0
- letta/services/group_manager.py +2 -1
- letta/services/identity_manager.py +67 -0
- letta/services/provider_manager.py +14 -1
- letta/services/source_manager.py +11 -1
- letta/services/step_manager.py +5 -1
- letta/services/tool_manager.py +46 -9
- letta/utils.py +6 -2
- {letta_nightly-0.11.7.dev20250914103918.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/METADATA +1 -1
- {letta_nightly-0.11.7.dev20250914103918.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/RECORD +53 -65
- letta/prompts/system/memgpt_base.txt +0 -54
- letta/prompts/system/memgpt_chat_compressed.txt +0 -13
- letta/prompts/system/memgpt_chat_fstring.txt +0 -51
- letta/prompts/system/memgpt_convo_only.txt +0 -12
- letta/prompts/system/memgpt_doc.txt +0 -50
- letta/prompts/system/memgpt_gpt35_extralong.txt +0 -53
- letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -31
- letta/prompts/system/memgpt_memory_only.txt +0 -29
- letta/prompts/system/memgpt_modified_chat.txt +0 -23
- letta/prompts/system/memgpt_modified_o1.txt +0 -31
- letta/prompts/system/memgpt_offline_memory.txt +0 -23
- letta/prompts/system/memgpt_offline_memory_chat.txt +0 -35
- letta/prompts/system/memgpt_sleeptime_chat.txt +0 -52
- letta/prompts/system/sleeptime.txt +0 -37
- {letta_nightly-0.11.7.dev20250914103918.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/WHEEL +0 -0
- {letta_nightly-0.11.7.dev20250914103918.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/entry_points.txt +0 -0
- {letta_nightly-0.11.7.dev20250914103918.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/licenses/LICENSE +0 -0
letta/services/agent_manager.py
CHANGED
@@ -3542,19 +3542,27 @@ class AgentManager:
|
|
3542
3542
|
@enforce_types
|
3543
3543
|
@trace_method
|
3544
3544
|
async def list_tags_async(
|
3545
|
-
self,
|
3545
|
+
self,
|
3546
|
+
actor: PydanticUser,
|
3547
|
+
before: Optional[str] = None,
|
3548
|
+
after: Optional[str] = None,
|
3549
|
+
limit: Optional[int] = 50,
|
3550
|
+
query_text: Optional[str] = None,
|
3551
|
+
ascending: bool = True,
|
3546
3552
|
) -> List[str]:
|
3547
3553
|
"""
|
3548
3554
|
Get all tags a user has created, ordered alphabetically.
|
3549
3555
|
|
3550
3556
|
Args:
|
3551
3557
|
actor: User performing the action.
|
3552
|
-
|
3553
|
-
|
3554
|
-
|
3558
|
+
before: Cursor for backward pagination (tags before this tag).
|
3559
|
+
after: Cursor for forward pagination (tags after this tag).
|
3560
|
+
limit: Maximum number of tags to return (default: 50).
|
3561
|
+
query_text: Filter tags by text search.
|
3562
|
+
ascending: Sort order - True for alphabetical, False for reverse (default: True).
|
3555
3563
|
|
3556
3564
|
Returns:
|
3557
|
-
List[str]: List of all tags.
|
3565
|
+
List[str]: List of all tags matching the criteria.
|
3558
3566
|
"""
|
3559
3567
|
async with db_registry.async_session() as session:
|
3560
3568
|
# Build the query using select() for async SQLAlchemy
|
@@ -3573,10 +3581,26 @@ class AgentManager:
|
|
3573
3581
|
# SQLite: Use LIKE with LOWER for case-insensitive search
|
3574
3582
|
query = query.where(func.lower(AgentsTags.tag).like(func.lower(f"%{query_text}%")))
|
3575
3583
|
|
3584
|
+
# Handle pagination cursors
|
3576
3585
|
if after:
|
3577
|
-
|
3586
|
+
if ascending:
|
3587
|
+
query = query.where(AgentsTags.tag > after)
|
3588
|
+
else:
|
3589
|
+
query = query.where(AgentsTags.tag < after)
|
3578
3590
|
|
3579
|
-
|
3591
|
+
if before:
|
3592
|
+
if ascending:
|
3593
|
+
query = query.where(AgentsTags.tag < before)
|
3594
|
+
else:
|
3595
|
+
query = query.where(AgentsTags.tag > before)
|
3596
|
+
|
3597
|
+
# Apply ordering based on ascending parameter
|
3598
|
+
if ascending:
|
3599
|
+
query = query.order_by(AgentsTags.tag.asc())
|
3600
|
+
else:
|
3601
|
+
query = query.order_by(AgentsTags.tag.desc())
|
3602
|
+
|
3603
|
+
query = query.limit(limit)
|
3580
3604
|
|
3581
3605
|
# Execute the query asynchronously
|
3582
3606
|
result = await session.execute(query)
|
letta/services/file_manager.py
CHANGED
@@ -404,8 +404,10 @@ class FileManager:
|
|
404
404
|
self,
|
405
405
|
source_id: str,
|
406
406
|
actor: PydanticUser,
|
407
|
+
before: Optional[str] = None,
|
407
408
|
after: Optional[str] = None,
|
408
409
|
limit: Optional[int] = 50,
|
410
|
+
ascending: Optional[bool] = True,
|
409
411
|
include_content: bool = False,
|
410
412
|
strip_directory_prefix: bool = False,
|
411
413
|
check_status_updates: bool = False,
|
@@ -415,8 +417,10 @@ class FileManager:
|
|
415
417
|
Args:
|
416
418
|
source_id: Source to list files from
|
417
419
|
actor: User performing the request
|
420
|
+
before: Before filter
|
418
421
|
after: Pagination cursor
|
419
422
|
limit: Maximum number of files to return
|
423
|
+
ascending: Sort by ascending or descending order
|
420
424
|
include_content: Whether to include file content
|
421
425
|
strip_directory_prefix: Whether to strip directory prefix from filenames
|
422
426
|
check_status_updates: Whether to check and update status for timeout and embedding completion
|
@@ -429,8 +433,10 @@ class FileManager:
|
|
429
433
|
|
430
434
|
files = await FileMetadataModel.list_async(
|
431
435
|
db_session=session,
|
436
|
+
before=before,
|
432
437
|
after=after,
|
433
438
|
limit=limit,
|
439
|
+
ascending=ascending,
|
434
440
|
organization_id=actor.organization_id,
|
435
441
|
source_id=source_id,
|
436
442
|
query_options=options,
|
letta/services/group_manager.py
CHANGED
@@ -29,6 +29,7 @@ class GroupManager:
|
|
29
29
|
before: Optional[str] = None,
|
30
30
|
after: Optional[str] = None,
|
31
31
|
limit: Optional[int] = 50,
|
32
|
+
ascending: bool = True,
|
32
33
|
show_hidden_groups: Optional[bool] = None,
|
33
34
|
) -> list[PydanticGroup]:
|
34
35
|
async with db_registry.async_session() as session:
|
@@ -50,7 +51,7 @@ class GroupManager:
|
|
50
51
|
query = query.where((GroupModel.hidden.is_(None)) | (GroupModel.hidden == False))
|
51
52
|
|
52
53
|
# Apply pagination
|
53
|
-
query = await _apply_group_pagination_async(query, before, after, session, ascending=
|
54
|
+
query = await _apply_group_pagination_async(query, before, after, session, ascending=ascending)
|
54
55
|
|
55
56
|
if limit:
|
56
57
|
query = query.limit(limit)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import asyncio
|
1
2
|
from typing import List, Optional
|
2
3
|
|
3
4
|
from fastapi import HTTPException
|
@@ -9,6 +10,8 @@ from letta.orm.block import Block as BlockModel
|
|
9
10
|
from letta.orm.errors import UniqueConstraintViolationError
|
10
11
|
from letta.orm.identity import Identity as IdentityModel
|
11
12
|
from letta.otel.tracing import trace_method
|
13
|
+
from letta.schemas.agent import AgentState
|
14
|
+
from letta.schemas.block import Block
|
12
15
|
from letta.schemas.identity import (
|
13
16
|
Identity as PydanticIdentity,
|
14
17
|
IdentityCreate,
|
@@ -35,6 +38,7 @@ class IdentityManager:
|
|
35
38
|
before: Optional[str] = None,
|
36
39
|
after: Optional[str] = None,
|
37
40
|
limit: Optional[int] = 50,
|
41
|
+
ascending: bool = False,
|
38
42
|
actor: PydanticUser = None,
|
39
43
|
) -> list[PydanticIdentity]:
|
40
44
|
async with db_registry.async_session() as session:
|
@@ -51,6 +55,7 @@ class IdentityManager:
|
|
51
55
|
before=before,
|
52
56
|
after=after,
|
53
57
|
limit=limit,
|
58
|
+
ascending=ascending,
|
54
59
|
**filters,
|
55
60
|
)
|
56
61
|
return [identity.to_pydantic() for identity in identities]
|
@@ -272,3 +277,65 @@ class IdentityManager:
|
|
272
277
|
current_ids = {item.id for item in current_relationship}
|
273
278
|
new_items = [item for item in found_items if item.id not in current_ids]
|
274
279
|
current_relationship.extend(new_items)
|
280
|
+
|
281
|
+
@enforce_types
|
282
|
+
@trace_method
|
283
|
+
async def list_agents_for_identity_async(
|
284
|
+
self,
|
285
|
+
identity_id: str,
|
286
|
+
before: Optional[str] = None,
|
287
|
+
after: Optional[str] = None,
|
288
|
+
limit: Optional[int] = 50,
|
289
|
+
ascending: bool = False,
|
290
|
+
actor: PydanticUser = None,
|
291
|
+
) -> List[AgentState]:
|
292
|
+
"""
|
293
|
+
Get all agents associated with the specified identity.
|
294
|
+
"""
|
295
|
+
async with db_registry.async_session() as session:
|
296
|
+
# First verify the identity exists and belongs to the user
|
297
|
+
identity = await IdentityModel.read_async(db_session=session, identifier=identity_id, actor=actor)
|
298
|
+
if identity is None:
|
299
|
+
raise HTTPException(status_code=404, detail=f"Identity with id={identity_id} not found")
|
300
|
+
|
301
|
+
# Get agents associated with this identity with pagination
|
302
|
+
agents = await AgentModel.list_async(
|
303
|
+
db_session=session,
|
304
|
+
before=before,
|
305
|
+
after=after,
|
306
|
+
limit=limit,
|
307
|
+
ascending=ascending,
|
308
|
+
identity_id=identity.id,
|
309
|
+
)
|
310
|
+
return await asyncio.gather(*[agent.to_pydantic_async() for agent in agents])
|
311
|
+
|
312
|
+
@enforce_types
|
313
|
+
@trace_method
|
314
|
+
async def list_blocks_for_identity_async(
|
315
|
+
self,
|
316
|
+
identity_id: str,
|
317
|
+
before: Optional[str] = None,
|
318
|
+
after: Optional[str] = None,
|
319
|
+
limit: Optional[int] = 50,
|
320
|
+
ascending: bool = False,
|
321
|
+
actor: PydanticUser = None,
|
322
|
+
) -> List[Block]:
|
323
|
+
"""
|
324
|
+
Get all blocks associated with the specified identity.
|
325
|
+
"""
|
326
|
+
async with db_registry.async_session() as session:
|
327
|
+
# First verify the identity exists and belongs to the user
|
328
|
+
identity = await IdentityModel.read_async(db_session=session, identifier=identity_id, actor=actor)
|
329
|
+
if identity is None:
|
330
|
+
raise HTTPException(status_code=404, detail=f"Identity with id={identity_id} not found")
|
331
|
+
|
332
|
+
# Get blocks associated with this identity with pagination
|
333
|
+
blocks = await BlockModel.list_async(
|
334
|
+
db_session=session,
|
335
|
+
before=before,
|
336
|
+
after=after,
|
337
|
+
limit=limit,
|
338
|
+
ascending=ascending,
|
339
|
+
identity_id=identity.id,
|
340
|
+
)
|
341
|
+
return [block.to_pydantic() for block in blocks]
|
@@ -154,10 +154,14 @@ class ProviderManager:
|
|
154
154
|
actor: PydanticUser,
|
155
155
|
name: Optional[str] = None,
|
156
156
|
provider_type: Optional[ProviderType] = None,
|
157
|
+
before: Optional[str] = None,
|
157
158
|
after: Optional[str] = None,
|
158
159
|
limit: Optional[int] = 50,
|
160
|
+
ascending: bool = False,
|
159
161
|
) -> List[PydanticProvider]:
|
160
|
-
"""
|
162
|
+
"""
|
163
|
+
List all providers with pagination support.
|
164
|
+
"""
|
161
165
|
filter_kwargs = {}
|
162
166
|
if name:
|
163
167
|
filter_kwargs["name"] = name
|
@@ -166,14 +170,23 @@ class ProviderManager:
|
|
166
170
|
async with db_registry.async_session() as session:
|
167
171
|
providers = await ProviderModel.list_async(
|
168
172
|
db_session=session,
|
173
|
+
before=before,
|
169
174
|
after=after,
|
170
175
|
limit=limit,
|
171
176
|
actor=actor,
|
177
|
+
ascending=ascending,
|
172
178
|
check_is_deleted=True,
|
173
179
|
**filter_kwargs,
|
174
180
|
)
|
175
181
|
return [provider.to_pydantic() for provider in providers]
|
176
182
|
|
183
|
+
@enforce_types
|
184
|
+
@trace_method
|
185
|
+
async def get_provider_async(self, provider_id: str, actor: PydanticUser) -> PydanticProvider:
|
186
|
+
async with db_registry.async_session() as session:
|
187
|
+
provider_model = await ProviderModel.read_async(db_session=session, identifier=provider_id, actor=actor)
|
188
|
+
return provider_model.to_pydantic()
|
189
|
+
|
177
190
|
@enforce_types
|
178
191
|
@trace_method
|
179
192
|
def get_provider_id_from_name(self, provider_name: Union[str, None], actor: PydanticUser) -> Optional[str]:
|
letta/services/source_manager.py
CHANGED
@@ -230,15 +230,25 @@ class SourceManager:
|
|
230
230
|
@enforce_types
|
231
231
|
@trace_method
|
232
232
|
async def list_sources(
|
233
|
-
self,
|
233
|
+
self,
|
234
|
+
actor: PydanticUser,
|
235
|
+
before: Optional[str] = None,
|
236
|
+
after: Optional[str] = None,
|
237
|
+
limit: Optional[int] = 50,
|
238
|
+
ascending: bool = True,
|
239
|
+
name: Optional[str] = None,
|
240
|
+
**kwargs,
|
234
241
|
) -> List[PydanticSource]:
|
235
242
|
"""List all sources with optional pagination."""
|
236
243
|
async with db_registry.async_session() as session:
|
237
244
|
sources = await SourceModel.list_async(
|
238
245
|
db_session=session,
|
246
|
+
before=before,
|
239
247
|
after=after,
|
240
248
|
limit=limit,
|
249
|
+
ascending=ascending,
|
241
250
|
organization_id=actor.organization_id,
|
251
|
+
query_text=name,
|
242
252
|
**kwargs,
|
243
253
|
)
|
244
254
|
return [source.to_pydantic() for source in sources]
|
letta/services/step_manager.py
CHANGED
@@ -197,12 +197,16 @@ class StepManager:
|
|
197
197
|
|
198
198
|
@enforce_types
|
199
199
|
@trace_method
|
200
|
-
async def add_feedback_async(
|
200
|
+
async def add_feedback_async(
|
201
|
+
self, step_id: str, feedback: FeedbackType | None, actor: PydanticUser, tags: list[str] | None = None
|
202
|
+
) -> PydanticStep:
|
201
203
|
async with db_registry.async_session() as session:
|
202
204
|
step = await StepModel.read_async(db_session=session, identifier=step_id, actor=actor)
|
203
205
|
if not step:
|
204
206
|
raise NoResultFound(f"Step with id {step_id} does not exist")
|
205
207
|
step.feedback = feedback
|
208
|
+
if tags:
|
209
|
+
step.tags = tags
|
206
210
|
step = await step.update_async(session)
|
207
211
|
return step.to_pydantic()
|
208
212
|
|
letta/services/tool_manager.py
CHANGED
@@ -321,8 +321,10 @@ class ToolManager:
|
|
321
321
|
async def list_tools_async(
|
322
322
|
self,
|
323
323
|
actor: PydanticUser,
|
324
|
+
before: Optional[str] = None,
|
324
325
|
after: Optional[str] = None,
|
325
326
|
limit: Optional[int] = 50,
|
327
|
+
ascending: bool = False,
|
326
328
|
upsert_base_tools: bool = True,
|
327
329
|
tool_types: Optional[List[str]] = None,
|
328
330
|
exclude_tool_types: Optional[List[str]] = None,
|
@@ -331,11 +333,13 @@ class ToolManager:
|
|
331
333
|
search: Optional[str] = None,
|
332
334
|
return_only_letta_tools: bool = False,
|
333
335
|
) -> List[PydanticTool]:
|
334
|
-
"""List all tools with
|
336
|
+
"""List all tools with pagination support."""
|
335
337
|
tools = await self._list_tools_async(
|
336
338
|
actor=actor,
|
339
|
+
before=before,
|
337
340
|
after=after,
|
338
341
|
limit=limit,
|
342
|
+
ascending=ascending,
|
339
343
|
tool_types=tool_types,
|
340
344
|
exclude_tool_types=exclude_tool_types,
|
341
345
|
names=names,
|
@@ -359,8 +363,10 @@ class ToolManager:
|
|
359
363
|
# Re-fetch the tools list after upserting base tools
|
360
364
|
tools = await self._list_tools_async(
|
361
365
|
actor=actor,
|
366
|
+
before=before,
|
362
367
|
after=after,
|
363
368
|
limit=limit,
|
369
|
+
ascending=ascending,
|
364
370
|
tool_types=tool_types,
|
365
371
|
exclude_tool_types=exclude_tool_types,
|
366
372
|
names=names,
|
@@ -376,8 +382,10 @@ class ToolManager:
|
|
376
382
|
async def _list_tools_async(
|
377
383
|
self,
|
378
384
|
actor: PydanticUser,
|
385
|
+
before: Optional[str] = None,
|
379
386
|
after: Optional[str] = None,
|
380
387
|
limit: Optional[int] = 50,
|
388
|
+
ascending: bool = False,
|
381
389
|
tool_types: Optional[List[str]] = None,
|
382
390
|
exclude_tool_types: Optional[List[str]] = None,
|
383
391
|
names: Optional[List[str]] = None,
|
@@ -416,23 +424,52 @@ class ToolManager:
|
|
416
424
|
if return_only_letta_tools:
|
417
425
|
query = query.where(ToolModel.tool_type.like("letta_%"))
|
418
426
|
|
419
|
-
#
|
427
|
+
# Handle pagination cursors
|
420
428
|
if after is not None:
|
421
429
|
after_tool = await session.get(ToolModel, after)
|
422
430
|
if after_tool:
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
431
|
+
if ascending:
|
432
|
+
query = query.where(
|
433
|
+
or_(
|
434
|
+
ToolModel.created_at > after_tool.created_at,
|
435
|
+
and_(ToolModel.created_at == after_tool.created_at, ToolModel.id > after_tool.id),
|
436
|
+
)
|
437
|
+
)
|
438
|
+
else:
|
439
|
+
query = query.where(
|
440
|
+
or_(
|
441
|
+
ToolModel.created_at < after_tool.created_at,
|
442
|
+
and_(ToolModel.created_at == after_tool.created_at, ToolModel.id < after_tool.id),
|
443
|
+
)
|
444
|
+
)
|
445
|
+
|
446
|
+
if before is not None:
|
447
|
+
before_tool = await session.get(ToolModel, before)
|
448
|
+
if before_tool:
|
449
|
+
if ascending:
|
450
|
+
query = query.where(
|
451
|
+
or_(
|
452
|
+
ToolModel.created_at < before_tool.created_at,
|
453
|
+
and_(ToolModel.created_at == before_tool.created_at, ToolModel.id < before_tool.id),
|
454
|
+
)
|
455
|
+
)
|
456
|
+
else:
|
457
|
+
query = query.where(
|
458
|
+
or_(
|
459
|
+
ToolModel.created_at > before_tool.created_at,
|
460
|
+
and_(ToolModel.created_at == before_tool.created_at, ToolModel.id > before_tool.id),
|
461
|
+
)
|
427
462
|
)
|
428
|
-
)
|
429
463
|
|
430
464
|
# Apply limit
|
431
465
|
if limit is not None:
|
432
466
|
query = query.limit(limit)
|
433
467
|
|
434
|
-
#
|
435
|
-
|
468
|
+
# Apply ordering based on ascending parameter
|
469
|
+
if ascending:
|
470
|
+
query = query.order_by(ToolModel.created_at.asc(), ToolModel.id.asc())
|
471
|
+
else:
|
472
|
+
query = query.order_by(ToolModel.created_at.desc(), ToolModel.id.desc())
|
436
473
|
|
437
474
|
# Execute query
|
438
475
|
result = await session.execute(query)
|
letta/utils.py
CHANGED
@@ -536,6 +536,8 @@ def enforce_types(func):
|
|
536
536
|
|
537
537
|
if origin is Union: # Handle Union types (including Optional)
|
538
538
|
return any(matches_type(value, arg) for arg in args)
|
539
|
+
elif hasattr(hint, "__class__") and hint.__class__.__name__ == "UnionType": # Handle Python 3.10+ X | Y syntax
|
540
|
+
return any(matches_type(value, arg) for arg in args)
|
539
541
|
elif origin is list and isinstance(value, list): # Handle List[T]
|
540
542
|
element_type = args[0] if args else None
|
541
543
|
return all(isinstance(v, element_type) for v in value) if element_type else True
|
@@ -939,7 +941,8 @@ def get_human_text(name: str, enforce_limit=True):
|
|
939
941
|
for file_path in list_human_files():
|
940
942
|
file = os.path.basename(file_path)
|
941
943
|
if f"{name}.txt" == file or name == file:
|
942
|
-
|
944
|
+
with open(file_path, encoding="utf-8") as f:
|
945
|
+
human_text = f.read().strip()
|
943
946
|
if enforce_limit and len(human_text) > CORE_MEMORY_HUMAN_CHAR_LIMIT:
|
944
947
|
raise ValueError(f"Contents of {name}.txt is over the character limit ({len(human_text)} > {CORE_MEMORY_HUMAN_CHAR_LIMIT})")
|
945
948
|
return human_text
|
@@ -951,7 +954,8 @@ def get_persona_text(name: str, enforce_limit=True):
|
|
951
954
|
for file_path in list_persona_files():
|
952
955
|
file = os.path.basename(file_path)
|
953
956
|
if f"{name}.txt" == file or name == file:
|
954
|
-
|
957
|
+
with open(file_path, encoding="utf-8") as f:
|
958
|
+
persona_text = f.read().strip()
|
955
959
|
if enforce_limit and len(persona_text) > CORE_MEMORY_PERSONA_CHAR_LIMIT:
|
956
960
|
raise ValueError(
|
957
961
|
f"Contents of {name}.txt is over the character limit ({len(persona_text)} > {CORE_MEMORY_PERSONA_CHAR_LIMIT})"
|
@@ -13,7 +13,7 @@ letta/settings.py,sha256=QEjNUwRXGBgsQpQAs2kksQmGN5CbxKlxPPydrklx_Ms,15011
|
|
13
13
|
letta/streaming_interface.py,sha256=rPMfwUcjqITWk2tVqFQm1hmP99tU2IOHg9gU2dgPSo8,16400
|
14
14
|
letta/streaming_utils.py,sha256=ZRFGFpQqn9ujCEbgZdLM7yTjiuNNvqQ47sNhV8ix-yQ,16553
|
15
15
|
letta/system.py,sha256=kHF7n3Viq7gV5UIUEXixod2gWa2jroUgztpEzMC1Sew,8925
|
16
|
-
letta/utils.py,sha256=
|
16
|
+
letta/utils.py,sha256=c108IxvNVf0NeuQRrr2NK-asqjpzOI79YKSHYyhEqrQ,43541
|
17
17
|
letta/adapters/letta_llm_adapter.py,sha256=11wkOkEQfPXUuJoJxbK22wCa-8gnWiDAb3UOXOxLt5U,3427
|
18
18
|
letta/adapters/letta_llm_request_adapter.py,sha256=wJhK5M_qOhRPAhgMmYI7EJcM8Op19tClnXe0kJ29a3Q,4831
|
19
19
|
letta/adapters/letta_llm_stream_adapter.py,sha256=G8IqtXor0LUuW-dKtGJWsUt6DfJreVCn5h6W2lHEPBg,7658
|
@@ -44,7 +44,7 @@ letta/functions/ast_parsers.py,sha256=0dXAN4qx3pWL_Y0aoEkaBpMKwI-kpoLEJftjW3v2I4
|
|
44
44
|
letta/functions/async_composio_toolset.py,sha256=IuhZTVghPDXRsehOOZsEEiJGYyjWjDTQc2xrjTg0yBo,4786
|
45
45
|
letta/functions/composio_helpers.py,sha256=mpybCYcB93HWoKrmQIqcuRQG9IH2lHWhsPQx2i8XP_8,3593
|
46
46
|
letta/functions/functions.py,sha256=bSYEcUPzbKXx6IztZkE1o7O7zuhFgbLzKSG5SuP8JVk,16009
|
47
|
-
letta/functions/helpers.py,sha256=
|
47
|
+
letta/functions/helpers.py,sha256=ON3iVUZ4qfRxBDaSGFC-_EmW_E7JegScXAg1VxtSj4k,25280
|
48
48
|
letta/functions/interface.py,sha256=pN1gpDnLISW44gRcic1IX6I6pDwOT9UbkST_4ICuMvQ,2936
|
49
49
|
letta/functions/prompts.py,sha256=jNl83xjNpoSs8KzGtuc6jzN8jp_T4BC_5f4FMJ88_K0,1145
|
50
50
|
letta/functions/schema_generator.py,sha256=EgHC3UHRNF4FG7CKWNIxajUyryLo5UIZB2KJP9MrKMg,30903
|
@@ -55,7 +55,7 @@ letta/functions/function_sets/base.py,sha256=8vCG7N7z21AD5QJhQOyOnk5f0TlE2X7AF1U
|
|
55
55
|
letta/functions/function_sets/builtin.py,sha256=32HCd7J5meNFBq8d2mrQGVUbMaojKvAJFZsTVjMfh9A,3300
|
56
56
|
letta/functions/function_sets/extras.py,sha256=mG7jCd2RUsf1w9G8mVcv26twJWpiDhbWI6VvnLZoEOk,4899
|
57
57
|
letta/functions/function_sets/files.py,sha256=b2Io2njvZPY8MDQD6heTN0XfwQgnEdEDAHLVcYKBwNY,4450
|
58
|
-
letta/functions/function_sets/multi_agent.py,sha256=
|
58
|
+
letta/functions/function_sets/multi_agent.py,sha256=sfByJaLtYCQJe57Umn6ycrGUU9R9N4QJYDj3c-Ulv_o,7032
|
59
59
|
letta/functions/function_sets/voice.py,sha256=_gmFEj3fSFb-4eMM-ddSOm-Vk1ShIVjpchZI7MQKwSA,3191
|
60
60
|
letta/functions/mcp_client/exceptions.py,sha256=IE5SLCuMK7hK9V1QsJafPo6u0S0OwqRvMx2NcsE3g3c,313
|
61
61
|
letta/functions/mcp_client/types.py,sha256=z2oX1zMMRVV6gCXfEMPX7WmI9phHXqMjYV5LmykSgyc,12090
|
@@ -224,32 +224,19 @@ letta/plugins/defaults.py,sha256=xWCxHF-EfqkhWVfCHqrQ5_GmvlX5Ugybd8oPcp58W0U,376
|
|
224
224
|
letta/plugins/plugins.py,sha256=Um9avvRxz4d5vJQTudLJCwv5EDUtIlVQZw8Xlf4S3Gw,2079
|
225
225
|
letta/prompts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
226
226
|
letta/prompts/gpt_summarize.py,sha256=dbOsMdc6VGApFtXv7ZfqsGN2SZ_31K_nUWMLBTcChrY,1146
|
227
|
-
letta/prompts/gpt_system.py,sha256=
|
227
|
+
letta/prompts/gpt_system.py,sha256=Y-Wj8n8PFHwGjbsJhb-dghNXXQts5zrnBRI1FfDkocg,907
|
228
228
|
letta/prompts/prompt_generator.py,sha256=sdSZpDRG3PnWdh7Iz2Tg0G1i_9bAHAhGM5Oh1X9NV7Y,8955
|
229
|
-
letta/prompts/
|
230
|
-
letta/prompts/
|
231
|
-
letta/prompts/
|
232
|
-
letta/prompts/
|
233
|
-
letta/prompts/
|
234
|
-
letta/prompts/
|
235
|
-
letta/prompts/
|
236
|
-
letta/prompts/
|
237
|
-
letta/prompts/
|
238
|
-
letta/prompts/
|
239
|
-
letta/prompts/
|
240
|
-
letta/prompts/system/memgpt_modified_o1.txt,sha256=objnDgnxpF3-MmU28ZqZ7-TOG8UlHBM_HMyAdSDWK88,5492
|
241
|
-
letta/prompts/system/memgpt_offline_memory.txt,sha256=rWEJeF-6aiinjkJM9hgLUYCmlEcC_HekYB1bjEUYq6M,2460
|
242
|
-
letta/prompts/system/memgpt_offline_memory_chat.txt,sha256=ituh7gDuio7nC2UKFB7GpBq6crxb8bYedQfJ0ADoPgg,3949
|
243
|
-
letta/prompts/system/memgpt_sleeptime_chat.txt,sha256=ieHvVkJYE_4Z_vyUJS4KImBZCSQDcsUmy9IRF-FBpPE,4712
|
244
|
-
letta/prompts/system/memgpt_v2_chat.txt,sha256=RLIGgd1WnoyrLLLTbhueB9j3aUEHwrnYSFywAxZfMCg,5315
|
245
|
-
letta/prompts/system/react.txt,sha256=AVPxs4dM_0bCvk68hPIQMgFGBnt-6Vor-i0YSjoMtCc,1547
|
246
|
-
letta/prompts/system/sleeptime.txt,sha256=qoACziV1KoPk_nJMJHzEkyKQn9v9fmepWozAAixZc4s,3117
|
247
|
-
letta/prompts/system/sleeptime_doc_ingest.txt,sha256=tyzHHzyDA2ib_XRwo5h5Ku9l_f-RSBPDJZrUusrQE80,2783
|
248
|
-
letta/prompts/system/sleeptime_v2.txt,sha256=z-v0OVwKPSw_DF9ltTR2UlpW7hAhqz8ZC4M3yKDDnys,2425
|
249
|
-
letta/prompts/system/summary_system_prompt.txt,sha256=ftc-aEhfJYN6FlQF4I-I5me-BAh_T2nsTwitPZpZisE,2313
|
250
|
-
letta/prompts/system/voice_chat.txt,sha256=Q_vd2Q08z6qTIVeMML0z9706NG8aAq-scxvi--h5tG4,1853
|
251
|
-
letta/prompts/system/voice_sleeptime.txt,sha256=LPh-XjAthvsdEkXoZ4NTzTUuMbMsMkoDl9ofCUJC7Us,3696
|
252
|
-
letta/prompts/system/workflow.txt,sha256=pLOaUDsNFAzLs4xb9JgGtd1w-lrq0Q1E7SpFBttXYCI,834
|
229
|
+
letta/prompts/system_prompts/__init__.py,sha256=ak_AgWgx7oEQ9woxSyCWz7qvGogbsY2_cO501C_eD0I,735
|
230
|
+
letta/prompts/system_prompts/memgpt_chat.py,sha256=WEeP-RqjROG0a3Pqt-fQJSMj0ocE0Zt-4c5I3HXroNA,5438
|
231
|
+
letta/prompts/system_prompts/memgpt_generate_tool.py,sha256=k6X0DgWDxJz1ma31LT4V4HqfLjQHBYVs2-QAjbuQIek,6613
|
232
|
+
letta/prompts/system_prompts/memgpt_v2_chat.py,sha256=SPn8Og3nSvCSrVDIR8eb24xGL-3ix6GgAeUVbPlYvmM,5333
|
233
|
+
letta/prompts/system_prompts/react.py,sha256=W7gnV6h6BNYRKMtcB0H6JlJePH8q6_v5u4worRU5tDk,1565
|
234
|
+
letta/prompts/system_prompts/sleeptime_doc_ingest.py,sha256=u3UPYbe1_evApVqWL45BPWaUU37tQQTHTgwCYvaTY_4,2801
|
235
|
+
letta/prompts/system_prompts/sleeptime_v2.py,sha256=VuHHQZd1-8K5WnOXI-mwYWci8jYSXX48Vqnnczjv1dc,2443
|
236
|
+
letta/prompts/system_prompts/summary_system_prompt.py,sha256=-jy_PL6Cwxjs3p3AiTRnB-1RIduuz4pqB_iVIHGCMBM,2331
|
237
|
+
letta/prompts/system_prompts/voice_chat.py,sha256=WLhjlVsVcQPc5S6y5hgw1SdVhdhtflNiwdpfSx3abwk,1871
|
238
|
+
letta/prompts/system_prompts/voice_sleeptime.py,sha256=2rgZYqJEqSp5bcEAXNuqM1PVsvPF1vm8sAqmhoOfQow,3714
|
239
|
+
letta/prompts/system_prompts/workflow.py,sha256=mth_46sY9JWx0rV-kqiGcu2IZGzZQfKY345qBUjvP-s,852
|
253
240
|
letta/schemas/agent.py,sha256=Goy1S7U8JBjiBtHQ1e0haBJwP4O40MU6mkRhHsxhPU0,29569
|
254
241
|
letta/schemas/agent_file.py,sha256=ueNumYpINPrOBHEeJeSLQdbgs2VKPpqvbfOZA4UGbRI,14884
|
255
242
|
letta/schemas/archive.py,sha256=bZCls6-lMaPKiH-jJBYFEW5saI1Qw2S6mv2wB8YaBUo,1883
|
@@ -340,12 +327,13 @@ letta/server/rest_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
340
327
|
letta/server/rest_api/app.py,sha256=T3LLveXRJmfWqR0uEzoaLY8LXwYrwCQGb80XMbSCDUo,21172
|
341
328
|
letta/server/rest_api/auth_token.py,sha256=725EFEIiNj4dh70hrSd94UysmFD8vcJLrTRfNHkzxDo,774
|
342
329
|
letta/server/rest_api/chat_completions_interface.py,sha256=-7wO7pNBWXMqblVkJpuZ8JPJ-LjudLTtT6BJu-q_XAM,11138
|
330
|
+
letta/server/rest_api/dependencies.py,sha256=Y3pQ7cda4B-1iD5Qtrt47q-OQvFRl3bVcsaYI8fU-yE,1074
|
343
331
|
letta/server/rest_api/interface.py,sha256=_GQfKYUp9w4Wo2HSE_8Ff7QU16t1blspLaqmukpER9s,67099
|
344
332
|
letta/server/rest_api/json_parser.py,sha256=yoakaCkSMdf0Y_pyILoFKZlvzXeqF-E1KNeHzatLMDc,9157
|
345
333
|
letta/server/rest_api/redis_stream_manager.py,sha256=hz85CigFWdLkK1FWUmF-i6ObgoKkuoEgkiwshZ6QPKI,10764
|
346
334
|
letta/server/rest_api/static_files.py,sha256=NG8sN4Z5EJ8JVQdj19tkFa9iQ1kBPTab9f_CUxd_u4Q,3143
|
347
335
|
letta/server/rest_api/streaming_response.py,sha256=wfhby6skucjGtw9d9pcfa856lI1r6JKaosCYbutKD2k,14458
|
348
|
-
letta/server/rest_api/utils.py,sha256=
|
336
|
+
letta/server/rest_api/utils.py,sha256=gjXv50UL0ATUWhq-Z2XtQXHdfGiZKeRObvd3thD-Mfc,18837
|
349
337
|
letta/server/rest_api/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
350
338
|
letta/server/rest_api/auth/index.py,sha256=oaWNZREyuTyldHBx0vQYlqtePruL21H1atZj_TO_nyg,1377
|
351
339
|
letta/server/rest_api/middleware/__init__.py,sha256=sq9ShbHKfsmvR1DnrI-ibSYEo0PSevXZobzgst24tNI,240
|
@@ -353,30 +341,30 @@ letta/server/rest_api/middleware/check_password.py,sha256=LKR_rlhzZ-93o0FpkwDn8v
|
|
353
341
|
letta/server/rest_api/middleware/profiler_context.py,sha256=MbOFOXhkOCuq6vlOiv0DGgmlLVKxC-9tRZ0OTOn_0GA,859
|
354
342
|
letta/server/rest_api/routers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
355
343
|
letta/server/rest_api/routers/openai/chat_completions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
356
|
-
letta/server/rest_api/routers/openai/chat_completions/chat_completions.py,sha256=
|
344
|
+
letta/server/rest_api/routers/openai/chat_completions/chat_completions.py,sha256=bY3Ei_uxr_eIo4Z-k_gGeKSzyC1ALZOP3dbaXxacihE,5229
|
357
345
|
letta/server/rest_api/routers/v1/__init__.py,sha256=9MnEA7CgtIxyU_dDNG0jm-Ziqu1somBml-e5gKjgd9I,1997
|
358
|
-
letta/server/rest_api/routers/v1/agents.py,sha256=
|
359
|
-
letta/server/rest_api/routers/v1/blocks.py,sha256=
|
360
|
-
letta/server/rest_api/routers/v1/embeddings.py,sha256=
|
361
|
-
letta/server/rest_api/routers/v1/folders.py,sha256=
|
362
|
-
letta/server/rest_api/routers/v1/groups.py,sha256=
|
363
|
-
letta/server/rest_api/routers/v1/health.py,sha256=
|
364
|
-
letta/server/rest_api/routers/v1/identities.py,sha256=
|
365
|
-
letta/server/rest_api/routers/v1/internal_templates.py,sha256=
|
366
|
-
letta/server/rest_api/routers/v1/jobs.py,sha256=
|
367
|
-
letta/server/rest_api/routers/v1/llms.py,sha256=
|
368
|
-
letta/server/rest_api/routers/v1/messages.py,sha256=
|
369
|
-
letta/server/rest_api/routers/v1/organizations.py,sha256=
|
370
|
-
letta/server/rest_api/routers/v1/providers.py,sha256=
|
371
|
-
letta/server/rest_api/routers/v1/runs.py,sha256=
|
372
|
-
letta/server/rest_api/routers/v1/sandbox_configs.py,sha256=
|
373
|
-
letta/server/rest_api/routers/v1/sources.py,sha256=
|
374
|
-
letta/server/rest_api/routers/v1/steps.py,sha256=
|
375
|
-
letta/server/rest_api/routers/v1/tags.py,sha256=
|
376
|
-
letta/server/rest_api/routers/v1/telemetry.py,sha256=
|
377
|
-
letta/server/rest_api/routers/v1/tools.py,sha256=
|
378
|
-
letta/server/rest_api/routers/v1/users.py,sha256=
|
379
|
-
letta/server/rest_api/routers/v1/voice.py,sha256=
|
346
|
+
letta/server/rest_api/routers/v1/agents.py,sha256=V-z5bm1DKWq9qCZ1VHACvr8D2S6Hgo7ZRY7XBAh1u4Q,76513
|
347
|
+
letta/server/rest_api/routers/v1/blocks.py,sha256=6WBsGCcOkcIgAxI_v9c4xmEoxVSOcRs3--GRv1YleX8,8862
|
348
|
+
letta/server/rest_api/routers/v1/embeddings.py,sha256=WxMRMf2x-DCsHOVvCRxJ8Nz1PE7ri8KgmKiYlmBaPwI,957
|
349
|
+
letta/server/rest_api/routers/v1/folders.py,sha256=PsfRd7Acy-kAjqR30fmN8aa4C7me1wy1RrIwT11I1T0,25811
|
350
|
+
letta/server/rest_api/routers/v1/groups.py,sha256=wvUrrEBIsDfS1jkraxXlP8k3E1VB6bAsM27VXOG73GE,12458
|
351
|
+
letta/server/rest_api/routers/v1/health.py,sha256=j43UoGJ7Yh5WzdwvqbKTEdWzlcKJBF6ZI5I1kslWim0,399
|
352
|
+
letta/server/rest_api/routers/v1/identities.py,sha256=eUqO_6HNdXwmlas28sZWr1SA4npd0FgzPD_0ZtoVYY0,11484
|
353
|
+
letta/server/rest_api/routers/v1/internal_templates.py,sha256=2O8Ci2LpBFjAq81emX_UMUP9NkYBA0GjC_cuWIAcZ7s,11924
|
354
|
+
letta/server/rest_api/routers/v1/jobs.py,sha256=4yZuqkz_eTkzbsk5JOaj9GQMXtU_myK2eXu4Dc1Vms8,4818
|
355
|
+
letta/server/rest_api/routers/v1/llms.py,sha256=sv5VWqB0-iSRi6LyzqsM1fLmOFm9UhM9ofzR9WHvJdE,1808
|
356
|
+
letta/server/rest_api/routers/v1/messages.py,sha256=eHHupTPyon-Gwsbg0-0vzp7cRGoXHkOIn10vrxyNxbQ,8547
|
357
|
+
letta/server/rest_api/routers/v1/organizations.py,sha256=Un7qRo-69m9bC_TYyMnIRNLXf3fHHbNh1aVghnzzips,2932
|
358
|
+
letta/server/rest_api/routers/v1/providers.py,sha256=_gKcCbEN2tW7c0BO7_cMFEYdhhsxDlKaopqXlZXMU1s,5996
|
359
|
+
letta/server/rest_api/routers/v1/runs.py,sha256=_5bLcTyyrHTzI8pE0QHwwK2JoJVqwux-ANQlDk-YoRA,12845
|
360
|
+
letta/server/rest_api/routers/v1/sandbox_configs.py,sha256=FULVD8W-lhrhQSrLmpXVgDJpkulkRyKnxvZZtwDL52A,9065
|
361
|
+
letta/server/rest_api/routers/v1/sources.py,sha256=8fkCbprC4PZlcf5HnBYj2-8PjWFIkL0TWZBlp95N7nE,22319
|
362
|
+
letta/server/rest_api/routers/v1/steps.py,sha256=rJ9W1dHOpSm6pHn9zHD3gAA44TZRfnbb8-LH3VZ7SGo,6788
|
363
|
+
letta/server/rest_api/routers/v1/tags.py,sha256=rGPO5GaVBn18hu7D3Ysyo45ka47g9DUir3UVh433DEc,1826
|
364
|
+
letta/server/rest_api/routers/v1/telemetry.py,sha256=8rzSii17BK8BjRRfV4Yr6mrKrbZEHySlUaQBGBWhxwY,1124
|
365
|
+
letta/server/rest_api/routers/v1/tools.py,sha256=YQo69QjPH8XbFvdrxMFS6b6YOvZJW7jB34wiZm8ev84,51334
|
366
|
+
letta/server/rest_api/routers/v1/users.py,sha256=l3xejXISNB9gQmVuS_nYP1V5QqeqEtdDpgpJcPlxYy4,2373
|
367
|
+
letta/server/rest_api/routers/v1/voice.py,sha256=kzsROKCQltHfsgRBg1iMz-AiPDnSuCvE9IOBCBRhD3c,2040
|
380
368
|
letta/server/static_files/favicon.ico,sha256=DezhLdFSbM8o81wCOZcV3riq7tFUOGQD4h6-vr-HuU0,342
|
381
369
|
letta/server/static_files/index.html,sha256=sY5ZwjwJJysQWDJZGi5VQSJUkZH9gwQRGn0Hto2Vcfo,1194
|
382
370
|
letta/server/static_files/memgpt_logo_transparent.png,sha256=7l6niNb4MlUILxLlUZPxIE1TEHj_Z9f9XDxoST3d7Vw,85383
|
@@ -389,14 +377,14 @@ letta/server/ws_api/protocol.py,sha256=5mDgpfNZn_kNwHnpt5Dsuw8gdNH298sgxTGed3etz
|
|
389
377
|
letta/server/ws_api/server.py,sha256=_16TQafm509rqRztZYqo0HKKZoe8ccBrNftd_kbIJTE,5833
|
390
378
|
letta/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
391
379
|
letta/services/agent_file_manager.py,sha256=bgYTyQA90Iqo3W-LprPtyyOKf2itoqivcRhh4EOUXss,30847
|
392
|
-
letta/services/agent_manager.py,sha256=
|
380
|
+
letta/services/agent_manager.py,sha256=C-k9S8_TwLRDSdCqu0YZXbwgSRn4_hPOpP2O62NkaMM,169791
|
393
381
|
letta/services/agent_serialization_manager.py,sha256=lWXTzYItqVxJMyy9ZYlcCDQwC3ZKk9XPCHvBkoVuszA,46388
|
394
382
|
letta/services/archive_manager.py,sha256=P10BjZ2PxLoIkCwJ8rx7qLzchNVBsqNG3_KzxTanCLQ,14060
|
395
383
|
letta/services/block_manager.py,sha256=mohj12QqHenSBbBx0Xmry1Rw25Gy5DSljOITzAwqMtw,33683
|
396
|
-
letta/services/file_manager.py,sha256=
|
384
|
+
letta/services/file_manager.py,sha256=wNbBNmgZyZmEj7ZHuN5HYbAu5gDU1j7XR9SK8zg3LE0,31607
|
397
385
|
letta/services/files_agents_manager.py,sha256=QJrJTgDn3RXUjZIGiIw4GQ5k2iKj-Wvzs-WQetpQ154,30059
|
398
|
-
letta/services/group_manager.py,sha256=
|
399
|
-
letta/services/identity_manager.py,sha256=
|
386
|
+
letta/services/group_manager.py,sha256=LgSVukIe1Jh_aIUP3PtraT5Ys7a7wKQA11CwRucFgYQ,29220
|
387
|
+
letta/services/identity_manager.py,sha256=t-0D7aK6ea3RFmvuBjlIYv4GgdaYTXxLr9RGTOie1l0,14423
|
400
388
|
letta/services/job_manager.py,sha256=E-w9_4BMErMuqVf2dFlTPTobrvBKhPyyEDfuqLnbACI,35970
|
401
389
|
letta/services/llm_batch_manager.py,sha256=iDzLFfmgpQooGY4zpN_w8q1SZ27fr2Cv6Ks3ltZErL8,20929
|
402
390
|
letta/services/mcp_manager.py,sha256=QuvKQnwxMXrhiCaYlF50GZwXmbSU7PxmcOZ85sQ3t7I,47848
|
@@ -404,12 +392,12 @@ letta/services/message_manager.py,sha256=tomsZidPT-I95sJsEsls-vj3qglehV7XNTs-m2z
|
|
404
392
|
letta/services/organization_manager.py,sha256=JMW5oS_sr6vQQ27OgRV3BR1JL0MqyoGUDcpEOs3SLRY,5800
|
405
393
|
letta/services/passage_manager.py,sha256=kOQjlJFz7Dy6e0NEECoFHhcH8hPIMNeEHxZ1JJ-R2Cs,52372
|
406
394
|
letta/services/per_agent_lock_manager.py,sha256=cMaW8r-qhucQbiK27jVqz8wzhlr2yuRNXbdkaMO4lnk,627
|
407
|
-
letta/services/provider_manager.py,sha256=
|
395
|
+
letta/services/provider_manager.py,sha256=93IlJurJDAIP8FVfblI9CW1myWNISiZJia0t8E6gaHg,11244
|
408
396
|
letta/services/sandbox_config_manager.py,sha256=BwN3bebiFvcliTJpRkbOwGxmV5dUJ8B64kFfXAgAqDw,25989
|
409
|
-
letta/services/source_manager.py,sha256=
|
410
|
-
letta/services/step_manager.py,sha256=
|
397
|
+
letta/services/source_manager.py,sha256=IteOcn9ydoO7KARoPh-JuuYwO4jWcsBoTsrkGWvDk9c,18864
|
398
|
+
letta/services/step_manager.py,sha256=vfXhE-cuE40dv2Uv6pICrpleJeXMjYeEOrkvGcY_sqI,20987
|
411
399
|
letta/services/telemetry_manager.py,sha256=zDdSsRrBYunmlemtUUL1Qh3bcKu5-nhL2n7AlAmVrgs,3297
|
412
|
-
letta/services/tool_manager.py,sha256=
|
400
|
+
letta/services/tool_manager.py,sha256=Iz7noHEv4A3gZBa6H4rJul4onygCgjIw1GqxHrmmr5c,44857
|
413
401
|
letta/services/user_manager.py,sha256=XuG9eFrvax69sONx7t_D5kgpt5zNwyER-MhqLSDs8L4,9949
|
414
402
|
letta/services/context_window_calculator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
415
403
|
letta/services/context_window_calculator/context_window_calculator.py,sha256=Ux1UU_l0Nk08HGUMUUrjbtnm2thVRC9bHE7poo8gb8o,8241
|
@@ -470,8 +458,8 @@ letta/templates/sandbox_code_file_async.py.j2,sha256=lb7nh_P2W9VZHzU_9TxSCEMUod7
|
|
470
458
|
letta/templates/summary_request_text.j2,sha256=ZttQwXonW2lk4pJLYzLK0pmo4EO4EtUUIXjgXKiizuc,842
|
471
459
|
letta/templates/template_helper.py,sha256=HkG3zwRc5NVGmSTQu5PUTpz7LevK43bzXVaQuN8urf0,1634
|
472
460
|
letta/types/__init__.py,sha256=hokKjCVFGEfR7SLMrtZsRsBfsC7yTIbgKPLdGg4K1eY,147
|
473
|
-
letta_nightly-0.11.7.
|
474
|
-
letta_nightly-0.11.7.
|
475
|
-
letta_nightly-0.11.7.
|
476
|
-
letta_nightly-0.11.7.
|
477
|
-
letta_nightly-0.11.7.
|
461
|
+
letta_nightly-0.11.7.dev20250916104104.dist-info/METADATA,sha256=cSWgtOFp4KesOjDOUO2LAvt6UtJDRJKEnWXBgqRFLsA,24424
|
462
|
+
letta_nightly-0.11.7.dev20250916104104.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
463
|
+
letta_nightly-0.11.7.dev20250916104104.dist-info/entry_points.txt,sha256=m-94Paj-kxiR6Ktu0us0_2qfhn29DzF2oVzqBE6cu8w,41
|
464
|
+
letta_nightly-0.11.7.dev20250916104104.dist-info/licenses/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
|
465
|
+
letta_nightly-0.11.7.dev20250916104104.dist-info/RECORD,,
|