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.
Files changed (67) hide show
  1. letta/functions/function_sets/multi_agent.py +1 -1
  2. letta/functions/helpers.py +1 -1
  3. letta/prompts/gpt_system.py +13 -15
  4. letta/prompts/system_prompts/__init__.py +27 -0
  5. letta/prompts/{system/memgpt_chat.txt → system_prompts/memgpt_chat.py} +2 -0
  6. letta/prompts/{system/memgpt_generate_tool.txt → system_prompts/memgpt_generate_tool.py} +4 -2
  7. letta/prompts/{system/memgpt_v2_chat.txt → system_prompts/memgpt_v2_chat.py} +2 -0
  8. letta/prompts/{system/react.txt → system_prompts/react.py} +2 -0
  9. letta/prompts/{system/sleeptime_doc_ingest.txt → system_prompts/sleeptime_doc_ingest.py} +2 -0
  10. letta/prompts/{system/sleeptime_v2.txt → system_prompts/sleeptime_v2.py} +2 -0
  11. letta/prompts/{system/summary_system_prompt.txt → system_prompts/summary_system_prompt.py} +2 -0
  12. letta/prompts/{system/voice_chat.txt → system_prompts/voice_chat.py} +2 -0
  13. letta/prompts/{system/voice_sleeptime.txt → system_prompts/voice_sleeptime.py} +2 -0
  14. letta/prompts/{system/workflow.txt → system_prompts/workflow.py} +2 -0
  15. letta/server/rest_api/dependencies.py +37 -0
  16. letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +4 -3
  17. letta/server/rest_api/routers/v1/agents.py +112 -109
  18. letta/server/rest_api/routers/v1/blocks.py +44 -20
  19. letta/server/rest_api/routers/v1/embeddings.py +3 -3
  20. letta/server/rest_api/routers/v1/folders.py +107 -47
  21. letta/server/rest_api/routers/v1/groups.py +52 -32
  22. letta/server/rest_api/routers/v1/health.py +2 -2
  23. letta/server/rest_api/routers/v1/identities.py +110 -21
  24. letta/server/rest_api/routers/v1/internal_templates.py +28 -13
  25. letta/server/rest_api/routers/v1/jobs.py +12 -12
  26. letta/server/rest_api/routers/v1/llms.py +6 -8
  27. letta/server/rest_api/routers/v1/messages.py +53 -36
  28. letta/server/rest_api/routers/v1/organizations.py +1 -1
  29. letta/server/rest_api/routers/v1/providers.py +47 -20
  30. letta/server/rest_api/routers/v1/runs.py +19 -19
  31. letta/server/rest_api/routers/v1/sandbox_configs.py +25 -25
  32. letta/server/rest_api/routers/v1/sources.py +44 -45
  33. letta/server/rest_api/routers/v1/steps.py +50 -22
  34. letta/server/rest_api/routers/v1/tags.py +25 -10
  35. letta/server/rest_api/routers/v1/telemetry.py +11 -6
  36. letta/server/rest_api/routers/v1/tools.py +71 -54
  37. letta/server/rest_api/routers/v1/users.py +1 -1
  38. letta/server/rest_api/routers/v1/voice.py +6 -5
  39. letta/server/rest_api/utils.py +1 -18
  40. letta/services/agent_manager.py +31 -7
  41. letta/services/file_manager.py +6 -0
  42. letta/services/group_manager.py +2 -1
  43. letta/services/identity_manager.py +67 -0
  44. letta/services/provider_manager.py +14 -1
  45. letta/services/source_manager.py +11 -1
  46. letta/services/step_manager.py +5 -1
  47. letta/services/tool_manager.py +46 -9
  48. letta/utils.py +6 -2
  49. {letta_nightly-0.11.7.dev20250914103918.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/METADATA +1 -1
  50. {letta_nightly-0.11.7.dev20250914103918.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/RECORD +53 -65
  51. letta/prompts/system/memgpt_base.txt +0 -54
  52. letta/prompts/system/memgpt_chat_compressed.txt +0 -13
  53. letta/prompts/system/memgpt_chat_fstring.txt +0 -51
  54. letta/prompts/system/memgpt_convo_only.txt +0 -12
  55. letta/prompts/system/memgpt_doc.txt +0 -50
  56. letta/prompts/system/memgpt_gpt35_extralong.txt +0 -53
  57. letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -31
  58. letta/prompts/system/memgpt_memory_only.txt +0 -29
  59. letta/prompts/system/memgpt_modified_chat.txt +0 -23
  60. letta/prompts/system/memgpt_modified_o1.txt +0 -31
  61. letta/prompts/system/memgpt_offline_memory.txt +0 -23
  62. letta/prompts/system/memgpt_offline_memory_chat.txt +0 -35
  63. letta/prompts/system/memgpt_sleeptime_chat.txt +0 -52
  64. letta/prompts/system/sleeptime.txt +0 -37
  65. {letta_nightly-0.11.7.dev20250914103918.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/WHEEL +0 -0
  66. {letta_nightly-0.11.7.dev20250914103918.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/entry_points.txt +0 -0
  67. {letta_nightly-0.11.7.dev20250914103918.dist-info → letta_nightly-0.11.7.dev20250916104104.dist-info}/licenses/LICENSE +0 -0
@@ -3542,19 +3542,27 @@ class AgentManager:
3542
3542
  @enforce_types
3543
3543
  @trace_method
3544
3544
  async def list_tags_async(
3545
- self, actor: PydanticUser, after: Optional[str] = None, limit: Optional[int] = 50, query_text: Optional[str] = None
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
- after: Cursor for forward pagination.
3553
- limit: Maximum number of tags to return.
3554
- query text to filter tags by.
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
- query = query.where(AgentsTags.tag > after)
3586
+ if ascending:
3587
+ query = query.where(AgentsTags.tag > after)
3588
+ else:
3589
+ query = query.where(AgentsTags.tag < after)
3578
3590
 
3579
- query = query.order_by(AgentsTags.tag).limit(limit)
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)
@@ -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,
@@ -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=True)
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
- """List all providers with optional pagination."""
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]:
@@ -230,15 +230,25 @@ class SourceManager:
230
230
  @enforce_types
231
231
  @trace_method
232
232
  async def list_sources(
233
- self, actor: PydanticUser, after: Optional[str] = None, limit: Optional[int] = 50, **kwargs
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]
@@ -197,12 +197,16 @@ class StepManager:
197
197
 
198
198
  @enforce_types
199
199
  @trace_method
200
- async def add_feedback_async(self, step_id: str, feedback: Optional[FeedbackType], actor: PydanticUser) -> PydanticStep:
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
 
@@ -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 optional pagination."""
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
- # Apply pagination if specified
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
- query = query.where(
424
- or_(
425
- ToolModel.created_at < after_tool.created_at,
426
- and_(ToolModel.created_at == after_tool.created_at, ToolModel.id < after_tool.id),
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
- # Order by created_at and id for consistent pagination
435
- query = query.order_by(ToolModel.created_at.desc(), ToolModel.id.desc())
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
- human_text = open(file_path, encoding="utf-8").read().strip()
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
- persona_text = open(file_path, encoding="utf-8").read().strip()
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})"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: letta-nightly
3
- Version: 0.11.7.dev20250914103918
3
+ Version: 0.11.7.dev20250916104104
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  Author-email: Letta Team <contact@letta.com>
6
6
  License: Apache License
@@ -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=bSq3St7MUw9gN1g0ICdOhNNaUFYBC3EfJLG6qsRLSFA,43290
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=KALhhEBbFND1Ft5WWcCDvtWx-jvE26QQfppOR0pF8p4,25273
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=euiNpOOt2GiMya0YSXP2S7YReallR0vXdYpgLRVTgaA,7025
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=qH_aR5BSwd8ctvbo_Xynietvtudpf7zLsMWsKUw9V1w,1015
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/system/memgpt_base.txt,sha256=J5BfmLzUpoVEL-Y3mF2DiZHHqZx_7NIiTD5vGDPcvx8,5181
230
- letta/prompts/system/memgpt_chat.txt,sha256=2tOfLG89vOxBBD7vYOQhIWardJFJ4tO2VUFYcA0NAZo,5420
231
- letta/prompts/system/memgpt_chat_compressed.txt,sha256=_gMDjc8tcigLfJ3fOXryz31_DJxSQM812T3J-aw7x0w,1056
232
- letta/prompts/system/memgpt_chat_fstring.txt,sha256=N6KSRwu-dcnDBLpCeqCdgM9lI0CnR3uIVPFcrCCa0V0,4720
233
- letta/prompts/system/memgpt_convo_only.txt,sha256=-x2NDaV_lz5C-sRK1Fo_U_XGW7jtY_br6VBM2NgtM9Y,868
234
- letta/prompts/system/memgpt_doc.txt,sha256=AsT55NOORoH-K-p0fxklrDRZ3qHs4MIKMuR-M4SSU4E,4768
235
- letta/prompts/system/memgpt_generate_tool.txt,sha256=S09fTYUCoyeRr6r1xXmhGsumDDZOys7YHFpHShEM_w0,6589
236
- letta/prompts/system/memgpt_gpt35_extralong.txt,sha256=FheNhYoIzNz6qnJKhVquZVSMj3HduC48reFaX7Pf7ig,5046
237
- letta/prompts/system/memgpt_intuitive_knowledge.txt,sha256=sA7c3urYqREVnSBI81nTGImXAekqC0Fxc7RojFqud1g,2966
238
- letta/prompts/system/memgpt_memory_only.txt,sha256=p63yl5dRigC9dj1h4g0gRuYmScp1j43efhFnfNxSbUs,2509
239
- letta/prompts/system/memgpt_modified_chat.txt,sha256=F_yD4ZcR4aGDE3Z98tI7e609GYekY-fEYomNsCcuV6o,4656
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=IT3RnZJWNIaTdFEEyveZb47o9PIzDT_2pIgpPBVN7iU,19326
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=ohM1i8BsNxTiw8duuRT5X_0tSUzBwctQM4fJ5DXURic,5157
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=2lGLtfgB2ZtAa0EgaiaDlNV0GJhAi_kQQy7XqXB2DG0,77771
359
- letta/server/rest_api/routers/v1/blocks.py,sha256=ykI77xnmIxPLqdAy5kzGyGw0w0ZRyVXn-O5Xcdj6-70,7690
360
- letta/server/rest_api/routers/v1/embeddings.py,sha256=PRaQlrmEXPiIdWsTbadrFsv3Afyv5oEFUdhgHA8FTi8,989
361
- letta/server/rest_api/routers/v1/folders.py,sha256=8Yb-bw2JdXBxMfrJNIZQk9_FKN2fet9Ccp8T83_c2sc,23539
362
- letta/server/rest_api/routers/v1/groups.py,sha256=PlCKfG1ZUubg-bNVRBmqJNBMvvZtHDvT50LUKKd0w9I,11466
363
- letta/server/rest_api/routers/v1/health.py,sha256=MoOjkydhGcJXTiuJrKIB0etVXiRMdTa51S8RQ8-50DQ,399
364
- letta/server/rest_api/routers/v1/identities.py,sha256=KUfw6avQIVHNw2lWz4pXOyTOPVy1g19CJGG-zayORl8,7858
365
- letta/server/rest_api/routers/v1/internal_templates.py,sha256=wY7tUmF7kZEVnjBVsw3_Tez4U2c8SABDJ2vplsKxhzM,11211
366
- letta/server/rest_api/routers/v1/jobs.py,sha256=ZcP_cqxgixCEYNtKVMqN1FwErNY-945h7XZhQV4vcEE,4933
367
- letta/server/rest_api/routers/v1/llms.py,sha256=0VJuuGW9_ta0cBnSDtXd3Ngw7GjsqEN2NBf5U3b6M3I,1920
368
- letta/server/rest_api/routers/v1/messages.py,sha256=J4Sbn8oMX24_OoBpHFLpcJi7vgJxeihmu36EgcPmfjk,7662
369
- letta/server/rest_api/routers/v1/organizations.py,sha256=OnG2vMDZEmN4eEvj24CPwiV76ImHQuHi2ojrgwJnw7I,2925
370
- letta/server/rest_api/routers/v1/providers.py,sha256=rypNWQ1VMjmZJYd48uvNGJsE2N22jDTxn89qvbDaOMs,4765
371
- letta/server/rest_api/routers/v1/runs.py,sha256=WnYwoFNjHNZicTnCkvoXCxl0XiyVAEvF70TTaMCBhPw,12982
372
- letta/server/rest_api/routers/v1/sandbox_configs.py,sha256=f0xEOwR3PXqCS2HOjEv7UKfMWTwEaTHx105HW_X-LI4,8852
373
- letta/server/rest_api/routers/v1/sources.py,sha256=nXZxtHi40281VltWmx1RwGBbau_00UpzDS6teTLvt2w,22679
374
- letta/server/rest_api/routers/v1/steps.py,sha256=bTzfz1GR3VEZdJRYUGiSr6ZLd12i5faPsf3oAqu1eMk,5570
375
- letta/server/rest_api/routers/v1/tags.py,sha256=ef94QitUSJ3NQVffWF1ZqANUZ2b2jRyGHp_I3UUjhno,912
376
- letta/server/rest_api/routers/v1/telemetry.py,sha256=eSTg7mWbuwPb2OTHQxwRM0EUEl49wHzNB6i1xJtH8BQ,1036
377
- letta/server/rest_api/routers/v1/tools.py,sha256=UMtJj3bX8fVe0VuuU5JS0TeaFimEzZ4YRyphSO2tQMU,51085
378
- letta/server/rest_api/routers/v1/users.py,sha256=J1vaTbS1UrBMgnPya7GdZ2wr3L9XHmkm6qdGY6pWaOI,2366
379
- letta/server/rest_api/routers/v1/voice.py,sha256=ghMBp5Uovbf0-3nN6d9P5kpl1hHACLRMhIDGQp96G9Q,1986
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=KaJRTWwvA1SpfKQFPPVCeYxIOKwpKmLMioeyHuGw63Y,168884
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=d4uX8RblmqNGk1MsfeGzQ5uDWKVFP-AH63Jz5xOkj2c,31364
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=dD4DDHjOptMrtbWqw1ErlhpBqChw2ubLJdILjeLTY8I,29183
399
- letta/services/identity_manager.py,sha256=JI9Xc7EsBagSwDS2na4rFNhoO_LuaxlkVO_1oIK_ITQ,11841
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=vysp_SgJDezn6YymOfTiNVKOF93EK_dLhsM7upzSjrM,10727
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=mH9l2KJ9R7yG1vdqhltOIVsAajQP4KbueKcB7ZgN0QA,18624
410
- letta/services/step_manager.py,sha256=RLDdxyPI0bxlp2CWr1zzGuNbyR6CAttw4wThpOQAQyE,20891
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=zh52n6StaFF5-v6nu0kdNSzJq4du5ACv5iGw5_Y9EDM,43192
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.dev20250914103918.dist-info/METADATA,sha256=znAgbibaDvvLthC_McJ-W-HokPJdRIUijKN7KtgqoE0,24424
474
- letta_nightly-0.11.7.dev20250914103918.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
475
- letta_nightly-0.11.7.dev20250914103918.dist-info/entry_points.txt,sha256=m-94Paj-kxiR6Ktu0us0_2qfhn29DzF2oVzqBE6cu8w,41
476
- letta_nightly-0.11.7.dev20250914103918.dist-info/licenses/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
477
- letta_nightly-0.11.7.dev20250914103918.dist-info/RECORD,,
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,,