letta-nightly 0.7.8.dev20250502104219__tar.gz → 0.7.9.dev20250502222710__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 (349) hide show
  1. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/PKG-INFO +2 -2
  2. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/__init__.py +2 -2
  3. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/agents/helpers.py +58 -1
  4. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/agents/letta_agent.py +13 -3
  5. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/agents/letta_agent_batch.py +33 -17
  6. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/agents/voice_agent.py +1 -2
  7. letta_nightly-0.7.9.dev20250502222710/letta/agents/voice_sleeptime_agent.py +154 -0
  8. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/function_sets/multi_agent.py +1 -1
  9. letta_nightly-0.7.9.dev20250502222710/letta/functions/function_sets/voice.py +80 -0
  10. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/helpers.py +7 -7
  11. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/helpers/datetime_helpers.py +6 -0
  12. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/helpers/message_helper.py +19 -18
  13. letta_nightly-0.7.9.dev20250502222710/letta/jobs/scheduler.py +255 -0
  14. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/google_ai_client.py +13 -4
  15. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/google_vertex_client.py +5 -1
  16. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/openai.py +10 -2
  17. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/openai_client.py +14 -2
  18. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/message.py +4 -0
  19. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/voice_sleeptime.txt +2 -3
  20. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/letta_message.py +1 -0
  21. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/letta_request.py +8 -1
  22. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/letta_response.py +5 -0
  23. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/llm_batch_job.py +6 -4
  24. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/llm_config.py +9 -0
  25. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/message.py +23 -2
  26. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/providers.py +3 -1
  27. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/app.py +15 -7
  28. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/agents.py +3 -0
  29. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/messages.py +46 -1
  30. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/steps.py +1 -1
  31. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/utils.py +25 -6
  32. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/server.py +11 -3
  33. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/llm_batch_manager.py +60 -1
  34. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/message_manager.py +1 -0
  35. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/summarizer/summarizer.py +42 -36
  36. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/settings.py +1 -0
  37. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/tracing.py +5 -0
  38. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/pyproject.toml +2 -2
  39. letta_nightly-0.7.8.dev20250502104219/letta/agents/voice_sleeptime_agent.py +0 -399
  40. letta_nightly-0.7.8.dev20250502104219/letta/functions/function_sets/voice.py +0 -92
  41. letta_nightly-0.7.8.dev20250502104219/letta/jobs/scheduler.py +0 -71
  42. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/LICENSE +0 -0
  43. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/README.md +0 -0
  44. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/__main__.py +0 -0
  45. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/agent.py +0 -0
  46. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/agents/__init__.py +0 -0
  47. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/agents/base_agent.py +0 -0
  48. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/agents/ephemeral_agent.py +0 -0
  49. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/agents/exceptions.py +0 -0
  50. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/benchmark/benchmark.py +0 -0
  51. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/benchmark/constants.py +0 -0
  52. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/cli/cli.py +0 -0
  53. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/cli/cli_config.py +0 -0
  54. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/cli/cli_load.py +0 -0
  55. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/client/__init__.py +0 -0
  56. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/client/client.py +0 -0
  57. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/client/streaming.py +0 -0
  58. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/client/utils.py +0 -0
  59. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/config.py +0 -0
  60. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/constants.py +0 -0
  61. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/data_sources/connectors.py +0 -0
  62. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/data_sources/connectors_helper.py +0 -0
  63. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/embeddings.py +0 -0
  64. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/errors.py +0 -0
  65. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/__init__.py +0 -0
  66. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/ast_parsers.py +0 -0
  67. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/composio_helpers.py +0 -0
  68. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/function_sets/base.py +0 -0
  69. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/function_sets/extras.py +0 -0
  70. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/functions.py +0 -0
  71. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/interface.py +0 -0
  72. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/mcp_client/__init__.py +0 -0
  73. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/mcp_client/base_client.py +0 -0
  74. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/mcp_client/exceptions.py +0 -0
  75. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/mcp_client/sse_client.py +0 -0
  76. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/mcp_client/stdio_client.py +0 -0
  77. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/mcp_client/types.py +0 -0
  78. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/functions/schema_generator.py +0 -0
  79. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/groups/dynamic_multi_agent.py +0 -0
  80. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/groups/helpers.py +0 -0
  81. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/groups/round_robin_multi_agent.py +0 -0
  82. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/groups/sleeptime_multi_agent.py +0 -0
  83. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/groups/sleeptime_multi_agent_v2.py +0 -0
  84. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/groups/supervisor_multi_agent.py +0 -0
  85. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/helpers/__init__.py +0 -0
  86. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/helpers/composio_helpers.py +0 -0
  87. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/helpers/converters.py +0 -0
  88. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/helpers/json_helpers.py +0 -0
  89. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/helpers/tool_execution_helper.py +0 -0
  90. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/helpers/tool_rule_solver.py +0 -0
  91. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/humans/__init__.py +0 -0
  92. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/humans/examples/basic.txt +0 -0
  93. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/humans/examples/cs_phd.txt +0 -0
  94. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/interface.py +0 -0
  95. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/interfaces/__init__.py +0 -0
  96. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/interfaces/anthropic_streaming_interface.py +0 -0
  97. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
  98. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/interfaces/utils.py +0 -0
  99. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/jobs/__init__.py +0 -0
  100. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/jobs/helpers.py +0 -0
  101. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/jobs/llm_batch_job_polling.py +0 -0
  102. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/jobs/types.py +0 -0
  103. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/__init__.py +0 -0
  104. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/anthropic.py +0 -0
  105. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/anthropic_client.py +0 -0
  106. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/aws_bedrock.py +0 -0
  107. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/azure_openai.py +0 -0
  108. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/azure_openai_constants.py +0 -0
  109. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/cohere.py +0 -0
  110. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/deepseek.py +0 -0
  111. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/google_constants.py +0 -0
  112. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/helpers.py +0 -0
  113. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/llm_api_tools.py +0 -0
  114. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/llm_client.py +0 -0
  115. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/llm_client_base.py +0 -0
  116. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/llm_api/mistral.py +0 -0
  117. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/README.md +0 -0
  118. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/__init__.py +0 -0
  119. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/chat_completion_proxy.py +0 -0
  120. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/constants.py +0 -0
  121. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/function_parser.py +0 -0
  122. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/grammars/__init__.py +0 -0
  123. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
  124. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/grammars/json.gbnf +0 -0
  125. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
  126. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/json_parser.py +0 -0
  127. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/koboldcpp/api.py +0 -0
  128. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/koboldcpp/settings.py +0 -0
  129. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/llamacpp/api.py +0 -0
  130. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/llamacpp/settings.py +0 -0
  131. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
  132. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
  133. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
  134. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
  135. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
  136. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
  137. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
  138. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
  139. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
  140. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/lmstudio/api.py +0 -0
  141. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/lmstudio/settings.py +0 -0
  142. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/ollama/api.py +0 -0
  143. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/ollama/settings.py +0 -0
  144. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/settings/__init__.py +0 -0
  145. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
  146. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/settings/settings.py +0 -0
  147. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/settings/simple.py +0 -0
  148. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/utils.py +0 -0
  149. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/vllm/api.py +0 -0
  150. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/webui/api.py +0 -0
  151. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/webui/legacy_api.py +0 -0
  152. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/webui/legacy_settings.py +0 -0
  153. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/local_llm/webui/settings.py +0 -0
  154. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/log.py +0 -0
  155. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/main.py +0 -0
  156. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/memory.py +0 -0
  157. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/openai_backcompat/__init__.py +0 -0
  158. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/openai_backcompat/openai_object.py +0 -0
  159. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/__all__.py +0 -0
  160. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/__init__.py +0 -0
  161. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/agent.py +0 -0
  162. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/agents_tags.py +0 -0
  163. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/base.py +0 -0
  164. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/block.py +0 -0
  165. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/block_history.py +0 -0
  166. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/blocks_agents.py +0 -0
  167. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/custom_columns.py +0 -0
  168. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/enums.py +0 -0
  169. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/errors.py +0 -0
  170. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/file.py +0 -0
  171. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/group.py +0 -0
  172. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/groups_agents.py +0 -0
  173. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/groups_blocks.py +0 -0
  174. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/identities_agents.py +0 -0
  175. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/identities_blocks.py +0 -0
  176. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/identity.py +0 -0
  177. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/job.py +0 -0
  178. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/job_messages.py +0 -0
  179. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/llm_batch_items.py +0 -0
  180. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/llm_batch_job.py +0 -0
  181. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/mixins.py +0 -0
  182. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/organization.py +0 -0
  183. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/passage.py +0 -0
  184. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/provider.py +0 -0
  185. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/sandbox_config.py +0 -0
  186. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/source.py +0 -0
  187. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/sources_agents.py +0 -0
  188. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/sqlalchemy_base.py +0 -0
  189. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/sqlite_functions.py +0 -0
  190. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/step.py +0 -0
  191. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/tool.py +0 -0
  192. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/tools_agents.py +0 -0
  193. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/orm/user.py +0 -0
  194. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/personas/__init__.py +0 -0
  195. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/personas/examples/anna_pa.txt +0 -0
  196. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/personas/examples/google_search_persona.txt +0 -0
  197. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/personas/examples/memgpt_doc.txt +0 -0
  198. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/personas/examples/memgpt_starter.txt +0 -0
  199. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/personas/examples/o1_persona.txt +0 -0
  200. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/personas/examples/sam.txt +0 -0
  201. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/personas/examples/sam_pov.txt +0 -0
  202. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
  203. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/personas/examples/sleeptime_doc_persona.txt +0 -0
  204. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/personas/examples/sleeptime_memory_persona.txt +0 -0
  205. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/personas/examples/sqldb/test.db +0 -0
  206. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/personas/examples/voice_memory_persona.txt +0 -0
  207. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/__init__.py +0 -0
  208. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/gpt_summarize.py +0 -0
  209. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/gpt_system.py +0 -0
  210. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_base.txt +0 -0
  211. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_chat.txt +0 -0
  212. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
  213. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
  214. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_convo_only.txt +0 -0
  215. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_doc.txt +0 -0
  216. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
  217. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
  218. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_memory_only.txt +0 -0
  219. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
  220. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
  221. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
  222. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
  223. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/memgpt_sleeptime_chat.txt +0 -0
  224. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/sleeptime.txt +0 -0
  225. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/sleeptime_doc_ingest.txt +0 -0
  226. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/prompts/system/voice_chat.txt +0 -0
  227. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/pytest.ini +0 -0
  228. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/agent.py +0 -0
  229. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/block.py +0 -0
  230. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/embedding_config.py +0 -0
  231. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/embedding_config_overrides.py +0 -0
  232. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/enums.py +0 -0
  233. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/environment_variables.py +0 -0
  234. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/file.py +0 -0
  235. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/group.py +0 -0
  236. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/health.py +0 -0
  237. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/identity.py +0 -0
  238. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/job.py +0 -0
  239. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/letta_base.py +0 -0
  240. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/letta_message_content.py +0 -0
  241. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/llm_config_overrides.py +0 -0
  242. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/memory.py +0 -0
  243. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/openai/chat_completion_request.py +0 -0
  244. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/openai/chat_completion_response.py +0 -0
  245. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/openai/chat_completions.py +0 -0
  246. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/openai/embedding_response.py +0 -0
  247. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/openai/openai.py +0 -0
  248. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/organization.py +0 -0
  249. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/passage.py +0 -0
  250. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/response_format.py +0 -0
  251. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/run.py +0 -0
  252. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/sandbox_config.py +0 -0
  253. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/source.py +0 -0
  254. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/step.py +0 -0
  255. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/tool.py +0 -0
  256. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/tool_execution_result.py +0 -0
  257. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/tool_rule.py +0 -0
  258. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/usage.py +0 -0
  259. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/schemas/user.py +0 -0
  260. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/serialize_schemas/__init__.py +0 -0
  261. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/serialize_schemas/marshmallow_agent.py +0 -0
  262. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
  263. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/serialize_schemas/marshmallow_base.py +0 -0
  264. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/serialize_schemas/marshmallow_block.py +0 -0
  265. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
  266. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/serialize_schemas/marshmallow_message.py +0 -0
  267. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/serialize_schemas/marshmallow_tag.py +0 -0
  268. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/serialize_schemas/marshmallow_tool.py +0 -0
  269. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/serialize_schemas/pydantic_agent_schema.py +0 -0
  270. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/__init__.py +0 -0
  271. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/constants.py +0 -0
  272. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/db.py +0 -0
  273. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/generate_openapi_schema.sh +0 -0
  274. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/__init__.py +0 -0
  275. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/auth/__init__.py +0 -0
  276. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/auth/index.py +0 -0
  277. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/auth_token.py +0 -0
  278. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/chat_completions_interface.py +0 -0
  279. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/interface.py +0 -0
  280. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/json_parser.py +0 -0
  281. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/__init__.py +0 -0
  282. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
  283. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
  284. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/__init__.py +0 -0
  285. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/blocks.py +0 -0
  286. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/embeddings.py +0 -0
  287. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/groups.py +0 -0
  288. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/health.py +0 -0
  289. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/identities.py +0 -0
  290. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/jobs.py +0 -0
  291. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/llms.py +0 -0
  292. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/organizations.py +0 -0
  293. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/providers.py +0 -0
  294. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/runs.py +0 -0
  295. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
  296. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/sources.py +0 -0
  297. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/tags.py +0 -0
  298. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/tools.py +0 -0
  299. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/users.py +0 -0
  300. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/routers/v1/voice.py +0 -0
  301. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/rest_api/static_files.py +0 -0
  302. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/startup.sh +0 -0
  303. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/static_files/assets/index-048c9598.js +0 -0
  304. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/static_files/assets/index-0e31b727.css +0 -0
  305. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/static_files/favicon.ico +0 -0
  306. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/static_files/index.html +0 -0
  307. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
  308. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/utils.py +0 -0
  309. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/ws_api/__init__.py +0 -0
  310. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/ws_api/example_client.py +0 -0
  311. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/ws_api/interface.py +0 -0
  312. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/ws_api/protocol.py +0 -0
  313. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/server/ws_api/server.py +0 -0
  314. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/__init__.py +0 -0
  315. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/agent_manager.py +0 -0
  316. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/block_manager.py +0 -0
  317. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/group_manager.py +0 -0
  318. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/helpers/agent_manager_helper.py +0 -0
  319. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/helpers/tool_execution_helper.py +0 -0
  320. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/identity_manager.py +0 -0
  321. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/job_manager.py +0 -0
  322. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/mcp/__init__.py +0 -0
  323. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/mcp/base_client.py +0 -0
  324. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/mcp/sse_client.py +0 -0
  325. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/mcp/stdio_client.py +0 -0
  326. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/mcp/types.py +0 -0
  327. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/organization_manager.py +0 -0
  328. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/passage_manager.py +0 -0
  329. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/per_agent_lock_manager.py +0 -0
  330. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/provider_manager.py +0 -0
  331. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/sandbox_config_manager.py +0 -0
  332. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/source_manager.py +0 -0
  333. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/step_manager.py +0 -0
  334. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/summarizer/__init__.py +0 -0
  335. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/summarizer/enums.py +0 -0
  336. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/tool_executor/__init__.py +0 -0
  337. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/tool_executor/tool_execution_manager.py +0 -0
  338. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/tool_executor/tool_execution_sandbox.py +0 -0
  339. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/tool_executor/tool_executor.py +0 -0
  340. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/tool_manager.py +0 -0
  341. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/tool_sandbox/__init__.py +0 -0
  342. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/tool_sandbox/base.py +0 -0
  343. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/tool_sandbox/e2b_sandbox.py +0 -0
  344. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/tool_sandbox/local_sandbox.py +0 -0
  345. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/services/user_manager.py +0 -0
  346. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/streaming_interface.py +0 -0
  347. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/streaming_utils.py +0 -0
  348. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/system.py +0 -0
  349. {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250502222710}/letta/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.7.8.dev20250502104219
3
+ Version: 0.7.9.dev20250502222710
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -50,7 +50,7 @@ Requires-Dist: isort (>=5.13.2,<6.0.0) ; extra == "dev" or extra == "all"
50
50
  Requires-Dist: jinja2 (>=3.1.5,<4.0.0)
51
51
  Requires-Dist: langchain (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
52
52
  Requires-Dist: langchain-community (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
53
- Requires-Dist: letta_client (>=0.1.127,<0.2.0)
53
+ Requires-Dist: letta_client (>=0.1.136,<0.2.0)
54
54
  Requires-Dist: llama-index (>=0.12.2,<0.13.0)
55
55
  Requires-Dist: llama-index-embeddings-openai (>=0.3.1,<0.4.0)
56
56
  Requires-Dist: locust (>=2.31.5,<3.0.0) ; extra == "dev" or extra == "desktop" or extra == "all"
@@ -1,9 +1,9 @@
1
- __version__ = "0.7.8"
1
+ __version__ = "0.7.9"
2
2
 
3
3
  # import clients
4
4
  from letta.client.client import LocalClient, RESTClient, create_client
5
5
 
6
- # # imports for easier access
6
+ # imports for easier access
7
7
  from letta.schemas.agent import AgentState
8
8
  from letta.schemas.block import Block
9
9
  from letta.schemas.embedding_config import EmbeddingConfig
@@ -1,3 +1,4 @@
1
+ import xml.etree.ElementTree as ET
1
2
  from typing import List, Tuple
2
3
 
3
4
  from letta.schemas.agent import AgentState
@@ -20,7 +21,10 @@ def _create_letta_response(new_in_context_messages: list[Message], use_assistant
20
21
 
21
22
 
22
23
  def _prepare_in_context_messages(
23
- input_messages: List[MessageCreate], agent_state: AgentState, message_manager: MessageManager, actor: User
24
+ input_messages: List[MessageCreate],
25
+ agent_state: AgentState,
26
+ message_manager: MessageManager,
27
+ actor: User,
24
28
  ) -> Tuple[List[Message], List[Message]]:
25
29
  """
26
30
  Prepares in-context messages for an agent, based on the current state and a new user input.
@@ -50,3 +54,56 @@ def _prepare_in_context_messages(
50
54
  )
51
55
 
52
56
  return current_in_context_messages, new_in_context_messages
57
+
58
+
59
+ def serialize_message_history(messages: List[str], context: str) -> str:
60
+ """
61
+ Produce an XML document like:
62
+
63
+ <memory>
64
+ <messages>
65
+ <message>…</message>
66
+ <message>…</message>
67
+
68
+ </messages>
69
+ <context>…</context>
70
+ </memory>
71
+ """
72
+ root = ET.Element("memory")
73
+
74
+ msgs_el = ET.SubElement(root, "messages")
75
+ for msg in messages:
76
+ m = ET.SubElement(msgs_el, "message")
77
+ m.text = msg
78
+
79
+ sum_el = ET.SubElement(root, "context")
80
+ sum_el.text = context
81
+
82
+ # ET.tostring will escape reserved chars for you
83
+ return ET.tostring(root, encoding="unicode")
84
+
85
+
86
+ def deserialize_message_history(xml_str: str) -> Tuple[List[str], str]:
87
+ """
88
+ Parse the XML back into (messages, context). Raises ValueError if tags are missing.
89
+ """
90
+ try:
91
+ root = ET.fromstring(xml_str)
92
+ except ET.ParseError as e:
93
+ raise ValueError(f"Invalid XML: {e}")
94
+
95
+ msgs_el = root.find("messages")
96
+ if msgs_el is None:
97
+ raise ValueError("Missing <messages> section")
98
+
99
+ messages = []
100
+ for m in msgs_el.findall("message"):
101
+ # .text may be None if empty, so coerce to empty string
102
+ messages.append(m.text or "")
103
+
104
+ sum_el = root.find("context")
105
+ if sum_el is None:
106
+ raise ValueError("Missing <context> section")
107
+ context = sum_el.text or ""
108
+
109
+ return messages, context
@@ -62,6 +62,14 @@ class LettaAgent(BaseAgent):
62
62
  @trace_method
63
63
  async def step(self, input_messages: List[MessageCreate], max_steps: int = 10) -> LettaResponse:
64
64
  agent_state = self.agent_manager.get_agent_by_id(self.agent_id, actor=self.actor)
65
+ current_in_context_messages, new_in_context_messages = await self._step(
66
+ agent_state=agent_state, input_messages=input_messages, max_steps=max_steps
67
+ )
68
+ return _create_letta_response(new_in_context_messages=new_in_context_messages, use_assistant_message=self.use_assistant_message)
69
+
70
+ async def _step(
71
+ self, agent_state: AgentState, input_messages: List[MessageCreate], max_steps: int = 10
72
+ ) -> Tuple[List[Message], List[Message]]:
65
73
  current_in_context_messages, new_in_context_messages = _prepare_in_context_messages(
66
74
  input_messages, agent_state, self.message_manager, self.actor
67
75
  )
@@ -72,7 +80,7 @@ class LettaAgent(BaseAgent):
72
80
  put_inner_thoughts_first=True,
73
81
  actor_id=self.actor.id,
74
82
  )
75
- for step in range(max_steps):
83
+ for _ in range(max_steps):
76
84
  response = await self._get_ai_reply(
77
85
  llm_client=llm_client,
78
86
  in_context_messages=current_in_context_messages + new_in_context_messages,
@@ -83,6 +91,7 @@ class LettaAgent(BaseAgent):
83
91
  )
84
92
 
85
93
  tool_call = response.choices[0].message.tool_calls[0]
94
+
86
95
  persisted_messages, should_continue = await self._handle_ai_response(tool_call, agent_state, tool_rules_solver)
87
96
  self.response_messages.extend(persisted_messages)
88
97
  new_in_context_messages.extend(persisted_messages)
@@ -95,7 +104,7 @@ class LettaAgent(BaseAgent):
95
104
  message_ids = [m.id for m in (current_in_context_messages + new_in_context_messages)]
96
105
  self.agent_manager.set_in_context_messages(agent_id=self.agent_id, message_ids=message_ids, actor=self.actor)
97
106
 
98
- return _create_letta_response(new_in_context_messages=new_in_context_messages, use_assistant_message=self.use_assistant_message)
107
+ return current_in_context_messages, new_in_context_messages
99
108
 
100
109
  @trace_method
101
110
  async def step_stream(
@@ -117,7 +126,7 @@ class LettaAgent(BaseAgent):
117
126
  actor_id=self.actor.id,
118
127
  )
119
128
 
120
- for step in range(max_steps):
129
+ for _ in range(max_steps):
121
130
  stream = await self._get_ai_reply(
122
131
  llm_client=llm_client,
123
132
  in_context_messages=current_in_context_messages + new_in_context_messages,
@@ -181,6 +190,7 @@ class LettaAgent(BaseAgent):
181
190
  ToolType.LETTA_MEMORY_CORE,
182
191
  ToolType.LETTA_MULTI_AGENT_CORE,
183
192
  ToolType.LETTA_SLEEPTIME_CORE,
193
+ ToolType.LETTA_VOICE_SLEEPTIME_CORE,
184
194
  }
185
195
  or (t.tool_type == ToolType.LETTA_MULTI_AGENT_CORE and t.name == "send_message_to_agents_matching_tags")
186
196
  or (t.tool_type == ToolType.EXTERNAL_COMPOSIO)
@@ -137,21 +137,37 @@ class LettaAgentBatch:
137
137
  log_event(name="load_and_prepare_agents")
138
138
  agent_messages_mapping: Dict[str, List[Message]] = {}
139
139
  agent_tools_mapping: Dict[str, List[dict]] = {}
140
+ # TODO: This isn't optimal, moving fast - prone to bugs because we pass around this half formed pydantic object
141
+ agent_batch_item_mapping: Dict[str, LLMBatchItem] = {}
140
142
  agent_states = []
141
143
  for batch_request in batch_requests:
142
144
  agent_id = batch_request.agent_id
143
145
  agent_state = self.agent_manager.get_agent_by_id(agent_id, actor=self.actor)
144
146
  agent_states.append(agent_state)
145
147
 
146
- agent_messages_mapping[agent_id] = self._get_in_context_messages_per_agent(
147
- agent_state=agent_state, input_messages=batch_request.messages
148
- )
149
-
150
148
  if agent_id not in agent_step_state_mapping:
151
149
  agent_step_state_mapping[agent_id] = AgentStepState(
152
150
  step_number=0, tool_rules_solver=ToolRulesSolver(tool_rules=agent_state.tool_rules)
153
151
  )
154
152
 
153
+ llm_batch_item = LLMBatchItem(
154
+ llm_batch_id="", # TODO: This is hacky, it gets filled in later
155
+ agent_id=agent_state.id,
156
+ llm_config=agent_state.llm_config,
157
+ request_status=JobStatus.created,
158
+ step_status=AgentStepStatus.paused,
159
+ step_state=agent_step_state_mapping[agent_id],
160
+ )
161
+ agent_batch_item_mapping[agent_id] = llm_batch_item
162
+
163
+ # Fill in the batch_item_id for the message
164
+ for msg in batch_request.messages:
165
+ msg.batch_item_id = llm_batch_item.id
166
+
167
+ agent_messages_mapping[agent_id] = self._prepare_in_context_messages_per_agent(
168
+ agent_state=agent_state, input_messages=batch_request.messages
169
+ )
170
+
155
171
  agent_tools_mapping[agent_id] = self._prepare_tools_per_agent(agent_state, agent_step_state_mapping[agent_id].tool_rules_solver)
156
172
 
157
173
  log_event(name="init_llm_client")
@@ -182,21 +198,14 @@ class LettaAgentBatch:
182
198
  log_event(name="prepare_batch_items")
183
199
  batch_items = []
184
200
  for state in agent_states:
185
- step_state = agent_step_state_mapping[state.id]
186
- batch_items.append(
187
- LLMBatchItem(
188
- llm_batch_id=llm_batch_job.id,
189
- agent_id=state.id,
190
- llm_config=state.llm_config,
191
- request_status=JobStatus.created,
192
- step_status=AgentStepStatus.paused,
193
- step_state=step_state,
194
- )
195
- )
201
+ llm_batch_item = agent_batch_item_mapping[state.id]
202
+ # TODO This is hacky
203
+ llm_batch_item.llm_batch_id = llm_batch_job.id
204
+ batch_items.append(llm_batch_item)
196
205
 
197
206
  if batch_items:
198
207
  log_event(name="bulk_create_batch_items")
199
- self.batch_manager.create_llm_batch_items_bulk(batch_items, actor=self.actor)
208
+ batch_items_persisted = self.batch_manager.create_llm_batch_items_bulk(batch_items, actor=self.actor)
200
209
 
201
210
  log_event(name="return_batch_response")
202
211
  return LettaBatchResponse(
@@ -335,9 +344,14 @@ class LettaAgentBatch:
335
344
  exec_results: Sequence[Tuple[str, Tuple[str, bool]]],
336
345
  ctx: _ResumeContext,
337
346
  ) -> Dict[str, List[Message]]:
347
+ # TODO: This is redundant, we should have this ready on the ctx
348
+ # TODO: I am doing it quick and dirty for now
349
+ agent_item_map: Dict[str, LLMBatchItem] = {item.agent_id: item for item in ctx.batch_items}
350
+
338
351
  msg_map: Dict[str, List[Message]] = {}
339
352
  for aid, (tool_res, success) in exec_results:
340
353
  msgs = self._create_tool_call_messages(
354
+ llm_batch_item_id=agent_item_map[aid].id,
341
355
  agent_state=ctx.agent_state_map[aid],
342
356
  tool_call_name=ctx.tool_call_name_map[aid],
343
357
  tool_call_args=ctx.tool_call_args_map[aid],
@@ -399,6 +413,7 @@ class LettaAgentBatch:
399
413
 
400
414
  def _create_tool_call_messages(
401
415
  self,
416
+ llm_batch_item_id: str,
402
417
  agent_state: AgentState,
403
418
  tool_call_name: str,
404
419
  tool_call_args: Dict[str, Any],
@@ -421,6 +436,7 @@ class LettaAgentBatch:
421
436
  reasoning_content=reasoning_content,
422
437
  pre_computed_assistant_message_id=None,
423
438
  pre_computed_tool_message_id=None,
439
+ llm_batch_item_id=llm_batch_item_id,
424
440
  )
425
441
 
426
442
  return tool_call_messages
@@ -477,7 +493,7 @@ class LettaAgentBatch:
477
493
  valid_tool_names = tool_rules_solver.get_allowed_tool_names(available_tools=set([t.name for t in tools]))
478
494
  return [enable_strict_mode(t.json_schema) for t in tools if t.name in set(valid_tool_names)]
479
495
 
480
- def _get_in_context_messages_per_agent(self, agent_state: AgentState, input_messages: List[MessageCreate]) -> List[Message]:
496
+ def _prepare_in_context_messages_per_agent(self, agent_state: AgentState, input_messages: List[MessageCreate]) -> List[Message]:
481
497
  current_in_context_messages, new_in_context_messages = _prepare_in_context_messages(
482
498
  input_messages, agent_state, self.message_manager, self.actor
483
499
  )
@@ -97,13 +97,12 @@ class VoiceAgent(BaseAgent):
97
97
  summarizer_agent=VoiceSleeptimeAgent(
98
98
  agent_id=voice_sleeptime_agent_id,
99
99
  convo_agent_state=agent_state,
100
- openai_client=self.openai_client,
101
100
  message_manager=self.message_manager,
102
101
  agent_manager=self.agent_manager,
103
102
  actor=self.actor,
104
103
  block_manager=self.block_manager,
104
+ passage_manager=self.passage_manager,
105
105
  target_block_label=self.summary_block_label,
106
- message_transcripts=[],
107
106
  ),
108
107
  message_buffer_limit=agent_state.multi_agent_group.max_message_buffer_length,
109
108
  message_buffer_min=agent_state.multi_agent_group.min_message_buffer_length,
@@ -0,0 +1,154 @@
1
+ from typing import AsyncGenerator, List, Tuple, Union
2
+
3
+ from letta.agents.helpers import _create_letta_response, serialize_message_history
4
+ from letta.agents.letta_agent import LettaAgent
5
+ from letta.orm.enums import ToolType
6
+ from letta.schemas.agent import AgentState
7
+ from letta.schemas.block import BlockUpdate
8
+ from letta.schemas.enums import MessageStreamStatus
9
+ from letta.schemas.letta_message import LegacyLettaMessage, LettaMessage
10
+ from letta.schemas.letta_response import LettaResponse
11
+ from letta.schemas.message import MessageCreate
12
+ from letta.schemas.tool_rule import ChildToolRule, ContinueToolRule, InitToolRule, TerminalToolRule
13
+ from letta.schemas.user import User
14
+ from letta.services.agent_manager import AgentManager
15
+ from letta.services.block_manager import BlockManager
16
+ from letta.services.message_manager import MessageManager
17
+ from letta.services.passage_manager import PassageManager
18
+ from letta.services.summarizer.enums import SummarizationMode
19
+ from letta.services.summarizer.summarizer import Summarizer
20
+ from letta.tracing import trace_method
21
+
22
+
23
+ class VoiceSleeptimeAgent(LettaAgent):
24
+ """
25
+ A special variant of the LettaAgent that helps with offline memory computations specifically for voice.
26
+ """
27
+
28
+ def __init__(
29
+ self,
30
+ agent_id: str,
31
+ convo_agent_state: AgentState,
32
+ message_manager: MessageManager,
33
+ agent_manager: AgentManager,
34
+ block_manager: BlockManager,
35
+ passage_manager: PassageManager,
36
+ target_block_label: str,
37
+ actor: User,
38
+ ):
39
+ super().__init__(
40
+ agent_id=agent_id,
41
+ message_manager=message_manager,
42
+ agent_manager=agent_manager,
43
+ block_manager=block_manager,
44
+ passage_manager=passage_manager,
45
+ actor=actor,
46
+ )
47
+
48
+ self.convo_agent_state = convo_agent_state
49
+ self.target_block_label = target_block_label
50
+ self.message_transcripts = []
51
+ self.summarizer = Summarizer(
52
+ mode=SummarizationMode.STATIC_MESSAGE_BUFFER,
53
+ summarizer_agent=None,
54
+ message_buffer_limit=20,
55
+ message_buffer_min=10,
56
+ )
57
+
58
+ def update_message_transcript(self, message_transcripts: List[str]):
59
+ self.message_transcripts = message_transcripts
60
+
61
+ async def step(self, input_messages: List[MessageCreate], max_steps: int = 20) -> LettaResponse:
62
+ """
63
+ Process the user's input message, allowing the model to call memory-related tools
64
+ until it decides to stop and provide a final response.
65
+ """
66
+ agent_state = self.agent_manager.get_agent_by_id(self.agent_id, actor=self.actor)
67
+
68
+ # Add tool rules to the agent_state specifically for this type of agent
69
+ agent_state.tool_rules = [
70
+ InitToolRule(tool_name="store_memories"),
71
+ ChildToolRule(tool_name="store_memories", children=["rethink_user_memory"]),
72
+ ContinueToolRule(tool_name="rethink_user_memory"),
73
+ TerminalToolRule(tool_name="finish_rethinking_memory"),
74
+ ]
75
+
76
+ # Summarize
77
+ current_in_context_messages, new_in_context_messages = await super()._step(
78
+ agent_state=agent_state, input_messages=input_messages, max_steps=max_steps
79
+ )
80
+ new_in_context_messages, updated = self.summarizer.summarize(
81
+ in_context_messages=current_in_context_messages, new_letta_messages=new_in_context_messages
82
+ )
83
+ self.agent_manager.set_in_context_messages(
84
+ agent_id=self.agent_id, message_ids=[m.id for m in new_in_context_messages], actor=self.actor
85
+ )
86
+
87
+ return _create_letta_response(new_in_context_messages=new_in_context_messages, use_assistant_message=self.use_assistant_message)
88
+
89
+ @trace_method
90
+ async def _execute_tool(self, tool_name: str, tool_args: dict, agent_state: AgentState) -> Tuple[str, bool]:
91
+ """
92
+ Executes a tool and returns (result, success_flag).
93
+ """
94
+ # Special memory case
95
+ target_tool = next((x for x in agent_state.tools if x.name == tool_name), None)
96
+ if not target_tool:
97
+ return f"Tool not found: {tool_name}", False
98
+
99
+ try:
100
+ if target_tool.name == "rethink_user_memory" and target_tool.tool_type == ToolType.LETTA_VOICE_SLEEPTIME_CORE:
101
+ return self.rethink_user_memory(agent_state=agent_state, **tool_args)
102
+ elif target_tool.name == "finish_rethinking_memory" and target_tool.tool_type == ToolType.LETTA_VOICE_SLEEPTIME_CORE:
103
+ return "", True
104
+ elif target_tool.name == "store_memories" and target_tool.tool_type == ToolType.LETTA_VOICE_SLEEPTIME_CORE:
105
+ chunks = tool_args.get("chunks", [])
106
+ results = [self.store_memory(agent_state=self.convo_agent_state, **chunk_args) for chunk_args in chunks]
107
+
108
+ aggregated_result = next((res for res, _ in results if res is not None), None)
109
+ aggregated_success = all(success for _, success in results)
110
+
111
+ return aggregated_result, aggregated_success # Note that here we store to the convo agent's archival memory
112
+ else:
113
+ result = f"Voice sleeptime agent tried invoking invalid tool with type {target_tool.tool_type}: {target_tool}"
114
+ return result, False
115
+ except Exception as e:
116
+ return f"Failed to call tool. Error: {e}", False
117
+
118
+ def rethink_user_memory(self, new_memory: str, agent_state: AgentState) -> Tuple[str, bool]:
119
+ if agent_state.memory.get_block(self.target_block_label) is None:
120
+ agent_state.memory.create_block(label=self.target_block_label, value=new_memory)
121
+
122
+ agent_state.memory.update_block_value(label=self.target_block_label, value=new_memory)
123
+
124
+ target_block = agent_state.memory.get_block(self.target_block_label)
125
+ self.block_manager.update_block(block_id=target_block.id, block_update=BlockUpdate(value=target_block.value), actor=self.actor)
126
+
127
+ return "", True
128
+
129
+ def store_memory(self, start_index: int, end_index: int, context: str, agent_state: AgentState) -> Tuple[str, bool]:
130
+ """
131
+ Store a memory.
132
+ """
133
+ try:
134
+ messages = self.message_transcripts[start_index : end_index + 1]
135
+ memory = serialize_message_history(messages, context)
136
+ self.agent_manager.passage_manager.insert_passage(
137
+ agent_state=agent_state,
138
+ agent_id=agent_state.id,
139
+ text=memory,
140
+ actor=self.actor,
141
+ )
142
+ self.agent_manager.rebuild_system_prompt(agent_id=agent_state.id, actor=self.actor, force=True)
143
+
144
+ return "", True
145
+ except Exception as e:
146
+ return f"Failed to store memory given start_index {start_index} and end_index {end_index}: {e}", False
147
+
148
+ async def step_stream(
149
+ self, input_messages: List[MessageCreate], max_steps: int = 10, use_assistant_message: bool = False
150
+ ) -> AsyncGenerator[Union[LettaMessage, LegacyLettaMessage, MessageStreamStatus], None]:
151
+ """
152
+ This agent is synchronous-only. If called in an async context, raise an error.
153
+ """
154
+ raise NotImplementedError("VoiceSleeptimeAgent does not support async step.")
@@ -68,7 +68,7 @@ def send_message_to_agent_async(self: "Agent", message: str, other_agent_id: str
68
68
  messages=messages,
69
69
  other_agent_id=other_agent_id,
70
70
  log_prefix="[send_message_to_agent_async]",
71
- use_retries=False, # or True if you want to use async_send_message_with_retries
71
+ use_retries=False, # or True if you want to use _async_send_message_with_retries
72
72
  )
73
73
 
74
74
  # Immediately return to caller
@@ -0,0 +1,80 @@
1
+ ## Voice chat + sleeptime tools
2
+ from typing import List, Optional
3
+
4
+ from pydantic import BaseModel, Field
5
+
6
+
7
+ def rethink_user_memory(agent_state: "AgentState", new_memory: str) -> None:
8
+ """
9
+ Rewrite memory block for the main agent, new_memory should contain all current information from the block that is not outdated or inconsistent, integrating any new information, resulting in a new memory block that is organized, readable, and comprehensive.
10
+
11
+ Args:
12
+ new_memory (str): The new memory with information integrated from the memory block. If there is no new information, then this should be the same as the content in the source block.
13
+
14
+ Returns:
15
+ None: None is always returned as this function does not produce a response.
16
+ """
17
+ # This is implemented directly in the agent loop
18
+ return None
19
+
20
+
21
+ def finish_rethinking_memory(agent_state: "AgentState") -> None: # type: ignore
22
+ """
23
+ This function is called when the agent is done rethinking the memory.
24
+
25
+ Returns:
26
+ Optional[str]: None is always returned as this function does not produce a response.
27
+ """
28
+ return None
29
+
30
+
31
+ class MemoryChunk(BaseModel):
32
+ start_index: int = Field(
33
+ ...,
34
+ description="Zero-based index of the first evicted line in this chunk.",
35
+ )
36
+ end_index: int = Field(
37
+ ...,
38
+ description="Zero-based index of the last evicted line (inclusive).",
39
+ )
40
+ context: str = Field(
41
+ ...,
42
+ description="1-3 sentence paraphrase capturing key facts/details, user preferences, or goals that this chunk reveals—written for future retrieval.",
43
+ )
44
+
45
+
46
+ def store_memories(agent_state: "AgentState", chunks: List[MemoryChunk]) -> None:
47
+ """
48
+ Persist dialogue that is about to fall out of the agent’s context window.
49
+
50
+ Args:
51
+ chunks (List[MemoryChunk]):
52
+ Each chunk pinpoints a contiguous block of **evicted** lines and provides a short, forward-looking synopsis (`context`) that will be embedded for future semantic lookup.
53
+
54
+ Returns:
55
+ None
56
+ """
57
+ # This is implemented directly in the agent loop
58
+ return None
59
+
60
+
61
+ def search_memory(
62
+ agent_state: "AgentState",
63
+ convo_keyword_queries: Optional[List[str]],
64
+ start_minutes_ago: Optional[int],
65
+ end_minutes_ago: Optional[int],
66
+ ) -> Optional[str]:
67
+ """
68
+ Look in long-term or earlier-conversation memory only when the user asks about something missing from the visible context. The user’s latest utterance is sent automatically as the main query.
69
+
70
+ Args:
71
+ convo_keyword_queries (Optional[List[str]]): Extra keywords (e.g., order ID, place name). Use *null* if not appropriate for the latest user message.
72
+ start_minutes_ago (Optional[int]): Newer bound of the time window for results, specified in minutes ago. Use *null* if no lower time bound is needed.
73
+ end_minutes_ago (Optional[int]): Older bound of the time window, in minutes ago. Use *null* if no upper bound is needed.
74
+
75
+ Returns:
76
+ Optional[str]: A formatted string of matching memory entries, or None if no
77
+ relevant memories are found.
78
+ """
79
+ # This is implemented directly in the agent loop
80
+ return None
@@ -231,7 +231,7 @@ async def async_execute_send_message_to_agent(
231
231
  """
232
232
  Async helper to:
233
233
  1) validate the target agent exists & is in the same org,
234
- 2) send a message via async_send_message_with_retries.
234
+ 2) send a message via _async_send_message_with_retries.
235
235
  """
236
236
  server = get_letta_server()
237
237
 
@@ -242,7 +242,7 @@ async def async_execute_send_message_to_agent(
242
242
  raise ValueError(f"Target agent {other_agent_id} either does not exist or is not in org " f"({sender_agent.user.organization_id}).")
243
243
 
244
244
  # 2. Use your async retry logic
245
- return await async_send_message_with_retries(
245
+ return await _async_send_message_with_retries(
246
246
  server=server,
247
247
  sender_agent=sender_agent,
248
248
  target_agent_id=other_agent_id,
@@ -304,7 +304,7 @@ async def _async_send_message_with_retries(
304
304
  timeout: int,
305
305
  logging_prefix: Optional[str] = None,
306
306
  ) -> str:
307
- logging_prefix = logging_prefix or "[async_send_message_with_retries]"
307
+ logging_prefix = logging_prefix or "[_async_send_message_with_retries]"
308
308
 
309
309
  for attempt in range(1, max_retries + 1):
310
310
  try:
@@ -363,7 +363,7 @@ def fire_and_forget_send_to_agent(
363
363
  messages (List[MessageCreate]): The messages to send.
364
364
  other_agent_id (str): The ID of the target agent.
365
365
  log_prefix (str): Prefix for logging.
366
- use_retries (bool): If True, uses async_send_message_with_retries;
366
+ use_retries (bool): If True, uses _async_send_message_with_retries;
367
367
  if False, calls server.send_message_to_agent directly.
368
368
  """
369
369
  server = get_letta_server()
@@ -381,7 +381,7 @@ def fire_and_forget_send_to_agent(
381
381
  async def background_task():
382
382
  try:
383
383
  if use_retries:
384
- result = await async_send_message_with_retries(
384
+ result = await _async_send_message_with_retries(
385
385
  server=server,
386
386
  sender_agent=sender_agent,
387
387
  target_agent_id=other_agent_id,
@@ -434,7 +434,7 @@ async def _send_message_to_agents_matching_tags_async(
434
434
  sender_agent: "Agent", server: "SyncServer", messages: List[MessageCreate], matching_agents: List["AgentState"]
435
435
  ) -> List[str]:
436
436
  async def _send_single(agent_state):
437
- return await async_send_message_with_retries(
437
+ return await _async_send_message_with_retries(
438
438
  server=server,
439
439
  sender_agent=sender_agent,
440
440
  target_agent_id=agent_state.id,
@@ -475,7 +475,7 @@ async def _send_message_to_all_agents_in_group_async(sender_agent: "Agent", mess
475
475
 
476
476
  async def _send_single(agent_state):
477
477
  async with sem:
478
- return await async_send_message_with_retries(
478
+ return await _async_send_message_with_retries(
479
479
  server=server,
480
480
  sender_agent=sender_agent,
481
481
  target_agent_id=agent_state.id,
@@ -1,4 +1,5 @@
1
1
  import re
2
+ import time
2
3
  from datetime import datetime, timedelta, timezone
3
4
  from time import strftime
4
5
 
@@ -77,6 +78,11 @@ def get_utc_time_int() -> int:
77
78
  return int(get_utc_time().timestamp())
78
79
 
79
80
 
81
+ def get_utc_timestamp_ns() -> int:
82
+ """Get the current UTC time in nanoseconds"""
83
+ return int(time.time_ns())
84
+
85
+
80
86
  def timestamp_to_datetime(timestamp_seconds: int) -> datetime:
81
87
  """Convert Unix timestamp in seconds to UTC datetime object"""
82
88
  return datetime.fromtimestamp(timestamp_seconds, tz=timezone.utc)