letta-nightly 0.6.53.dev20250418104238__tar.gz → 0.6.54.dev20250419104029__tar.gz

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 (339) hide show
  1. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/PKG-INFO +2 -1
  2. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/__init__.py +1 -1
  3. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/agent.py +6 -31
  4. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/agents/letta_agent.py +1 -0
  5. letta_nightly-0.6.54.dev20250419104029/letta/agents/letta_agent_batch.py +515 -0
  6. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/constants.py +15 -4
  7. letta_nightly-0.6.54.dev20250419104029/letta/functions/function_sets/base.py +381 -0
  8. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/groups/sleeptime_multi_agent.py +3 -3
  9. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/helpers/converters.py +1 -1
  10. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/helpers/message_helper.py +1 -0
  11. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/jobs/llm_batch_job_polling.py +39 -10
  12. letta_nightly-0.6.54.dev20250419104029/letta/jobs/scheduler.py +71 -0
  13. letta_nightly-0.6.54.dev20250419104029/letta/jobs/types.py +30 -0
  14. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/anthropic_client.py +3 -1
  15. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/llm_api_tools.py +7 -1
  16. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/openai.py +2 -0
  17. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/agent.py +5 -29
  18. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/base.py +2 -2
  19. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/enums.py +1 -0
  20. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/job.py +5 -0
  21. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/llm_batch_items.py +2 -2
  22. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/llm_batch_job.py +5 -2
  23. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/message.py +12 -4
  24. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/passage.py +0 -6
  25. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/sqlalchemy_base.py +0 -3
  26. letta_nightly-0.6.54.dev20250419104029/letta/personas/examples/sleeptime_doc_persona.txt +2 -0
  27. letta_nightly-0.6.54.dev20250419104029/letta/prompts/system/sleeptime.txt +35 -0
  28. letta_nightly-0.6.54.dev20250419104029/letta/prompts/system/sleeptime_doc_ingest.txt +35 -0
  29. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/agent.py +24 -1
  30. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/enums.py +3 -1
  31. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/job.py +39 -0
  32. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/letta_message.py +24 -7
  33. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/letta_request.py +7 -2
  34. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/letta_response.py +3 -1
  35. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/llm_batch_job.py +4 -3
  36. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/llm_config.py +6 -2
  37. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/message.py +11 -1
  38. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/providers.py +10 -58
  39. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/serialize_schemas/marshmallow_agent.py +25 -22
  40. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/serialize_schemas/marshmallow_message.py +1 -1
  41. letta_nightly-0.6.54.dev20250419104029/letta/server/db.py +139 -0
  42. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/app.py +1 -0
  43. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/interface.py +7 -2
  44. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/__init__.py +2 -0
  45. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/agents.py +33 -6
  46. letta_nightly-0.6.54.dev20250419104029/letta/server/rest_api/routers/v1/messages.py +132 -0
  47. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/sources.py +21 -2
  48. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/utils.py +23 -10
  49. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/server.py +67 -21
  50. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/agent_manager.py +44 -21
  51. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/group_manager.py +2 -2
  52. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/helpers/agent_manager_helper.py +5 -3
  53. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/job_manager.py +34 -5
  54. letta_nightly-0.6.54.dev20250419104029/letta/services/llm_batch_manager.py +393 -0
  55. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/message_manager.py +23 -1
  56. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/passage_manager.py +2 -2
  57. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/tool_executor/tool_execution_manager.py +13 -3
  58. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/tool_executor/tool_execution_sandbox.py +0 -1
  59. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/tool_executor/tool_executor.py +48 -9
  60. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/tool_sandbox/base.py +24 -6
  61. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/tool_sandbox/e2b_sandbox.py +25 -5
  62. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/tool_sandbox/local_sandbox.py +23 -7
  63. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/settings.py +2 -2
  64. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/pyproject.toml +2 -1
  65. letta_nightly-0.6.53.dev20250418104238/letta/agents/letta_agent_batch.py +0 -164
  66. letta_nightly-0.6.53.dev20250418104238/letta/functions/function_sets/base.py +0 -234
  67. letta_nightly-0.6.53.dev20250418104238/letta/jobs/scheduler.py +0 -30
  68. letta_nightly-0.6.53.dev20250418104238/letta/jobs/types.py +0 -10
  69. letta_nightly-0.6.53.dev20250418104238/letta/prompts/system/sleeptime.txt +0 -26
  70. letta_nightly-0.6.53.dev20250418104238/letta/server/db.py +0 -113
  71. letta_nightly-0.6.53.dev20250418104238/letta/services/llm_batch_manager.py +0 -250
  72. letta_nightly-0.6.53.dev20250418104238/letta/sleeptime_agent.py +0 -61
  73. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/LICENSE +0 -0
  74. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/README.md +0 -0
  75. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/__main__.py +0 -0
  76. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/agents/__init__.py +0 -0
  77. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/agents/base_agent.py +0 -0
  78. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/agents/ephemeral_agent.py +0 -0
  79. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/agents/ephemeral_memory_agent.py +0 -0
  80. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/agents/helpers.py +0 -0
  81. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/agents/voice_agent.py +0 -0
  82. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/benchmark/benchmark.py +0 -0
  83. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/benchmark/constants.py +0 -0
  84. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/cli/cli.py +0 -0
  85. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/cli/cli_config.py +0 -0
  86. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/cli/cli_load.py +0 -0
  87. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/client/__init__.py +0 -0
  88. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/client/client.py +0 -0
  89. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/client/streaming.py +0 -0
  90. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/client/utils.py +0 -0
  91. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/config.py +0 -0
  92. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/data_sources/connectors.py +0 -0
  93. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/data_sources/connectors_helper.py +0 -0
  94. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/embeddings.py +0 -0
  95. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/errors.py +0 -0
  96. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/__init__.py +0 -0
  97. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/ast_parsers.py +0 -0
  98. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/function_sets/extras.py +0 -0
  99. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/function_sets/multi_agent.py +0 -0
  100. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/functions.py +0 -0
  101. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/helpers.py +0 -0
  102. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/interface.py +0 -0
  103. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/mcp_client/__init__.py +0 -0
  104. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/mcp_client/base_client.py +0 -0
  105. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/mcp_client/exceptions.py +0 -0
  106. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/mcp_client/sse_client.py +0 -0
  107. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/mcp_client/stdio_client.py +0 -0
  108. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/mcp_client/types.py +0 -0
  109. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/functions/schema_generator.py +0 -0
  110. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/groups/dynamic_multi_agent.py +0 -0
  111. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/groups/helpers.py +0 -0
  112. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/groups/round_robin_multi_agent.py +0 -0
  113. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/groups/supervisor_multi_agent.py +0 -0
  114. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/helpers/__init__.py +0 -0
  115. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/helpers/composio_helpers.py +0 -0
  116. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/helpers/datetime_helpers.py +0 -0
  117. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/helpers/json_helpers.py +0 -0
  118. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/helpers/tool_execution_helper.py +0 -0
  119. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/helpers/tool_rule_solver.py +0 -0
  120. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/humans/__init__.py +0 -0
  121. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/humans/examples/basic.txt +0 -0
  122. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/humans/examples/cs_phd.txt +0 -0
  123. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/interface.py +0 -0
  124. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/interfaces/__init__.py +0 -0
  125. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/interfaces/anthropic_streaming_interface.py +0 -0
  126. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
  127. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/interfaces/utils.py +0 -0
  128. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/jobs/__init__.py +0 -0
  129. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/jobs/helpers.py +0 -0
  130. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/__init__.py +0 -0
  131. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/anthropic.py +0 -0
  132. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/aws_bedrock.py +0 -0
  133. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/azure_openai.py +0 -0
  134. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/azure_openai_constants.py +0 -0
  135. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/cohere.py +0 -0
  136. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/deepseek.py +0 -0
  137. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/google_ai_client.py +0 -0
  138. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/google_constants.py +0 -0
  139. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/google_vertex_client.py +0 -0
  140. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/helpers.py +0 -0
  141. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/llm_client.py +0 -0
  142. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/llm_client_base.py +0 -0
  143. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/mistral.py +0 -0
  144. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/llm_api/openai_client.py +0 -0
  145. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/README.md +0 -0
  146. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/__init__.py +0 -0
  147. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/chat_completion_proxy.py +0 -0
  148. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/constants.py +0 -0
  149. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/function_parser.py +0 -0
  150. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/grammars/__init__.py +0 -0
  151. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
  152. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/grammars/json.gbnf +0 -0
  153. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
  154. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/json_parser.py +0 -0
  155. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/koboldcpp/api.py +0 -0
  156. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/koboldcpp/settings.py +0 -0
  157. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/llamacpp/api.py +0 -0
  158. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/llamacpp/settings.py +0 -0
  159. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
  160. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
  161. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
  162. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
  163. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
  164. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
  165. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
  166. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
  167. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
  168. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/lmstudio/api.py +0 -0
  169. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/lmstudio/settings.py +0 -0
  170. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/ollama/api.py +0 -0
  171. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/ollama/settings.py +0 -0
  172. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/settings/__init__.py +0 -0
  173. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
  174. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/settings/settings.py +0 -0
  175. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/settings/simple.py +0 -0
  176. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/utils.py +0 -0
  177. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/vllm/api.py +0 -0
  178. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/webui/api.py +0 -0
  179. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/webui/legacy_api.py +0 -0
  180. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/webui/legacy_settings.py +0 -0
  181. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/local_llm/webui/settings.py +0 -0
  182. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/log.py +0 -0
  183. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/main.py +0 -0
  184. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/memory.py +0 -0
  185. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/openai_backcompat/__init__.py +0 -0
  186. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/openai_backcompat/openai_object.py +0 -0
  187. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/__all__.py +0 -0
  188. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/__init__.py +0 -0
  189. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/agents_tags.py +0 -0
  190. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/block.py +0 -0
  191. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/block_history.py +0 -0
  192. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/blocks_agents.py +0 -0
  193. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/custom_columns.py +0 -0
  194. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/errors.py +0 -0
  195. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/file.py +0 -0
  196. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/group.py +0 -0
  197. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/groups_agents.py +0 -0
  198. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/groups_blocks.py +0 -0
  199. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/identities_agents.py +0 -0
  200. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/identities_blocks.py +0 -0
  201. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/identity.py +0 -0
  202. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/job_messages.py +0 -0
  203. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/mixins.py +0 -0
  204. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/organization.py +0 -0
  205. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/provider.py +0 -0
  206. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/sandbox_config.py +0 -0
  207. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/source.py +0 -0
  208. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/sources_agents.py +0 -0
  209. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/sqlite_functions.py +0 -0
  210. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/step.py +0 -0
  211. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/tool.py +0 -0
  212. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/tools_agents.py +0 -0
  213. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/orm/user.py +0 -0
  214. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/personas/__init__.py +0 -0
  215. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/personas/examples/anna_pa.txt +0 -0
  216. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/personas/examples/google_search_persona.txt +0 -0
  217. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/personas/examples/memgpt_doc.txt +0 -0
  218. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/personas/examples/memgpt_starter.txt +0 -0
  219. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/personas/examples/o1_persona.txt +0 -0
  220. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/personas/examples/offline_memory_persona.txt +0 -0
  221. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/personas/examples/sam.txt +0 -0
  222. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/personas/examples/sam_pov.txt +0 -0
  223. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
  224. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/personas/examples/sqldb/test.db +0 -0
  225. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/__init__.py +0 -0
  226. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/gpt_summarize.py +0 -0
  227. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/gpt_system.py +0 -0
  228. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_base.txt +0 -0
  229. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_chat.txt +0 -0
  230. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
  231. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
  232. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_convo_only.txt +0 -0
  233. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_doc.txt +0 -0
  234. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
  235. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
  236. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_memory_only.txt +0 -0
  237. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
  238. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
  239. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
  240. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
  241. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/prompts/system/memgpt_sleeptime_chat.txt +0 -0
  242. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/pytest.ini +0 -0
  243. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/block.py +0 -0
  244. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/embedding_config.py +0 -0
  245. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/embedding_config_overrides.py +0 -0
  246. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/environment_variables.py +0 -0
  247. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/file.py +0 -0
  248. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/group.py +0 -0
  249. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/health.py +0 -0
  250. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/identity.py +0 -0
  251. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/letta_base.py +0 -0
  252. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/letta_message_content.py +0 -0
  253. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/llm_config_overrides.py +0 -0
  254. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/memory.py +0 -0
  255. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/openai/chat_completion_request.py +0 -0
  256. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/openai/chat_completion_response.py +0 -0
  257. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/openai/chat_completions.py +0 -0
  258. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/openai/embedding_response.py +0 -0
  259. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/openai/openai.py +0 -0
  260. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/organization.py +0 -0
  261. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/passage.py +0 -0
  262. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/run.py +0 -0
  263. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/sandbox_config.py +0 -0
  264. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/source.py +0 -0
  265. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/step.py +0 -0
  266. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/tool.py +0 -0
  267. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/tool_rule.py +0 -0
  268. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/usage.py +0 -0
  269. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/schemas/user.py +0 -0
  270. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/serialize_schemas/__init__.py +0 -0
  271. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
  272. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/serialize_schemas/marshmallow_base.py +0 -0
  273. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/serialize_schemas/marshmallow_block.py +0 -0
  274. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
  275. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/serialize_schemas/marshmallow_tag.py +0 -0
  276. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/serialize_schemas/marshmallow_tool.py +0 -0
  277. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/serialize_schemas/pydantic_agent_schema.py +0 -0
  278. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/__init__.py +0 -0
  279. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/constants.py +0 -0
  280. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/generate_openapi_schema.sh +0 -0
  281. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/__init__.py +0 -0
  282. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/auth/__init__.py +0 -0
  283. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/auth/index.py +0 -0
  284. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/auth_token.py +0 -0
  285. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/chat_completions_interface.py +0 -0
  286. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/optimistic_json_parser.py +0 -0
  287. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/__init__.py +0 -0
  288. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
  289. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
  290. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/blocks.py +0 -0
  291. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/groups.py +0 -0
  292. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/health.py +0 -0
  293. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/identities.py +0 -0
  294. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/jobs.py +0 -0
  295. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/llms.py +0 -0
  296. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/organizations.py +0 -0
  297. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/providers.py +0 -0
  298. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/runs.py +0 -0
  299. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
  300. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/steps.py +0 -0
  301. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/tags.py +0 -0
  302. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/tools.py +0 -0
  303. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/users.py +0 -0
  304. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/routers/v1/voice.py +0 -0
  305. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/rest_api/static_files.py +0 -0
  306. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/startup.sh +0 -0
  307. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/static_files/assets/index-048c9598.js +0 -0
  308. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/static_files/assets/index-0e31b727.css +0 -0
  309. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/static_files/favicon.ico +0 -0
  310. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/static_files/index.html +0 -0
  311. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
  312. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/utils.py +0 -0
  313. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/ws_api/__init__.py +0 -0
  314. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/ws_api/example_client.py +0 -0
  315. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/ws_api/interface.py +0 -0
  316. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/ws_api/protocol.py +0 -0
  317. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/server/ws_api/server.py +0 -0
  318. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/__init__.py +0 -0
  319. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/block_manager.py +0 -0
  320. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/helpers/tool_execution_helper.py +0 -0
  321. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/identity_manager.py +0 -0
  322. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/organization_manager.py +0 -0
  323. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/per_agent_lock_manager.py +0 -0
  324. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/provider_manager.py +0 -0
  325. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/sandbox_config_manager.py +0 -0
  326. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/source_manager.py +0 -0
  327. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/step_manager.py +0 -0
  328. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/summarizer/__init__.py +0 -0
  329. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/summarizer/enums.py +0 -0
  330. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/summarizer/summarizer.py +0 -0
  331. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/tool_executor/__init__.py +0 -0
  332. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/tool_manager.py +0 -0
  333. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/tool_sandbox/__init__.py +0 -0
  334. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/services/user_manager.py +0 -0
  335. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/streaming_interface.py +0 -0
  336. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/streaming_utils.py +0 -0
  337. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/system.py +0 -0
  338. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/tracing.py +0 -0
  339. {letta_nightly-0.6.53.dev20250418104238 → letta_nightly-0.6.54.dev20250419104029}/letta/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.6.53.dev20250418104238
3
+ Version: 0.6.54.dev20250419104029
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -22,6 +22,7 @@ Provides-Extra: postgres
22
22
  Provides-Extra: qdrant
23
23
  Provides-Extra: server
24
24
  Provides-Extra: tests
25
+ Requires-Dist: aiomultiprocess (>=0.9.1,<0.10.0)
25
26
  Requires-Dist: alembic (>=1.13.3,<2.0.0)
26
27
  Requires-Dist: anthropic (>=0.49.0,<0.50.0)
27
28
  Requires-Dist: apscheduler (>=3.11.0,<4.0.0)
@@ -1,4 +1,4 @@
1
- __version__ = "0.6.53"
1
+ __version__ = "0.6.54"
2
2
 
3
3
  # import clients
4
4
  from letta.client.client import LocalClient, RESTClient, create_client
@@ -36,7 +36,7 @@ from letta.log import get_logger
36
36
  from letta.memory import summarize_messages
37
37
  from letta.orm import User
38
38
  from letta.orm.enums import ToolType
39
- from letta.schemas.agent import AgentState, AgentStepResponse, UpdateAgent
39
+ from letta.schemas.agent import AgentState, AgentStepResponse, UpdateAgent, get_prompt_template_for_agent_type
40
40
  from letta.schemas.block import BlockUpdate
41
41
  from letta.schemas.embedding_config import EmbeddingConfig
42
42
  from letta.schemas.enums import MessageRole
@@ -52,11 +52,7 @@ from letta.schemas.tool_rule import TerminalToolRule
52
52
  from letta.schemas.usage import LettaUsageStatistics
53
53
  from letta.services.agent_manager import AgentManager
54
54
  from letta.services.block_manager import BlockManager
55
- from letta.services.helpers.agent_manager_helper import (
56
- check_supports_structured_output,
57
- compile_memory_metadata_block,
58
- compile_system_message,
59
- )
55
+ from letta.services.helpers.agent_manager_helper import check_supports_structured_output, compile_memory_metadata_block
60
56
  from letta.services.job_manager import JobManager
61
57
  from letta.services.message_manager import MessageManager
62
58
  from letta.services.passage_manager import PassageManager
@@ -204,7 +200,8 @@ class Agent(BaseAgent):
204
200
 
205
201
  # refresh memory from DB (using block ids)
206
202
  self.agent_state.memory = Memory(
207
- blocks=[self.block_manager.get_block_by_id(block.id, actor=self.user) for block in self.agent_state.memory.get_blocks()]
203
+ blocks=[self.block_manager.get_block_by_id(block.id, actor=self.user) for block in self.agent_state.memory.get_blocks()],
204
+ prompt_template=get_prompt_template_for_agent_type(self.agent_state.agent_type),
208
205
  )
209
206
 
210
207
  # NOTE: don't do this since re-buildin the memory is handled at the start of the step
@@ -306,29 +303,6 @@ class Agent(BaseAgent):
306
303
  elif step_count is not None and step_count > 0 and len(allowed_tool_names) == 1:
307
304
  force_tool_call = allowed_tool_names[0]
308
305
 
309
- if force_tool_call == "core_memory_insert":
310
- current_system_message = message_sequence[0]
311
- new_memory = Memory(
312
- blocks=self.agent_state.memory.blocks,
313
- prompt_template=(
314
- "{% for block in blocks %}"
315
- '<{{ block.label }} characters="{{ block.value|length }}/{{ block.limit }}">\n'
316
- "{% for line in block.value.splitlines() %}"
317
- "{{ loop.index0 }}: {{ line }}\n"
318
- "{% endfor %}"
319
- "</{{ block.label }}>"
320
- "{% if not loop.last %}\n{% endif %}"
321
- "{% endfor %}"
322
- ),
323
- )
324
- new_system_message_str = compile_system_message(
325
- system_prompt=self.agent_state.system,
326
- in_context_memory=new_memory,
327
- in_context_memory_last_edit=current_system_message.created_at,
328
- previous_message_count=len(message_sequence),
329
- )
330
- message_sequence[0].content = [TextContent(text=new_system_message_str)]
331
-
332
306
  for attempt in range(1, empty_response_retry_limit + 1):
333
307
  try:
334
308
  log_telemetry(self.logger, "_get_ai_reply create start")
@@ -834,7 +808,8 @@ class Agent(BaseAgent):
834
808
  # Step 0: update core memory
835
809
  # only pulling latest block data if shared memory is being used
836
810
  current_persisted_memory = Memory(
837
- blocks=[self.block_manager.get_block_by_id(block.id, actor=self.user) for block in self.agent_state.memory.get_blocks()]
811
+ blocks=[self.block_manager.get_block_by_id(block.id, actor=self.user) for block in self.agent_state.memory.get_blocks()],
812
+ prompt_template=get_prompt_template_for_agent_type(self.agent_state.agent_type),
838
813
  ) # read blocks from DB
839
814
  self.update_memory_if_changed(current_persisted_memory)
840
815
 
@@ -76,6 +76,7 @@ class LettaAgent(BaseAgent):
76
76
  agent_state=agent_state,
77
77
  tool_rules_solver=tool_rules_solver,
78
78
  stream=False,
79
+ # TODO: also pass in reasoning content
79
80
  )
80
81
 
81
82
  tool_call = response.choices[0].message.tool_calls[0]
@@ -0,0 +1,515 @@
1
+ import json
2
+ import uuid
3
+ from dataclasses import dataclass
4
+ from typing import Any, Dict, List, Optional, Sequence, Tuple, Union
5
+
6
+ from aiomultiprocess import Pool
7
+ from anthropic.types.beta.messages import BetaMessageBatchCanceledResult, BetaMessageBatchErroredResult, BetaMessageBatchSucceededResult
8
+
9
+ from letta.agents.helpers import _prepare_in_context_messages
10
+ from letta.helpers import ToolRulesSolver
11
+ from letta.helpers.datetime_helpers import get_utc_time
12
+ from letta.helpers.tool_execution_helper import enable_strict_mode
13
+ from letta.jobs.types import RequestStatusUpdateInfo, StepStatusUpdateInfo
14
+ from letta.llm_api.llm_client import LLMClient
15
+ from letta.local_llm.constants import INNER_THOUGHTS_KWARG
16
+ from letta.log import get_logger
17
+ from letta.orm.enums import ToolType
18
+ from letta.schemas.agent import AgentState, AgentStepState
19
+ from letta.schemas.enums import AgentStepStatus, JobStatus, ProviderType
20
+ from letta.schemas.job import JobUpdate
21
+ from letta.schemas.letta_message_content import OmittedReasoningContent, ReasoningContent, RedactedReasoningContent, TextContent
22
+ from letta.schemas.letta_request import LettaBatchRequest
23
+ from letta.schemas.letta_response import LettaBatchResponse
24
+ from letta.schemas.llm_batch_job import LLMBatchItem
25
+ from letta.schemas.message import Message, MessageCreate, MessageUpdate
26
+ from letta.schemas.openai.chat_completion_response import ToolCall as OpenAIToolCall
27
+ from letta.schemas.sandbox_config import SandboxConfig, SandboxType
28
+ from letta.schemas.user import User
29
+ from letta.server.rest_api.utils import create_heartbeat_system_message, create_letta_messages_from_llm_response
30
+ from letta.services.agent_manager import AgentManager
31
+ from letta.services.block_manager import BlockManager
32
+ from letta.services.helpers.agent_manager_helper import compile_system_message
33
+ from letta.services.job_manager import JobManager
34
+ from letta.services.llm_batch_manager import LLMBatchManager
35
+ from letta.services.message_manager import MessageManager
36
+ from letta.services.passage_manager import PassageManager
37
+ from letta.services.sandbox_config_manager import SandboxConfigManager
38
+ from letta.services.tool_executor.tool_execution_manager import ToolExecutionManager
39
+ from letta.settings import tool_settings
40
+ from letta.utils import united_diff
41
+
42
+ logger = get_logger(__name__)
43
+
44
+
45
+ @dataclass
46
+ class ToolExecutionParams:
47
+ agent_id: str
48
+ tool_call_name: str
49
+ tool_args: Dict[str, Any]
50
+ agent_state: AgentState
51
+ actor: User
52
+ sbx_config: SandboxConfig
53
+ sbx_env_vars: Dict[str, Any]
54
+
55
+
56
+ @dataclass
57
+ class _ResumeContext:
58
+ batch_items: List[LLMBatchItem]
59
+ agent_ids: List[str]
60
+ agent_state_map: Dict[str, AgentState]
61
+ provider_results: Dict[str, Any]
62
+ tool_call_name_map: Dict[str, str]
63
+ tool_call_args_map: Dict[str, Dict[str, Any]]
64
+ should_continue_map: Dict[str, bool]
65
+ request_status_updates: List[RequestStatusUpdateInfo]
66
+
67
+
68
+ async def execute_tool_wrapper(params: ToolExecutionParams):
69
+ """
70
+ Executes the tool in an out‑of‑process worker and returns:
71
+ (agent_id, (tool_result:str, success_flag:bool))
72
+ """
73
+ # locate the tool on the agent
74
+ target_tool = next((t for t in params.agent_state.tools if t.name == params.tool_call_name), None)
75
+ if not target_tool:
76
+ return params.agent_id, (f"Tool not found: {params.tool_call_name}", False)
77
+
78
+ try:
79
+ mgr = ToolExecutionManager(
80
+ agent_state=params.agent_state,
81
+ actor=params.actor,
82
+ sandbox_config=params.sbx_config,
83
+ sandbox_env_vars=params.sbx_env_vars,
84
+ )
85
+ result, _ = await mgr.execute_tool_async(
86
+ function_name=params.tool_call_name,
87
+ function_args=params.tool_args,
88
+ tool=target_tool,
89
+ )
90
+ return params.agent_id, (result, True)
91
+ except Exception as e:
92
+ return params.agent_id, (f"Failed to call tool. Error: {e}", False)
93
+
94
+
95
+ # TODO: Limitations ->
96
+ # TODO: Only works with anthropic for now
97
+ class LettaAgentBatch:
98
+
99
+ def __init__(
100
+ self,
101
+ message_manager: MessageManager,
102
+ agent_manager: AgentManager,
103
+ block_manager: BlockManager,
104
+ passage_manager: PassageManager,
105
+ batch_manager: LLMBatchManager,
106
+ sandbox_config_manager: SandboxConfigManager,
107
+ job_manager: JobManager,
108
+ actor: User,
109
+ use_assistant_message: bool = True,
110
+ max_steps: int = 10,
111
+ ):
112
+ self.message_manager = message_manager
113
+ self.agent_manager = agent_manager
114
+ self.block_manager = block_manager
115
+ self.passage_manager = passage_manager
116
+ self.batch_manager = batch_manager
117
+ self.sandbox_config_manager = sandbox_config_manager
118
+ self.job_manager = job_manager
119
+ self.use_assistant_message = use_assistant_message
120
+ self.actor = actor
121
+ self.max_steps = max_steps
122
+
123
+ async def step_until_request(
124
+ self,
125
+ batch_requests: List[LettaBatchRequest],
126
+ letta_batch_job_id: str,
127
+ agent_step_state_mapping: Optional[Dict[str, AgentStepState]] = None,
128
+ ) -> LettaBatchResponse:
129
+ # Basic checks
130
+ if not batch_requests:
131
+ raise ValueError("Empty list of batch_requests passed in!")
132
+ if agent_step_state_mapping is None:
133
+ agent_step_state_mapping = {}
134
+
135
+ agent_messages_mapping: Dict[str, List[Message]] = {}
136
+ agent_tools_mapping: Dict[str, List[dict]] = {}
137
+ agent_states = []
138
+
139
+ for batch_request in batch_requests:
140
+ agent_id = batch_request.agent_id
141
+ agent_state = self.agent_manager.get_agent_by_id(agent_id, actor=self.actor)
142
+ agent_states.append(agent_state)
143
+ agent_messages_mapping[agent_id] = self._get_in_context_messages_per_agent(
144
+ agent_state=agent_state, input_messages=batch_request.messages
145
+ )
146
+
147
+ # TODO: Think about a cleaner way to do this?
148
+ if agent_id not in agent_step_state_mapping:
149
+ agent_step_state_mapping[agent_id] = AgentStepState(
150
+ step_number=0, tool_rules_solver=ToolRulesSolver(tool_rules=agent_state.tool_rules)
151
+ )
152
+
153
+ agent_tools_mapping[agent_id] = self._prepare_tools_per_agent(
154
+ agent_state, agent_step_state_mapping.get(agent_id).tool_rules_solver
155
+ )
156
+
157
+ # TODO: This is a hack, this is because LLM client expects a LLM config
158
+ # TODO: But that doesn't really work in batch land
159
+ # TODO: @caren will factor this out
160
+ llm_client = LLMClient.create(
161
+ llm_config=agent_states[0].llm_config,
162
+ put_inner_thoughts_first=True,
163
+ )
164
+ agent_llm_config_mapping = {agent_state.id: agent_state.llm_config for agent_state in agent_states}
165
+ batch_response = await llm_client.send_llm_batch_request_async(
166
+ agent_messages_mapping=agent_messages_mapping,
167
+ agent_tools_mapping=agent_tools_mapping,
168
+ agent_llm_config_mapping=agent_llm_config_mapping,
169
+ )
170
+
171
+ # Write the response into the jobs table, where it will get picked up by the next cron run
172
+ llm_batch_job = self.batch_manager.create_llm_batch_job(
173
+ llm_provider=ProviderType.anthropic, # TODO: Expand to more providers
174
+ create_batch_response=batch_response,
175
+ actor=self.actor,
176
+ status=JobStatus.running,
177
+ letta_batch_job_id=letta_batch_job_id,
178
+ )
179
+
180
+ # Create batch items in bulk for all agents
181
+ batch_items = []
182
+ for agent_state in agent_states:
183
+ agent_step_state = agent_step_state_mapping.get(agent_state.id)
184
+ batch_item = LLMBatchItem(
185
+ llm_batch_id=llm_batch_job.id,
186
+ agent_id=agent_state.id,
187
+ llm_config=agent_state.llm_config,
188
+ request_status=JobStatus.created,
189
+ step_status=AgentStepStatus.paused,
190
+ step_state=agent_step_state,
191
+ )
192
+ batch_items.append(batch_item)
193
+
194
+ # Create all batch items at once using the bulk operation
195
+ if batch_items:
196
+ self.batch_manager.create_llm_batch_items_bulk(batch_items, actor=self.actor)
197
+
198
+ return LettaBatchResponse(
199
+ letta_batch_id=llm_batch_job.letta_batch_job_id,
200
+ last_llm_batch_id=llm_batch_job.id,
201
+ status=llm_batch_job.status,
202
+ agent_count=len(agent_states),
203
+ last_polled_at=get_utc_time(),
204
+ created_at=llm_batch_job.created_at,
205
+ )
206
+
207
+ async def resume_step_after_request(self, letta_batch_id: str, llm_batch_id: str) -> LettaBatchResponse:
208
+ # 1. gather everything we need
209
+ llm_batch_job = self.batch_manager.get_llm_batch_job_by_id(llm_batch_id=llm_batch_id, actor=self.actor)
210
+ ctx = await self._collect_resume_context(llm_batch_id)
211
+
212
+ # 2. persist request‑level status updates
213
+ self._update_request_statuses(ctx.request_status_updates)
214
+
215
+ # 3. run the tools in parallel
216
+ exec_results = await self._execute_tools(ctx)
217
+
218
+ # 4. create + save assistant/tool messages
219
+ msg_map = self._persist_tool_messages(exec_results, ctx)
220
+
221
+ # 5. mark steps complete
222
+ self._mark_steps_complete(llm_batch_id, ctx.agent_ids)
223
+
224
+ # 6. build next‑round requests / step‑state map
225
+ next_reqs, next_step_state = self._prepare_next_iteration(exec_results, ctx, msg_map)
226
+ if len(next_reqs) == 0:
227
+ # mark batch job as completed
228
+ self.job_manager.update_job_by_id(job_id=letta_batch_id, job_update=JobUpdate(status=JobStatus.completed), actor=self.actor)
229
+ return LettaBatchResponse(
230
+ letta_batch_id=llm_batch_job.letta_batch_job_id,
231
+ last_llm_batch_id=llm_batch_job.id,
232
+ status=JobStatus.completed,
233
+ agent_count=len(ctx.agent_ids),
234
+ last_polled_at=get_utc_time(),
235
+ created_at=llm_batch_job.created_at,
236
+ )
237
+
238
+ # 7. recurse into the normal stepping pipeline
239
+ return await self.step_until_request(
240
+ batch_requests=next_reqs,
241
+ letta_batch_job_id=letta_batch_id,
242
+ agent_step_state_mapping=next_step_state,
243
+ )
244
+
245
+ async def _collect_resume_context(self, llm_batch_id: str) -> _ResumeContext:
246
+ batch_items = self.batch_manager.list_llm_batch_items(llm_batch_id=llm_batch_id)
247
+
248
+ agent_ids, agent_state_map = [], {}
249
+ provider_results, name_map, args_map, cont_map = {}, {}, {}, {}
250
+ request_status_updates: List[RequestStatusUpdateInfo] = []
251
+
252
+ for item in batch_items:
253
+ aid = item.agent_id
254
+ agent_ids.append(aid)
255
+ agent_state_map[aid] = self.agent_manager.get_agent_by_id(aid, actor=self.actor)
256
+ provider_results[aid] = item.batch_request_result.result
257
+
258
+ # status bookkeeping
259
+ pr = provider_results[aid]
260
+ status = (
261
+ JobStatus.completed
262
+ if isinstance(pr, BetaMessageBatchSucceededResult)
263
+ else (
264
+ JobStatus.failed
265
+ if isinstance(pr, BetaMessageBatchErroredResult)
266
+ else JobStatus.cancelled if isinstance(pr, BetaMessageBatchCanceledResult) else JobStatus.expired
267
+ )
268
+ )
269
+ request_status_updates.append(RequestStatusUpdateInfo(llm_batch_id=llm_batch_id, agent_id=aid, request_status=status))
270
+
271
+ # translate provider‑specific response → OpenAI‑style tool call (unchanged)
272
+ llm_client = LLMClient.create(llm_config=item.llm_config, put_inner_thoughts_first=True)
273
+ tool_call = (
274
+ llm_client.convert_response_to_chat_completion(response_data=pr.message.model_dump(), input_messages=[])
275
+ .choices[0]
276
+ .message.tool_calls[0]
277
+ )
278
+
279
+ name, args, cont = self._extract_tool_call_and_decide_continue(tool_call, item.step_state)
280
+ name_map[aid], args_map[aid], cont_map[aid] = name, args, cont
281
+
282
+ return _ResumeContext(
283
+ batch_items=batch_items,
284
+ agent_ids=agent_ids,
285
+ agent_state_map=agent_state_map,
286
+ provider_results=provider_results,
287
+ tool_call_name_map=name_map,
288
+ tool_call_args_map=args_map,
289
+ should_continue_map=cont_map,
290
+ request_status_updates=request_status_updates,
291
+ )
292
+
293
+ def _update_request_statuses(self, updates: List[RequestStatusUpdateInfo]) -> None:
294
+ if updates:
295
+ self.batch_manager.bulk_update_llm_batch_items_request_status_by_agent(updates=updates)
296
+
297
+ def _build_sandbox(self) -> Tuple[SandboxConfig, Dict[str, Any]]:
298
+ sbx_type = SandboxType.E2B if tool_settings.e2b_api_key else SandboxType.LOCAL
299
+ cfg = self.sandbox_config_manager.get_or_create_default_sandbox_config(sandbox_type=sbx_type, actor=self.actor)
300
+ env = self.sandbox_config_manager.get_sandbox_env_vars_as_dict(cfg.id, actor=self.actor, limit=100)
301
+ return cfg, env
302
+
303
+ async def _execute_tools(self, ctx: _ResumeContext) -> Sequence[Tuple[str, Tuple[str, bool]]]:
304
+ sbx_cfg, sbx_env = self._build_sandbox()
305
+ params = [
306
+ ToolExecutionParams(
307
+ agent_id=aid,
308
+ tool_call_name=ctx.tool_call_name_map[aid],
309
+ tool_args=ctx.tool_call_args_map[aid],
310
+ agent_state=ctx.agent_state_map[aid],
311
+ actor=self.actor,
312
+ sbx_config=sbx_cfg,
313
+ sbx_env_vars=sbx_env,
314
+ )
315
+ for aid in ctx.agent_ids
316
+ ]
317
+ async with Pool() as pool:
318
+ return await pool.map(execute_tool_wrapper, params)
319
+
320
+ def _persist_tool_messages(
321
+ self,
322
+ exec_results: Sequence[Tuple[str, Tuple[str, bool]]],
323
+ ctx: _ResumeContext,
324
+ ) -> Dict[str, List[Message]]:
325
+ msg_map: Dict[str, List[Message]] = {}
326
+ for aid, (tool_res, success) in exec_results:
327
+ msgs = self._create_tool_call_messages(
328
+ agent_state=ctx.agent_state_map[aid],
329
+ tool_call_name=ctx.tool_call_name_map[aid],
330
+ tool_call_args=ctx.tool_call_args_map[aid],
331
+ tool_exec_result=tool_res,
332
+ success_flag=success,
333
+ reasoning_content=None,
334
+ )
335
+ msg_map[aid] = msgs
336
+ # flatten & persist
337
+ self.message_manager.create_many_messages([m for msgs in msg_map.values() for m in msgs], actor=self.actor)
338
+ return msg_map
339
+
340
+ def _mark_steps_complete(self, llm_batch_id: str, agent_ids: List[str]) -> None:
341
+ updates = [
342
+ StepStatusUpdateInfo(llm_batch_id=llm_batch_id, agent_id=aid, step_status=AgentStepStatus.completed) for aid in agent_ids
343
+ ]
344
+ self.batch_manager.bulk_update_llm_batch_items_step_status_by_agent(updates)
345
+
346
+ def _prepare_next_iteration(
347
+ self,
348
+ exec_results: Sequence[Tuple[str, Tuple[str, bool]]],
349
+ ctx: _ResumeContext,
350
+ msg_map: Dict[str, List[Message]],
351
+ ) -> Tuple[List[LettaBatchRequest], Dict[str, AgentStepState]]:
352
+ # who continues?
353
+ continues = [aid for aid, cont in ctx.should_continue_map.items() if cont]
354
+
355
+ success_flag_map = {aid: flag for aid, (_res, flag) in exec_results}
356
+
357
+ batch_reqs: List[LettaBatchRequest] = []
358
+ for aid in continues:
359
+ heartbeat = create_heartbeat_system_message(
360
+ agent_id=aid,
361
+ model=ctx.agent_state_map[aid].llm_config.model,
362
+ function_call_success=success_flag_map[aid],
363
+ actor=self.actor,
364
+ )
365
+ batch_reqs.append(
366
+ LettaBatchRequest(
367
+ agent_id=aid, messages=[MessageCreate.model_validate(heartbeat.model_dump(include={"role", "content", "name", "otid"}))]
368
+ )
369
+ )
370
+
371
+ # extend in‑context ids when necessary
372
+ for aid, new_msgs in msg_map.items():
373
+ ast = ctx.agent_state_map[aid]
374
+ if not ast.message_buffer_autoclear:
375
+ self.agent_manager.set_in_context_messages(
376
+ agent_id=aid,
377
+ message_ids=ast.message_ids + [m.id for m in new_msgs],
378
+ actor=self.actor,
379
+ )
380
+
381
+ # bump step number
382
+ step_map = {
383
+ item.agent_id: item.step_state.model_copy(update={"step_number": item.step_state.step_number + 1}) for item in ctx.batch_items
384
+ }
385
+ return batch_reqs, step_map
386
+
387
+ def _create_tool_call_messages(
388
+ self,
389
+ agent_state: AgentState,
390
+ tool_call_name: str,
391
+ tool_call_args: Dict[str, Any],
392
+ tool_exec_result: str,
393
+ success_flag: bool,
394
+ reasoning_content: Optional[List[Union[TextContent, ReasoningContent, RedactedReasoningContent, OmittedReasoningContent]]] = None,
395
+ ) -> List[Message]:
396
+ tool_call_id = f"call_{uuid.uuid4().hex[:8]}"
397
+
398
+ tool_call_messages = create_letta_messages_from_llm_response(
399
+ agent_id=agent_state.id,
400
+ model=agent_state.llm_config.model,
401
+ function_name=tool_call_name,
402
+ function_arguments=tool_call_args,
403
+ tool_call_id=tool_call_id,
404
+ function_call_success=success_flag,
405
+ function_response=tool_exec_result,
406
+ actor=self.actor,
407
+ add_heartbeat_request_system_message=False,
408
+ reasoning_content=reasoning_content,
409
+ pre_computed_assistant_message_id=None,
410
+ pre_computed_tool_message_id=None,
411
+ )
412
+
413
+ return tool_call_messages
414
+
415
+ # TODO: This is doing a lot of dict passing
416
+ # TODO: Make the passing here typed
417
+ def _extract_tool_call_and_decide_continue(
418
+ self, tool_call: OpenAIToolCall, agent_step_state: AgentStepState
419
+ ) -> Tuple[str, Dict[str, Any], bool]:
420
+ """
421
+ Now that streaming is done, handle the final AI response.
422
+ This might yield additional SSE tokens if we do stalling.
423
+ At the end, set self._continue_execution accordingly.
424
+ """
425
+ tool_call_name = tool_call.function.name
426
+ tool_call_args_str = tool_call.function.arguments
427
+
428
+ try:
429
+ tool_args = json.loads(tool_call_args_str)
430
+ except json.JSONDecodeError:
431
+ logger.warning(f"Failed to JSON decode tool call argument string: {tool_call_args_str}")
432
+ tool_args = {}
433
+
434
+ # Get request heartbeats and coerce to bool
435
+ request_heartbeat = tool_args.pop("request_heartbeat", False)
436
+ # Pre-emptively pop out inner_thoughts
437
+ tool_args.pop(INNER_THOUGHTS_KWARG, "")
438
+
439
+ # So this is necessary, because sometimes non-structured outputs makes mistakes
440
+ if isinstance(request_heartbeat, str):
441
+ request_heartbeat = request_heartbeat.lower() == "true"
442
+ else:
443
+ request_heartbeat = bool(request_heartbeat)
444
+
445
+ continue_stepping = request_heartbeat
446
+ tool_rules_solver = agent_step_state.tool_rules_solver
447
+ tool_rules_solver.register_tool_call(tool_name=tool_call_name)
448
+ if tool_rules_solver.is_terminal_tool(tool_name=tool_call_name):
449
+ continue_stepping = False
450
+ elif tool_rules_solver.has_children_tools(tool_name=tool_call_name):
451
+ continue_stepping = True
452
+ elif tool_rules_solver.is_continue_tool(tool_name=tool_call_name):
453
+ continue_stepping = True
454
+
455
+ step_count = agent_step_state.step_number
456
+ if step_count >= self.max_steps:
457
+ logger.warning("Hit max steps, stopping agent loop prematurely.")
458
+ continue_stepping = False
459
+
460
+ return tool_call_name, tool_args, continue_stepping
461
+
462
+ def _prepare_tools_per_agent(self, agent_state: AgentState, tool_rules_solver: ToolRulesSolver) -> List[dict]:
463
+ tools = [t for t in agent_state.tools if t.tool_type in {ToolType.CUSTOM, ToolType.LETTA_CORE, ToolType.LETTA_MEMORY_CORE}]
464
+ valid_tool_names = tool_rules_solver.get_allowed_tool_names(available_tools=set([t.name for t in tools]))
465
+ return [enable_strict_mode(t.json_schema) for t in tools if t.name in set(valid_tool_names)]
466
+
467
+ def _get_in_context_messages_per_agent(self, agent_state: AgentState, input_messages: List[MessageCreate]) -> List[Message]:
468
+ current_in_context_messages, new_in_context_messages = _prepare_in_context_messages(
469
+ input_messages, agent_state, self.message_manager, self.actor
470
+ )
471
+
472
+ in_context_messages = self._rebuild_memory(current_in_context_messages + new_in_context_messages, agent_state)
473
+ return in_context_messages
474
+
475
+ # TODO: Make this a bullk function
476
+ def _rebuild_memory(self, in_context_messages: List[Message], agent_state: AgentState) -> List[Message]:
477
+ agent_state = self.agent_manager.refresh_memory(agent_state=agent_state, actor=self.actor)
478
+
479
+ # TODO: This is a pretty brittle pattern established all over our code, need to get rid of this
480
+ curr_system_message = in_context_messages[0]
481
+ curr_memory_str = agent_state.memory.compile()
482
+ curr_system_message_text = curr_system_message.content[0].text
483
+ if curr_memory_str in curr_system_message_text:
484
+ # NOTE: could this cause issues if a block is removed? (substring match would still work)
485
+ logger.debug(
486
+ f"Memory hasn't changed for agent id={agent_state.id} and actor=({self.actor.id}, {self.actor.name}), skipping system prompt rebuild"
487
+ )
488
+ return in_context_messages
489
+
490
+ memory_edit_timestamp = get_utc_time()
491
+
492
+ num_messages = self.message_manager.size(actor=self.actor, agent_id=agent_state.id)
493
+ num_archival_memories = self.passage_manager.size(actor=self.actor, agent_id=agent_state.id)
494
+
495
+ new_system_message_str = compile_system_message(
496
+ system_prompt=agent_state.system,
497
+ in_context_memory=agent_state.memory,
498
+ in_context_memory_last_edit=memory_edit_timestamp,
499
+ previous_message_count=num_messages,
500
+ archival_memory_size=num_archival_memories,
501
+ )
502
+
503
+ diff = united_diff(curr_system_message_text, new_system_message_str)
504
+ if len(diff) > 0:
505
+ logger.debug(f"Rebuilding system with new memory...\nDiff:\n{diff}")
506
+
507
+ new_system_message = self.message_manager.update_message_by_id(
508
+ curr_system_message.id, message_update=MessageUpdate(content=new_system_message_str), actor=self.actor
509
+ )
510
+
511
+ # Skip pulling down the agent's memory again to save on a db call
512
+ return [new_system_message] + in_context_messages[1:]
513
+
514
+ else:
515
+ return in_context_messages
@@ -56,10 +56,10 @@ BASE_MEMORY_TOOLS = ["core_memory_append", "core_memory_replace"]
56
56
  BASE_SLEEPTIME_CHAT_TOOLS = ["send_message", "conversation_search", "archival_memory_search"]
57
57
  # Base memory tools for sleeptime agent
58
58
  BASE_SLEEPTIME_TOOLS = [
59
- "rethink_memory",
60
- "finish_rethinking_memory",
61
- "view_core_memory_with_line_numbers",
62
- "core_memory_insert",
59
+ "memory_replace",
60
+ "memory_insert",
61
+ "memory_rethink",
62
+ "memory_finish_edits",
63
63
  "archival_memory_insert",
64
64
  "archival_memory_search",
65
65
  "conversation_search",
@@ -103,6 +103,11 @@ ERROR_MESSAGE_PREFIX = "Error"
103
103
 
104
104
  NON_USER_MSG_PREFIX = "[This is an automated system message hidden from the user] "
105
105
 
106
+ CORE_MEMORY_LINE_NUMBER_WARNING = (
107
+ "# NOTE: Line numbers shown below are to help during editing. Do NOT include line number prefixes in your memory edit tool calls."
108
+ )
109
+
110
+
106
111
  # Constants to do with summarization / conversation length window
107
112
  # The max amount of tokens supported by the underlying model (eg 8k for gpt-4 and Mistral 7B)
108
113
  LLM_MAX_TOKENS = {
@@ -110,6 +115,12 @@ LLM_MAX_TOKENS = {
110
115
  "deepseek-chat": 64000,
111
116
  "deepseek-reasoner": 64000,
112
117
  ## OpenAI models: https://platform.openai.com/docs/models/overview
118
+ "gpt-4.1": 1047576,
119
+ "gpt-4.1-2025-04-14": 1047576,
120
+ "gpt-4.1-mini": 1047576,
121
+ "gpt-4.1-mini-2025-04-14": 1047576,
122
+ "gpt-4.1-nano": 1047576,
123
+ "gpt-4.1-nano-2025-04-14": 1047576,
113
124
  # gpt-4.5-preview
114
125
  "gpt-4.5-preview": 128000,
115
126
  "gpt-4.5-preview-2025-02-27": 128000,