letta-nightly 0.11.0.dev20250807104511__py3-none-any.whl → 0.11.0.dev20250808055434__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 (27) hide show
  1. letta/agent.py +2 -1
  2. letta/agents/letta_agent.py +215 -143
  3. letta/functions/function_sets/base.py +2 -2
  4. letta/functions/function_sets/files.py +22 -9
  5. letta/interfaces/anthropic_streaming_interface.py +291 -265
  6. letta/interfaces/openai_streaming_interface.py +270 -250
  7. letta/llm_api/anthropic.py +3 -10
  8. letta/llm_api/openai_client.py +6 -1
  9. letta/orm/__init__.py +1 -0
  10. letta/orm/step.py +14 -0
  11. letta/orm/step_metrics.py +71 -0
  12. letta/schemas/enums.py +9 -0
  13. letta/schemas/llm_config.py +8 -6
  14. letta/schemas/providers/lmstudio.py +2 -2
  15. letta/schemas/providers/openai.py +1 -1
  16. letta/schemas/step.py +6 -0
  17. letta/schemas/step_metrics.py +23 -0
  18. letta/schemas/tool_rule.py +10 -29
  19. letta/services/step_manager.py +179 -1
  20. letta/services/tool_executor/builtin_tool_executor.py +4 -1
  21. letta/services/tool_executor/core_tool_executor.py +2 -10
  22. letta/services/tool_executor/files_tool_executor.py +89 -40
  23. {letta_nightly-0.11.0.dev20250807104511.dist-info → letta_nightly-0.11.0.dev20250808055434.dist-info}/METADATA +1 -1
  24. {letta_nightly-0.11.0.dev20250807104511.dist-info → letta_nightly-0.11.0.dev20250808055434.dist-info}/RECORD +27 -25
  25. {letta_nightly-0.11.0.dev20250807104511.dist-info → letta_nightly-0.11.0.dev20250808055434.dist-info}/LICENSE +0 -0
  26. {letta_nightly-0.11.0.dev20250807104511.dist-info → letta_nightly-0.11.0.dev20250808055434.dist-info}/WHEEL +0 -0
  27. {letta_nightly-0.11.0.dev20250807104511.dist-info → letta_nightly-0.11.0.dev20250808055434.dist-info}/entry_points.txt +0 -0
@@ -32,10 +32,12 @@ class LettaFileToolExecutor(ToolExecutor):
32
32
  MAX_FILE_SIZE_BYTES = 50 * 1024 * 1024 # 50MB limit per file
33
33
  MAX_TOTAL_CONTENT_SIZE = 200 * 1024 * 1024 # 200MB total across all files
34
34
  MAX_REGEX_COMPLEXITY = 1000 # Prevent catastrophic backtracking
35
- MAX_MATCHES_PER_FILE = 20 # Limit matches per file
36
- MAX_TOTAL_MATCHES = 50 # Global match limit
35
+ MAX_MATCHES_PER_FILE = 20 # Limit matches per file (legacy, not used with new pagination)
36
+ MAX_TOTAL_MATCHES = 50 # Keep original value for semantic search
37
+ GREP_PAGE_SIZE = 20 # Number of grep matches to show per page
37
38
  GREP_TIMEOUT_SECONDS = 30 # Max time for grep_files operation
38
39
  MAX_CONTEXT_LINES = 1 # Lines of context around matches
40
+ MAX_TOTAL_COLLECTED = 1000 # Reasonable upper limit to prevent memory issues
39
41
 
40
42
  def __init__(
41
43
  self,
@@ -298,7 +300,12 @@ class LettaFileToolExecutor(ToolExecutor):
298
300
 
299
301
  @trace_method
300
302
  async def grep_files(
301
- self, agent_state: AgentState, pattern: str, include: Optional[str] = None, context_lines: Optional[int] = 3
303
+ self,
304
+ agent_state: AgentState,
305
+ pattern: str,
306
+ include: Optional[str] = None,
307
+ context_lines: Optional[int] = 1,
308
+ offset: Optional[int] = None,
302
309
  ) -> str:
303
310
  """
304
311
  Search for pattern in all attached files and return matches with context.
@@ -308,7 +315,9 @@ class LettaFileToolExecutor(ToolExecutor):
308
315
  pattern: Regular expression pattern to search for
309
316
  include: Optional pattern to filter filenames to include in the search
310
317
  context_lines (Optional[int]): Number of lines of context to show before and after each match.
311
- Equivalent to `-C` in grep_files. Defaults to 3.
318
+ Equivalent to `-C` in grep_files. Defaults to 1.
319
+ offset (Optional[int]): Number of matches to skip before showing results. Used for pagination.
320
+ Defaults to 0 (show from first match).
312
321
 
313
322
  Returns:
314
323
  Formatted string with search results, file names, line numbers, and context
@@ -350,14 +359,18 @@ class LettaFileToolExecutor(ToolExecutor):
350
359
  if not file_agents:
351
360
  return f"No files match the filename pattern '{include}' (filtered {original_count} files)"
352
361
 
362
+ # Validate offset parameter
363
+ if offset is not None and offset < 0:
364
+ offset = 0 # Treat negative offsets as 0
365
+
353
366
  # Compile regex pattern with appropriate flags
354
367
  regex_flags = re.MULTILINE
355
368
  regex_flags |= re.IGNORECASE
356
369
 
357
370
  pattern_regex = re.compile(pattern, regex_flags)
358
371
 
359
- results = []
360
- total_matches = 0
372
+ # Collect all matches first (up to a reasonable limit)
373
+ all_matches = [] # List of tuples: (file_name, line_num, context_lines)
361
374
  total_content_size = 0
362
375
  files_processed = 0
363
376
  files_skipped = 0
@@ -365,7 +378,7 @@ class LettaFileToolExecutor(ToolExecutor):
365
378
 
366
379
  # Use asyncio timeout to prevent hanging
367
380
  async def _search_files():
368
- nonlocal results, total_matches, total_content_size, files_processed, files_skipped, files_with_matches
381
+ nonlocal all_matches, total_content_size, files_processed, files_skipped, files_with_matches
369
382
 
370
383
  for file_agent in file_agents:
371
384
  # Load file content
@@ -383,7 +396,6 @@ class LettaFileToolExecutor(ToolExecutor):
383
396
  self.logger.warning(
384
397
  f"Grep: Skipping file {file.file_name} - too large ({content_size:,} bytes > {self.MAX_FILE_SIZE_BYTES:,} limit)"
385
398
  )
386
- results.append(f"[SKIPPED] {file.file_name}: File too large ({content_size:,} bytes)")
387
399
  continue
388
400
 
389
401
  # Check total content size across all files
@@ -393,11 +405,9 @@ class LettaFileToolExecutor(ToolExecutor):
393
405
  self.logger.warning(
394
406
  f"Grep: Skipping file {file.file_name} - total content size limit exceeded ({total_content_size:,} bytes > {self.MAX_TOTAL_CONTENT_SIZE:,} limit)"
395
407
  )
396
- results.append(f"[SKIPPED] {file.file_name}: Total content size limit exceeded")
397
408
  break
398
409
 
399
410
  files_processed += 1
400
- file_matches = 0
401
411
 
402
412
  # Use LineChunker to get all lines with proper formatting
403
413
  chunker = LineChunker()
@@ -407,16 +417,10 @@ class LettaFileToolExecutor(ToolExecutor):
407
417
  if formatted_lines and formatted_lines[0].startswith("[Viewing"):
408
418
  formatted_lines = formatted_lines[1:]
409
419
 
410
- # LineChunker now returns 1-indexed line numbers, so no conversion needed
411
-
412
420
  # Search for matches in formatted lines
413
421
  for formatted_line in formatted_lines:
414
- if total_matches >= self.MAX_TOTAL_MATCHES:
415
- results.append(f"[TRUNCATED] Maximum total matches ({self.MAX_TOTAL_MATCHES}) reached")
416
- return
417
-
418
- if file_matches >= self.MAX_MATCHES_PER_FILE:
419
- results.append(f"[TRUNCATED] {file.file_name}: Maximum matches per file ({self.MAX_MATCHES_PER_FILE}) reached")
422
+ if len(all_matches) >= self.MAX_TOTAL_COLLECTED:
423
+ # Stop collecting if we hit the upper limit
420
424
  break
421
425
 
422
426
  # Extract line number and content from formatted line
@@ -433,16 +437,11 @@ class LettaFileToolExecutor(ToolExecutor):
433
437
  files_with_matches.add(file.file_name)
434
438
  context = self._get_context_lines(formatted_lines, match_line_num=line_num, context_lines=context_lines or 0)
435
439
 
436
- # Format the match result
437
- match_header = f"\n=== {file.file_name}:{line_num} ==="
438
- match_content = "\n".join(context)
439
- results.append(f"{match_header}\n{match_content}")
440
-
441
- file_matches += 1
442
- total_matches += 1
440
+ # Store match data for later pagination
441
+ all_matches.append((file.file_name, line_num, context))
443
442
 
444
- # Break if global limits reached
445
- if total_matches >= self.MAX_TOTAL_MATCHES:
443
+ # Break if we've collected enough matches
444
+ if len(all_matches) >= self.MAX_TOTAL_COLLECTED:
446
445
  break
447
446
 
448
447
  # Execute with timeout
@@ -452,8 +451,9 @@ class LettaFileToolExecutor(ToolExecutor):
452
451
  if files_with_matches:
453
452
  await self.files_agents_manager.mark_access_bulk(agent_id=agent_state.id, file_names=list(files_with_matches), actor=self.actor)
454
453
 
455
- # Format final results
456
- if not results or total_matches == 0:
454
+ # Handle no matches case
455
+ total_matches = len(all_matches)
456
+ if total_matches == 0:
457
457
  summary = f"No matches found for pattern: '{pattern}'"
458
458
  if include:
459
459
  summary += f" in files matching '{include}'"
@@ -461,21 +461,70 @@ class LettaFileToolExecutor(ToolExecutor):
461
461
  summary += f" (searched {files_processed} files, skipped {files_skipped})"
462
462
  return summary
463
463
 
464
- # Add summary header
465
- summary_parts = [f"Found {total_matches} matches"]
466
- if files_processed > 0:
467
- summary_parts.append(f"in {files_processed} files")
464
+ # Apply pagination
465
+ start_idx = offset if offset else 0
466
+ end_idx = start_idx + self.GREP_PAGE_SIZE
467
+ paginated_matches = all_matches[start_idx:end_idx]
468
+
469
+ # Check if we hit the collection limit
470
+ hit_collection_limit = len(all_matches) >= self.MAX_TOTAL_COLLECTED
471
+
472
+ # Format the paginated results
473
+ results = []
474
+
475
+ # Build summary showing the range of matches displayed
476
+ if hit_collection_limit:
477
+ # We collected MAX_TOTAL_COLLECTED but there might be more
478
+ summary = f"Found {self.MAX_TOTAL_COLLECTED}+ total matches across {len(files_with_matches)} files (showing matches {start_idx + 1}-{min(end_idx, total_matches)} of {self.MAX_TOTAL_COLLECTED}+)"
479
+ else:
480
+ # We found all matches
481
+ summary = f"Found {total_matches} total matches across {len(files_with_matches)} files (showing matches {start_idx + 1}-{min(end_idx, total_matches)} of {total_matches})"
482
+
468
483
  if files_skipped > 0:
469
- summary_parts.append(f"({files_skipped} files skipped)")
484
+ summary += f"\nNote: Skipped {files_skipped} files due to size limits"
470
485
 
471
- summary = " ".join(summary_parts) + f" for pattern: '{pattern}'"
472
- if include:
473
- summary += f" in files matching '{include}'"
486
+ results.append(summary)
487
+ results.append("=" * 80)
474
488
 
475
- # Combine all results
476
- formatted_results = [summary, "=" * len(summary)] + results
489
+ # Add file summary - count matches per file
490
+ file_match_counts = {}
491
+ for file_name, _, _ in all_matches:
492
+ file_match_counts[file_name] = file_match_counts.get(file_name, 0) + 1
477
493
 
478
- return "\n".join(formatted_results)
494
+ # Sort files by match count (descending) for better overview
495
+ sorted_files = sorted(file_match_counts.items(), key=lambda x: x[1], reverse=True)
496
+
497
+ results.append("\nFiles with matches:")
498
+ for file_name, count in sorted_files:
499
+ if hit_collection_limit and count >= self.MAX_TOTAL_COLLECTED:
500
+ results.append(f" - {file_name}: {count}+ matches")
501
+ else:
502
+ results.append(f" - {file_name}: {count} matches")
503
+ results.append("") # blank line before matches
504
+
505
+ # Format each match in the current page
506
+ for file_name, line_num, context_lines in paginated_matches:
507
+ match_header = f"\n=== {file_name}:{line_num} ==="
508
+ match_content = "\n".join(context_lines)
509
+ results.append(f"{match_header}\n{match_content}")
510
+
511
+ # Add navigation hint
512
+ results.append("") # blank line
513
+ if end_idx < total_matches:
514
+ if hit_collection_limit:
515
+ results.append(f'To see more matches, call: grep_files(pattern="{pattern}", offset={end_idx})')
516
+ results.append(
517
+ f"Note: Only the first {self.MAX_TOTAL_COLLECTED} matches were collected. There may be more matches beyond this limit."
518
+ )
519
+ else:
520
+ results.append(f'To see more matches, call: grep_files(pattern="{pattern}", offset={end_idx})')
521
+ else:
522
+ if hit_collection_limit:
523
+ results.append("Showing last page of collected matches. There may be more matches beyond the collection limit.")
524
+ else:
525
+ results.append("No more matches to show.")
526
+
527
+ return "\n".join(results)
479
528
 
480
529
  @trace_method
481
530
  async def semantic_search_files(self, agent_state: AgentState, query: str, limit: int = 5) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.11.0.dev20250807104511
3
+ Version: 0.11.0.dev20250808055434
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -1,12 +1,12 @@
1
1
  letta/__init__.py,sha256=egWzLDPN65F8R6kmzwHODXfUKI4dzKd394hsXrmPsbs,1321
2
- letta/agent.py,sha256=NkMG99YA42I_Vv7mi21QLAu6_axG3L8wNWNgGr4iXrg,89341
2
+ letta/agent.py,sha256=o591CrbxIepAfmVdZv7OVBCQsfAvKqv_HTd89LYPgu8,89462
3
3
  letta/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  letta/agents/base_agent.py,sha256=-hrG_4iNba2e68LF8nzfPKeCviBdoWZ6jODd798ryt0,7796
5
5
  letta/agents/ephemeral_agent.py,sha256=el-SUF_16vv_7OouIR-6z0pAE9Yc0PLibygvfCKwqfo,2736
6
6
  letta/agents/ephemeral_summary_agent.py,sha256=tOldA_daa_PduTJ2RA7fAo9Rv6sUb-C_9dJaD6iujS4,4454
7
7
  letta/agents/exceptions.py,sha256=BQY4D4w32OYHM63CM19ko7dPwZiAzUs3NbKvzmCTcJg,318
8
8
  letta/agents/helpers.py,sha256=9skIeui2yF-5DH9P3bCK1pcegk4nVZAtKMVaDqdQExo,10021
9
- letta/agents/letta_agent.py,sha256=tMR1mTTTGM5WM8YVFlxNjxpwf2KRtuLMW8nY3_nHuUM,73744
9
+ letta/agents/letta_agent.py,sha256=BSYS02s2AIqOF8idBFRafLBAi_DIOZSgS_I1fw40tdk,76852
10
10
  letta/agents/letta_agent_batch.py,sha256=17RpYVXpGh9dlKxdMOLMCOHWFsi6N5S9FJHxooxkJCI,27998
11
11
  letta/agents/voice_agent.py,sha256=rgrayoGRS344oSNg3jD-awHzEC67hYbecPPhfkKu27k,23325
12
12
  letta/agents/voice_sleeptime_agent.py,sha256=_JzCbWBOKrmo1cTaqZFTrQudpJEapwAyrXYtAHUILGo,8675
@@ -27,10 +27,10 @@ letta/functions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  letta/functions/ast_parsers.py,sha256=0dXAN4qx3pWL_Y0aoEkaBpMKwI-kpoLEJftjW3v2I4E,5031
28
28
  letta/functions/async_composio_toolset.py,sha256=IuhZTVghPDXRsehOOZsEEiJGYyjWjDTQc2xrjTg0yBo,4786
29
29
  letta/functions/composio_helpers.py,sha256=mpybCYcB93HWoKrmQIqcuRQG9IH2lHWhsPQx2i8XP_8,3593
30
- letta/functions/function_sets/base.py,sha256=0ATU1_jx0g1HfeP1rK3_t5Mlardsk9EvYTMJ0H5pIp4,16075
30
+ letta/functions/function_sets/base.py,sha256=S-Y5iU8OlPb6IgA7mqzJBYaeKvPmfOYD1mc1v8QPGzg,16043
31
31
  letta/functions/function_sets/builtin.py,sha256=UR54nwIXZl4NkF9c_IMpTxf2e9yPO_LGZ-joIeeI9TI,2009
32
32
  letta/functions/function_sets/extras.py,sha256=mG7jCd2RUsf1w9G8mVcv26twJWpiDhbWI6VvnLZoEOk,4899
33
- letta/functions/function_sets/files.py,sha256=swMuHkwQrgYTYXUpHTBiuUB0cPUHMeJ19rzPszWwK9k,3615
33
+ letta/functions/function_sets/files.py,sha256=I2TAOVo_6-G-pbjFve8ocF2zn3b0aJ_ismK4ZPop3v8,4450
34
34
  letta/functions/function_sets/multi_agent.py,sha256=Vze76mj0YGZQYmWEzknnf3vEf-O7gcCUPQead7HH3FQ,7045
35
35
  letta/functions/function_sets/voice.py,sha256=_gmFEj3fSFb-4eMM-ddSOm-Vk1ShIVjpchZI7MQKwSA,3191
36
36
  letta/functions/functions.py,sha256=0lPsB_IRNP-Ld5RHnzs59Pw6f4BzWllRAYuoW6ntV8M,5939
@@ -68,9 +68,9 @@ letta/humans/examples/basic.txt,sha256=Lcp8YESTWvOJgO4Yf_yyQmgo5bKakeB1nIVrwEGG6
68
68
  letta/humans/examples/cs_phd.txt,sha256=9C9ZAV_VuG7GB31ksy3-_NAyk8rjE6YtVOkhp08k1xw,297
69
69
  letta/interface.py,sha256=4MLY-bRH4lWNW8vL9L5nwu1_Yh_CeV4KVWACNKhkS5U,13023
70
70
  letta/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
- letta/interfaces/anthropic_streaming_interface.py,sha256=X_3_hItiVTWYPYMAAi-y7TyeZj0NzjX3Mcm_kleZI2U,24056
71
+ letta/interfaces/anthropic_streaming_interface.py,sha256=PL9MWH4KWbSI33hF7XR6cg6c_uXzckwCk8l7xl_-43s,22796
72
72
  letta/interfaces/openai_chat_completions_streaming_interface.py,sha256=3xHXh8cW79EkiMUTYfvcH_s92nkLjxXfvtVOVC3bfLo,5050
73
- letta/interfaces/openai_streaming_interface.py,sha256=DBisDu_ueN7t6dRkidHmjWqDjrCASWx2ESn1Lg-4mt4,24637
73
+ letta/interfaces/openai_streaming_interface.py,sha256=66dx2PlcA2bFn9kjWpe1e1PSsoq6b8sQ79-YMRaTrJM,23181
74
74
  letta/interfaces/utils.py,sha256=c6jvO0dBYHh8DQnlN-B0qeNC64d3CSunhfqlFA4pJTY,278
75
75
  letta/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
76
  letta/jobs/helpers.py,sha256=kO4aj954xsQ1RAmkjY6LQQ7JEIGuhaxB1e9pzrYKHAY,914
@@ -78,7 +78,7 @@ letta/jobs/llm_batch_job_polling.py,sha256=HUCTa1lTOiLAB_8m95RUfeNJa4lxlF8paGdCV
78
78
  letta/jobs/scheduler.py,sha256=Ub5VTCA8P5C9Y-0mPK2YIPJSEzKbSd2l5Sp0sOWctD8,8697
79
79
  letta/jobs/types.py,sha256=K8GKEnqEgAT6Kq4F2hUrBC4ZAFM9OkfOjVMStzxKuXQ,742
80
80
  letta/llm_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- letta/llm_api/anthropic.py,sha256=dkP3hxZXb_Oi0w99acvasrFMxdnwIHImK8O4gI3D8fs,47933
81
+ letta/llm_api/anthropic.py,sha256=eRSR_dxoijIuCh8o-MOdPbye535muBQdlEWBy_2iwZw,47770
82
82
  letta/llm_api/anthropic_client.py,sha256=ZT060rqSPj4vdb-U0u9AAaSOSNkifyzDb1MsL6RRwug,28938
83
83
  letta/llm_api/aws_bedrock.py,sha256=b5Gj0LH4WrFF7ieo6-xx7Zqa4mB9JDVUF50zP_lODQU,3119
84
84
  letta/llm_api/azure_openai.py,sha256=YAkXwKyfnJFNhB45pkJVFsoxUNB_M74rQYchtw_CN6I,5099
@@ -95,7 +95,7 @@ letta/llm_api/llm_client.py,sha256=kTjlhCzefwfRnD0AituXq1tRcQ3WnYwp9YSoNxCW124,2
95
95
  letta/llm_api/llm_client_base.py,sha256=P678pt6IFDZRJbSkn213trs63k5zdsvdzTw21_iuGlg,8528
96
96
  letta/llm_api/mistral.py,sha256=lNVYLNdULpqjMLX-5Cnw61dXVdh9T5H3Zg4UPhx9zQU,663
97
97
  letta/llm_api/openai.py,sha256=Jam6eWrn2dbIovwdSODLXbyEkMLbhEiOCHWVMrfFLlk,27447
98
- letta/llm_api/openai_client.py,sha256=TZlMXt_DPnoeRJYhXD6-dE88VqwwYo-k3C1gB2tsFbg,20503
98
+ letta/llm_api/openai_client.py,sha256=2aU6_zapI5ylWlCFOoRp4p1Yc26vz1P8Ghz8K8r85hU,20677
99
99
  letta/llm_api/sample_response_jsons/aws_bedrock.json,sha256=RS3VqyxPB9hQQCPm42hWoga0bisKv_0e8ZF-c3Ag1FA,930
100
100
  letta/llm_api/sample_response_jsons/lmstudio_embedding_list.json,sha256=qHLtRuO1u7jFcaO0xaIMpRgCe74sSrya67IVPqS66fg,344
101
101
  letta/llm_api/sample_response_jsons/lmstudio_model_list.json,sha256=hrW4RifD5nty3Wx22NZ7GJB74HW4C75fIEaKrVFhwYM,448
@@ -141,7 +141,7 @@ letta/main.py,sha256=wj4cawl4HP2ok-CqKVvqzSiOMahHC4t8FWxvuKKTWUA,317
141
141
  letta/memory.py,sha256=l5iNhLAR_xzgTb0GBlQx4SVgH8kuZh8siJdC_CFPKEs,4278
142
142
  letta/openai_backcompat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
143
143
  letta/openai_backcompat/openai_object.py,sha256=GSzeCTwLpLD2fH4X8wVqzwdmoTjKK2I4PnriBY453lc,13505
144
- letta/orm/__init__.py,sha256=nimBMeTpFzrp2yJhprIb0BCLQi9cYS4lThuo8jkHDDQ,1545
144
+ letta/orm/__init__.py,sha256=xpzneR2_rhBXioci0VI27P9yh5GrWfetc9IJMBWVZNc,1592
145
145
  letta/orm/agent.py,sha256=YU1a-B1gQLC8WyguF2GEyYQXxHTP1b8BQxE5pD9Jjfw,17043
146
146
  letta/orm/agents_tags.py,sha256=-rWR8DoEiHM4yc9vAHgHuvjIwgMXMWzKnTKFlBBu3TQ,1076
147
147
  letta/orm/archive.py,sha256=tYUZBBkgwzONsurE6DPGfC2Yv0FJdN4fXOxJ6CtVASI,3481
@@ -178,7 +178,8 @@ letta/orm/source.py,sha256=lXuV7kq3xa7YsLQmrGsD3dB7Tp6B3CiCE6YcvJgmZSE,1415
178
178
  letta/orm/sources_agents.py,sha256=Ik_PokCBrXRd9wXWomeNeb8EtLUwjb9VMZ8LWXqpK5A,473
179
179
  letta/orm/sqlalchemy_base.py,sha256=mw_leKRvSskRswfiUTYP3Jk9Q7Io9rQJWyVEUGWyTaw,44900
180
180
  letta/orm/sqlite_functions.py,sha256=tbwePL5XciJIttoehyt1H17zdUXWAdjFqH0t-XaFJfk,7256
181
- letta/orm/step.py,sha256=Ly7QhFtHjTUNc9HuLOFVJxRNqU3RtHG2J0DLw2T1SXA,3769
181
+ letta/orm/step.py,sha256=p5VZacTCLKtVWPndFE0aTtv_xaRvB9i6_TVu7MejH14,4565
182
+ letta/orm/step_metrics.py,sha256=hZ4sjAZ6oAn-idHhVD_PNTkUS2trpxu2yny-xLgC7Yk,2488
182
183
  letta/orm/tool.py,sha256=VEHoZI5hB5u8g1xgvNF0Xm6iC85m5VnME0Bxg1VsgYw,2937
183
184
  letta/orm/tools_agents.py,sha256=r6t-V21w2_mG8n38zuUb5jOi_3hRxsjgezsLA4sg0m4,626
184
185
  letta/orm/user.py,sha256=rK5N5ViDxmesZMqVVHB7FcQNpcSoM-hB42MyI6q3MnI,1004
@@ -243,7 +244,7 @@ letta/schemas/archive.py,sha256=4jGat0hYHV6HhNgnOhixzEOaeUrnlxDGdouZXCCGn_g,1661
243
244
  letta/schemas/block.py,sha256=M2Azp7hY9KIdvVTnM07-ubpBqgTnIpoP-qCDduuEuDo,6247
244
245
  letta/schemas/embedding_config.py,sha256=W9sMDFNOYQcXIwJ2TuAQnap-0tzO7JpBpuDGyyLe9C0,3802
245
246
  letta/schemas/embedding_config_overrides.py,sha256=lkTa4y-EQ2RnaEKtKDM0sEAk7EwNa67REw8DGNNtGQY,84
246
- letta/schemas/enums.py,sha256=FDjNGLB9vCjPLmzpONicgaaDI0qhxP-ZF0EigmbPCsI,4028
247
+ letta/schemas/enums.py,sha256=_eh-kDE2JUnc0Mb5tf7GzK4Ilo3iI3nzFxdeoji4HsI,4195
247
248
  letta/schemas/environment_variables.py,sha256=VRtzOjdeQdHcSHXisk7oJUQlheruxhSWNS0xqlfGzbs,2429
248
249
  letta/schemas/file.py,sha256=kjv_xEuuo8Z5i7dOzugIdlAK_k2xHHLhugDgBq0-8Os,4763
249
250
  letta/schemas/folder.py,sha256=OpTj9idfGx6CEKDySeDEu3ZNDYjl8jJ02CH96RWPAVk,3309
@@ -259,7 +260,7 @@ letta/schemas/letta_request.py,sha256=GF7tSVjoAXukl1SXN2FBi8ZMaWOVRvuJuXPgEwbV7H
259
260
  letta/schemas/letta_response.py,sha256=e6FcAhRX3heB0FoWAAozB3RJboMwi_JpelTdc5JupVA,8188
260
261
  letta/schemas/letta_stop_reason.py,sha256=4t39UKMMsLuNM-9a0BG7Mi-zZ7YhYLFSEpTWc8_OyrQ,2035
261
262
  letta/schemas/llm_batch_job.py,sha256=xr7RmMc9ItmL344vcIn1MJaT2nOf0F7qEHrsXkQNFQI,3136
262
- letta/schemas/llm_config.py,sha256=_N48ftuAKlEMw44eLB5etCMCl0Ehq14P923ytB_7gi8,9472
263
+ letta/schemas/llm_config.py,sha256=-B--Tf4rHacp6zcIbSunwoiKRCcvoqY0frwMR_2a0V8,9412
263
264
  letta/schemas/llm_config_overrides.py,sha256=E6qJuVA8TwAAy3VjGitJ5jSQo5PbN-6VPcZOF5qhP9A,1815
264
265
  letta/schemas/mcp.py,sha256=_FKUSIoTLfx64buKqye-9fPET8-1_e2h9uYByNwTVio,10440
265
266
  letta/schemas/memory.py,sha256=45j0akHGSrShd8v8wW-7lJhFRNWi9rWEvFp8w6f1PUk,14142
@@ -287,10 +288,10 @@ letta/schemas/providers/google_gemini.py,sha256=VnC0rrjnUdUK08VLGhI290p7yDsUnOwD
287
288
  letta/schemas/providers/google_vertex.py,sha256=ooKgRXum1NOMGb4cJsOLPlFVw-TwAde9l-20ngEd9h4,2674
288
289
  letta/schemas/providers/groq.py,sha256=AquJQH-Y5-s75Nj2_X7xavuWUu5F2bSvHjAZ1GfpeyQ,1455
289
290
  letta/schemas/providers/letta.py,sha256=50VcmTMm8OEQjZgdlLypa4QmNPe0mJycpZfbxxSb_ts,1611
290
- letta/schemas/providers/lmstudio.py,sha256=fx1lfLG4K1x6RUeHEXr9pMnQ1IgMpK1XmW_Y23riwgw,4303
291
+ letta/schemas/providers/lmstudio.py,sha256=Hi8Nir96B5FCQ8cVT-mWl7nLX0Z2-RIxUANAqRGG-zo,4323
291
292
  letta/schemas/providers/mistral.py,sha256=EjFF6YcfN5jBjCfnZw3ECv_3qYuG0HVb7B0VoYk-jKU,1866
292
293
  letta/schemas/providers/ollama.py,sha256=iVx9xxrulG9ohbhk4kMtfryCnMgmynWg_NL4SesGX5U,6253
293
- letta/schemas/providers/openai.py,sha256=Et2NoOPWQ4xIn_WMP2ingZM_heLFM7SCtY6kHxCi9Tw,11042
294
+ letta/schemas/providers/openai.py,sha256=jlnMu3t1_IHWT4dGn8zZlbITl6wQl2X9onn_B2ZhV48,11051
294
295
  letta/schemas/providers/together.py,sha256=2zFca6Jy08r1ANrdvtlSIduyDr8ek9Tt1yYiz1S-5g8,3422
295
296
  letta/schemas/providers/vllm.py,sha256=CwM260cxWLkviVzY4wwkw4NmDAK69fv531AofRGa9JA,2480
296
297
  letta/schemas/providers/xai.py,sha256=KCYqE75msyhxTwy_ZxRU3t46UWCWATE4pSCJmBbf4Vo,2494
@@ -300,10 +301,11 @@ letta/schemas/run.py,sha256=1lVOWlHVbk9MYIOiIrE1gCoQvBhErKo7UMSeWyMExbw,2089
300
301
  letta/schemas/sandbox_config.py,sha256=FrHezpI8_s1wN5em6KAhFyvue0zJVDVv8oXDrm7wamo,5881
301
302
  letta/schemas/source.py,sha256=6f_f9fnFs78JR5cZqFniCeTT1DYGuMP9QSBBCiC8e4s,3281
302
303
  letta/schemas/source_metadata.py,sha256=_dGjuXhGcVMlc53ja9yuk16Uj64ggEzilRDgmkqYfNs,1334
303
- letta/schemas/step.py,sha256=q2wEU_GTNPqhsLe1frLu7WDA4SA5GPVE-9PRIJRFjw4,3039
304
+ letta/schemas/step.py,sha256=SKJfcaaqdaGZtaqsfzwAx_O_maDzsxYJYUtSBUZxSfE,3456
305
+ letta/schemas/step_metrics.py,sha256=TZQ02ZTGaQ9s4w4wfvDiiSw0S72baXqoAjjCKVNIkk0,1358
304
306
  letta/schemas/tool.py,sha256=oQycvQMlbaKJ54tevBwklneQdzdaMkLvle-F9poqsB0,12942
305
307
  letta/schemas/tool_execution_result.py,sha256=4P77llsUsZBnRd0PtPiC4VzGjx7i_-fUNgXQfCpMS9U,896
306
- letta/schemas/tool_rule.py,sha256=-Q_X_CBupDjp7lsEWk0JFzxLes6knmTT4Z9ImWsMD3I,10918
308
+ letta/schemas/tool_rule.py,sha256=e9pWC2kZvdnohQuCTAxm96UjczrPnSB_lEeVkBEBPN4,9743
307
309
  letta/schemas/usage.py,sha256=9SSTH5kUliwiVF14b-yKbDcmxQBOLg4YH5xhXDbW9UU,1281
308
310
  letta/schemas/user.py,sha256=GanbgD80N33FBjWKkv-MvUO01C0GHzrYmJ-o80wgLLI,1481
309
311
  letta/serialize_schemas/__init__.py,sha256=cosMjvWz7cubC1azbUofzYrcDBTuSgjJImUdsrSs3p0,77
@@ -420,16 +422,16 @@ letta/services/per_agent_lock_manager.py,sha256=cMaW8r-qhucQbiK27jVqz8wzhlr2yuRN
420
422
  letta/services/provider_manager.py,sha256=28HDjZflfV0EjhiMRYbY-wmZWRxrxscX-Z1ukZO2pc8,9617
421
423
  letta/services/sandbox_config_manager.py,sha256=-smC1Y3bjE6CmCEW3xbbka6AWu_eyayF18nFDHhWUNk,26114
422
424
  letta/services/source_manager.py,sha256=borlj2xDW-1PKbxzEfn1j5oNMLw4bb3ujOyn5UmmCrI,16844
423
- letta/services/step_manager.py,sha256=Ts-4vnLJnQ9DPVUgMPEoeNpm_NgckT2Tw_fnOj5gfF4,12169
425
+ letta/services/step_manager.py,sha256=kPk1qae18k4BP1UtKHAyhbLEB8lLXndWkdiIjLetMz4,18123
424
426
  letta/services/summarizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
425
427
  letta/services/summarizer/enums.py,sha256=lo2E1DKB-s2Ydx4PcLia1PIRUOY5yTSsFt_0EZVV2r0,279
426
428
  letta/services/summarizer/summarizer.py,sha256=n15G0h7VQrBu-E41YV6riClk5zk7PrCSn2zE9TBODOA,18589
427
429
  letta/services/telemetry_manager.py,sha256=Ur_VPgawiLIwDuxP9NHuz-hq_-S1vKIYThlB-doKZPY,3338
428
430
  letta/services/tool_executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
429
- letta/services/tool_executor/builtin_tool_executor.py,sha256=KzywqcNO0nLfR5FJ9Aq4a8s-T5H_PEbR6lXFFAEDk8c,17951
431
+ letta/services/tool_executor/builtin_tool_executor.py,sha256=S0m6IYTNPep34Tu51WoTIqm8YZvRVLQ1A3v7b_VeiVU,18107
430
432
  letta/services/tool_executor/composio_tool_executor.py,sha256=ia2AA_WDOseR8Ylam-HEayR7OiyfNSb1sSUrjwqlmFM,2308
431
- letta/services/tool_executor/core_tool_executor.py,sha256=mhtgmHo94mH26S6iurzY1Wl2wVVcdYzdTb5Npb9iHDM,20425
432
- letta/services/tool_executor/files_tool_executor.py,sha256=bhmerU0mgPhorxWNtKCfWrSMK8OnGwGEcmUhRSFJMD8,29731
433
+ letta/services/tool_executor/core_tool_executor.py,sha256=P8M78TaEP2p9EWEBDazf9fNPHtC_cjjPISZJTK8EigQ,20285
434
+ letta/services/tool_executor/files_tool_executor.py,sha256=XccmHsofLaV4QIBuD8TOpw1-ucBZvra0_x5eAO_Biyc,32123
433
435
  letta/services/tool_executor/mcp_tool_executor.py,sha256=mY2JqB6G4DOvRVWuiL9BbHOfAO2VlLBDmJrjL3TNc4E,1908
434
436
  letta/services/tool_executor/multi_agent_tool_executor.py,sha256=dfaZeldEnzJDg2jGHlGy3YXKjsJpokJW1tvVeoCCDrk,5496
435
437
  letta/services/tool_executor/sandbox_tool_executor.py,sha256=L40PtmhO_ry4FL3j_t5zFFdrpiZiYDABlDNHDdc7Imo,5355
@@ -454,8 +456,8 @@ letta/templates/summary_request_text.j2,sha256=ZttQwXonW2lk4pJLYzLK0pmo4EO4EtUUI
454
456
  letta/templates/template_helper.py,sha256=HkG3zwRc5NVGmSTQu5PUTpz7LevK43bzXVaQuN8urf0,1634
455
457
  letta/types/__init__.py,sha256=hokKjCVFGEfR7SLMrtZsRsBfsC7yTIbgKPLdGg4K1eY,147
456
458
  letta/utils.py,sha256=Fwwe2imHRamc_kucAATo8NXhwDG5NBoOIYmBaERXUhM,38384
457
- letta_nightly-0.11.0.dev20250807104511.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
458
- letta_nightly-0.11.0.dev20250807104511.dist-info/METADATA,sha256=V_W7M-gAAmYbBgEtbp4wS5s_Spkqmyt19zmmXA7XJDs,23281
459
- letta_nightly-0.11.0.dev20250807104511.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
460
- letta_nightly-0.11.0.dev20250807104511.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
461
- letta_nightly-0.11.0.dev20250807104511.dist-info/RECORD,,
459
+ letta_nightly-0.11.0.dev20250808055434.dist-info/LICENSE,sha256=mExtuZ_GYJgDEI38GWdiEYZizZS4KkVt2SF1g_GPNhI,10759
460
+ letta_nightly-0.11.0.dev20250808055434.dist-info/METADATA,sha256=oGIMFfhX6qRD55DEP_UdK596w0AMrKXiUlo-VWTAJfw,23281
461
+ letta_nightly-0.11.0.dev20250808055434.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
462
+ letta_nightly-0.11.0.dev20250808055434.dist-info/entry_points.txt,sha256=2zdiyGNEZGV5oYBuS-y2nAAgjDgcC9yM_mHJBFSRt5U,40
463
+ letta_nightly-0.11.0.dev20250808055434.dist-info/RECORD,,