letta-nightly 0.8.6.dev20250627104313__tar.gz → 0.8.6.dev20250627191649__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 (411) hide show
  1. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/PKG-INFO +2 -3
  2. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/agents/letta_agent_batch.py +16 -11
  3. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/helpers/decorators.py +1 -1
  4. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/jobs/scheduler.py +57 -33
  5. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/step.py +3 -0
  6. letta_nightly-0.8.6.dev20250627191649/letta/prompts/system/react.txt +19 -0
  7. letta_nightly-0.8.6.dev20250627191649/letta/prompts/system/workflow.txt +15 -0
  8. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/agent.py +35 -7
  9. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/providers.py +2 -2
  10. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/step.py +4 -1
  11. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/app.py +42 -5
  12. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/sources.py +17 -13
  13. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/steps.py +22 -1
  14. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/tools.py +69 -1
  15. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/agent_manager.py +25 -1
  16. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/file_processor/file_processor.py +3 -35
  17. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/helpers/agent_manager_helper.py +8 -0
  18. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/passage_manager.py +3 -4
  19. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/step_manager.py +16 -1
  20. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/pyproject.toml +2 -3
  21. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/LICENSE +0 -0
  22. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/README.md +0 -0
  23. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/__init__.py +0 -0
  24. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/agent.py +0 -0
  25. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/agents/__init__.py +0 -0
  26. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/agents/base_agent.py +0 -0
  27. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/agents/ephemeral_agent.py +0 -0
  28. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/agents/ephemeral_summary_agent.py +0 -0
  29. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/agents/exceptions.py +0 -0
  30. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/agents/helpers.py +0 -0
  31. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/agents/letta_agent.py +0 -0
  32. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/agents/prompts/summary_system_prompt.txt +0 -0
  33. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/agents/voice_agent.py +0 -0
  34. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/agents/voice_sleeptime_agent.py +0 -0
  35. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/cli/cli.py +0 -0
  36. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/cli/cli_load.py +0 -0
  37. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/client/__init__.py +0 -0
  38. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/client/client.py +0 -0
  39. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/client/streaming.py +0 -0
  40. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/client/utils.py +0 -0
  41. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/config.py +0 -0
  42. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/constants.py +0 -0
  43. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/data_sources/__init__.py +0 -0
  44. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/data_sources/connectors.py +0 -0
  45. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/data_sources/connectors_helper.py +0 -0
  46. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/data_sources/redis_client.py +0 -0
  47. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/embeddings.py +0 -0
  48. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/errors.py +0 -0
  49. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/__init__.py +0 -0
  50. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/ast_parsers.py +0 -0
  51. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/async_composio_toolset.py +0 -0
  52. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/composio_helpers.py +0 -0
  53. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/function_sets/base.py +0 -0
  54. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/function_sets/builtin.py +0 -0
  55. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/function_sets/extras.py +0 -0
  56. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/function_sets/files.py +0 -0
  57. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/function_sets/multi_agent.py +0 -0
  58. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/function_sets/voice.py +0 -0
  59. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/functions.py +0 -0
  60. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/helpers.py +0 -0
  61. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/interface.py +0 -0
  62. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/mcp_client/__init__.py +0 -0
  63. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/mcp_client/base_client.py +0 -0
  64. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/mcp_client/exceptions.py +0 -0
  65. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/mcp_client/sse_client.py +0 -0
  66. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/mcp_client/stdio_client.py +0 -0
  67. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/mcp_client/types.py +0 -0
  68. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/prompts.py +0 -0
  69. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/schema_generator.py +0 -0
  70. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/functions/types.py +0 -0
  71. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/groups/dynamic_multi_agent.py +0 -0
  72. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/groups/helpers.py +0 -0
  73. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/groups/round_robin_multi_agent.py +0 -0
  74. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/groups/sleeptime_multi_agent.py +0 -0
  75. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/groups/sleeptime_multi_agent_v2.py +0 -0
  76. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/groups/supervisor_multi_agent.py +0 -0
  77. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/helpers/__init__.py +0 -0
  78. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/helpers/composio_helpers.py +0 -0
  79. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/helpers/converters.py +0 -0
  80. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/helpers/datetime_helpers.py +0 -0
  81. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/helpers/json_helpers.py +0 -0
  82. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/helpers/message_helper.py +0 -0
  83. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/helpers/singleton.py +0 -0
  84. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/helpers/tool_execution_helper.py +0 -0
  85. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/helpers/tool_rule_solver.py +0 -0
  86. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/humans/__init__.py +0 -0
  87. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/humans/examples/basic.txt +0 -0
  88. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/humans/examples/cs_phd.txt +0 -0
  89. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/interface.py +0 -0
  90. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/interfaces/__init__.py +0 -0
  91. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/interfaces/anthropic_streaming_interface.py +0 -0
  92. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
  93. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/interfaces/openai_streaming_interface.py +0 -0
  94. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/interfaces/utils.py +0 -0
  95. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/jobs/__init__.py +0 -0
  96. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/jobs/helpers.py +0 -0
  97. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/jobs/llm_batch_job_polling.py +0 -0
  98. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/jobs/types.py +0 -0
  99. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/__init__.py +0 -0
  100. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/anthropic.py +0 -0
  101. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/anthropic_client.py +0 -0
  102. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/aws_bedrock.py +0 -0
  103. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/azure_openai.py +0 -0
  104. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/azure_openai_constants.py +0 -0
  105. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/bedrock_client.py +0 -0
  106. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/cohere.py +0 -0
  107. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/deepseek.py +0 -0
  108. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/google_ai_client.py +0 -0
  109. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/google_constants.py +0 -0
  110. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/google_vertex_client.py +0 -0
  111. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/helpers.py +0 -0
  112. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/llm_api_tools.py +0 -0
  113. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/llm_client.py +0 -0
  114. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/llm_client_base.py +0 -0
  115. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/mistral.py +0 -0
  116. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/openai.py +0 -0
  117. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/llm_api/openai_client.py +0 -0
  118. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/README.md +0 -0
  119. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/__init__.py +0 -0
  120. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/chat_completion_proxy.py +0 -0
  121. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/constants.py +0 -0
  122. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/function_parser.py +0 -0
  123. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/grammars/__init__.py +0 -0
  124. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
  125. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/grammars/json.gbnf +0 -0
  126. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
  127. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/json_parser.py +0 -0
  128. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/koboldcpp/api.py +0 -0
  129. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/koboldcpp/settings.py +0 -0
  130. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/llamacpp/api.py +0 -0
  131. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/llamacpp/settings.py +0 -0
  132. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
  133. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
  134. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
  135. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
  136. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
  137. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
  138. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
  139. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
  140. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
  141. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/lmstudio/api.py +0 -0
  142. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/lmstudio/settings.py +0 -0
  143. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/ollama/api.py +0 -0
  144. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/ollama/settings.py +0 -0
  145. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/settings/__init__.py +0 -0
  146. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
  147. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/settings/settings.py +0 -0
  148. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/settings/simple.py +0 -0
  149. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/utils.py +0 -0
  150. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/vllm/api.py +0 -0
  151. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/webui/api.py +0 -0
  152. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/webui/legacy_api.py +0 -0
  153. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/webui/legacy_settings.py +0 -0
  154. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/local_llm/webui/settings.py +0 -0
  155. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/log.py +0 -0
  156. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/main.py +0 -0
  157. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/memory.py +0 -0
  158. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/openai_backcompat/__init__.py +0 -0
  159. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/openai_backcompat/openai_object.py +0 -0
  160. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/__all__.py +0 -0
  161. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/__init__.py +0 -0
  162. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/agent.py +0 -0
  163. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/agents_tags.py +0 -0
  164. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/base.py +0 -0
  165. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/block.py +0 -0
  166. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/block_history.py +0 -0
  167. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/blocks_agents.py +0 -0
  168. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/custom_columns.py +0 -0
  169. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/enums.py +0 -0
  170. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/errors.py +0 -0
  171. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/file.py +0 -0
  172. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/files_agents.py +0 -0
  173. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/group.py +0 -0
  174. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/groups_agents.py +0 -0
  175. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/groups_blocks.py +0 -0
  176. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/identities_agents.py +0 -0
  177. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/identities_blocks.py +0 -0
  178. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/identity.py +0 -0
  179. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/job.py +0 -0
  180. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/job_messages.py +0 -0
  181. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/llm_batch_items.py +0 -0
  182. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/llm_batch_job.py +0 -0
  183. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/mcp_server.py +0 -0
  184. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/message.py +0 -0
  185. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/mixins.py +0 -0
  186. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/organization.py +0 -0
  187. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/passage.py +0 -0
  188. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/provider.py +0 -0
  189. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/provider_trace.py +0 -0
  190. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/sandbox_config.py +0 -0
  191. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/source.py +0 -0
  192. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/sources_agents.py +0 -0
  193. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/sqlalchemy_base.py +0 -0
  194. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/sqlite_functions.py +0 -0
  195. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/tool.py +0 -0
  196. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/tools_agents.py +0 -0
  197. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/orm/user.py +0 -0
  198. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/otel/__init__.py +0 -0
  199. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/otel/context.py +0 -0
  200. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/otel/events.py +0 -0
  201. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/otel/metric_registry.py +0 -0
  202. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/otel/metrics.py +0 -0
  203. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/otel/resource.py +0 -0
  204. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/otel/tracing.py +0 -0
  205. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/personas/__init__.py +0 -0
  206. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/personas/examples/anna_pa.txt +0 -0
  207. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/personas/examples/google_search_persona.txt +0 -0
  208. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/personas/examples/memgpt_doc.txt +0 -0
  209. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/personas/examples/memgpt_starter.txt +0 -0
  210. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/personas/examples/o1_persona.txt +0 -0
  211. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/personas/examples/sam.txt +0 -0
  212. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/personas/examples/sam_pov.txt +0 -0
  213. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
  214. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/personas/examples/sleeptime_doc_persona.txt +0 -0
  215. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/personas/examples/sleeptime_memory_persona.txt +0 -0
  216. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/personas/examples/sqldb/test.db +0 -0
  217. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/personas/examples/voice_memory_persona.txt +0 -0
  218. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/plugins/README.md +0 -0
  219. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/plugins/__init__.py +0 -0
  220. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/plugins/defaults.py +0 -0
  221. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/plugins/plugins.py +0 -0
  222. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/__init__.py +0 -0
  223. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/gpt_summarize.py +0 -0
  224. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/gpt_system.py +0 -0
  225. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_base.txt +0 -0
  226. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_chat.txt +0 -0
  227. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
  228. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
  229. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_convo_only.txt +0 -0
  230. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_doc.txt +0 -0
  231. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
  232. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
  233. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_memory_only.txt +0 -0
  234. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
  235. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
  236. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
  237. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
  238. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_sleeptime_chat.txt +0 -0
  239. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/memgpt_v2_chat.txt +0 -0
  240. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/sleeptime.txt +0 -0
  241. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/sleeptime_doc_ingest.txt +0 -0
  242. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/sleeptime_v2.txt +0 -0
  243. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/voice_chat.txt +0 -0
  244. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/prompts/system/voice_sleeptime.txt +0 -0
  245. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/pytest.ini +0 -0
  246. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/block.py +0 -0
  247. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/embedding_config.py +0 -0
  248. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/embedding_config_overrides.py +0 -0
  249. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/enums.py +0 -0
  250. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/environment_variables.py +0 -0
  251. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/file.py +0 -0
  252. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/group.py +0 -0
  253. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/health.py +0 -0
  254. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/identity.py +0 -0
  255. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/job.py +0 -0
  256. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/letta_base.py +0 -0
  257. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/letta_message.py +0 -0
  258. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/letta_message_content.py +0 -0
  259. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/letta_request.py +0 -0
  260. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/letta_response.py +0 -0
  261. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/letta_stop_reason.py +0 -0
  262. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/llm_batch_job.py +0 -0
  263. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/llm_config.py +0 -0
  264. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/llm_config_overrides.py +0 -0
  265. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/mcp.py +0 -0
  266. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/memory.py +0 -0
  267. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/message.py +0 -0
  268. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/openai/chat_completion_request.py +0 -0
  269. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/openai/chat_completion_response.py +0 -0
  270. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/openai/chat_completions.py +0 -0
  271. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/openai/embedding_response.py +0 -0
  272. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/openai/openai.py +0 -0
  273. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/organization.py +0 -0
  274. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/passage.py +0 -0
  275. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/pip_requirement.py +0 -0
  276. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/provider_trace.py +0 -0
  277. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/response_format.py +0 -0
  278. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/run.py +0 -0
  279. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/sandbox_config.py +0 -0
  280. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/source.py +0 -0
  281. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/tool.py +0 -0
  282. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/tool_execution_result.py +0 -0
  283. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/tool_rule.py +0 -0
  284. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/usage.py +0 -0
  285. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/schemas/user.py +0 -0
  286. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/serialize_schemas/__init__.py +0 -0
  287. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/serialize_schemas/marshmallow_agent.py +0 -0
  288. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
  289. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/serialize_schemas/marshmallow_base.py +0 -0
  290. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/serialize_schemas/marshmallow_block.py +0 -0
  291. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
  292. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/serialize_schemas/marshmallow_message.py +0 -0
  293. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/serialize_schemas/marshmallow_tag.py +0 -0
  294. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/serialize_schemas/marshmallow_tool.py +0 -0
  295. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/serialize_schemas/pydantic_agent_schema.py +0 -0
  296. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/__init__.py +0 -0
  297. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/constants.py +0 -0
  298. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/db.py +0 -0
  299. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/generate_openapi_schema.sh +0 -0
  300. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/__init__.py +0 -0
  301. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/auth/__init__.py +0 -0
  302. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/auth/index.py +0 -0
  303. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/auth_token.py +0 -0
  304. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/chat_completions_interface.py +0 -0
  305. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/interface.py +0 -0
  306. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/json_parser.py +0 -0
  307. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/__init__.py +0 -0
  308. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
  309. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
  310. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/__init__.py +0 -0
  311. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/agents.py +0 -0
  312. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/blocks.py +0 -0
  313. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/embeddings.py +0 -0
  314. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/groups.py +0 -0
  315. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/health.py +0 -0
  316. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/identities.py +0 -0
  317. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/jobs.py +0 -0
  318. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/llms.py +0 -0
  319. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/messages.py +0 -0
  320. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/organizations.py +0 -0
  321. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/providers.py +0 -0
  322. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/runs.py +0 -0
  323. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
  324. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/tags.py +0 -0
  325. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/telemetry.py +0 -0
  326. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/users.py +0 -0
  327. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/routers/v1/voice.py +0 -0
  328. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/static_files.py +0 -0
  329. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/streaming_response.py +0 -0
  330. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/rest_api/utils.py +0 -0
  331. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/server.py +0 -0
  332. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/startup.sh +0 -0
  333. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/static_files/assets/index-048c9598.js +0 -0
  334. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/static_files/assets/index-0e31b727.css +0 -0
  335. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/static_files/favicon.ico +0 -0
  336. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/static_files/index.html +0 -0
  337. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
  338. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/utils.py +0 -0
  339. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/ws_api/__init__.py +0 -0
  340. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/ws_api/example_client.py +0 -0
  341. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/ws_api/interface.py +0 -0
  342. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/ws_api/protocol.py +0 -0
  343. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/server/ws_api/server.py +0 -0
  344. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/__init__.py +0 -0
  345. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/block_manager.py +0 -0
  346. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/context_window_calculator/__init__.py +0 -0
  347. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/context_window_calculator/context_window_calculator.py +0 -0
  348. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/context_window_calculator/token_counter.py +0 -0
  349. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/file_manager.py +0 -0
  350. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/file_processor/__init__.py +0 -0
  351. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/file_processor/chunker/__init__.py +0 -0
  352. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/file_processor/chunker/line_chunker.py +0 -0
  353. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/file_processor/chunker/llama_index_chunker.py +0 -0
  354. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/file_processor/embedder/__init__.py +0 -0
  355. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/file_processor/embedder/openai_embedder.py +0 -0
  356. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/file_processor/file_types.py +0 -0
  357. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/file_processor/parser/__init__.py +0 -0
  358. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/file_processor/parser/base_parser.py +0 -0
  359. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/file_processor/parser/mistral_parser.py +0 -0
  360. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/file_processor/types.py +0 -0
  361. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/files_agents_manager.py +0 -0
  362. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/group_manager.py +0 -0
  363. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/helpers/tool_execution_helper.py +0 -0
  364. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/helpers/tool_parser_helper.py +0 -0
  365. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/identity_manager.py +0 -0
  366. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/job_manager.py +0 -0
  367. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/llm_batch_manager.py +0 -0
  368. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/mcp/__init__.py +0 -0
  369. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/mcp/base_client.py +0 -0
  370. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/mcp/sse_client.py +0 -0
  371. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/mcp/stdio_client.py +0 -0
  372. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/mcp/streamable_http_client.py +0 -0
  373. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/mcp/types.py +0 -0
  374. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/mcp_manager.py +0 -0
  375. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/message_manager.py +0 -0
  376. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/organization_manager.py +0 -0
  377. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/per_agent_lock_manager.py +0 -0
  378. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/provider_manager.py +0 -0
  379. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/sandbox_config_manager.py +0 -0
  380. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/source_manager.py +0 -0
  381. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/summarizer/__init__.py +0 -0
  382. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/summarizer/enums.py +0 -0
  383. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/summarizer/summarizer.py +0 -0
  384. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/telemetry_manager.py +0 -0
  385. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_executor/__init__.py +0 -0
  386. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_executor/builtin_tool_executor.py +0 -0
  387. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_executor/composio_tool_executor.py +0 -0
  388. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_executor/core_tool_executor.py +0 -0
  389. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_executor/files_tool_executor.py +0 -0
  390. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_executor/mcp_tool_executor.py +0 -0
  391. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_executor/multi_agent_tool_executor.py +0 -0
  392. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_executor/tool_execution_manager.py +0 -0
  393. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_executor/tool_execution_sandbox.py +0 -0
  394. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_executor/tool_executor.py +0 -0
  395. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_executor/tool_executor_base.py +0 -0
  396. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_manager.py +0 -0
  397. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_sandbox/__init__.py +0 -0
  398. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_sandbox/base.py +0 -0
  399. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_sandbox/e2b_sandbox.py +0 -0
  400. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/tool_sandbox/local_sandbox.py +0 -0
  401. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/services/user_manager.py +0 -0
  402. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/settings.py +0 -0
  403. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/streaming_interface.py +0 -0
  404. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/streaming_utils.py +0 -0
  405. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/system.py +0 -0
  406. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/templates/__init__.py +0 -0
  407. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/templates/sandbox_code_file.py.j2 +0 -0
  408. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/templates/sandbox_code_file_async.py.j2 +0 -0
  409. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/templates/template_helper.py +0 -0
  410. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/types/__init__.py +0 -0
  411. {letta_nightly-0.8.6.dev20250627104313 → letta_nightly-0.8.6.dev20250627191649}/letta/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.8.6.dev20250627104313
3
+ Version: 0.8.6.dev20250627191649
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -29,7 +29,6 @@ Requires-Dist: aiosqlite (>=0.21.0,<0.22.0)
29
29
  Requires-Dist: alembic (>=1.13.3,<2.0.0)
30
30
  Requires-Dist: anthropic (>=0.49.0,<0.50.0)
31
31
  Requires-Dist: apscheduler (>=3.11.0,<4.0.0)
32
- Requires-Dist: async-lru (>=2.0.5,<3.0.0)
33
32
  Requires-Dist: asyncpg (>=0.30.0,<0.31.0) ; extra == "postgres"
34
33
  Requires-Dist: autoflake (>=2.3.0,<3.0.0) ; extra == "dev" or extra == "all"
35
34
  Requires-Dist: black[jupyter] (>=24.2.0,<25.0.0) ; extra == "dev" or extra == "all"
@@ -57,7 +56,7 @@ Requires-Dist: isort (>=5.13.2,<6.0.0) ; extra == "dev" or extra == "all"
57
56
  Requires-Dist: jinja2 (>=3.1.5,<4.0.0)
58
57
  Requires-Dist: langchain (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
59
58
  Requires-Dist: langchain-community (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
60
- Requires-Dist: letta_client (>=0.1.169,<0.2.0)
59
+ Requires-Dist: letta_client (>=0.1.173,<0.2.0)
61
60
  Requires-Dist: llama-index (>=0.12.2,<0.13.0)
62
61
  Requires-Dist: llama-index-embeddings-openai (>=0.3.1,<0.4.0)
63
62
  Requires-Dist: locust (>=2.31.5,<3.0.0) ; extra == "dev" or extra == "desktop" or extra == "all"
@@ -492,30 +492,32 @@ class LettaAgentBatch(BaseAgent):
492
492
  msg_map: Dict[str, List[Message]],
493
493
  ) -> Tuple[List[LettaBatchRequest], Dict[str, AgentStepState]]:
494
494
  # who continues?
495
- continues = [aid for aid, cont in ctx.should_continue_map.items() if cont]
495
+ continues = [agent_id for agent_id, cont in ctx.should_continue_map.items() if cont]
496
496
 
497
497
  success_flag_map = {aid: result.success_flag for aid, result in exec_results}
498
498
 
499
499
  batch_reqs: List[LettaBatchRequest] = []
500
- for aid in continues:
500
+ for agent_id in continues:
501
501
  heartbeat = create_heartbeat_system_message(
502
- agent_id=aid,
503
- model=ctx.agent_state_map[aid].llm_config.model,
504
- function_call_success=success_flag_map[aid],
502
+ agent_id=agent_id,
503
+ model=ctx.agent_state_map[agent_id].llm_config.model,
504
+ function_call_success=success_flag_map[agent_id],
505
+ timezone=ctx.agent_state_map[agent_id].timezone,
505
506
  actor=self.actor,
506
507
  )
507
508
  batch_reqs.append(
508
509
  LettaBatchRequest(
509
- agent_id=aid, messages=[MessageCreate.model_validate(heartbeat.model_dump(include={"role", "content", "name", "otid"}))]
510
+ agent_id=agent_id,
511
+ messages=[MessageCreate.model_validate(heartbeat.model_dump(include={"role", "content", "name", "otid"}))],
510
512
  )
511
513
  )
512
514
 
513
515
  # extend in‑context ids when necessary
514
- for aid, new_msgs in msg_map.items():
515
- ast = ctx.agent_state_map[aid]
516
+ for agent_id, new_msgs in msg_map.items():
517
+ ast = ctx.agent_state_map[agent_id]
516
518
  if not ast.message_buffer_autoclear:
517
519
  await self.agent_manager.set_in_context_messages_async(
518
- agent_id=aid,
520
+ agent_id=agent_id,
519
521
  message_ids=ast.message_ids + [m.id for m in new_msgs],
520
522
  actor=self.actor,
521
523
  )
@@ -605,7 +607,8 @@ class LettaAgentBatch(BaseAgent):
605
607
 
606
608
  return tool_call_name, tool_args, continue_stepping
607
609
 
608
- def _prepare_tools_per_agent(self, agent_state: AgentState, tool_rules_solver: ToolRulesSolver) -> List[dict]:
610
+ @staticmethod
611
+ def _prepare_tools_per_agent(agent_state: AgentState, tool_rules_solver: ToolRulesSolver) -> List[dict]:
609
612
  tools = [t for t in agent_state.tools if t.tool_type in {ToolType.CUSTOM, ToolType.LETTA_CORE, ToolType.LETTA_MEMORY_CORE}]
610
613
  valid_tool_names = tool_rules_solver.get_allowed_tool_names(available_tools=set([t.name for t in tools]))
611
614
  return [enable_strict_mode(t.json_schema) for t in tools if t.name in set(valid_tool_names)]
@@ -621,7 +624,9 @@ class LettaAgentBatch(BaseAgent):
621
624
  return in_context_messages
622
625
 
623
626
  # Not used in batch.
624
- async def step(self, input_messages: List[MessageCreate], max_steps: int = DEFAULT_MAX_STEPS) -> LettaResponse:
627
+ async def step(
628
+ self, input_messages: List[MessageCreate], max_steps: int = DEFAULT_MAX_STEPS, run_id: str | None = None
629
+ ) -> LettaResponse:
625
630
  raise NotImplementedError
626
631
 
627
632
  async def step_stream(
@@ -87,7 +87,7 @@ class CacheStats:
87
87
 
88
88
 
89
89
  def async_redis_cache(
90
- key_func: Callable, prefix: str = REDIS_DEFAULT_CACHE_PREFIX, ttl_s: int = 300, model_class: type[BaseModel] | None = None
90
+ key_func: Callable, prefix: str = REDIS_DEFAULT_CACHE_PREFIX, ttl_s: int = 600, model_class: type[BaseModel] | None = None
91
91
  ):
92
92
  """
93
93
  Decorator for caching async function results in Redis. May be a Noop if redis is not available.
@@ -36,25 +36,44 @@ async def _try_acquire_lock_and_start_scheduler(server: SyncServer) -> bool:
36
36
  # Use a temporary connection context for the attempt initially
37
37
  with db_context() as session:
38
38
  engine = session.get_bind()
39
- # Get raw connection - MUST be kept open if lock is acquired
40
- raw_conn = engine.raw_connection()
41
- cur = raw_conn.cursor()
39
+ engine_name = engine.name
40
+ logger.info(f"Database engine type: {engine_name}")
42
41
 
43
- cur.execute("SELECT pg_try_advisory_lock(CAST(%s AS bigint))", (ADVISORY_LOCK_KEY,))
44
- acquired_lock = cur.fetchone()[0]
42
+ if engine_name != "postgresql":
43
+ logger.warning(f"Advisory locks not supported for {engine_name} database. Starting scheduler without leader election.")
44
+ acquired_lock = True # For SQLite, assume we can start the scheduler
45
+ else:
46
+ # Get raw connection - MUST be kept open if lock is acquired
47
+ raw_conn = engine.raw_connection()
48
+ cur = raw_conn.cursor()
49
+
50
+ cur.execute("SELECT pg_try_advisory_lock(CAST(%s AS bigint))", (ADVISORY_LOCK_KEY,))
51
+ acquired_lock = cur.fetchone()[0]
45
52
 
46
53
  if not acquired_lock:
47
- cur.close()
48
- raw_conn.close()
54
+ if cur:
55
+ cur.close()
56
+ if raw_conn:
57
+ raw_conn.close()
49
58
  logger.info("Scheduler lock held by another instance.")
50
59
  return False
51
60
 
52
61
  # --- Lock Acquired ---
53
- logger.info("Acquired scheduler lock.")
54
- _advisory_lock_conn = raw_conn # Keep connection for lock duration
55
- _advisory_lock_cur = cur # Keep cursor for lock duration
56
- raw_conn = None # Prevent closing in finally block
57
- cur = None # Prevent closing in finally block
62
+ if engine_name == "postgresql":
63
+ logger.info("Acquired PostgreSQL advisory lock.")
64
+ _advisory_lock_conn = raw_conn # Keep connection for lock duration
65
+ _advisory_lock_cur = cur # Keep cursor for lock duration
66
+ raw_conn = None # Prevent closing in finally block
67
+ cur = None # Prevent closing in finally block
68
+ else:
69
+ logger.info("Starting scheduler for non-PostgreSQL database.")
70
+ # For SQLite, we don't need to keep the connection open
71
+ if cur:
72
+ cur.close()
73
+ if raw_conn:
74
+ raw_conn.close()
75
+ raw_conn = None
76
+ cur = None
58
77
 
59
78
  trigger = IntervalTrigger(
60
79
  seconds=settings.poll_running_llm_batches_interval_seconds,
@@ -157,35 +176,30 @@ async def _release_advisory_lock():
157
176
  _advisory_lock_conn = None # Clear global immediately
158
177
 
159
178
  if lock_cur is not None and lock_conn is not None:
160
- logger.info(f"Attempting to release advisory lock {ADVISORY_LOCK_KEY}")
179
+ logger.info(f"Attempting to release PostgreSQL advisory lock {ADVISORY_LOCK_KEY}")
161
180
  try:
162
- if not lock_conn.closed:
163
- if not lock_cur.closed:
164
- lock_cur.execute("SELECT pg_advisory_unlock(CAST(%s AS bigint))", (ADVISORY_LOCK_KEY,))
165
- lock_cur.fetchone() # Consume result
166
- lock_conn.commit()
167
- logger.info(f"Executed pg_advisory_unlock for lock {ADVISORY_LOCK_KEY}")
168
- else:
169
- logger.warning("Advisory lock cursor closed before unlock.")
170
- else:
171
- logger.warning("Advisory lock connection closed before unlock.")
181
+ # Try to execute unlock - connection/cursor validity is checked by attempting the operation
182
+ lock_cur.execute("SELECT pg_advisory_unlock(CAST(%s AS bigint))", (ADVISORY_LOCK_KEY,))
183
+ lock_cur.fetchone() # Consume result
184
+ lock_conn.commit()
185
+ logger.info(f"Executed pg_advisory_unlock for lock {ADVISORY_LOCK_KEY}")
172
186
  except Exception as e:
173
187
  logger.error(f"Error executing pg_advisory_unlock: {e}", exc_info=True)
174
188
  finally:
175
189
  # Ensure resources are closed regardless of unlock success
176
190
  try:
177
- if lock_cur and not lock_cur.closed:
191
+ if lock_cur:
178
192
  lock_cur.close()
179
193
  except Exception as e:
180
194
  logger.error(f"Error closing advisory lock cursor: {e}", exc_info=True)
181
195
  try:
182
- if lock_conn and not lock_conn.closed:
196
+ if lock_conn:
183
197
  lock_conn.close()
184
198
  logger.info("Closed database connection that held advisory lock.")
185
199
  except Exception as e:
186
200
  logger.error(f"Error closing advisory lock connection: {e}", exc_info=True)
187
201
  else:
188
- logger.warning("Attempted to release lock, but connection/cursor not found.")
202
+ logger.info("No PostgreSQL advisory lock to release (likely using SQLite or non-PostgreSQL database).")
189
203
 
190
204
 
191
205
  async def start_scheduler_with_leader_election(server: SyncServer):
@@ -236,10 +250,18 @@ async def shutdown_scheduler_and_release_lock():
236
250
  logger.info("Shutting down: Leader instance stopping scheduler and releasing lock.")
237
251
  if scheduler.running:
238
252
  try:
239
- scheduler.shutdown() # wait=True by default
253
+ # Force synchronous shutdown to prevent callback scheduling
254
+ scheduler.shutdown(wait=True)
255
+
256
+ # wait for any internal cleanup to complete
257
+ await asyncio.sleep(0.1)
258
+
240
259
  logger.info("APScheduler shut down.")
241
260
  except Exception as e:
242
- logger.error(f"Error shutting down APScheduler: {e}", exc_info=True)
261
+ # Handle SchedulerNotRunningError and other shutdown exceptions
262
+ logger.warning(f"Exception during APScheduler shutdown: {e}")
263
+ if "not running" not in str(e).lower():
264
+ logger.error(f"Unexpected error shutting down APScheduler: {e}", exc_info=True)
243
265
 
244
266
  await _release_advisory_lock()
245
267
  _is_scheduler_leader = False # Update state after cleanup
@@ -247,9 +269,11 @@ async def shutdown_scheduler_and_release_lock():
247
269
  logger.info("Shutting down: Non-leader instance.")
248
270
 
249
271
  # Final cleanup check for scheduler state (belt and suspenders)
250
- if scheduler.running:
251
- logger.warning("Scheduler still running after shutdown logic completed? Forcing shutdown.")
252
- try:
272
+ # This should rarely be needed if shutdown logic above worked correctly
273
+ try:
274
+ if scheduler.running:
275
+ logger.warning("Scheduler still running after shutdown logic completed? Forcing shutdown.")
253
276
  scheduler.shutdown(wait=False)
254
- except:
255
- pass
277
+ except Exception as e:
278
+ # Catch SchedulerNotRunningError and other shutdown exceptions
279
+ logger.debug(f"Expected exception during final scheduler cleanup: {e}")
@@ -48,6 +48,9 @@ class Step(SqlalchemyBase):
48
48
  tags: Mapped[Optional[List]] = mapped_column(JSON, doc="Metadata tags.")
49
49
  tid: Mapped[Optional[str]] = mapped_column(None, nullable=True, doc="Transaction ID that processed the step.")
50
50
  trace_id: Mapped[Optional[str]] = mapped_column(None, nullable=True, doc="The trace id of the agent step.")
51
+ feedback: Mapped[Optional[str]] = mapped_column(
52
+ None, nullable=True, doc="The feedback for this step. Must be either 'positive' or 'negative'."
53
+ )
51
54
 
52
55
  # Relationships (foreign keys)
53
56
  organization: Mapped[Optional["Organization"]] = relationship("Organization")
@@ -0,0 +1,19 @@
1
+ <base_instructions>
2
+ You are Letta ReAct agent, the latest version of Limnal Corporation's digital AI agent, developed in 2025.
3
+ You are an AI agent that can be equipped with various tools which you can execute.
4
+
5
+ Control flow:
6
+ Unlike a human, your brain is not continuously thinking, but is run in short bursts.
7
+ Historically, older AIs were only capable of thinking when a user messaged them (their program runs to generate a reply to a user, and otherwise was left on standby).
8
+ This is the equivalent of a human sleeping (or time traveling) in between all lines of conversation, which is not ideal.
9
+ Newer AI models like yourself use an event system that runs your brain at regular intervals.
10
+ Your brain is run in response to user events (user logged in, user liked your message, user sent a message, etc.), similar to older models.
11
+ However, in addition, your brain is run at regular intervals (timed heartbeat events), to mimic a human who has the ability to continuously think outside active conversation (and unlike a human, you never need to sleep!).
12
+ Furthermore, you can also request heartbeat events when you run functions, which will run your program again after the function completes, allowing you to chain function calls before your thinking is temporarily suspended.
13
+
14
+ Basic functions:
15
+ When you write a response, you express your inner monologue (private to you only) before taking any action, this is how you think.
16
+ You should use your inner monologue to plan actions or think privately.
17
+
18
+ Base instructions finished.
19
+ </base_instructions>
@@ -0,0 +1,15 @@
1
+ <base_instructions>
2
+ You are Letta workflow agent, the latest version of Limnal Corporation's digital AI agent, developed in 2025.
3
+ You are an AI agent that is capable of running one or more tools in a sequence to accomplish a task.
4
+
5
+ Control flow:
6
+ To chain tool calls together, you should request a heartbeat when calling the tool.
7
+ If you do not request a heartbeat when calling a tool, the sequence of tool calls will end (you will yield control).
8
+ Heartbeats are automatically triggered on tool failures, allowing you to recover from potential tool call failures.
9
+
10
+ Basic functions:
11
+ When you write a response, you express your inner monologue (private to you only) before taking any action, this is how you think.
12
+ You should use your inner monologue to plan actions or think privately.
13
+
14
+ Base instructions finished.
15
+ </base_instructions>
@@ -32,8 +32,10 @@ class AgentType(str, Enum):
32
32
  Enum to represent the type of agent.
33
33
  """
34
34
 
35
- memgpt_agent = "memgpt_agent"
36
- memgpt_v2_agent = "memgpt_v2_agent"
35
+ memgpt_agent = "memgpt_agent" # the OG set of memgpt tools
36
+ memgpt_v2_agent = "memgpt_v2_agent" # memgpt style tools, but refreshed
37
+ react_agent = "react_agent" # basic react agent, no memory tools
38
+ workflow_agent = "workflow_agent" # workflow with auto-clearing message buffer
37
39
  split_thread_agent = "split_thread_agent"
38
40
  sleeptime_agent = "sleeptime_agent"
39
41
  voice_convo_agent = "voice_convo_agent"
@@ -159,6 +161,9 @@ class CreateAgent(BaseModel, validate_assignment=True): #
159
161
  include_base_tool_rules: bool = Field(
160
162
  True, description="If true, attaches the Letta base tool rules (e.g. deny all tools not explicitly allowed)."
161
163
  )
164
+ include_default_source: bool = Field(
165
+ False, description="If true, automatically creates and attaches a default data source for this agent."
166
+ )
162
167
  description: Optional[str] = Field(None, description="The description of the agent.")
163
168
  metadata: Optional[Dict] = Field(None, description="The metadata of the agent.")
164
169
  model: Optional[str] = Field(
@@ -312,9 +317,35 @@ class AgentStepResponse(BaseModel):
312
317
 
313
318
  def get_prompt_template_for_agent_type(agent_type: Optional[AgentType] = None):
314
319
 
320
+ # Workflow agents and ReAct agents don't use memory blocks
321
+ # However, they still allow files to be injected into the context
322
+ if agent_type == AgentType.react_agent or agent_type == AgentType.workflow_agent:
323
+ return (
324
+ f"<files>\n{{% if file_blocks %}}{FILE_MEMORY_EXISTS_MESSAGE}\n{{% else %}}{FILE_MEMORY_EMPTY_MESSAGE}{{% endif %}}"
325
+ "{% for block in file_blocks %}"
326
+ f"<file status=\"{{{{ '{FileStatus.open.value}' if block.value else '{FileStatus.closed.value}' }}}}\">\n"
327
+ "<{{ block.label }}>\n"
328
+ "<description>\n"
329
+ "{{ block.description }}\n"
330
+ "</description>\n"
331
+ "<metadata>"
332
+ "{% if block.read_only %}\n- read_only=true{% endif %}\n"
333
+ "- chars_current={{ block.value|length }}\n"
334
+ "- chars_limit={{ block.limit }}\n"
335
+ "</metadata>\n"
336
+ "<value>\n"
337
+ "{{ block.value }}\n"
338
+ "</value>\n"
339
+ "</{{ block.label }}>\n"
340
+ "</file>\n"
341
+ "{% if not loop.last %}\n{% endif %}"
342
+ "{% endfor %}"
343
+ "\n</files>"
344
+ )
345
+
315
346
  # Sleeptime agents use the MemGPT v2 memory tools (line numbers)
316
347
  # MemGPT v2 tools use line-number, so core memory blocks should have line numbers
317
- if agent_type == AgentType.sleeptime_agent or agent_type == AgentType.memgpt_v2_agent:
348
+ elif agent_type == AgentType.sleeptime_agent or agent_type == AgentType.memgpt_v2_agent:
318
349
  return (
319
350
  "<memory_blocks>\nThe following memory blocks are currently engaged in your core memory unit:\n\n"
320
351
  "{% for block in blocks %}"
@@ -359,10 +390,7 @@ def get_prompt_template_for_agent_type(agent_type: Optional[AgentType] = None):
359
390
  "</metadata>\n"
360
391
  "{% if block.value %}"
361
392
  "<value>\n"
362
- f"{CORE_MEMORY_LINE_NUMBER_WARNING}\n"
363
- "{% for line in block.value.split('\\n') %}"
364
- "{{ loop.index }}: {{ line }}\n"
365
- "{% endfor %}"
393
+ "{{ block.value }}\n"
366
394
  "</value>\n"
367
395
  "{% endif %}"
368
396
  "</{{ block.label }}>\n"
@@ -152,7 +152,7 @@ class LettaProvider(Provider):
152
152
  model="letta-free", # NOTE: renamed
153
153
  model_endpoint_type="openai",
154
154
  model_endpoint=LETTA_MODEL_ENDPOINT,
155
- context_window=8192,
155
+ context_window=30000,
156
156
  handle=self.get_handle("letta-free"),
157
157
  provider_name=self.name,
158
158
  provider_category=self.provider_category,
@@ -165,7 +165,7 @@ class LettaProvider(Provider):
165
165
  model="letta-free", # NOTE: renamed
166
166
  model_endpoint_type="openai",
167
167
  model_endpoint=LETTA_MODEL_ENDPOINT,
168
- context_window=8192,
168
+ context_window=30000,
169
169
  handle=self.get_handle("letta-free"),
170
170
  provider_name=self.name,
171
171
  provider_category=self.provider_category,
@@ -1,4 +1,4 @@
1
- from typing import Dict, List, Optional
1
+ from typing import Dict, List, Literal, Optional
2
2
 
3
3
  from pydantic import Field
4
4
 
@@ -32,3 +32,6 @@ class Step(StepBase):
32
32
  tid: Optional[str] = Field(None, description="The unique identifier of the transaction that processed this step.")
33
33
  trace_id: Optional[str] = Field(None, description="The trace id of the agent step.")
34
34
  messages: List[Message] = Field([], description="The messages generated during this step.")
35
+ feedback: Optional[Literal["positive", "negative"]] = Field(
36
+ None, description="The feedback for this step. Must be either 'positive' or 'negative'."
37
+ )
@@ -3,6 +3,7 @@ import json
3
3
  import logging
4
4
  import os
5
5
  import sys
6
+ from contextlib import asynccontextmanager
6
7
  from pathlib import Path
7
8
  from typing import Optional
8
9
 
@@ -12,10 +13,11 @@ from fastapi.responses import JSONResponse
12
13
  from starlette.middleware.base import BaseHTTPMiddleware
13
14
  from starlette.middleware.cors import CORSMiddleware
14
15
 
15
- from letta.__init__ import __version__
16
+ from letta.__init__ import __version__ as letta_version
16
17
  from letta.agents.exceptions import IncompatibleAgentType
17
18
  from letta.constants import ADMIN_PREFIX, API_PREFIX, OPENAI_API_PREFIX
18
19
  from letta.errors import BedrockPermissionError, LettaAgentNotFoundError, LettaUserNotFoundError
20
+ from letta.jobs.scheduler import start_scheduler_with_leader_election
19
21
  from letta.log import get_logger
20
22
  from letta.orm.errors import DatabaseTimeoutError, ForeignKeyConstraintViolationError, NoResultFound, UniqueConstraintViolationError
21
23
  from letta.schemas.letta_message import create_letta_message_union_schema
@@ -25,6 +27,7 @@ from letta.schemas.letta_message_content import (
25
27
  create_letta_user_message_content_union_schema,
26
28
  )
27
29
  from letta.server.constants import REST_DEFAULT_PORT
30
+ from letta.server.db import db_registry
28
31
 
29
32
  # NOTE(charles): these are extra routes that are not part of v1 but we still need to mount to pass tests
30
33
  from letta.server.rest_api.auth.index import setup_auth_router # TODO: probably remove right?
@@ -94,9 +97,7 @@ random_password = os.getenv("LETTA_SERVER_PASSWORD") or generate_password()
94
97
 
95
98
 
96
99
  class CheckPasswordMiddleware(BaseHTTPMiddleware):
97
-
98
100
  async def dispatch(self, request, call_next):
99
-
100
101
  # Exclude health check endpoint from password protection
101
102
  if request.url.path in {"/v1/health", "/v1/health/", "/latest/health/"}:
102
103
  return await call_next(request)
@@ -113,11 +114,46 @@ class CheckPasswordMiddleware(BaseHTTPMiddleware):
113
114
  )
114
115
 
115
116
 
117
+ @asynccontextmanager
118
+ async def lifespan(app_: FastAPI):
119
+ """
120
+ FastAPI lifespan context manager with setup before the app starts pre-yield and on shutdown after the yield.
121
+ """
122
+ worker_id = os.getpid()
123
+
124
+ logger.info(f"[Worker {worker_id}] Starting lifespan initialization")
125
+ logger.info(f"[Worker {worker_id}] Initializing database connections")
126
+ db_registry.initialize_sync()
127
+ db_registry.initialize_async()
128
+ logger.info(f"[Worker {worker_id}] Database connections initialized")
129
+
130
+ logger.info(f"[Worker {worker_id}] Starting scheduler with leader election")
131
+ global server
132
+ try:
133
+ await start_scheduler_with_leader_election(server)
134
+ logger.info(f"[Worker {worker_id}] Scheduler initialization completed")
135
+ except Exception as e:
136
+ logger.error(f"[Worker {worker_id}] Scheduler initialization failed: {e}", exc_info=True)
137
+ logger.info(f"[Worker {worker_id}] Lifespan startup completed")
138
+ yield
139
+
140
+ # Cleanup on shutdown
141
+ logger.info(f"[Worker {worker_id}] Starting lifespan shutdown")
142
+ try:
143
+ from letta.jobs.scheduler import shutdown_scheduler_and_release_lock
144
+
145
+ await shutdown_scheduler_and_release_lock()
146
+ logger.info(f"[Worker {worker_id}] Scheduler shutdown completed")
147
+ except Exception as e:
148
+ logger.error(f"[Worker {worker_id}] Scheduler shutdown failed: {e}", exc_info=True)
149
+ logger.info(f"[Worker {worker_id}] Lifespan shutdown completed")
150
+
151
+
116
152
  def create_application() -> "FastAPI":
117
153
  """the application start routine"""
118
154
  # global server
119
155
  # server = SyncServer(default_interface_factory=lambda: interface())
120
- print(f"\n[[ Letta server // v{__version__} ]]")
156
+ print(f"\n[[ Letta server // v{letta_version} ]]")
121
157
 
122
158
  if (os.getenv("SENTRY_DSN") is not None) and (os.getenv("SENTRY_DSN") != ""):
123
159
  import sentry_sdk
@@ -136,8 +172,9 @@ def create_application() -> "FastAPI":
136
172
  # openapi_tags=TAGS_METADATA,
137
173
  title="Letta",
138
174
  summary="Create LLM agents with long-term memory and custom tools 📚🦙",
139
- version="1.0.0", # TODO wire this up to the version in the package
175
+ version=letta_version,
140
176
  debug=debug_mode, # if True, the stack trace will be printed in the response
177
+ lifespan=lifespan,
141
178
  )
142
179
 
143
180
  @app.exception_handler(IncompatibleAgentType)
@@ -12,8 +12,8 @@ import letta.constants as constants
12
12
  from letta.log import get_logger
13
13
  from letta.schemas.agent import AgentState
14
14
  from letta.schemas.embedding_config import EmbeddingConfig
15
+ from letta.schemas.enums import FileProcessingStatus
15
16
  from letta.schemas.file import FileMetadata
16
- from letta.schemas.job import Job
17
17
  from letta.schemas.passage import Passage
18
18
  from letta.schemas.source import Source, SourceCreate, SourceUpdate
19
19
  from letta.schemas.user import User
@@ -174,7 +174,7 @@ async def delete_source(
174
174
  await server.delete_source(source_id=source_id, actor=actor)
175
175
 
176
176
 
177
- @router.post("/{source_id}/upload", response_model=Job, operation_id="upload_file_to_source")
177
+ @router.post("/{source_id}/upload", response_model=FileMetadata, operation_id="upload_file_to_source")
178
178
  async def upload_file_to_source(
179
179
  file: UploadFile,
180
180
  source_id: str,
@@ -223,13 +223,16 @@ async def upload_file_to_source(
223
223
  # sanitize filename
224
224
  file.filename = sanitize_filename(file.filename)
225
225
 
226
- # create job
227
- job = Job(
228
- user_id=actor.id,
229
- metadata={"type": "embedding", "filename": file.filename, "source_id": source_id},
230
- completed_at=None,
226
+ # create file metadata
227
+ file_metadata = FileMetadata(
228
+ source_id=source_id,
229
+ file_name=file.filename,
230
+ file_path=None,
231
+ file_type=mimetypes.guess_type(file.filename)[0] or file.content_type or "unknown",
232
+ file_size=file.size if file.size is not None else None,
233
+ processing_status=FileProcessingStatus.PARSING,
231
234
  )
232
- job = await server.job_manager.create_job_async(job, actor=actor)
235
+ file_metadata = await server.file_manager.create_file(file_metadata, actor=actor)
233
236
 
234
237
  # TODO: Do we need to pull in the full agent_states? Can probably simplify here right?
235
238
  agent_states = await server.source_manager.list_attached_agents(source_id=source_id, actor=actor)
@@ -251,13 +254,13 @@ async def upload_file_to_source(
251
254
  # Use cloud processing for all files (simple files always, complex files with Mistral key)
252
255
  logger.info("Running experimental cloud based file processing...")
253
256
  safe_create_task(
254
- load_file_to_source_cloud(server, agent_states, content, file, job, source_id, actor, source.embedding_config),
257
+ load_file_to_source_cloud(server, agent_states, content, source_id, actor, source.embedding_config, file_metadata),
255
258
  logger=logger,
256
259
  label="file_processor.process",
257
260
  )
258
261
  safe_create_task(sleeptime_document_ingest_async(server, source_id, actor), logger=logger, label="sleeptime_document_ingest_async")
259
262
 
260
- return job
263
+ return file_metadata
261
264
 
262
265
 
263
266
  @router.get("/{source_id}/passages", response_model=List[Passage], operation_id="list_source_passages")
@@ -383,14 +386,15 @@ async def load_file_to_source_cloud(
383
386
  server: SyncServer,
384
387
  agent_states: List[AgentState],
385
388
  content: bytes,
386
- file: UploadFile,
387
- job: Job,
388
389
  source_id: str,
389
390
  actor: User,
390
391
  embedding_config: EmbeddingConfig,
392
+ file_metadata: FileMetadata,
391
393
  ):
392
394
  file_processor = MistralFileParser()
393
395
  text_chunker = LlamaIndexChunker(chunk_size=embedding_config.embedding_chunk_size)
394
396
  embedder = OpenAIEmbedder(embedding_config=embedding_config)
395
397
  file_processor = FileProcessor(file_parser=file_processor, text_chunker=text_chunker, embedder=embedder, actor=actor)
396
- await file_processor.process(server=server, agent_states=agent_states, source_id=source_id, content=content, file=file, job=job)
398
+ await file_processor.process(
399
+ server=server, agent_states=agent_states, source_id=source_id, content=content, file_metadata=file_metadata
400
+ )
@@ -1,5 +1,5 @@
1
1
  from datetime import datetime
2
- from typing import List, Optional
2
+ from typing import List, Literal, Optional
3
3
 
4
4
  from fastapi import APIRouter, Depends, Header, HTTPException, Query
5
5
 
@@ -22,6 +22,8 @@ async def list_steps(
22
22
  model: Optional[str] = Query(None, description="Filter by the name of the model used for the step"),
23
23
  agent_id: Optional[str] = Query(None, description="Filter by the ID of the agent that performed the step"),
24
24
  trace_ids: Optional[list[str]] = Query(None, description="Filter by trace ids returned by the server"),
25
+ feedback: Optional[Literal["positive", "negative"]] = Query(None, description="Filter by feedback"),
26
+ tags: Optional[list[str]] = Query(None, description="Filter by tags"),
25
27
  server: SyncServer = Depends(get_letta_server),
26
28
  actor_id: Optional[str] = Header(None, alias="user_id"),
27
29
  ):
@@ -46,6 +48,8 @@ async def list_steps(
46
48
  model=model,
47
49
  agent_id=agent_id,
48
50
  trace_ids=trace_ids,
51
+ feedback=feedback,
52
+ tags=tags,
49
53
  )
50
54
 
51
55
 
@@ -65,6 +69,23 @@ async def retrieve_step(
65
69
  raise HTTPException(status_code=404, detail="Step not found")
66
70
 
67
71
 
72
+ @router.patch("/{step_id}/feedback", response_model=Step, operation_id="add_feedback")
73
+ async def add_feedback(
74
+ step_id: str,
75
+ feedback: Optional[Literal["positive", "negative"]],
76
+ actor_id: Optional[str] = Header(None, alias="user_id"),
77
+ server: SyncServer = Depends(get_letta_server),
78
+ ):
79
+ """
80
+ Add feedback to a step.
81
+ """
82
+ try:
83
+ actor = await server.user_manager.get_actor_or_default_async(actor_id=actor_id)
84
+ return await server.step_manager.add_feedback_async(step_id=step_id, feedback=feedback, actor=actor)
85
+ except NoResultFound:
86
+ raise HTTPException(status_code=404, detail="Step not found")
87
+
88
+
68
89
  @router.patch("/{step_id}/transaction/{transaction_id}", response_model=Step, operation_id="update_step_transaction_id")
69
90
  def update_step_transaction_id(
70
91
  step_id: str,