letta-nightly 0.7.3.dev20250424104224__tar.gz → 0.7.5.dev20250425010311__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 (338) hide show
  1. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/PKG-INFO +1 -1
  2. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/__init__.py +1 -1
  3. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/agent.py +3 -4
  4. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/groups/sleeptime_multi_agent.py +13 -18
  5. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/message.py +4 -0
  6. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/providers.py +4 -1
  7. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/sandbox_config.py +2 -2
  8. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/agents.py +11 -0
  9. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/identities.py +18 -0
  10. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/sources.py +11 -0
  11. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/tools.py +15 -0
  12. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/agent_manager.py +20 -6
  13. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/helpers/tool_execution_helper.py +3 -3
  14. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/identity_manager.py +11 -0
  15. letta_nightly-0.7.5.dev20250425010311/letta/services/mcp/base_client.py +67 -0
  16. letta_nightly-0.7.5.dev20250425010311/letta/services/mcp/sse_client.py +25 -0
  17. letta_nightly-0.7.5.dev20250425010311/letta/services/mcp/stdio_client.py +19 -0
  18. letta_nightly-0.7.5.dev20250425010311/letta/services/mcp/types.py +48 -0
  19. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/source_manager.py +11 -0
  20. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/tool_executor/tool_execution_sandbox.py +4 -9
  21. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/tool_manager.py +11 -0
  22. letta_nightly-0.7.5.dev20250425010311/letta/services/tool_sandbox/__init__.py +0 -0
  23. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/tool_sandbox/local_sandbox.py +3 -3
  24. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/pyproject.toml +1 -1
  25. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/LICENSE +0 -0
  26. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/README.md +0 -0
  27. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/__main__.py +0 -0
  28. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/agents/__init__.py +0 -0
  29. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/agents/base_agent.py +0 -0
  30. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/agents/ephemeral_agent.py +0 -0
  31. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/agents/ephemeral_memory_agent.py +0 -0
  32. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/agents/helpers.py +0 -0
  33. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/agents/letta_agent.py +0 -0
  34. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/agents/letta_agent_batch.py +0 -0
  35. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/agents/voice_agent.py +0 -0
  36. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/benchmark/benchmark.py +0 -0
  37. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/benchmark/constants.py +0 -0
  38. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/cli/cli.py +0 -0
  39. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/cli/cli_config.py +0 -0
  40. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/cli/cli_load.py +0 -0
  41. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/client/__init__.py +0 -0
  42. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/client/client.py +0 -0
  43. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/client/streaming.py +0 -0
  44. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/client/utils.py +0 -0
  45. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/config.py +0 -0
  46. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/constants.py +0 -0
  47. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/data_sources/connectors.py +0 -0
  48. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/data_sources/connectors_helper.py +0 -0
  49. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/embeddings.py +0 -0
  50. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/errors.py +0 -0
  51. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/__init__.py +0 -0
  52. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/ast_parsers.py +0 -0
  53. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/function_sets/base.py +0 -0
  54. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/function_sets/extras.py +0 -0
  55. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/function_sets/multi_agent.py +0 -0
  56. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/functions.py +0 -0
  57. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/helpers.py +0 -0
  58. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/interface.py +0 -0
  59. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/mcp_client/__init__.py +0 -0
  60. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/mcp_client/base_client.py +0 -0
  61. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/mcp_client/exceptions.py +0 -0
  62. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/mcp_client/sse_client.py +0 -0
  63. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/mcp_client/stdio_client.py +0 -0
  64. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/mcp_client/types.py +0 -0
  65. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/functions/schema_generator.py +0 -0
  66. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/groups/dynamic_multi_agent.py +0 -0
  67. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/groups/helpers.py +0 -0
  68. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/groups/round_robin_multi_agent.py +0 -0
  69. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/groups/supervisor_multi_agent.py +0 -0
  70. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/helpers/__init__.py +0 -0
  71. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/helpers/composio_helpers.py +0 -0
  72. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/helpers/converters.py +0 -0
  73. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/helpers/datetime_helpers.py +0 -0
  74. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/helpers/json_helpers.py +0 -0
  75. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/helpers/message_helper.py +0 -0
  76. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/helpers/tool_execution_helper.py +0 -0
  77. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/helpers/tool_rule_solver.py +0 -0
  78. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/humans/__init__.py +0 -0
  79. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/humans/examples/basic.txt +0 -0
  80. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/humans/examples/cs_phd.txt +0 -0
  81. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/interface.py +0 -0
  82. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/interfaces/__init__.py +0 -0
  83. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/interfaces/anthropic_streaming_interface.py +0 -0
  84. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
  85. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/interfaces/utils.py +0 -0
  86. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/jobs/__init__.py +0 -0
  87. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/jobs/helpers.py +0 -0
  88. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/jobs/llm_batch_job_polling.py +0 -0
  89. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/jobs/scheduler.py +0 -0
  90. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/jobs/types.py +0 -0
  91. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/__init__.py +0 -0
  92. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/anthropic.py +0 -0
  93. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/anthropic_client.py +0 -0
  94. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/aws_bedrock.py +0 -0
  95. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/azure_openai.py +0 -0
  96. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/azure_openai_constants.py +0 -0
  97. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/cohere.py +0 -0
  98. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/deepseek.py +0 -0
  99. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/google_ai_client.py +0 -0
  100. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/google_constants.py +0 -0
  101. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/google_vertex_client.py +0 -0
  102. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/helpers.py +0 -0
  103. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/llm_api_tools.py +0 -0
  104. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/llm_client.py +0 -0
  105. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/llm_client_base.py +0 -0
  106. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/mistral.py +0 -0
  107. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/openai.py +0 -0
  108. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/llm_api/openai_client.py +0 -0
  109. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/README.md +0 -0
  110. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/__init__.py +0 -0
  111. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/chat_completion_proxy.py +0 -0
  112. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/constants.py +0 -0
  113. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/function_parser.py +0 -0
  114. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/grammars/__init__.py +0 -0
  115. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
  116. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/grammars/json.gbnf +0 -0
  117. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
  118. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/json_parser.py +0 -0
  119. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/koboldcpp/api.py +0 -0
  120. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/koboldcpp/settings.py +0 -0
  121. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/llamacpp/api.py +0 -0
  122. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/llamacpp/settings.py +0 -0
  123. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
  124. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
  125. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
  126. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
  127. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
  128. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
  129. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
  130. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
  131. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
  132. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/lmstudio/api.py +0 -0
  133. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/lmstudio/settings.py +0 -0
  134. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/ollama/api.py +0 -0
  135. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/ollama/settings.py +0 -0
  136. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/settings/__init__.py +0 -0
  137. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
  138. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/settings/settings.py +0 -0
  139. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/settings/simple.py +0 -0
  140. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/utils.py +0 -0
  141. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/vllm/api.py +0 -0
  142. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/webui/api.py +0 -0
  143. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/webui/legacy_api.py +0 -0
  144. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/webui/legacy_settings.py +0 -0
  145. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/local_llm/webui/settings.py +0 -0
  146. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/log.py +0 -0
  147. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/main.py +0 -0
  148. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/memory.py +0 -0
  149. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/openai_backcompat/__init__.py +0 -0
  150. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/openai_backcompat/openai_object.py +0 -0
  151. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/__all__.py +0 -0
  152. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/__init__.py +0 -0
  153. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/agent.py +0 -0
  154. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/agents_tags.py +0 -0
  155. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/base.py +0 -0
  156. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/block.py +0 -0
  157. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/block_history.py +0 -0
  158. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/blocks_agents.py +0 -0
  159. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/custom_columns.py +0 -0
  160. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/enums.py +0 -0
  161. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/errors.py +0 -0
  162. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/file.py +0 -0
  163. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/group.py +0 -0
  164. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/groups_agents.py +0 -0
  165. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/groups_blocks.py +0 -0
  166. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/identities_agents.py +0 -0
  167. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/identities_blocks.py +0 -0
  168. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/identity.py +0 -0
  169. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/job.py +0 -0
  170. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/job_messages.py +0 -0
  171. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/llm_batch_items.py +0 -0
  172. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/llm_batch_job.py +0 -0
  173. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/message.py +0 -0
  174. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/mixins.py +0 -0
  175. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/organization.py +0 -0
  176. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/passage.py +0 -0
  177. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/provider.py +0 -0
  178. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/sandbox_config.py +0 -0
  179. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/source.py +0 -0
  180. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/sources_agents.py +0 -0
  181. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/sqlalchemy_base.py +0 -0
  182. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/sqlite_functions.py +0 -0
  183. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/step.py +0 -0
  184. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/tool.py +0 -0
  185. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/tools_agents.py +0 -0
  186. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/orm/user.py +0 -0
  187. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/personas/__init__.py +0 -0
  188. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/personas/examples/anna_pa.txt +0 -0
  189. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/personas/examples/google_search_persona.txt +0 -0
  190. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/personas/examples/memgpt_doc.txt +0 -0
  191. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/personas/examples/memgpt_starter.txt +0 -0
  192. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/personas/examples/o1_persona.txt +0 -0
  193. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/personas/examples/sam.txt +0 -0
  194. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/personas/examples/sam_pov.txt +0 -0
  195. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
  196. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/personas/examples/sleeptime_doc_persona.txt +0 -0
  197. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/personas/examples/sleeptime_memory_persona.txt +0 -0
  198. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/personas/examples/sqldb/test.db +0 -0
  199. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/__init__.py +0 -0
  200. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/gpt_summarize.py +0 -0
  201. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/gpt_system.py +0 -0
  202. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_base.txt +0 -0
  203. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_chat.txt +0 -0
  204. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
  205. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
  206. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_convo_only.txt +0 -0
  207. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_doc.txt +0 -0
  208. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
  209. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
  210. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_memory_only.txt +0 -0
  211. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
  212. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
  213. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
  214. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
  215. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/memgpt_sleeptime_chat.txt +0 -0
  216. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/sleeptime.txt +0 -0
  217. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/prompts/system/sleeptime_doc_ingest.txt +0 -0
  218. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/pytest.ini +0 -0
  219. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/agent.py +0 -0
  220. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/block.py +0 -0
  221. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/embedding_config.py +0 -0
  222. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/embedding_config_overrides.py +0 -0
  223. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/enums.py +0 -0
  224. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/environment_variables.py +0 -0
  225. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/file.py +0 -0
  226. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/group.py +0 -0
  227. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/health.py +0 -0
  228. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/identity.py +0 -0
  229. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/job.py +0 -0
  230. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/letta_base.py +0 -0
  231. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/letta_message.py +0 -0
  232. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/letta_message_content.py +0 -0
  233. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/letta_request.py +0 -0
  234. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/letta_response.py +0 -0
  235. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/llm_batch_job.py +0 -0
  236. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/llm_config.py +0 -0
  237. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/llm_config_overrides.py +0 -0
  238. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/memory.py +0 -0
  239. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/openai/chat_completion_request.py +0 -0
  240. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/openai/chat_completion_response.py +0 -0
  241. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/openai/chat_completions.py +0 -0
  242. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/openai/embedding_response.py +0 -0
  243. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/openai/openai.py +0 -0
  244. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/organization.py +0 -0
  245. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/passage.py +0 -0
  246. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/response_format.py +0 -0
  247. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/run.py +0 -0
  248. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/source.py +0 -0
  249. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/step.py +0 -0
  250. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/tool.py +0 -0
  251. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/tool_execution_result.py +0 -0
  252. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/tool_rule.py +0 -0
  253. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/usage.py +0 -0
  254. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/schemas/user.py +0 -0
  255. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/serialize_schemas/__init__.py +0 -0
  256. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/serialize_schemas/marshmallow_agent.py +0 -0
  257. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
  258. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/serialize_schemas/marshmallow_base.py +0 -0
  259. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/serialize_schemas/marshmallow_block.py +0 -0
  260. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
  261. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/serialize_schemas/marshmallow_message.py +0 -0
  262. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/serialize_schemas/marshmallow_tag.py +0 -0
  263. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/serialize_schemas/marshmallow_tool.py +0 -0
  264. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/serialize_schemas/pydantic_agent_schema.py +0 -0
  265. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/__init__.py +0 -0
  266. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/constants.py +0 -0
  267. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/db.py +0 -0
  268. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/generate_openapi_schema.sh +0 -0
  269. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/__init__.py +0 -0
  270. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/app.py +0 -0
  271. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/auth/__init__.py +0 -0
  272. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/auth/index.py +0 -0
  273. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/auth_token.py +0 -0
  274. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/chat_completions_interface.py +0 -0
  275. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/interface.py +0 -0
  276. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/optimistic_json_parser.py +0 -0
  277. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/__init__.py +0 -0
  278. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
  279. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
  280. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/__init__.py +0 -0
  281. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/blocks.py +0 -0
  282. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/groups.py +0 -0
  283. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/health.py +0 -0
  284. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/jobs.py +0 -0
  285. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/llms.py +0 -0
  286. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/messages.py +0 -0
  287. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/organizations.py +0 -0
  288. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/providers.py +0 -0
  289. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/runs.py +0 -0
  290. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
  291. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/steps.py +0 -0
  292. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/tags.py +0 -0
  293. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/users.py +0 -0
  294. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/routers/v1/voice.py +0 -0
  295. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/static_files.py +0 -0
  296. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/rest_api/utils.py +0 -0
  297. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/server.py +0 -0
  298. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/startup.sh +0 -0
  299. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/static_files/assets/index-048c9598.js +0 -0
  300. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/static_files/assets/index-0e31b727.css +0 -0
  301. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/static_files/favicon.ico +0 -0
  302. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/static_files/index.html +0 -0
  303. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
  304. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/utils.py +0 -0
  305. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/ws_api/__init__.py +0 -0
  306. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/ws_api/example_client.py +0 -0
  307. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/ws_api/interface.py +0 -0
  308. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/ws_api/protocol.py +0 -0
  309. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/server/ws_api/server.py +0 -0
  310. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/__init__.py +0 -0
  311. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/block_manager.py +0 -0
  312. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/group_manager.py +0 -0
  313. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/helpers/agent_manager_helper.py +0 -0
  314. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/job_manager.py +0 -0
  315. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/llm_batch_manager.py +0 -0
  316. {letta_nightly-0.7.3.dev20250424104224/letta/services/summarizer → letta_nightly-0.7.5.dev20250425010311/letta/services/mcp}/__init__.py +0 -0
  317. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/message_manager.py +0 -0
  318. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/organization_manager.py +0 -0
  319. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/passage_manager.py +0 -0
  320. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/per_agent_lock_manager.py +0 -0
  321. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/provider_manager.py +0 -0
  322. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/sandbox_config_manager.py +0 -0
  323. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/step_manager.py +0 -0
  324. {letta_nightly-0.7.3.dev20250424104224/letta/services/tool_executor → letta_nightly-0.7.5.dev20250425010311/letta/services/summarizer}/__init__.py +0 -0
  325. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/summarizer/enums.py +0 -0
  326. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/summarizer/summarizer.py +0 -0
  327. {letta_nightly-0.7.3.dev20250424104224/letta/services/tool_sandbox → letta_nightly-0.7.5.dev20250425010311/letta/services/tool_executor}/__init__.py +0 -0
  328. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/tool_executor/tool_execution_manager.py +0 -0
  329. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/tool_executor/tool_executor.py +0 -0
  330. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/tool_sandbox/base.py +0 -0
  331. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/tool_sandbox/e2b_sandbox.py +0 -0
  332. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/services/user_manager.py +0 -0
  333. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/settings.py +0 -0
  334. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/streaming_interface.py +0 -0
  335. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/streaming_utils.py +0 -0
  336. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/system.py +0 -0
  337. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/tracing.py +0 -0
  338. {letta_nightly-0.7.3.dev20250424104224 → letta_nightly-0.7.5.dev20250425010311}/letta/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.7.3.dev20250424104224
3
+ Version: 0.7.5.dev20250425010311
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -1,4 +1,4 @@
1
- __version__ = "0.7.3"
1
+ __version__ = "0.7.5"
2
2
 
3
3
  # import clients
4
4
  from letta.client.client import LocalClient, RESTClient, create_client
@@ -190,16 +190,15 @@ class Agent(BaseAgent):
190
190
  Returns:
191
191
  modified (bool): whether the memory was updated
192
192
  """
193
- if self.agent_state.memory.compile() != new_memory.compile():
193
+ system_message = self.message_manager.get_message_by_id(message_id=self.agent_state.message_ids[0], actor=self.user)
194
+ if new_memory.compile() not in system_message.content[0].text:
194
195
  # update the blocks (LRW) in the DB
195
196
  for label in self.agent_state.memory.list_block_labels():
196
197
  updated_value = new_memory.get_block(label).value
197
198
  if updated_value != self.agent_state.memory.get_block(label).value:
198
199
  # update the block if it's changed
199
200
  block_id = self.agent_state.memory.get_block(label).id
200
- block = self.block_manager.update_block(
201
- block_id=block_id, block_update=BlockUpdate(value=updated_value), actor=self.user
202
- )
201
+ self.block_manager.update_block(block_id=block_id, block_update=BlockUpdate(value=updated_value), actor=self.user)
203
202
 
204
203
  # refresh memory from DB (using block ids)
205
204
  self.agent_state.memory = Memory(
@@ -43,24 +43,21 @@ class SleeptimeMultiAgent(Agent):
43
43
 
44
44
  def _run_async_in_new_thread(self, coro):
45
45
  """Run an async coroutine in a new thread with its own event loop"""
46
- result = None
47
46
 
48
47
  def run_async():
49
- nonlocal result
50
48
  loop = asyncio.new_event_loop()
51
49
  asyncio.set_event_loop(loop)
52
50
  try:
53
- result = loop.run_until_complete(coro)
51
+ loop.run_until_complete(coro)
54
52
  finally:
55
53
  loop.close()
56
54
  asyncio.set_event_loop(None)
57
55
 
58
56
  thread = threading.Thread(target=run_async)
57
+ thread.daemon = True
59
58
  thread.start()
60
- thread.join()
61
- return result
62
59
 
63
- async def _issue_background_task(
60
+ def _issue_background_task(
64
61
  self,
65
62
  participant_agent_id: str,
66
63
  messages: List[Message],
@@ -81,7 +78,7 @@ class SleeptimeMultiAgent(Agent):
81
78
  )
82
79
  run = self.job_manager.create_job(pydantic_job=run, actor=self.user)
83
80
 
84
- asyncio.create_task(
81
+ self._run_async_in_new_thread(
85
82
  self._perform_background_agent_step(
86
83
  participant_agent_id=participant_agent_id,
87
84
  messages=messages,
@@ -239,17 +236,15 @@ class SleeptimeMultiAgent(Agent):
239
236
  )
240
237
  for participant_agent_id in self.agent_ids:
241
238
  try:
242
- run_id = self._run_async_in_new_thread(
243
- self._issue_background_task(
244
- participant_agent_id,
245
- last_response_messages,
246
- chaining,
247
- max_chaining_steps,
248
- token_streaming,
249
- metadata,
250
- put_inner_thoughts_first,
251
- last_processed_message_id,
252
- )
239
+ run_id = self._issue_background_task(
240
+ participant_agent_id,
241
+ last_response_messages,
242
+ chaining,
243
+ max_chaining_steps,
244
+ token_streaming,
245
+ metadata,
246
+ put_inner_thoughts_first,
247
+ last_processed_message_id,
253
248
  )
254
249
  run_ids.append(run_id)
255
250
 
@@ -699,6 +699,10 @@ class Message(BaseMessage):
699
699
  else:
700
700
  raise ValueError(self.role)
701
701
 
702
+ # Optional field, do not include if null
703
+ if self.name is not None:
704
+ openai_message["name"] = self.name
705
+
702
706
  if parse_content_parts:
703
707
  for content in self.content:
704
708
  if isinstance(content, ReasoningContent):
@@ -1233,7 +1233,10 @@ class AzureProvider(Provider):
1233
1233
  """
1234
1234
  This is hardcoded for now, since there is no API endpoints to retrieve metadata for a model.
1235
1235
  """
1236
- return AZURE_MODEL_TO_CONTEXT_LENGTH.get(model_name, 4096)
1236
+ context_window = AZURE_MODEL_TO_CONTEXT_LENGTH.get(model_name, None)
1237
+ if context_window is None:
1238
+ context_window = LLM_MAX_TOKENS.get(model_name, 4096)
1239
+ return context_window
1237
1240
 
1238
1241
 
1239
1242
  class VLLMChatCompletionsProvider(Provider):
@@ -47,14 +47,14 @@ class PipRequirement(BaseModel):
47
47
 
48
48
  class LocalSandboxConfig(BaseModel):
49
49
  sandbox_dir: Optional[str] = Field(None, description="Directory for the sandbox environment.")
50
- use_venv: bool = Field(False, description="Whether or not to use the venv, or run directly in the same run loop.")
50
+ force_create_venv: bool = Field(False, description="Whether or not to use the venv, or run directly in the same run loop.")
51
51
  venv_name: str = Field(
52
52
  "venv",
53
53
  description="The name for the venv in the sandbox directory. We first search for an existing venv with this name, otherwise, we make it from the requirements.txt.",
54
54
  )
55
55
  pip_requirements: List[PipRequirement] = Field(
56
56
  default_factory=list,
57
- description="List of pip packages to install with mandatory name and optional version following semantic versioning. This only is considered when use_venv is True.",
57
+ description="List of pip packages to install with mandatory name and optional version following semantic versioning. This only is considered when force_create_venv is True.",
58
58
  )
59
59
 
60
60
  @property
@@ -104,6 +104,17 @@ def list_agents(
104
104
  )
105
105
 
106
106
 
107
+ @router.get("/count", response_model=int, operation_id="count_agents")
108
+ def count_agents(
109
+ server: SyncServer = Depends(get_letta_server),
110
+ actor_id: Optional[str] = Header(None, alias="user_id"),
111
+ ):
112
+ """
113
+ Get the count of all agents associated with a given user.
114
+ """
115
+ return server.agent_manager.size(actor=server.user_manager.get_user_or_default(user_id=actor_id))
116
+
117
+
107
118
  class IndentedORJSONResponse(Response):
108
119
  media_type = "application/json"
109
120
 
@@ -49,6 +49,24 @@ def list_identities(
49
49
  return identities
50
50
 
51
51
 
52
+ @router.get("/count", tags=["identities"], response_model=int, operation_id="count_identities")
53
+ def count_identities(
54
+ server: "SyncServer" = Depends(get_letta_server),
55
+ actor_id: Optional[str] = Header(None, alias="user_id"),
56
+ ):
57
+ """
58
+ Get count of all identities for a user
59
+ """
60
+ try:
61
+ return server.identity_manager.size(actor=server.user_manager.get_user_or_default(user_id=actor_id))
62
+ except NoResultFound:
63
+ return 0
64
+ except HTTPException:
65
+ raise
66
+ except Exception as e:
67
+ raise HTTPException(status_code=500, detail=f"{e}")
68
+
69
+
52
70
  @router.get("/{identity_id}", tags=["identities"], response_model=Identity, operation_id="retrieve_identity")
53
71
  def retrieve_identity(
54
72
  identity_id: str,
@@ -67,6 +67,17 @@ def list_sources(
67
67
  return server.list_all_sources(actor=actor)
68
68
 
69
69
 
70
+ @router.get("/count", response_model=int, operation_id="count_sources")
71
+ def count_sources(
72
+ server: "SyncServer" = Depends(get_letta_server),
73
+ actor_id: Optional[str] = Header(None, alias="user_id"), # Extract user_id from header, default to None if not present
74
+ ):
75
+ """
76
+ Count all data sources created by a user.
77
+ """
78
+ return server.source_manager.size(actor=server.user_manager.get_user_or_default(user_id=actor_id))
79
+
80
+
70
81
  @router.post("/", response_model=Source, operation_id="create_source")
71
82
  def create_source(
72
83
  source_create: SourceCreate,
@@ -80,6 +80,21 @@ def list_tools(
80
80
  raise HTTPException(status_code=500, detail=str(e))
81
81
 
82
82
 
83
+ @router.get("/count", response_model=int, operation_id="count_tools")
84
+ def count_tools(
85
+ server: SyncServer = Depends(get_letta_server),
86
+ actor_id: Optional[str] = Header(None, alias="user_id"),
87
+ ):
88
+ """
89
+ Get a count of all tools available to agents belonging to the org of the user
90
+ """
91
+ try:
92
+ return server.tool_manager.size(actor=server.user_manager.get_user_or_default(user_id=actor_id))
93
+ except Exception as e:
94
+ print(f"Error occurred: {e}")
95
+ raise HTTPException(status_code=500, detail=str(e))
96
+
97
+
83
98
  @router.post("/", response_model=Tool, operation_id="create_tool")
84
99
  def create_tool(
85
100
  request: ToolCreate = Body(...),
@@ -556,6 +556,16 @@ class AgentManager:
556
556
 
557
557
  return list(session.execute(query).scalars())
558
558
 
559
+ def size(
560
+ self,
561
+ actor: PydanticUser,
562
+ ) -> int:
563
+ """
564
+ Get the total count of agents for the given user.
565
+ """
566
+ with self.session_maker() as session:
567
+ return AgentModel.size(db_session=session, actor=actor)
568
+
559
569
  @enforce_types
560
570
  def get_agent_by_id(self, agent_id: str, actor: PydanticUser) -> PydanticAgentState:
561
571
  """Fetch an agent by its ID."""
@@ -590,15 +600,18 @@ class AgentManager:
590
600
  agents_to_delete = [agent]
591
601
  sleeptime_group_to_delete = None
592
602
 
593
- # Delete sleeptime agent and group
603
+ # Delete sleeptime agent and group (TODO this is flimsy pls fix)
594
604
  if agent.multi_agent_group:
595
605
  participant_agent_ids = agent.multi_agent_group.agent_ids
596
606
  if agent.multi_agent_group.manager_type == ManagerType.sleeptime and len(participant_agent_ids) == 1:
597
- sleeptime_agent = AgentModel.read(db_session=session, identifier=participant_agent_ids[0], actor=actor)
598
- if sleeptime_agent.agent_type == AgentType.sleeptime_agent:
599
- sleeptime_agent_group = GroupModel.read(db_session=session, identifier=agent.multi_agent_group.id, actor=actor)
600
- sleeptime_group_to_delete = sleeptime_agent_group
607
+ try:
608
+ sleeptime_agent = AgentModel.read(db_session=session, identifier=participant_agent_ids[0], actor=actor)
601
609
  agents_to_delete.append(sleeptime_agent)
610
+ except NoResultFound:
611
+ pass # agent already deleted
612
+ sleeptime_agent_group = GroupModel.read(db_session=session, identifier=agent.multi_agent_group.id, actor=actor)
613
+ sleeptime_group_to_delete = sleeptime_agent_group
614
+
602
615
  try:
603
616
  if sleeptime_group_to_delete is not None:
604
617
  session.delete(sleeptime_group_to_delete)
@@ -931,7 +944,8 @@ class AgentManager:
931
944
  modified (bool): whether the memory was updated
932
945
  """
933
946
  agent_state = self.get_agent_by_id(agent_id=agent_id, actor=actor)
934
- if agent_state.memory.compile() != new_memory.compile():
947
+ system_message = self.message_manager.get_message_by_id(message_id=agent_state.message_ids[0], actor=actor)
948
+ if new_memory.compile() not in system_message.content[0].text:
935
949
  # update the blocks (LRW) in the DB
936
950
  for label in agent_state.memory.list_block_labels():
937
951
  updated_value = new_memory.get_block(label).value
@@ -24,7 +24,7 @@ def find_python_executable(local_configs: LocalSandboxConfig) -> str:
24
24
  """
25
25
  sandbox_dir = os.path.expanduser(local_configs.sandbox_dir) # Expand tilde
26
26
 
27
- if not local_configs.use_venv:
27
+ if not local_configs.force_create_venv:
28
28
  return "python.exe" if platform.system().lower().startswith("win") else "python3"
29
29
 
30
30
  venv_path = os.path.join(sandbox_dir, local_configs.venv_name)
@@ -96,7 +96,7 @@ def install_pip_requirements_for_sandbox(
96
96
  python_exec = find_python_executable(local_configs)
97
97
 
98
98
  # If using a virtual environment, upgrade pip before installing dependencies.
99
- if local_configs.use_venv:
99
+ if local_configs.force_create_venv:
100
100
  ensure_pip_is_up_to_date(python_exec, env=env)
101
101
 
102
102
  # Construct package list
@@ -108,7 +108,7 @@ def install_pip_requirements_for_sandbox(
108
108
  pip_cmd.append("--upgrade")
109
109
  pip_cmd += packages
110
110
 
111
- if user_install_if_no_venv and not local_configs.use_venv:
111
+ if user_install_if_no_venv and not local_configs.force_create_venv:
112
112
  pip_cmd.append("--user")
113
113
 
114
114
  run_subprocess(pip_cmd, env=env, fail_msg=f"Failed to install packages: {', '.join(packages)}")
@@ -190,6 +190,17 @@ class IdentityManager:
190
190
  session.delete(identity)
191
191
  session.commit()
192
192
 
193
+ @enforce_types
194
+ def size(
195
+ self,
196
+ actor: PydanticUser,
197
+ ) -> int:
198
+ """
199
+ Get the total count of identities for the given user.
200
+ """
201
+ with self.session_maker() as session:
202
+ return IdentityModel.size(db_session=session, actor=actor)
203
+
193
204
  def _process_relationship(
194
205
  self,
195
206
  session: Session,
@@ -0,0 +1,67 @@
1
+ from contextlib import AsyncExitStack
2
+ from typing import Optional, Tuple
3
+
4
+ from mcp import ClientSession
5
+ from mcp import Tool as MCPTool
6
+ from mcp.types import TextContent
7
+
8
+ from letta.functions.mcp_client.types import BaseServerConfig
9
+ from letta.log import get_logger
10
+
11
+ logger = get_logger(__name__)
12
+
13
+
14
+ # TODO: Get rid of Async prefix on this class name once we deprecate old sync code
15
+ class AsyncBaseMCPClient:
16
+ def __init__(self, server_config: BaseServerConfig):
17
+ self.server_config = server_config
18
+ self.exit_stack = AsyncExitStack()
19
+ self.session: Optional[ClientSession] = None
20
+ self.initialized = False
21
+
22
+ async def connect_to_server(self):
23
+ try:
24
+ await self._initialize_connection(self.server_config)
25
+ await self.session.initialize()
26
+ self.initialized = True
27
+ except Exception as e:
28
+ logger.error(
29
+ f"Connecting to MCP server failed. Please review your server config: {self.server_config.model_dump_json(indent=4)}"
30
+ )
31
+ raise e
32
+
33
+ async def _initialize_connection(self, exit_stack: AsyncExitStack[bool | None], server_config: BaseServerConfig) -> None:
34
+ raise NotImplementedError("Subclasses must implement _initialize_connection")
35
+
36
+ async def list_tools(self) -> list[MCPTool]:
37
+ self._check_initialized()
38
+ response = await self.session.list_tools()
39
+ return response.tools
40
+
41
+ async def execute_tool(self, tool_name: str, tool_args: dict) -> Tuple[str, bool]:
42
+ self._check_initialized()
43
+ result = await self.session.call_tool(tool_name, tool_args)
44
+ parsed_content = []
45
+ for content_piece in result.content:
46
+ if isinstance(content_piece, TextContent):
47
+ parsed_content.append(content_piece.text)
48
+ print("parsed_content (text)", parsed_content)
49
+ else:
50
+ parsed_content.append(str(content_piece))
51
+ print("parsed_content (other)", parsed_content)
52
+ if len(parsed_content) > 0:
53
+ final_content = " ".join(parsed_content)
54
+ else:
55
+ # TODO move hardcoding to constants
56
+ final_content = "Empty response from tool"
57
+
58
+ return final_content, result.isError
59
+
60
+ def _check_initialized(self):
61
+ if not self.initialized:
62
+ logger.error("MCPClient has not been initialized")
63
+ raise RuntimeError("MCPClient has not been initialized")
64
+
65
+ async def cleanup(self):
66
+ """Clean up resources"""
67
+ await self.exit_stack.aclose()
@@ -0,0 +1,25 @@
1
+ from contextlib import AsyncExitStack
2
+
3
+ from mcp import ClientSession
4
+ from mcp.client.sse import sse_client
5
+
6
+ from letta.functions.mcp_client.types import SSEServerConfig
7
+ from letta.log import get_logger
8
+ from letta.services.mcp.base_client import AsyncBaseMCPClient
9
+
10
+ # see: https://modelcontextprotocol.io/quickstart/user
11
+ MCP_CONFIG_TOPLEVEL_KEY = "mcpServers"
12
+
13
+ logger = get_logger(__name__)
14
+
15
+
16
+ # TODO: Get rid of Async prefix on this class name once we deprecate old sync code
17
+ class AsyncSSEMCPClient(AsyncBaseMCPClient):
18
+ async def _initialize_connection(self, exit_stack: AsyncExitStack[bool | None], server_config: SSEServerConfig) -> None:
19
+ sse_cm = sse_client(url=server_config.server_url)
20
+ sse_transport = await exit_stack.enter_async_context(sse_cm)
21
+ self.stdio, self.write = sse_transport
22
+
23
+ # Create and enter the ClientSession context manager
24
+ session_cm = ClientSession(self.stdio, self.write)
25
+ self.session = await exit_stack.enter_async_context(session_cm)
@@ -0,0 +1,19 @@
1
+ from contextlib import AsyncExitStack
2
+
3
+ from mcp import ClientSession, StdioServerParameters
4
+ from mcp.client.stdio import stdio_client
5
+
6
+ from letta.functions.mcp_client.types import StdioServerConfig
7
+ from letta.log import get_logger
8
+ from letta.services.mcp.base_client import AsyncBaseMCPClient
9
+
10
+ logger = get_logger(__name__)
11
+
12
+
13
+ # TODO: Get rid of Async prefix on this class name once we deprecate old sync code
14
+ class AsyncStdioMCPClient(AsyncBaseMCPClient):
15
+ async def _initialize_connection(self, exit_stack: AsyncExitStack[bool | None], server_config: StdioServerConfig) -> None:
16
+ server_params = StdioServerParameters(command=server_config.command, args=server_config.args)
17
+ stdio_transport = await exit_stack.enter_async_context(stdio_client(server_params))
18
+ self.stdio, self.write = stdio_transport
19
+ self.session = await exit_stack.enter_async_context(ClientSession(self.stdio, self.write))
@@ -0,0 +1,48 @@
1
+ from enum import Enum
2
+ from typing import List, Optional
3
+
4
+ from mcp import Tool
5
+ from pydantic import BaseModel, Field
6
+
7
+
8
+ class MCPTool(Tool):
9
+ """A simple wrapper around MCP's tool definition (to avoid conflict with our own)"""
10
+
11
+
12
+ class MCPServerType(str, Enum):
13
+ SSE = "sse"
14
+ STDIO = "stdio"
15
+
16
+
17
+ class BaseServerConfig(BaseModel):
18
+ server_name: str = Field(..., description="The name of the server")
19
+ type: MCPServerType
20
+
21
+
22
+ class SSEServerConfig(BaseServerConfig):
23
+ type: MCPServerType = MCPServerType.SSE
24
+ server_url: str = Field(..., description="The URL of the server (MCP SSE client will connect to this URL)")
25
+
26
+ def to_dict(self) -> dict:
27
+ values = {
28
+ "transport": "sse",
29
+ "url": self.server_url,
30
+ }
31
+ return values
32
+
33
+
34
+ class StdioServerConfig(BaseServerConfig):
35
+ type: MCPServerType = MCPServerType.STDIO
36
+ command: str = Field(..., description="The command to run (MCP 'local' client will run this command)")
37
+ args: List[str] = Field(..., description="The arguments to pass to the command")
38
+ env: Optional[dict[str, str]] = Field(None, description="Environment variables to set")
39
+
40
+ def to_dict(self) -> dict:
41
+ values = {
42
+ "transport": "stdio",
43
+ "command": self.command,
44
+ "args": self.args,
45
+ }
46
+ if self.env is not None:
47
+ values["env"] = self.env
48
+ return values
@@ -77,6 +77,17 @@ class SourceManager:
77
77
  )
78
78
  return [source.to_pydantic() for source in sources]
79
79
 
80
+ @enforce_types
81
+ def size(
82
+ self,
83
+ actor: PydanticUser,
84
+ ) -> int:
85
+ """
86
+ Get the total count of sources for the given user.
87
+ """
88
+ with self.session_maker() as session:
89
+ return SourceModel.size(db_session=session, actor=actor)
90
+
80
91
  @enforce_types
81
92
  def list_attached_agents(self, source_id: str, actor: Optional[PydanticUser] = None) -> List[PydanticAgentState]:
82
93
  """
@@ -144,7 +144,7 @@ class ToolExecutionSandbox:
144
144
 
145
145
  # Write the code to a temp file in the sandbox_dir
146
146
  with tempfile.NamedTemporaryFile(mode="w", dir=local_configs.sandbox_dir, suffix=".py", delete=False) as temp_file:
147
- if local_configs.use_venv:
147
+ if local_configs.force_create_venv:
148
148
  # If using venv, we need to wrap with special string markers to separate out the output and the stdout (since it is all in stdout)
149
149
  code = self.generate_execution_script(agent_state=agent_state, wrap_print_with_markers=True)
150
150
  else:
@@ -154,7 +154,7 @@ class ToolExecutionSandbox:
154
154
  temp_file.flush()
155
155
  temp_file_path = temp_file.name
156
156
  try:
157
- if local_configs.use_venv:
157
+ if local_configs.force_create_venv:
158
158
  return self.run_local_dir_sandbox_venv(sbx_config, env, temp_file_path)
159
159
  else:
160
160
  return self.run_local_dir_sandbox_directly(sbx_config, env, temp_file_path)
@@ -204,12 +204,7 @@ class ToolExecutionSandbox:
204
204
  try:
205
205
  log_event(name="start subprocess")
206
206
  result = subprocess.run(
207
- [python_executable, temp_file_path],
208
- env=env,
209
- cwd=sandbox_dir,
210
- timeout=60,
211
- capture_output=True,
212
- text=True,
207
+ [python_executable, temp_file_path], env=env, cwd=sandbox_dir, timeout=60, capture_output=True, text=True, check=True
213
208
  )
214
209
  log_event(name="finish subprocess")
215
210
  func_result, stdout = self.parse_out_function_results_markers(result.stdout)
@@ -272,7 +267,7 @@ class ToolExecutionSandbox:
272
267
  source = f.read()
273
268
  code_obj = compile(source, temp_file_path, "exec")
274
269
 
275
- # Provide a dict for globals
270
+ # Provide a dict for globals.
276
271
  globals_dict = dict(env) # or {}
277
272
  # If you need to mimic `__main__` behavior:
278
273
  globals_dict["__name__"] = "__main__"
@@ -145,6 +145,17 @@ class ToolManager:
145
145
 
146
146
  return results
147
147
 
148
+ @enforce_types
149
+ def size(
150
+ self,
151
+ actor: PydanticUser,
152
+ ) -> int:
153
+ """
154
+ Get the total count of tools for the given user.
155
+ """
156
+ with self.session_maker() as session:
157
+ return ToolModel.size(db_session=session, actor=actor)
158
+
148
159
  @enforce_types
149
160
  def update_tool_by_id(self, tool_id: str, tool_update: ToolUpdate, actor: PydanticUser) -> PydanticTool:
150
161
  """Update a tool by its ID with the given ToolUpdate object."""
@@ -69,7 +69,7 @@ class AsyncToolSandboxLocal(AsyncToolSandboxBase):
69
69
  else:
70
70
  sbx_config = self.sandbox_config_manager.get_or_create_default_sandbox_config(sandbox_type=SandboxType.LOCAL, actor=self.user)
71
71
  local_configs = sbx_config.get_local_config()
72
- use_venv = local_configs.use_venv
72
+ force_create_venv = local_configs.force_create_venv
73
73
 
74
74
  # Prepare environment variables
75
75
  env = os.environ.copy()
@@ -92,7 +92,7 @@ class AsyncToolSandboxLocal(AsyncToolSandboxBase):
92
92
 
93
93
  # If using a virtual environment, ensure it's prepared in parallel
94
94
  venv_preparation_task = None
95
- if use_venv:
95
+ if force_create_venv:
96
96
  venv_path = str(os.path.join(sandbox_dir, local_configs.venv_name))
97
97
  venv_preparation_task = asyncio.create_task(self._prepare_venv(local_configs, venv_path, env))
98
98
 
@@ -110,7 +110,7 @@ class AsyncToolSandboxLocal(AsyncToolSandboxBase):
110
110
 
111
111
  # Determine the python executable and environment for the subprocess
112
112
  exec_env = env.copy()
113
- if use_venv:
113
+ if force_create_venv:
114
114
  venv_path = str(os.path.join(sandbox_dir, local_configs.venv_name))
115
115
  python_executable = find_python_executable(local_configs)
116
116
  exec_env["VIRTUAL_ENV"] = venv_path
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "letta-nightly"
3
- version = "0.7.3.dev20250424104224"
3
+ version = "0.7.5.dev20250425010311"
4
4
  packages = [
5
5
  {include = "letta"},
6
6
  ]