letta-nightly 0.8.13.dev20250713104250__tar.gz → 0.8.14.dev20250714180504__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.

Potentially problematic release.


This version of letta-nightly might be problematic. Click here for more details.

Files changed (417) hide show
  1. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/PKG-INFO +1 -1
  2. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/__init__.py +1 -1
  3. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/constants.py +6 -0
  4. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/function_sets/base.py +2 -2
  5. letta_nightly-0.8.14.dev20250714180504/letta/helpers/pinecone_utils.py +333 -0
  6. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/file.py +2 -17
  7. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/files_agents.py +9 -10
  8. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/organization.py +0 -4
  9. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/passage.py +0 -10
  10. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/source.py +3 -20
  11. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/file.py +1 -0
  12. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/memory.py +2 -2
  13. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/agents.py +4 -4
  14. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/messages.py +2 -6
  15. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/sources.py +3 -3
  16. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/server.py +0 -3
  17. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/agent_manager.py +194 -147
  18. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/context_window_calculator/context_window_calculator.py +15 -10
  19. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/context_window_calculator/token_counter.py +40 -0
  20. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/chunker/line_chunker.py +17 -0
  21. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/embedder/openai_embedder.py +50 -5
  22. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/files_agents_manager.py +12 -2
  23. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/source_manager.py +19 -3
  24. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_executor/core_tool_executor.py +2 -2
  25. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_executor/files_tool_executor.py +6 -1
  26. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/pyproject.toml +1 -2
  27. letta_nightly-0.8.13.dev20250713104250/letta/helpers/pinecone_utils.py +0 -180
  28. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/LICENSE +0 -0
  29. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/README.md +0 -0
  30. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/agent.py +0 -0
  31. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/agents/__init__.py +0 -0
  32. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/agents/base_agent.py +0 -0
  33. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/agents/ephemeral_agent.py +0 -0
  34. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/agents/ephemeral_summary_agent.py +0 -0
  35. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/agents/exceptions.py +0 -0
  36. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/agents/helpers.py +0 -0
  37. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/agents/letta_agent.py +0 -0
  38. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/agents/letta_agent_batch.py +0 -0
  39. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/agents/voice_agent.py +0 -0
  40. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/agents/voice_sleeptime_agent.py +0 -0
  41. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/cli/cli.py +0 -0
  42. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/cli/cli_load.py +0 -0
  43. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/client/__init__.py +0 -0
  44. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/client/client.py +0 -0
  45. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/client/streaming.py +0 -0
  46. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/client/utils.py +0 -0
  47. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/config.py +0 -0
  48. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/data_sources/__init__.py +0 -0
  49. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/data_sources/connectors.py +0 -0
  50. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/data_sources/connectors_helper.py +0 -0
  51. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/data_sources/redis_client.py +0 -0
  52. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/embeddings.py +0 -0
  53. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/errors.py +0 -0
  54. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/__init__.py +0 -0
  55. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/ast_parsers.py +0 -0
  56. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/async_composio_toolset.py +0 -0
  57. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/composio_helpers.py +0 -0
  58. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/function_sets/builtin.py +0 -0
  59. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/function_sets/extras.py +0 -0
  60. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/function_sets/files.py +0 -0
  61. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/function_sets/multi_agent.py +0 -0
  62. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/function_sets/voice.py +0 -0
  63. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/functions.py +0 -0
  64. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/helpers.py +0 -0
  65. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/interface.py +0 -0
  66. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/mcp_client/__init__.py +0 -0
  67. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/mcp_client/base_client.py +0 -0
  68. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/mcp_client/exceptions.py +0 -0
  69. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/mcp_client/sse_client.py +0 -0
  70. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/mcp_client/stdio_client.py +0 -0
  71. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/mcp_client/types.py +0 -0
  72. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/prompts.py +0 -0
  73. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/schema_generator.py +0 -0
  74. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/functions/types.py +0 -0
  75. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/groups/dynamic_multi_agent.py +0 -0
  76. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/groups/helpers.py +0 -0
  77. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/groups/round_robin_multi_agent.py +0 -0
  78. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/groups/sleeptime_multi_agent.py +0 -0
  79. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/groups/sleeptime_multi_agent_v2.py +0 -0
  80. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/groups/supervisor_multi_agent.py +0 -0
  81. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/helpers/__init__.py +0 -0
  82. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/helpers/composio_helpers.py +0 -0
  83. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/helpers/converters.py +0 -0
  84. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/helpers/datetime_helpers.py +0 -0
  85. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/helpers/decorators.py +0 -0
  86. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/helpers/json_helpers.py +0 -0
  87. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/helpers/message_helper.py +0 -0
  88. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/helpers/singleton.py +0 -0
  89. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/helpers/tool_execution_helper.py +0 -0
  90. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/helpers/tool_rule_solver.py +0 -0
  91. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/humans/__init__.py +0 -0
  92. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/humans/examples/basic.txt +0 -0
  93. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/humans/examples/cs_phd.txt +0 -0
  94. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/interface.py +0 -0
  95. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/interfaces/__init__.py +0 -0
  96. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/interfaces/anthropic_streaming_interface.py +0 -0
  97. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
  98. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/interfaces/openai_streaming_interface.py +0 -0
  99. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/interfaces/utils.py +0 -0
  100. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/jobs/__init__.py +0 -0
  101. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/jobs/helpers.py +0 -0
  102. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/jobs/llm_batch_job_polling.py +0 -0
  103. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/jobs/scheduler.py +0 -0
  104. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/jobs/types.py +0 -0
  105. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/__init__.py +0 -0
  106. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/anthropic.py +0 -0
  107. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/anthropic_client.py +0 -0
  108. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/aws_bedrock.py +0 -0
  109. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/azure_openai.py +0 -0
  110. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/azure_openai_constants.py +0 -0
  111. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/bedrock_client.py +0 -0
  112. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/cohere.py +0 -0
  113. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/deepseek.py +0 -0
  114. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/google_ai_client.py +0 -0
  115. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/google_constants.py +0 -0
  116. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/google_vertex_client.py +0 -0
  117. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/helpers.py +0 -0
  118. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/llm_api_tools.py +0 -0
  119. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/llm_client.py +0 -0
  120. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/llm_client_base.py +0 -0
  121. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/mistral.py +0 -0
  122. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/openai.py +0 -0
  123. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/llm_api/openai_client.py +0 -0
  124. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/README.md +0 -0
  125. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/__init__.py +0 -0
  126. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/chat_completion_proxy.py +0 -0
  127. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/constants.py +0 -0
  128. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/function_parser.py +0 -0
  129. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/grammars/__init__.py +0 -0
  130. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
  131. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/grammars/json.gbnf +0 -0
  132. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
  133. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/json_parser.py +0 -0
  134. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/koboldcpp/api.py +0 -0
  135. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/koboldcpp/settings.py +0 -0
  136. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/llamacpp/api.py +0 -0
  137. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/llamacpp/settings.py +0 -0
  138. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
  139. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
  140. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
  141. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
  142. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
  143. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
  144. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
  145. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
  146. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
  147. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/lmstudio/api.py +0 -0
  148. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/lmstudio/settings.py +0 -0
  149. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/ollama/api.py +0 -0
  150. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/ollama/settings.py +0 -0
  151. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/settings/__init__.py +0 -0
  152. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
  153. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/settings/settings.py +0 -0
  154. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/settings/simple.py +0 -0
  155. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/utils.py +0 -0
  156. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/vllm/api.py +0 -0
  157. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/webui/api.py +0 -0
  158. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/webui/legacy_api.py +0 -0
  159. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/webui/legacy_settings.py +0 -0
  160. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/local_llm/webui/settings.py +0 -0
  161. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/log.py +0 -0
  162. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/main.py +0 -0
  163. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/memory.py +0 -0
  164. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/openai_backcompat/__init__.py +0 -0
  165. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/openai_backcompat/openai_object.py +0 -0
  166. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/__all__.py +0 -0
  167. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/__init__.py +0 -0
  168. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/agent.py +0 -0
  169. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/agents_tags.py +0 -0
  170. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/base.py +0 -0
  171. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/block.py +0 -0
  172. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/block_history.py +0 -0
  173. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/blocks_agents.py +0 -0
  174. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/custom_columns.py +0 -0
  175. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/enums.py +0 -0
  176. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/errors.py +0 -0
  177. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/group.py +0 -0
  178. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/groups_agents.py +0 -0
  179. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/groups_blocks.py +0 -0
  180. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/identities_agents.py +0 -0
  181. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/identities_blocks.py +0 -0
  182. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/identity.py +0 -0
  183. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/job.py +0 -0
  184. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/job_messages.py +0 -0
  185. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/llm_batch_items.py +0 -0
  186. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/llm_batch_job.py +0 -0
  187. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/mcp_server.py +0 -0
  188. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/message.py +0 -0
  189. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/mixins.py +0 -0
  190. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/provider.py +0 -0
  191. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/provider_trace.py +0 -0
  192. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/sandbox_config.py +0 -0
  193. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/sources_agents.py +0 -0
  194. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/sqlalchemy_base.py +0 -0
  195. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/sqlite_functions.py +0 -0
  196. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/step.py +0 -0
  197. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/tool.py +0 -0
  198. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/tools_agents.py +0 -0
  199. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/orm/user.py +0 -0
  200. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/otel/__init__.py +0 -0
  201. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/otel/context.py +0 -0
  202. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/otel/events.py +0 -0
  203. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/otel/metric_registry.py +0 -0
  204. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/otel/metrics.py +0 -0
  205. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/otel/resource.py +0 -0
  206. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/otel/tracing.py +0 -0
  207. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/personas/__init__.py +0 -0
  208. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/personas/examples/anna_pa.txt +0 -0
  209. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/personas/examples/google_search_persona.txt +0 -0
  210. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/personas/examples/memgpt_doc.txt +0 -0
  211. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/personas/examples/memgpt_starter.txt +0 -0
  212. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/personas/examples/o1_persona.txt +0 -0
  213. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/personas/examples/sam.txt +0 -0
  214. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/personas/examples/sam_pov.txt +0 -0
  215. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
  216. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/personas/examples/sleeptime_doc_persona.txt +0 -0
  217. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/personas/examples/sleeptime_memory_persona.txt +0 -0
  218. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/personas/examples/sqldb/test.db +0 -0
  219. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/personas/examples/voice_memory_persona.txt +0 -0
  220. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/plugins/README.md +0 -0
  221. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/plugins/__init__.py +0 -0
  222. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/plugins/defaults.py +0 -0
  223. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/plugins/plugins.py +0 -0
  224. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/__init__.py +0 -0
  225. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/gpt_summarize.py +0 -0
  226. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/gpt_system.py +0 -0
  227. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_base.txt +0 -0
  228. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_chat.txt +0 -0
  229. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
  230. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
  231. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_convo_only.txt +0 -0
  232. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_doc.txt +0 -0
  233. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
  234. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
  235. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_memory_only.txt +0 -0
  236. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
  237. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
  238. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
  239. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
  240. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_sleeptime_chat.txt +0 -0
  241. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/memgpt_v2_chat.txt +0 -0
  242. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/react.txt +0 -0
  243. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/sleeptime.txt +0 -0
  244. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/sleeptime_doc_ingest.txt +0 -0
  245. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/sleeptime_v2.txt +0 -0
  246. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/summary_system_prompt.txt +0 -0
  247. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/voice_chat.txt +0 -0
  248. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/voice_sleeptime.txt +0 -0
  249. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/prompts/system/workflow.txt +0 -0
  250. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/pytest.ini +0 -0
  251. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/agent.py +0 -0
  252. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/block.py +0 -0
  253. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/embedding_config.py +0 -0
  254. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/embedding_config_overrides.py +0 -0
  255. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/enums.py +0 -0
  256. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/environment_variables.py +0 -0
  257. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/group.py +0 -0
  258. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/health.py +0 -0
  259. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/identity.py +0 -0
  260. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/job.py +0 -0
  261. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/letta_base.py +0 -0
  262. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/letta_message.py +0 -0
  263. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/letta_message_content.py +0 -0
  264. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/letta_request.py +0 -0
  265. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/letta_response.py +0 -0
  266. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/letta_stop_reason.py +0 -0
  267. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/llm_batch_job.py +0 -0
  268. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/llm_config.py +0 -0
  269. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/llm_config_overrides.py +0 -0
  270. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/mcp.py +0 -0
  271. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/message.py +0 -0
  272. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/openai/chat_completion_request.py +0 -0
  273. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/openai/chat_completion_response.py +0 -0
  274. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/openai/chat_completions.py +0 -0
  275. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/openai/embedding_response.py +0 -0
  276. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/openai/openai.py +0 -0
  277. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/organization.py +0 -0
  278. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/passage.py +0 -0
  279. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/pip_requirement.py +0 -0
  280. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/provider_trace.py +0 -0
  281. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/providers.py +0 -0
  282. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/response_format.py +0 -0
  283. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/run.py +0 -0
  284. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/sandbox_config.py +0 -0
  285. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/source.py +0 -0
  286. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/source_metadata.py +0 -0
  287. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/step.py +0 -0
  288. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/tool.py +0 -0
  289. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/tool_execution_result.py +0 -0
  290. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/tool_rule.py +0 -0
  291. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/usage.py +0 -0
  292. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/schemas/user.py +0 -0
  293. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/serialize_schemas/__init__.py +0 -0
  294. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/serialize_schemas/marshmallow_agent.py +0 -0
  295. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
  296. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/serialize_schemas/marshmallow_base.py +0 -0
  297. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/serialize_schemas/marshmallow_block.py +0 -0
  298. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
  299. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/serialize_schemas/marshmallow_message.py +0 -0
  300. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/serialize_schemas/marshmallow_tag.py +0 -0
  301. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/serialize_schemas/marshmallow_tool.py +0 -0
  302. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/serialize_schemas/pydantic_agent_schema.py +0 -0
  303. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/__init__.py +0 -0
  304. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/constants.py +0 -0
  305. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/db.py +0 -0
  306. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/generate_openapi_schema.sh +0 -0
  307. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/__init__.py +0 -0
  308. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/app.py +0 -0
  309. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/auth/__init__.py +0 -0
  310. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/auth/index.py +0 -0
  311. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/auth_token.py +0 -0
  312. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/chat_completions_interface.py +0 -0
  313. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/interface.py +0 -0
  314. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/json_parser.py +0 -0
  315. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/__init__.py +0 -0
  316. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
  317. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
  318. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/__init__.py +0 -0
  319. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/blocks.py +0 -0
  320. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/embeddings.py +0 -0
  321. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/groups.py +0 -0
  322. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/health.py +0 -0
  323. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/identities.py +0 -0
  324. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/jobs.py +0 -0
  325. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/llms.py +0 -0
  326. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/organizations.py +0 -0
  327. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/providers.py +0 -0
  328. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/runs.py +0 -0
  329. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
  330. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/steps.py +0 -0
  331. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/tags.py +0 -0
  332. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/telemetry.py +0 -0
  333. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/tools.py +0 -0
  334. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/users.py +0 -0
  335. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/routers/v1/voice.py +0 -0
  336. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/static_files.py +0 -0
  337. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/streaming_response.py +0 -0
  338. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/rest_api/utils.py +0 -0
  339. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/startup.sh +0 -0
  340. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/static_files/assets/index-048c9598.js +0 -0
  341. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/static_files/assets/index-0e31b727.css +0 -0
  342. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/static_files/favicon.ico +0 -0
  343. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/static_files/index.html +0 -0
  344. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
  345. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/utils.py +0 -0
  346. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/ws_api/__init__.py +0 -0
  347. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/ws_api/example_client.py +0 -0
  348. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/ws_api/interface.py +0 -0
  349. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/ws_api/protocol.py +0 -0
  350. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/server/ws_api/server.py +0 -0
  351. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/__init__.py +0 -0
  352. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/block_manager.py +18 -18
  353. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/context_window_calculator/__init__.py +0 -0
  354. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_manager.py +0 -0
  355. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/__init__.py +0 -0
  356. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/chunker/__init__.py +0 -0
  357. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/chunker/llama_index_chunker.py +0 -0
  358. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/embedder/__init__.py +0 -0
  359. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/embedder/base_embedder.py +0 -0
  360. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/embedder/pinecone_embedder.py +0 -0
  361. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/file_processor.py +0 -0
  362. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/file_types.py +0 -0
  363. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/parser/__init__.py +0 -0
  364. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/parser/base_parser.py +0 -0
  365. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/parser/mistral_parser.py +0 -0
  366. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/file_processor/types.py +0 -0
  367. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/group_manager.py +11 -11
  368. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/helpers/agent_manager_helper.py +0 -0
  369. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/helpers/tool_execution_helper.py +0 -0
  370. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/helpers/tool_parser_helper.py +0 -0
  371. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/identity_manager.py +0 -0
  372. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/job_manager.py +0 -0
  373. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/llm_batch_manager.py +0 -0
  374. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/mcp/__init__.py +0 -0
  375. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/mcp/base_client.py +0 -0
  376. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/mcp/sse_client.py +0 -0
  377. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/mcp/stdio_client.py +0 -0
  378. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/mcp/streamable_http_client.py +0 -0
  379. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/mcp/types.py +0 -0
  380. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/mcp_manager.py +0 -0
  381. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/message_manager.py +0 -0
  382. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/organization_manager.py +0 -0
  383. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/passage_manager.py +0 -0
  384. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/per_agent_lock_manager.py +0 -0
  385. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/provider_manager.py +0 -0
  386. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/sandbox_config_manager.py +0 -0
  387. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/step_manager.py +0 -0
  388. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/summarizer/__init__.py +0 -0
  389. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/summarizer/enums.py +0 -0
  390. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/summarizer/summarizer.py +0 -0
  391. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/telemetry_manager.py +0 -0
  392. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_executor/__init__.py +0 -0
  393. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_executor/builtin_tool_executor.py +0 -0
  394. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_executor/composio_tool_executor.py +0 -0
  395. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_executor/mcp_tool_executor.py +0 -0
  396. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_executor/multi_agent_tool_executor.py +0 -0
  397. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_executor/tool_execution_manager.py +0 -0
  398. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_executor/tool_execution_sandbox.py +0 -0
  399. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_executor/tool_executor.py +0 -0
  400. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_executor/tool_executor_base.py +0 -0
  401. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_manager.py +0 -0
  402. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_sandbox/__init__.py +0 -0
  403. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_sandbox/base.py +0 -0
  404. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_sandbox/e2b_sandbox.py +0 -0
  405. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/tool_sandbox/local_sandbox.py +0 -0
  406. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/services/user_manager.py +0 -0
  407. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/settings.py +0 -0
  408. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/streaming_interface.py +0 -0
  409. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/streaming_utils.py +0 -0
  410. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/system.py +0 -0
  411. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/templates/__init__.py +0 -0
  412. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/templates/sandbox_code_file.py.j2 +0 -0
  413. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/templates/sandbox_code_file_async.py.j2 +0 -0
  414. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/templates/summary_request_text.j2 +0 -0
  415. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/templates/template_helper.py +0 -0
  416. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/types/__init__.py +0 -0
  417. {letta_nightly-0.8.13.dev20250713104250 → letta_nightly-0.8.14.dev20250714180504}/letta/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.8.13.dev20250713104250
3
+ Version: 0.8.14.dev20250714180504
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -5,7 +5,7 @@ try:
5
5
  __version__ = version("letta")
6
6
  except PackageNotFoundError:
7
7
  # Fallback for development installations
8
- __version__ = "0.8.13"
8
+ __version__ = "0.8.14"
9
9
 
10
10
  if os.environ.get("LETTA_VERSION"):
11
11
  __version__ = os.environ["LETTA_VERSION"]
@@ -372,3 +372,9 @@ PINECONE_METRIC = "cosine"
372
372
  PINECONE_CLOUD = "aws"
373
373
  PINECONE_REGION = "us-east-1"
374
374
  PINECONE_MAX_BATCH_SIZE = 96
375
+
376
+ # retry configuration
377
+ PINECONE_MAX_RETRY_ATTEMPTS = 3
378
+ PINECONE_RETRY_BASE_DELAY = 1.0 # seconds
379
+ PINECONE_RETRY_MAX_DELAY = 60.0 # seconds
380
+ PINECONE_RETRY_BACKOFF_FACTOR = 2.0
@@ -135,7 +135,7 @@ def core_memory_append(agent_state: "AgentState", label: str, content: str) -> O
135
135
  Append to the contents of core memory.
136
136
 
137
137
  Args:
138
- label (str): Section of the memory to be edited (persona or human).
138
+ label (str): Section of the memory to be edited.
139
139
  content (str): Content to write to the memory. All unicode (including emojis) are supported.
140
140
 
141
141
  Returns:
@@ -152,7 +152,7 @@ def core_memory_replace(agent_state: "AgentState", label: str, old_content: str,
152
152
  Replace the contents of core memory. To delete memories, use an empty string for new_content.
153
153
 
154
154
  Args:
155
- label (str): Section of the memory to be edited (persona or human).
155
+ label (str): Section of the memory to be edited.
156
156
  old_content (str): String to replace. Must be an exact match.
157
157
  new_content (str): Content to write to the memory. All unicode (including emojis) are supported.
158
158
 
@@ -0,0 +1,333 @@
1
+ import asyncio
2
+ import random
3
+ import time
4
+ from functools import wraps
5
+ from typing import Any, Dict, List
6
+
7
+ from letta.otel.tracing import trace_method
8
+
9
+ try:
10
+ from pinecone import IndexEmbed, PineconeAsyncio
11
+ from pinecone.exceptions.exceptions import (
12
+ ForbiddenException,
13
+ NotFoundException,
14
+ PineconeApiException,
15
+ ServiceException,
16
+ UnauthorizedException,
17
+ )
18
+
19
+ PINECONE_AVAILABLE = True
20
+ except ImportError:
21
+ PINECONE_AVAILABLE = False
22
+
23
+ from letta.constants import (
24
+ PINECONE_CLOUD,
25
+ PINECONE_EMBEDDING_MODEL,
26
+ PINECONE_MAX_BATCH_SIZE,
27
+ PINECONE_MAX_RETRY_ATTEMPTS,
28
+ PINECONE_METRIC,
29
+ PINECONE_REGION,
30
+ PINECONE_RETRY_BACKOFF_FACTOR,
31
+ PINECONE_RETRY_BASE_DELAY,
32
+ PINECONE_RETRY_MAX_DELAY,
33
+ PINECONE_TEXT_FIELD_NAME,
34
+ )
35
+ from letta.log import get_logger
36
+ from letta.schemas.user import User
37
+ from letta.settings import settings
38
+
39
+ logger = get_logger(__name__)
40
+
41
+
42
+ def pinecone_retry(
43
+ max_attempts: int = PINECONE_MAX_RETRY_ATTEMPTS,
44
+ base_delay: float = PINECONE_RETRY_BASE_DELAY,
45
+ max_delay: float = PINECONE_RETRY_MAX_DELAY,
46
+ backoff_factor: float = PINECONE_RETRY_BACKOFF_FACTOR,
47
+ ):
48
+ """
49
+ Decorator to retry Pinecone operations with exponential backoff.
50
+
51
+ Args:
52
+ max_attempts: Maximum number of retry attempts
53
+ base_delay: Base delay in seconds for the first retry
54
+ max_delay: Maximum delay in seconds between retries
55
+ backoff_factor: Factor to increase delay after each failed attempt
56
+ """
57
+
58
+ def decorator(func):
59
+ @wraps(func)
60
+ async def wrapper(*args, **kwargs):
61
+ operation_name = func.__name__
62
+ start_time = time.time()
63
+
64
+ for attempt in range(max_attempts):
65
+ try:
66
+ logger.debug(f"[Pinecone] Starting {operation_name} (attempt {attempt + 1}/{max_attempts})")
67
+ result = await func(*args, **kwargs)
68
+
69
+ execution_time = time.time() - start_time
70
+ logger.info(f"[Pinecone] {operation_name} completed successfully in {execution_time:.2f}s")
71
+ return result
72
+
73
+ except (ServiceException, PineconeApiException) as e:
74
+ # retryable server errors
75
+ if attempt == max_attempts - 1:
76
+ execution_time = time.time() - start_time
77
+ logger.error(f"[Pinecone] {operation_name} failed after {max_attempts} attempts in {execution_time:.2f}s: {str(e)}")
78
+ raise
79
+
80
+ # calculate delay with exponential backoff and jitter
81
+ delay = min(base_delay * (backoff_factor**attempt), max_delay)
82
+ jitter = random.uniform(0, delay * 0.1) # add up to 10% jitter
83
+ total_delay = delay + jitter
84
+
85
+ logger.warning(
86
+ f"[Pinecone] {operation_name} failed (attempt {attempt + 1}/{max_attempts}): {str(e)}. Retrying in {total_delay:.2f}s"
87
+ )
88
+ await asyncio.sleep(total_delay)
89
+
90
+ except (UnauthorizedException, ForbiddenException) as e:
91
+ # non-retryable auth errors
92
+ execution_time = time.time() - start_time
93
+ logger.error(f"[Pinecone] {operation_name} failed with auth error in {execution_time:.2f}s: {str(e)}")
94
+ raise
95
+
96
+ except NotFoundException as e:
97
+ # non-retryable not found errors
98
+ execution_time = time.time() - start_time
99
+ logger.warning(f"[Pinecone] {operation_name} failed with not found error in {execution_time:.2f}s: {str(e)}")
100
+ raise
101
+
102
+ except Exception as e:
103
+ # other unexpected errors - retry once then fail
104
+ if attempt == max_attempts - 1:
105
+ execution_time = time.time() - start_time
106
+ logger.error(f"[Pinecone] {operation_name} failed after {max_attempts} attempts in {execution_time:.2f}s: {str(e)}")
107
+ raise
108
+
109
+ delay = min(base_delay * (backoff_factor**attempt), max_delay)
110
+ jitter = random.uniform(0, delay * 0.1)
111
+ total_delay = delay + jitter
112
+
113
+ logger.warning(
114
+ f"[Pinecone] {operation_name} failed with unexpected error (attempt {attempt + 1}/{max_attempts}): {str(e)}. Retrying in {total_delay:.2f}s"
115
+ )
116
+ await asyncio.sleep(total_delay)
117
+
118
+ return wrapper
119
+
120
+ return decorator
121
+
122
+
123
+ def should_use_pinecone(verbose: bool = False):
124
+ if verbose:
125
+ logger.info(
126
+ "Pinecone check: enable_pinecone=%s, api_key=%s, agent_index=%s, source_index=%s",
127
+ settings.enable_pinecone,
128
+ bool(settings.pinecone_api_key),
129
+ bool(settings.pinecone_agent_index),
130
+ bool(settings.pinecone_source_index),
131
+ )
132
+
133
+ return all(
134
+ (
135
+ PINECONE_AVAILABLE,
136
+ settings.enable_pinecone,
137
+ settings.pinecone_api_key,
138
+ settings.pinecone_agent_index,
139
+ settings.pinecone_source_index,
140
+ )
141
+ )
142
+
143
+
144
+ @pinecone_retry()
145
+ @trace_method
146
+ async def upsert_pinecone_indices():
147
+ if not PINECONE_AVAILABLE:
148
+ raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
149
+
150
+ indices = get_pinecone_indices()
151
+ logger.info(f"[Pinecone] Upserting {len(indices)} indices: {indices}")
152
+
153
+ for index_name in indices:
154
+ async with PineconeAsyncio(api_key=settings.pinecone_api_key) as pc:
155
+ if not await pc.has_index(index_name):
156
+ logger.info(f"[Pinecone] Creating index {index_name} with model {PINECONE_EMBEDDING_MODEL}")
157
+ await pc.create_index_for_model(
158
+ name=index_name,
159
+ cloud=PINECONE_CLOUD,
160
+ region=PINECONE_REGION,
161
+ embed=IndexEmbed(model=PINECONE_EMBEDDING_MODEL, field_map={"text": PINECONE_TEXT_FIELD_NAME}, metric=PINECONE_METRIC),
162
+ )
163
+ logger.info(f"[Pinecone] Successfully created index {index_name}")
164
+ else:
165
+ logger.debug(f"[Pinecone] Index {index_name} already exists")
166
+
167
+
168
+ def get_pinecone_indices() -> List[str]:
169
+ return [settings.pinecone_agent_index, settings.pinecone_source_index]
170
+
171
+
172
+ @pinecone_retry()
173
+ @trace_method
174
+ async def upsert_file_records_to_pinecone_index(file_id: str, source_id: str, chunks: List[str], actor: User):
175
+ if not PINECONE_AVAILABLE:
176
+ raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
177
+
178
+ logger.info(f"[Pinecone] Preparing to upsert {len(chunks)} chunks for file {file_id} source {source_id}")
179
+
180
+ records = []
181
+ for i, chunk in enumerate(chunks):
182
+ record = {
183
+ "_id": f"{file_id}_{i}",
184
+ PINECONE_TEXT_FIELD_NAME: chunk,
185
+ "file_id": file_id,
186
+ "source_id": source_id,
187
+ }
188
+ records.append(record)
189
+
190
+ logger.debug(f"[Pinecone] Created {len(records)} records for file {file_id}")
191
+ return await upsert_records_to_pinecone_index(records, actor)
192
+
193
+
194
+ @pinecone_retry()
195
+ @trace_method
196
+ async def delete_file_records_from_pinecone_index(file_id: str, actor: User):
197
+ if not PINECONE_AVAILABLE:
198
+ raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
199
+
200
+ namespace = actor.organization_id
201
+ logger.info(f"[Pinecone] Deleting records for file {file_id} from index {settings.pinecone_source_index} namespace {namespace}")
202
+
203
+ try:
204
+ async with PineconeAsyncio(api_key=settings.pinecone_api_key) as pc:
205
+ description = await pc.describe_index(name=settings.pinecone_source_index)
206
+ async with pc.IndexAsyncio(host=description.index.host) as dense_index:
207
+ await dense_index.delete(
208
+ filter={
209
+ "file_id": {"$eq": file_id},
210
+ },
211
+ namespace=namespace,
212
+ )
213
+ logger.info(f"[Pinecone] Successfully deleted records for file {file_id}")
214
+ except NotFoundException:
215
+ logger.warning(f"[Pinecone] Namespace {namespace} not found for file {file_id} and org {actor.organization_id}")
216
+
217
+
218
+ @pinecone_retry()
219
+ @trace_method
220
+ async def delete_source_records_from_pinecone_index(source_id: str, actor: User):
221
+ if not PINECONE_AVAILABLE:
222
+ raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
223
+
224
+ namespace = actor.organization_id
225
+ logger.info(f"[Pinecone] Deleting records for source {source_id} from index {settings.pinecone_source_index} namespace {namespace}")
226
+
227
+ try:
228
+ async with PineconeAsyncio(api_key=settings.pinecone_api_key) as pc:
229
+ description = await pc.describe_index(name=settings.pinecone_source_index)
230
+ async with pc.IndexAsyncio(host=description.index.host) as dense_index:
231
+ await dense_index.delete(filter={"source_id": {"$eq": source_id}}, namespace=namespace)
232
+ logger.info(f"[Pinecone] Successfully deleted records for source {source_id}")
233
+ except NotFoundException:
234
+ logger.warning(f"[Pinecone] Namespace {namespace} not found for source {source_id} and org {actor.organization_id}")
235
+
236
+
237
+ @pinecone_retry()
238
+ @trace_method
239
+ async def upsert_records_to_pinecone_index(records: List[dict], actor: User):
240
+ if not PINECONE_AVAILABLE:
241
+ raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
242
+
243
+ logger.info(f"[Pinecone] Upserting {len(records)} records to index {settings.pinecone_source_index} for org {actor.organization_id}")
244
+
245
+ async with PineconeAsyncio(api_key=settings.pinecone_api_key) as pc:
246
+ description = await pc.describe_index(name=settings.pinecone_source_index)
247
+ async with pc.IndexAsyncio(host=description.index.host) as dense_index:
248
+ # process records in batches to avoid exceeding pinecone limits
249
+ total_batches = (len(records) + PINECONE_MAX_BATCH_SIZE - 1) // PINECONE_MAX_BATCH_SIZE
250
+ logger.debug(f"[Pinecone] Processing {total_batches} batches of max {PINECONE_MAX_BATCH_SIZE} records each")
251
+
252
+ for i in range(0, len(records), PINECONE_MAX_BATCH_SIZE):
253
+ batch = records[i : i + PINECONE_MAX_BATCH_SIZE]
254
+ batch_num = (i // PINECONE_MAX_BATCH_SIZE) + 1
255
+
256
+ logger.debug(f"[Pinecone] Upserting batch {batch_num}/{total_batches} with {len(batch)} records")
257
+ await dense_index.upsert_records(actor.organization_id, batch)
258
+
259
+ logger.info(f"[Pinecone] Successfully upserted all {len(records)} records in {total_batches} batches")
260
+
261
+
262
+ @pinecone_retry()
263
+ @trace_method
264
+ async def search_pinecone_index(query: str, limit: int, filter: Dict[str, Any], actor: User) -> Dict[str, Any]:
265
+ if not PINECONE_AVAILABLE:
266
+ raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
267
+
268
+ namespace = actor.organization_id
269
+ logger.info(
270
+ f"[Pinecone] Searching index {settings.pinecone_source_index} namespace {namespace} with query length {len(query)} chars, limit {limit}"
271
+ )
272
+ logger.debug(f"[Pinecone] Search filter: {filter}")
273
+
274
+ async with PineconeAsyncio(api_key=settings.pinecone_api_key) as pc:
275
+ description = await pc.describe_index(name=settings.pinecone_source_index)
276
+ async with pc.IndexAsyncio(host=description.index.host) as dense_index:
277
+ try:
278
+ # search the dense index with reranking
279
+ search_results = await dense_index.search(
280
+ namespace=namespace,
281
+ query={
282
+ "top_k": limit,
283
+ "inputs": {"text": query},
284
+ "filter": filter,
285
+ },
286
+ rerank={"model": "bge-reranker-v2-m3", "top_n": limit, "rank_fields": [PINECONE_TEXT_FIELD_NAME]},
287
+ )
288
+
289
+ result_count = len(search_results.get("matches", []))
290
+ logger.info(f"[Pinecone] Search completed, found {result_count} matches")
291
+ return search_results
292
+
293
+ except Exception as e:
294
+ logger.warning(f"[Pinecone] Failed to search namespace {namespace}: {str(e)}")
295
+ raise e
296
+
297
+
298
+ @pinecone_retry()
299
+ @trace_method
300
+ async def list_pinecone_index_for_files(file_id: str, actor: User, limit: int = None, pagination_token: str = None) -> List[str]:
301
+ if not PINECONE_AVAILABLE:
302
+ raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
303
+
304
+ namespace = actor.organization_id
305
+ logger.info(f"[Pinecone] Listing records for file {file_id} from index {settings.pinecone_source_index} namespace {namespace}")
306
+ logger.debug(f"[Pinecone] List params - limit: {limit}, pagination_token: {pagination_token}")
307
+
308
+ try:
309
+ async with PineconeAsyncio(api_key=settings.pinecone_api_key) as pc:
310
+ description = await pc.describe_index(name=settings.pinecone_source_index)
311
+ async with pc.IndexAsyncio(host=description.index.host) as dense_index:
312
+
313
+ kwargs = {"namespace": namespace, "prefix": file_id}
314
+ if limit is not None:
315
+ kwargs["limit"] = limit
316
+ if pagination_token is not None:
317
+ kwargs["pagination_token"] = pagination_token
318
+
319
+ try:
320
+ result = []
321
+ async for ids in dense_index.list(**kwargs):
322
+ result.extend(ids)
323
+
324
+ logger.info(f"[Pinecone] Successfully listed {len(result)} records for file {file_id}")
325
+ return result
326
+
327
+ except Exception as e:
328
+ logger.warning(f"[Pinecone] Failed to list records for file {file_id} in namespace {namespace}: {str(e)}")
329
+ raise e
330
+
331
+ except NotFoundException:
332
+ logger.warning(f"[Pinecone] Namespace {namespace} not found for file {file_id} and org {actor.organization_id}")
333
+ return []
@@ -1,5 +1,5 @@
1
1
  import uuid
2
- from typing import TYPE_CHECKING, List, Optional
2
+ from typing import TYPE_CHECKING, Optional
3
3
 
4
4
  from sqlalchemy import ForeignKey, Index, Integer, String, Text, UniqueConstraint, desc
5
5
  from sqlalchemy.ext.asyncio import AsyncAttrs
@@ -11,10 +11,7 @@ from letta.schemas.enums import FileProcessingStatus
11
11
  from letta.schemas.file import FileMetadata as PydanticFileMetadata
12
12
 
13
13
  if TYPE_CHECKING:
14
- from letta.orm.files_agents import FileAgent
15
- from letta.orm.organization import Organization
16
- from letta.orm.passage import SourcePassage
17
- from letta.orm.source import Source
14
+ pass
18
15
 
19
16
 
20
17
  # TODO: Note that this is NOT organization scoped, this is potentially dangerous if we misuse this
@@ -64,18 +61,6 @@ class FileMetadata(SqlalchemyBase, OrganizationMixin, SourceMixin, AsyncAttrs):
64
61
  chunks_embedded: Mapped[Optional[int]] = mapped_column(Integer, nullable=True, doc="Number of chunks that have been embedded.")
65
62
 
66
63
  # relationships
67
- organization: Mapped["Organization"] = relationship("Organization", back_populates="files", lazy="selectin")
68
- source: Mapped["Source"] = relationship("Source", back_populates="files", lazy="selectin")
69
- source_passages: Mapped[List["SourcePassage"]] = relationship(
70
- "SourcePassage", back_populates="file", lazy="selectin", cascade="all, delete-orphan"
71
- )
72
- file_agents: Mapped[List["FileAgent"]] = relationship(
73
- "FileAgent",
74
- back_populates="file",
75
- lazy="selectin",
76
- cascade="all, delete-orphan",
77
- passive_deletes=True, # ← add this
78
- )
79
64
  content: Mapped[Optional["FileContent"]] = relationship(
80
65
  "FileContent",
81
66
  uselist=False,
@@ -12,7 +12,7 @@ from letta.schemas.block import Block as PydanticBlock
12
12
  from letta.schemas.file import FileAgent as PydanticFileAgent
13
13
 
14
14
  if TYPE_CHECKING:
15
- from letta.orm.file import FileMetadata
15
+ pass
16
16
 
17
17
 
18
18
  class FileAgent(SqlalchemyBase, OrganizationMixin):
@@ -55,6 +55,12 @@ class FileAgent(SqlalchemyBase, OrganizationMixin):
55
55
  nullable=False,
56
56
  doc="ID of the agent",
57
57
  )
58
+ source_id: Mapped[str] = mapped_column(
59
+ String,
60
+ ForeignKey("sources.id", ondelete="CASCADE"),
61
+ nullable=False,
62
+ doc="ID of the source (denormalized from files.source_id)",
63
+ )
58
64
 
59
65
  file_name: Mapped[str] = mapped_column(
60
66
  String,
@@ -78,13 +84,6 @@ class FileAgent(SqlalchemyBase, OrganizationMixin):
78
84
  back_populates="file_agents",
79
85
  lazy="selectin",
80
86
  )
81
- file: Mapped["FileMetadata"] = relationship(
82
- "FileMetadata",
83
- foreign_keys=[file_id],
84
- lazy="selectin",
85
- back_populates="file_agents",
86
- passive_deletes=True, # ← add this
87
- )
88
87
 
89
88
  # TODO: This is temporary as we figure out if we want FileBlock as a first class citizen
90
89
  def to_pydantic_block(self) -> PydanticBlock:
@@ -99,8 +98,8 @@ class FileAgent(SqlalchemyBase, OrganizationMixin):
99
98
  return PydanticBlock(
100
99
  organization_id=self.organization_id,
101
100
  value=visible_content,
102
- label=self.file.file_name,
101
+ label=self.file_name, # use denormalized file_name instead of self.file.file_name
103
102
  read_only=True,
104
- metadata={"source_id": self.file.source_id},
103
+ metadata={"source_id": self.source_id}, # use denormalized source_id
105
104
  limit=CORE_MEMORY_SOURCE_CHAR_LIMIT,
106
105
  )
@@ -9,7 +9,6 @@ if TYPE_CHECKING:
9
9
  from letta.orm.agent import Agent
10
10
  from letta.orm.agent_passage import AgentPassage
11
11
  from letta.orm.block import Block
12
- from letta.orm.file import FileMetadata
13
12
  from letta.orm.group import Group
14
13
  from letta.orm.identity import Identity
15
14
  from letta.orm.llm_batch_item import LLMBatchItem
@@ -18,7 +17,6 @@ if TYPE_CHECKING:
18
17
  from letta.orm.provider import Provider
19
18
  from letta.orm.sandbox_config import AgentEnvironmentVariable, SandboxConfig
20
19
  from letta.orm.sandbox_environment_variable import SandboxEnvironmentVariable
21
- from letta.orm.source import Source
22
20
  from letta.orm.source_passage import SourcePassage
23
21
  from letta.orm.tool import Tool
24
22
  from letta.orm.user import User
@@ -38,8 +36,6 @@ class Organization(SqlalchemyBase):
38
36
  tools: Mapped[List["Tool"]] = relationship("Tool", back_populates="organization", cascade="all, delete-orphan")
39
37
  # mcp_servers: Mapped[List["MCPServer"]] = relationship("MCPServer", back_populates="organization", cascade="all, delete-orphan")
40
38
  blocks: Mapped[List["Block"]] = relationship("Block", back_populates="organization", cascade="all, delete-orphan")
41
- sources: Mapped[List["Source"]] = relationship("Source", back_populates="organization", cascade="all, delete-orphan")
42
- files: Mapped[List["FileMetadata"]] = relationship("FileMetadata", back_populates="organization", cascade="all, delete-orphan")
43
39
  sandbox_configs: Mapped[List["SandboxConfig"]] = relationship(
44
40
  "SandboxConfig", back_populates="organization", cascade="all, delete-orphan"
45
41
  )
@@ -49,11 +49,6 @@ class SourcePassage(BasePassage, FileMixin, SourceMixin):
49
49
 
50
50
  file_name: Mapped[str] = mapped_column(doc="The name of the file that this passage was derived from")
51
51
 
52
- @declared_attr
53
- def file(cls) -> Mapped["FileMetadata"]:
54
- """Relationship to file"""
55
- return relationship("FileMetadata", back_populates="source_passages", lazy="selectin")
56
-
57
52
  @declared_attr
58
53
  def organization(cls) -> Mapped["Organization"]:
59
54
  return relationship("Organization", back_populates="source_passages", lazy="selectin")
@@ -74,11 +69,6 @@ class SourcePassage(BasePassage, FileMixin, SourceMixin):
74
69
  {"extend_existing": True},
75
70
  )
76
71
 
77
- @declared_attr
78
- def source(cls) -> Mapped["Source"]:
79
- """Relationship to source"""
80
- return relationship("Source", back_populates="passages", lazy="selectin", passive_deletes=True)
81
-
82
72
 
83
73
  class AgentPassage(BasePassage, AgentMixin):
84
74
  """Passages created by agents as archival memories"""
@@ -1,9 +1,8 @@
1
- from typing import TYPE_CHECKING, List, Optional
1
+ from typing import TYPE_CHECKING, Optional
2
2
 
3
3
  from sqlalchemy import JSON, Index, UniqueConstraint
4
- from sqlalchemy.orm import Mapped, mapped_column, relationship
4
+ from sqlalchemy.orm import Mapped, mapped_column
5
5
 
6
- from letta.orm import FileMetadata
7
6
  from letta.orm.custom_columns import EmbeddingConfigColumn
8
7
  from letta.orm.mixins import OrganizationMixin
9
8
  from letta.orm.sqlalchemy_base import SqlalchemyBase
@@ -11,10 +10,7 @@ from letta.schemas.embedding_config import EmbeddingConfig
11
10
  from letta.schemas.source import Source as PydanticSource
12
11
 
13
12
  if TYPE_CHECKING:
14
- from letta.orm.agent import Agent
15
- from letta.orm.file import FileMetadata
16
- from letta.orm.organization import Organization
17
- from letta.orm.passage import SourcePassage
13
+ pass
18
14
 
19
15
 
20
16
  class Source(SqlalchemyBase, OrganizationMixin):
@@ -34,16 +30,3 @@ class Source(SqlalchemyBase, OrganizationMixin):
34
30
  instructions: Mapped[str] = mapped_column(nullable=True, doc="instructions for how to use the source")
35
31
  embedding_config: Mapped[EmbeddingConfig] = mapped_column(EmbeddingConfigColumn, doc="Configuration settings for embedding.")
36
32
  metadata_: Mapped[Optional[dict]] = mapped_column(JSON, nullable=True, doc="metadata for the source.")
37
-
38
- # relationships
39
- organization: Mapped["Organization"] = relationship("Organization", back_populates="sources")
40
- files: Mapped[List["FileMetadata"]] = relationship("FileMetadata", back_populates="source", cascade="all, delete-orphan")
41
- passages: Mapped[List["SourcePassage"]] = relationship("SourcePassage", back_populates="source", cascade="all, delete-orphan")
42
- agents: Mapped[List["Agent"]] = relationship(
43
- "Agent",
44
- secondary="sources_agents",
45
- back_populates="sources",
46
- lazy="selectin",
47
- cascade="save-update", # Only propagate save and update operations
48
- passive_deletes=True, # Let the database handle deletions
49
- )
@@ -85,6 +85,7 @@ class FileAgent(FileAgentBase):
85
85
  )
86
86
  agent_id: str = Field(..., description="Unique identifier of the agent.")
87
87
  file_id: str = Field(..., description="Unique identifier of the file.")
88
+ source_id: str = Field(..., description="Unique identifier of the source (denormalized from files.source_id).")
88
89
  file_name: str = Field(..., description="Name of the file.")
89
90
  is_open: bool = Field(True, description="True if the agent currently has the file open.")
90
91
  visible_content: Optional[str] = Field(
@@ -210,7 +210,7 @@ class BasicBlockMemory(Memory):
210
210
  Append to the contents of core memory.
211
211
 
212
212
  Args:
213
- label (str): Section of the memory to be edited (persona or human).
213
+ label (str): Section of the memory to be edited.
214
214
  content (str): Content to write to the memory. All unicode (including emojis) are supported.
215
215
 
216
216
  Returns:
@@ -226,7 +226,7 @@ class BasicBlockMemory(Memory):
226
226
  Replace the contents of core memory. To delete memories, use an empty string for new_content.
227
227
 
228
228
  Args:
229
- label (str): Section of the memory to be edited (persona or human).
229
+ label (str): Section of the memory to be edited.
230
230
  old_content (str): String to replace. Must be an exact match.
231
231
  new_content (str): Content to write to the memory. All unicode (including emojis) are supported.
232
232
 
@@ -272,14 +272,14 @@ async def modify_agent(
272
272
 
273
273
 
274
274
  @router.get("/{agent_id}/tools", response_model=list[Tool], operation_id="list_agent_tools")
275
- def list_agent_tools(
275
+ async def list_agent_tools(
276
276
  agent_id: str,
277
277
  server: "SyncServer" = Depends(get_letta_server),
278
278
  actor_id: str | None = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
279
279
  ):
280
280
  """Get tools from an existing agent"""
281
- actor = server.user_manager.get_user_or_default(user_id=actor_id)
282
- return server.agent_manager.list_attached_tools(agent_id=agent_id, actor=actor)
281
+ actor = await server.user_manager.get_actor_or_default_async(actor_id=actor_id)
282
+ return await server.agent_manager.list_attached_tools_async(agent_id=agent_id, actor=actor)
283
283
 
284
284
 
285
285
  @router.patch("/{agent_id}/tools/attach/{tool_id}", response_model=AgentState, operation_id="attach_tool")
@@ -1072,7 +1072,7 @@ async def _process_message_background(
1072
1072
  completed_at=datetime.now(timezone.utc),
1073
1073
  metadata={"error": str(e)},
1074
1074
  )
1075
- await server.job_manager.update_job_by_id_async(job_id=job_id, job_update=job_update, actor=actor)
1075
+ await server.job_manager.update_job_by_id_async(job_id=run_id, job_update=job_update, actor=actor)
1076
1076
 
1077
1077
 
1078
1078
  @router.post(
@@ -1,6 +1,6 @@
1
1
  from typing import List, Optional
2
2
 
3
- from fastapi import APIRouter, Body, Depends, Header, Query, status
3
+ from fastapi import APIRouter, Body, Depends, Header, Query
4
4
  from fastapi.exceptions import HTTPException
5
5
  from starlette.requests import Request
6
6
 
@@ -45,12 +45,8 @@ async def create_messages_batch(
45
45
  if length > max_bytes:
46
46
  raise HTTPException(status_code=413, detail=f"Request too large ({length} bytes). Max is {max_bytes} bytes.")
47
47
 
48
- # Reject request if env var is not set
49
48
  if not settings.enable_batch_job_polling:
50
- raise HTTPException(
51
- status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
52
- detail=f"Server misconfiguration: LETTA_ENABLE_BATCH_JOB_POLLING is set to False.",
53
- )
49
+ logger.warning("Batch job polling is disabled. Enable batch processing by setting LETTA_ENABLE_BATCH_JOB_POLLING to True.")
54
50
 
55
51
  actor = await server.user_manager.get_actor_or_default_async(actor_id=actor_id)
56
52
  batch_job = BatchJob(
@@ -391,8 +391,8 @@ async def get_file_metadata(
391
391
  if file_metadata.source_id != source_id:
392
392
  raise HTTPException(status_code=404, detail=f"File with id={file_id} not found in source {source_id}.")
393
393
 
394
- if should_use_pinecone() and not file_metadata.is_processing_terminal():
395
- ids = await list_pinecone_index_for_files(file_id=file_id, actor=actor, limit=file_metadata.total_chunks)
394
+ if should_use_pinecone() and file_metadata.processing_status == FileProcessingStatus.EMBEDDING:
395
+ ids = await list_pinecone_index_for_files(file_id=file_id, actor=actor)
396
396
  logger.info(
397
397
  f"Embedded chunks {len(ids)}/{file_metadata.total_chunks} for {file_id} ({file_metadata.file_name}) in organization {actor.organization_id}"
398
398
  )
@@ -402,7 +402,7 @@ async def get_file_metadata(
402
402
  file_status = file_metadata.processing_status
403
403
  else:
404
404
  file_status = FileProcessingStatus.COMPLETED
405
- await server.file_manager.update_file_status(
405
+ file_metadata = await server.file_manager.update_file_status(
406
406
  file_id=file_metadata.id, actor=actor, chunks_embedded=len(ids), processing_status=file_status
407
407
  )
408
408
 
@@ -1342,9 +1342,6 @@ class SyncServer(Server):
1342
1342
  new_passage_size = await self.agent_manager.passage_size_async(actor=actor, agent_id=agent_id)
1343
1343
  assert new_passage_size >= curr_passage_size # in case empty files are added
1344
1344
 
1345
- # rebuild system prompt and force
1346
- agent_state = await self.agent_manager.rebuild_system_prompt_async(agent_id=agent_id, actor=actor, force=True)
1347
-
1348
1345
  # update job status
1349
1346
  job.status = JobStatus.completed
1350
1347
  job.metadata["num_passages"] = num_passages