letta-nightly 0.6.41.dev20250316104011__tar.gz → 0.6.42.dev20250317175208__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 (302) hide show
  1. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/PKG-INFO +1 -1
  2. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/embeddings.py +18 -8
  3. letta_nightly-0.6.42.dev20250317175208/letta/functions/mcp_client/base_client.py +87 -0
  4. letta_nightly-0.6.42.dev20250317175208/letta/functions/mcp_client/sse_client.py +33 -0
  5. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/mcp_client/stdio_client.py +8 -3
  6. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/anthropic.py +1 -1
  7. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/memory.py +6 -1
  8. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/source.py +6 -1
  9. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/app.py +6 -6
  10. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/sources.py +15 -2
  11. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/server.py +23 -8
  12. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/settings.py +6 -0
  13. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/supervisor_multi_agent.py +11 -2
  14. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/tracing.py +2 -2
  15. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/pyproject.toml +1 -1
  16. letta_nightly-0.6.41.dev20250316104011/letta/functions/mcp_client/base_client.py +0 -61
  17. letta_nightly-0.6.41.dev20250316104011/letta/functions/mcp_client/sse_client.py +0 -21
  18. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/LICENSE +0 -0
  19. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/README.md +0 -0
  20. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/__init__.py +0 -0
  21. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/__main__.py +0 -0
  22. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/agent.py +0 -0
  23. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/agents/__init__.py +0 -0
  24. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/agents/base_agent.py +0 -0
  25. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/agents/ephemeral_agent.py +0 -0
  26. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/agents/low_latency_agent.py +0 -0
  27. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/benchmark/benchmark.py +0 -0
  28. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/benchmark/constants.py +0 -0
  29. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/cli/cli.py +0 -0
  30. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/cli/cli_config.py +0 -0
  31. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/cli/cli_load.py +0 -0
  32. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/client/__init__.py +0 -0
  33. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/client/client.py +0 -0
  34. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/client/streaming.py +0 -0
  35. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/client/utils.py +0 -0
  36. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/config.py +0 -0
  37. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/constants.py +0 -0
  38. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/data_sources/connectors.py +0 -0
  39. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/data_sources/connectors_helper.py +0 -0
  40. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/dynamic_multi_agent.py +0 -0
  41. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/errors.py +0 -0
  42. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/__init__.py +0 -0
  43. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/ast_parsers.py +0 -0
  44. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/function_sets/base.py +0 -0
  45. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/function_sets/extras.py +0 -0
  46. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/function_sets/multi_agent.py +0 -0
  47. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/functions.py +0 -0
  48. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/helpers.py +0 -0
  49. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/interface.py +0 -0
  50. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/mcp_client/__init__.py +0 -0
  51. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/mcp_client/types.py +0 -0
  52. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/schema_generator.py +0 -0
  53. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/__init__.py +0 -0
  54. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/composio_helpers.py +0 -0
  55. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/converters.py +0 -0
  56. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/datetime_helpers.py +0 -0
  57. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/json_helpers.py +0 -0
  58. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/tool_execution_helper.py +0 -0
  59. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/tool_rule_solver.py +0 -0
  60. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/humans/__init__.py +0 -0
  61. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/humans/examples/basic.txt +0 -0
  62. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/humans/examples/cs_phd.txt +0 -0
  63. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/interface.py +0 -0
  64. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/interfaces/__init__.py +0 -0
  65. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
  66. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/interfaces/utils.py +0 -0
  67. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/__init__.py +0 -0
  68. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/aws_bedrock.py +0 -0
  69. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/azure_openai.py +0 -0
  70. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/azure_openai_constants.py +0 -0
  71. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/cohere.py +0 -0
  72. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/deepseek.py +0 -0
  73. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/google_ai.py +0 -0
  74. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/google_ai_client.py +0 -0
  75. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/google_constants.py +0 -0
  76. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/google_vertex.py +0 -0
  77. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/google_vertex_client.py +0 -0
  78. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/helpers.py +0 -0
  79. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/llm_api_tools.py +0 -0
  80. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/llm_client.py +0 -0
  81. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/llm_client_base.py +0 -0
  82. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/mistral.py +0 -0
  83. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/openai.py +0 -0
  84. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/README.md +0 -0
  85. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/__init__.py +0 -0
  86. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/chat_completion_proxy.py +0 -0
  87. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/constants.py +0 -0
  88. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/function_parser.py +0 -0
  89. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/grammars/__init__.py +0 -0
  90. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
  91. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/grammars/json.gbnf +0 -0
  92. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
  93. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/json_parser.py +0 -0
  94. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/koboldcpp/api.py +0 -0
  95. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/koboldcpp/settings.py +0 -0
  96. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llamacpp/api.py +0 -0
  97. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llamacpp/settings.py +0 -0
  98. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
  99. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
  100. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
  101. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
  102. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
  103. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
  104. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
  105. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
  106. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
  107. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/lmstudio/api.py +0 -0
  108. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/lmstudio/settings.py +0 -0
  109. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/ollama/api.py +0 -0
  110. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/ollama/settings.py +0 -0
  111. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/settings/__init__.py +0 -0
  112. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
  113. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/settings/settings.py +0 -0
  114. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/settings/simple.py +0 -0
  115. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/utils.py +0 -0
  116. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/vllm/api.py +0 -0
  117. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/webui/api.py +0 -0
  118. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/webui/legacy_api.py +0 -0
  119. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/webui/legacy_settings.py +0 -0
  120. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/webui/settings.py +0 -0
  121. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/log.py +0 -0
  122. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/main.py +0 -0
  123. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/offline_memory_agent.py +0 -0
  124. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/openai_backcompat/__init__.py +0 -0
  125. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/openai_backcompat/openai_object.py +0 -0
  126. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/__all__.py +0 -0
  127. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/__init__.py +0 -0
  128. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/agent.py +0 -0
  129. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/agents_tags.py +0 -0
  130. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/base.py +0 -0
  131. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/block.py +0 -0
  132. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/blocks_agents.py +0 -0
  133. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/custom_columns.py +0 -0
  134. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/enums.py +0 -0
  135. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/errors.py +0 -0
  136. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/file.py +0 -0
  137. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/group.py +0 -0
  138. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/groups_agents.py +0 -0
  139. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/identities_agents.py +0 -0
  140. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/identities_blocks.py +0 -0
  141. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/identity.py +0 -0
  142. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/job.py +0 -0
  143. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/job_messages.py +0 -0
  144. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/message.py +0 -0
  145. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/mixins.py +0 -0
  146. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/organization.py +0 -0
  147. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/passage.py +0 -0
  148. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/provider.py +0 -0
  149. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/sandbox_config.py +0 -0
  150. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/source.py +0 -0
  151. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/sources_agents.py +0 -0
  152. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/sqlalchemy_base.py +0 -0
  153. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/sqlite_functions.py +0 -0
  154. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/step.py +0 -0
  155. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/tool.py +0 -0
  156. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/tools_agents.py +0 -0
  157. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/user.py +0 -0
  158. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/__init__.py +0 -0
  159. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/anna_pa.txt +0 -0
  160. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/google_search_persona.txt +0 -0
  161. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/memgpt_doc.txt +0 -0
  162. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/memgpt_starter.txt +0 -0
  163. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/o1_persona.txt +0 -0
  164. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/offline_memory_persona.txt +0 -0
  165. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/sam.txt +0 -0
  166. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/sam_pov.txt +0 -0
  167. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
  168. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/sqldb/test.db +0 -0
  169. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/__init__.py +0 -0
  170. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/gpt_summarize.py +0 -0
  171. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/gpt_system.py +0 -0
  172. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_base.txt +0 -0
  173. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_chat.txt +0 -0
  174. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
  175. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
  176. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_convo_only.txt +0 -0
  177. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_doc.txt +0 -0
  178. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
  179. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
  180. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_memory_only.txt +0 -0
  181. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
  182. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
  183. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
  184. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
  185. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/pytest.ini +0 -0
  186. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/round_robin_multi_agent.py +0 -0
  187. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/agent.py +0 -0
  188. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/block.py +0 -0
  189. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/embedding_config.py +0 -0
  190. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/embedding_config_overrides.py +0 -0
  191. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/enums.py +0 -0
  192. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/environment_variables.py +0 -0
  193. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/file.py +0 -0
  194. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/group.py +0 -0
  195. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/health.py +0 -0
  196. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/identity.py +0 -0
  197. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/job.py +0 -0
  198. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/letta_base.py +0 -0
  199. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/letta_message.py +0 -0
  200. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/letta_message_content.py +0 -0
  201. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/letta_request.py +0 -0
  202. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/letta_response.py +0 -0
  203. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/llm_config.py +0 -0
  204. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/llm_config_overrides.py +0 -0
  205. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/memory.py +0 -0
  206. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/message.py +0 -0
  207. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/openai/chat_completion_request.py +0 -0
  208. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/openai/chat_completion_response.py +0 -0
  209. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/openai/chat_completions.py +0 -0
  210. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/openai/embedding_response.py +0 -0
  211. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/openai/openai.py +0 -0
  212. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/organization.py +0 -0
  213. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/passage.py +0 -0
  214. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/providers.py +0 -0
  215. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/run.py +0 -0
  216. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/sandbox_config.py +0 -0
  217. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/step.py +0 -0
  218. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/tool.py +0 -0
  219. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/tool_rule.py +0 -0
  220. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/usage.py +0 -0
  221. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/user.py +0 -0
  222. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/__init__.py +0 -0
  223. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_agent.py +0 -0
  224. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
  225. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_base.py +0 -0
  226. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_block.py +0 -0
  227. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
  228. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_message.py +0 -0
  229. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_tag.py +0 -0
  230. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_tool.py +0 -0
  231. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/pydantic_agent_schema.py +0 -0
  232. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/__init__.py +0 -0
  233. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/constants.py +0 -0
  234. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/db.py +0 -0
  235. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/generate_openapi_schema.sh +0 -0
  236. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/__init__.py +0 -0
  237. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/auth/__init__.py +0 -0
  238. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/auth/index.py +0 -0
  239. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/auth_token.py +0 -0
  240. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/chat_completions_interface.py +0 -0
  241. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/interface.py +0 -0
  242. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/optimistic_json_parser.py +0 -0
  243. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/__init__.py +0 -0
  244. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
  245. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
  246. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/__init__.py +0 -0
  247. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/agents.py +0 -0
  248. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/blocks.py +0 -0
  249. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/groups.py +0 -0
  250. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/health.py +0 -0
  251. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/identities.py +0 -0
  252. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/jobs.py +0 -0
  253. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/llms.py +0 -0
  254. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/organizations.py +0 -0
  255. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/providers.py +0 -0
  256. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/runs.py +0 -0
  257. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
  258. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/steps.py +0 -0
  259. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/tags.py +0 -0
  260. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/tools.py +0 -0
  261. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/users.py +0 -0
  262. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/voice.py +0 -0
  263. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/static_files.py +0 -0
  264. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/utils.py +0 -0
  265. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/startup.sh +0 -0
  266. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/static_files/assets/index-048c9598.js +0 -0
  267. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/static_files/assets/index-0e31b727.css +0 -0
  268. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/static_files/favicon.ico +0 -0
  269. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/static_files/index.html +0 -0
  270. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
  271. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/utils.py +0 -0
  272. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/ws_api/__init__.py +0 -0
  273. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/ws_api/example_client.py +0 -0
  274. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/ws_api/interface.py +0 -0
  275. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/ws_api/protocol.py +0 -0
  276. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/server/ws_api/server.py +0 -0
  277. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/__init__.py +0 -0
  278. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/agent_manager.py +0 -0
  279. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/block_manager.py +0 -0
  280. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/group_manager.py +0 -0
  281. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/helpers/agent_manager_helper.py +0 -0
  282. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/helpers/tool_execution_helper.py +0 -0
  283. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/identity_manager.py +0 -0
  284. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/job_manager.py +0 -0
  285. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/message_manager.py +0 -0
  286. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/organization_manager.py +0 -0
  287. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/passage_manager.py +0 -0
  288. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/per_agent_lock_manager.py +0 -0
  289. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/provider_manager.py +0 -0
  290. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/sandbox_config_manager.py +0 -0
  291. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/source_manager.py +0 -0
  292. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/step_manager.py +0 -0
  293. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/summarizer/__init__.py +0 -0
  294. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/summarizer/enums.py +0 -0
  295. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/summarizer/summarizer.py +0 -0
  296. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/tool_execution_sandbox.py +0 -0
  297. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/tool_manager.py +0 -0
  298. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/services/user_manager.py +0 -0
  299. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/streaming_interface.py +0 -0
  300. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/streaming_utils.py +0 -0
  301. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/system.py +0 -0
  302. {letta_nightly-0.6.41.dev20250316104011 → letta_nightly-0.6.42.dev20250317175208}/letta/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.6.41.dev20250316104011
3
+ Version: 0.6.42.dev20250317175208
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -3,6 +3,7 @@ from typing import Any, List, Optional
3
3
 
4
4
  import numpy as np
5
5
  import tiktoken
6
+ from openai import OpenAI
6
7
 
7
8
  from letta.constants import EMBEDDING_TO_TOKENIZER_DEFAULT, EMBEDDING_TO_TOKENIZER_MAP, MAX_EMBEDDING_DIM
8
9
  from letta.schemas.embedding_config import EmbeddingConfig
@@ -201,6 +202,21 @@ class GoogleVertexEmbeddings:
201
202
  return response.embeddings[0].embedding
202
203
 
203
204
 
205
+ class OpenAIEmbeddings:
206
+
207
+ def __init__(self, api_key: str, model: str, base_url: str):
208
+ if base_url:
209
+ self.client = OpenAI(api_key=api_key, base_url=base_url)
210
+ else:
211
+ self.client = OpenAI(api_key=api_key)
212
+ self.model = model
213
+
214
+ def get_text_embedding(self, text: str):
215
+ response = self.client.embeddings.create(input=text, model=self.model)
216
+
217
+ return response.data[0].embedding
218
+
219
+
204
220
  def query_embedding(embedding_model, query_text: str):
205
221
  """Generate padded embedding for querying database"""
206
222
  query_vec = embedding_model.get_text_embedding(query_text)
@@ -218,15 +234,9 @@ def embedding_model(config: EmbeddingConfig, user_id: Optional[uuid.UUID] = None
218
234
  from letta.settings import model_settings
219
235
 
220
236
  if endpoint_type == "openai":
221
- from llama_index.embeddings.openai import OpenAIEmbedding
222
-
223
- additional_kwargs = {"user_id": user_id} if user_id else {}
224
- model = OpenAIEmbedding(
225
- api_base=config.embedding_endpoint,
226
- api_key=model_settings.openai_api_key,
227
- additional_kwargs=additional_kwargs,
237
+ return OpenAIEmbeddings(
238
+ api_key=model_settings.openai_api_key, model=config.embedding_model, base_url=model_settings.openai_api_base
228
239
  )
229
- return model
230
240
 
231
241
  elif endpoint_type == "azure":
232
242
  assert all(
@@ -0,0 +1,87 @@
1
+ import asyncio
2
+ from typing import List, Optional, Tuple
3
+
4
+ from mcp import ClientSession, Tool
5
+
6
+ from letta.functions.mcp_client.types import BaseServerConfig
7
+ from letta.log import get_logger
8
+ from letta.settings import tool_settings
9
+
10
+ logger = get_logger(__name__)
11
+
12
+
13
+ class BaseMCPClient:
14
+ def __init__(self, server_config: BaseServerConfig):
15
+ self.server_config = server_config
16
+ self.session: Optional[ClientSession] = None
17
+ self.stdio = None
18
+ self.write = None
19
+ self.initialized = False
20
+ self.loop = asyncio.new_event_loop()
21
+ self.cleanup_funcs = []
22
+
23
+ def connect_to_server(self):
24
+ asyncio.set_event_loop(self.loop)
25
+ success = self._initialize_connection(self.server_config, timeout=tool_settings.mcp_connect_to_server_timeout)
26
+
27
+ if success:
28
+ try:
29
+ self.loop.run_until_complete(
30
+ asyncio.wait_for(self.session.initialize(), timeout=tool_settings.mcp_connect_to_server_timeout)
31
+ )
32
+ self.initialized = True
33
+ except asyncio.TimeoutError:
34
+ raise RuntimeError(
35
+ f"Timed out while initializing session for MCP server {self.server_config.server_name} (timeout={tool_settings.mcp_connect_to_server_timeout}s)."
36
+ )
37
+ else:
38
+ raise RuntimeError(
39
+ f"Connecting to MCP server failed. Please review your server config: {self.server_config.model_dump_json(indent=4)}"
40
+ )
41
+
42
+ def _initialize_connection(self, server_config: BaseServerConfig, timeout: float) -> bool:
43
+ raise NotImplementedError("Subclasses must implement _initialize_connection")
44
+
45
+ def list_tools(self) -> List[Tool]:
46
+ self._check_initialized()
47
+ try:
48
+ response = self.loop.run_until_complete(
49
+ asyncio.wait_for(self.session.list_tools(), timeout=tool_settings.mcp_list_tools_timeout)
50
+ )
51
+ return response.tools
52
+ except asyncio.TimeoutError:
53
+ # Could log, throw a custom exception, etc.
54
+ logger.error(
55
+ f"Timed out while listing tools for MCP server {self.server_config.server_name} (timeout={tool_settings.mcp_list_tools_timeout}s)."
56
+ )
57
+ return []
58
+
59
+ def execute_tool(self, tool_name: str, tool_args: dict) -> Tuple[str, bool]:
60
+ self._check_initialized()
61
+ try:
62
+ result = self.loop.run_until_complete(
63
+ asyncio.wait_for(self.session.call_tool(tool_name, tool_args), timeout=tool_settings.mcp_execute_tool_timeout)
64
+ )
65
+ return str(result.content), result.isError
66
+ except asyncio.TimeoutError:
67
+ logger.error(
68
+ f"Timed out while executing tool '{tool_name}' for MCP server {self.server_config.server_name} (timeout={tool_settings.mcp_execute_tool_timeout}s)."
69
+ )
70
+ return "", True
71
+
72
+ def _check_initialized(self):
73
+ if not self.initialized:
74
+ logger.error("MCPClient has not been initialized")
75
+ raise RuntimeError("MCPClient has not been initialized")
76
+
77
+ def cleanup(self):
78
+ try:
79
+ for cleanup_func in self.cleanup_funcs:
80
+ cleanup_func()
81
+ self.initialized = False
82
+ if not self.loop.is_closed():
83
+ self.loop.close()
84
+ except Exception as e:
85
+ logger.warning(e)
86
+ finally:
87
+ logger.info("Cleaned up MCP clients on shutdown.")
@@ -0,0 +1,33 @@
1
+ import asyncio
2
+
3
+ from mcp import ClientSession
4
+ from mcp.client.sse import sse_client
5
+
6
+ from letta.functions.mcp_client.base_client import BaseMCPClient
7
+ from letta.functions.mcp_client.types import SSEServerConfig
8
+ from letta.log import get_logger
9
+
10
+ # see: https://modelcontextprotocol.io/quickstart/user
11
+ MCP_CONFIG_TOPLEVEL_KEY = "mcpServers"
12
+
13
+ logger = get_logger(__name__)
14
+
15
+
16
+ class SSEMCPClient(BaseMCPClient):
17
+ def _initialize_connection(self, server_config: SSEServerConfig, timeout: float) -> bool:
18
+ try:
19
+ sse_cm = sse_client(url=server_config.server_url)
20
+ sse_transport = self.loop.run_until_complete(asyncio.wait_for(sse_cm.__aenter__(), timeout=timeout))
21
+ self.stdio, self.write = sse_transport
22
+ self.cleanup_funcs.append(lambda: self.loop.run_until_complete(sse_cm.__aexit__(None, None, None)))
23
+
24
+ session_cm = ClientSession(self.stdio, self.write)
25
+ self.session = self.loop.run_until_complete(asyncio.wait_for(session_cm.__aenter__(), timeout=timeout))
26
+ self.cleanup_funcs.append(lambda: self.loop.run_until_complete(session_cm.__aexit__(None, None, None)))
27
+ return True
28
+ except asyncio.TimeoutError:
29
+ logger.error(f"Timed out while establishing SSE connection (timeout={timeout}s).")
30
+ return False
31
+ except Exception:
32
+ logger.exception("Exception occurred while initializing SSE client session.")
33
+ return False
@@ -1,3 +1,4 @@
1
+ import asyncio
1
2
  import sys
2
3
  from contextlib import asynccontextmanager
3
4
 
@@ -16,19 +17,23 @@ logger = get_logger(__name__)
16
17
 
17
18
 
18
19
  class StdioMCPClient(BaseMCPClient):
19
- def _initialize_connection(self, server_config: StdioServerConfig) -> bool:
20
+ def _initialize_connection(self, server_config: StdioServerConfig, timeout: float) -> bool:
20
21
  try:
21
22
  server_params = StdioServerParameters(command=server_config.command, args=server_config.args)
22
23
  stdio_cm = forked_stdio_client(server_params)
23
- stdio_transport = self.loop.run_until_complete(stdio_cm.__aenter__())
24
+ stdio_transport = self.loop.run_until_complete(asyncio.wait_for(stdio_cm.__aenter__(), timeout=timeout))
24
25
  self.stdio, self.write = stdio_transport
25
26
  self.cleanup_funcs.append(lambda: self.loop.run_until_complete(stdio_cm.__aexit__(None, None, None)))
26
27
 
27
28
  session_cm = ClientSession(self.stdio, self.write)
28
- self.session = self.loop.run_until_complete(session_cm.__aenter__())
29
+ self.session = self.loop.run_until_complete(asyncio.wait_for(session_cm.__aenter__(), timeout=timeout))
29
30
  self.cleanup_funcs.append(lambda: self.loop.run_until_complete(session_cm.__aexit__(None, None, None)))
30
31
  return True
32
+ except asyncio.TimeoutError:
33
+ logger.error(f"Timed out while establishing stdio connection (timeout={timeout}s).")
34
+ return False
31
35
  except Exception:
36
+ logger.exception("Exception occurred while initializing stdio client session.")
32
37
  return False
33
38
 
34
39
 
@@ -840,7 +840,7 @@ def anthropic_chat_completions_process_stream(
840
840
  # Create a dummy message for ID/datetime if needed
841
841
  dummy_message = _Message(
842
842
  role=_MessageRole.assistant,
843
- text="",
843
+ content=[],
844
844
  agent_id="",
845
845
  model="",
846
846
  name=None,
@@ -37,7 +37,12 @@ def get_memory_functions(cls: Memory) -> Dict[str, Callable]:
37
37
 
38
38
  def _format_summary_history(message_history: List[Message]):
39
39
  # TODO use existing prompt formatters for this (eg ChatML)
40
- return "\n".join([f"{m.role}: {m.content[0].text}" for m in message_history])
40
+ def get_message_text(content):
41
+ if content and len(content) == 1 and isinstance(content[0], TextContent):
42
+ return content[0].text
43
+ return ""
44
+
45
+ return "\n".join([f"{m.role}: {get_message_text(m.content)}" for m in message_history])
41
46
 
42
47
 
43
48
  def summarize_messages(
@@ -50,7 +50,12 @@ class SourceCreate(BaseSource):
50
50
  # required
51
51
  name: str = Field(..., description="The name of the source.")
52
52
  # TODO: @matt, make this required after shub makes the FE changes
53
- embedding_config: Optional[EmbeddingConfig] = Field(None, description="The embedding configuration used by the source.")
53
+
54
+ embedding: Optional[str] = Field(None, description="The hande for the embedding config used by the source.")
55
+ embedding_chunk_size: Optional[int] = Field(None, description="The chunk size of the embedding.")
56
+
57
+ # TODO: remove (legacy config)
58
+ embedding_config: Optional[EmbeddingConfig] = Field(None, description="(Legacy) The embedding configuration used by the source.")
54
59
 
55
60
  # optional
56
61
  description: Optional[str] = Field(None, description="The description of the source.")
@@ -256,15 +256,15 @@ def create_application() -> "FastAPI":
256
256
  )
257
257
 
258
258
  # Set up OpenTelemetry tracing
259
- endpoint = os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
260
- if endpoint:
261
- print(f"▶ Using OTLP tracing with endpoint: {endpoint}")
259
+ otlp_endpoint = settings.otel_exporter_otlp_endpoint
260
+ if otlp_endpoint:
261
+ print(f"▶ Using OTLP tracing with endpoint: {otlp_endpoint}")
262
262
  env_name_suffix = os.getenv("ENV_NAME")
263
263
  service_name = f"letta-server-{env_name_suffix.lower()}" if env_name_suffix else "letta-server"
264
264
  from letta.tracing import setup_tracing
265
265
 
266
266
  setup_tracing(
267
- endpoint=endpoint,
267
+ endpoint=otlp_endpoint,
268
268
  app=app,
269
269
  service_name=service_name,
270
270
  )
@@ -326,7 +326,7 @@ def start_server(
326
326
  print(f"▶ Server running at: https://{host or 'localhost'}:{port or REST_DEFAULT_PORT}")
327
327
  print(f"▶ View using ADE at: https://app.letta.com/development-servers/local/dashboard\n")
328
328
  uvicorn.run(
329
- app,
329
+ "letta.server.rest_api.app:app",
330
330
  host=host or "localhost",
331
331
  port=port or REST_DEFAULT_PORT,
332
332
  workers=settings.uvicorn_workers,
@@ -345,7 +345,7 @@ def start_server(
345
345
  print(f"▶ View using ADE at: https://app.letta.com/development-servers/local/dashboard\n")
346
346
 
347
347
  uvicorn.run(
348
- app,
348
+ "letta.server.rest_api.app:app",
349
349
  host=host or "localhost",
350
350
  port=port or REST_DEFAULT_PORT,
351
351
  workers=settings.uvicorn_workers,
@@ -76,8 +76,20 @@ def create_source(
76
76
  Create a new data source.
77
77
  """
78
78
  actor = server.user_manager.get_user_or_default(user_id=actor_id)
79
- source = Source(**source_create.model_dump())
80
-
79
+ if not source_create.embedding_config:
80
+ if not source_create.embedding:
81
+ # TODO: modify error type
82
+ raise ValueError("Must specify either embedding or embedding_config in request")
83
+ source_create.embedding_config = server.get_embedding_config_from_handle(
84
+ handle=source_create.embedding,
85
+ embedding_chunk_size=source_create.embedding_chunk_size or constants.DEFAULT_EMBEDDING_CHUNK_SIZE,
86
+ )
87
+ source = Source(
88
+ name=source_create.name,
89
+ embedding_config=source_create.embedding_config,
90
+ description=source_create.description,
91
+ metadata=source_create.metadata,
92
+ )
81
93
  return server.source_manager.create_source(source=source, actor=actor)
82
94
 
83
95
 
@@ -91,6 +103,7 @@ def modify_source(
91
103
  """
92
104
  Update the name or documentation of an existing data source.
93
105
  """
106
+ # TODO: allow updating the handle/embedding config
94
107
  actor = server.user_manager.get_user_or_default(user_id=actor_id)
95
108
  if not server.source_manager.get_source_by_id(source_id=source_id, actor=actor):
96
109
  raise HTTPException(status_code=404, detail=f"Source with id={source_id} does not exist.")
@@ -332,14 +332,14 @@ class SyncServer(Server):
332
332
 
333
333
  for server_name, server_config in mcp_server_configs.items():
334
334
  if server_config.type == MCPServerType.SSE:
335
- self.mcp_clients[server_name] = SSEMCPClient()
335
+ self.mcp_clients[server_name] = SSEMCPClient(server_config)
336
336
  elif server_config.type == MCPServerType.STDIO:
337
- self.mcp_clients[server_name] = StdioMCPClient()
337
+ self.mcp_clients[server_name] = StdioMCPClient(server_config)
338
338
  else:
339
339
  raise ValueError(f"Invalid MCP server config: {server_config}")
340
340
 
341
341
  try:
342
- self.mcp_clients[server_name].connect_to_server(server_config)
342
+ self.mcp_clients[server_name].connect_to_server()
343
343
  except Exception as e:
344
344
  logger.error(e)
345
345
  self.mcp_clients.pop(server_name)
@@ -1266,6 +1266,11 @@ class SyncServer(Server):
1266
1266
  # TODO support both command + SSE servers (via config)
1267
1267
  def get_mcp_servers(self) -> dict[str, Union[SSEServerConfig, StdioServerConfig]]:
1268
1268
  """List the MCP servers in the config (doesn't test that they are actually working)"""
1269
+
1270
+ # TODO implement non-flatfile mechanism
1271
+ if not tool_settings.mcp_read_from_config:
1272
+ raise RuntimeError("MCP config file disabled. Enable it in settings.")
1273
+
1269
1274
  mcp_server_list = {}
1270
1275
 
1271
1276
  # Attempt to read from ~/.letta/mcp_config.json
@@ -1326,13 +1331,18 @@ class SyncServer(Server):
1326
1331
 
1327
1332
  def add_mcp_server_to_config(
1328
1333
  self, server_config: Union[SSEServerConfig, StdioServerConfig], allow_upsert: bool = True
1329
- ) -> dict[str, Union[SSEServerConfig, StdioServerConfig]]:
1334
+ ) -> List[Union[SSEServerConfig, StdioServerConfig]]:
1330
1335
  """Add a new server config to the MCP config file"""
1331
1336
 
1337
+ # TODO implement non-flatfile mechanism
1338
+ if not tool_settings.mcp_read_from_config:
1339
+ raise RuntimeError("MCP config file disabled. Enable it in settings.")
1340
+
1332
1341
  # If the config file doesn't exist, throw an error.
1333
1342
  mcp_config_path = os.path.join(constants.LETTA_DIR, constants.MCP_CONFIG_NAME)
1334
1343
  if not os.path.exists(mcp_config_path):
1335
- raise FileNotFoundError(f"MCP config file not found: {mcp_config_path}")
1344
+ # Create the file if it doesn't exist
1345
+ logger.debug(f"MCP config file not found, creating new file at: {mcp_config_path}")
1336
1346
 
1337
1347
  # If the file does exist, attempt to parse it get calling get_mcp_servers
1338
1348
  try:
@@ -1348,13 +1358,13 @@ class SyncServer(Server):
1348
1358
 
1349
1359
  # Attempt to initialize the connection to the server
1350
1360
  if server_config.type == MCPServerType.SSE:
1351
- new_mcp_client = SSEMCPClient()
1361
+ new_mcp_client = SSEMCPClient(server_config)
1352
1362
  elif server_config.type == MCPServerType.STDIO:
1353
- new_mcp_client = StdioMCPClient()
1363
+ new_mcp_client = StdioMCPClient(server_config)
1354
1364
  else:
1355
1365
  raise ValueError(f"Invalid MCP server config: {server_config}")
1356
1366
  try:
1357
- new_mcp_client.connect_to_server(server_config)
1367
+ new_mcp_client.connect_to_server()
1358
1368
  except:
1359
1369
  logger.exception(f"Failed to connect to MCP server: {server_config.server_name}")
1360
1370
  raise RuntimeError(f"Failed to connect to MCP server: {server_config.server_name}")
@@ -1384,9 +1394,14 @@ class SyncServer(Server):
1384
1394
  def delete_mcp_server_from_config(self, server_name: str) -> dict[str, Union[SSEServerConfig, StdioServerConfig]]:
1385
1395
  """Delete a server config from the MCP config file"""
1386
1396
 
1397
+ # TODO implement non-flatfile mechanism
1398
+ if not tool_settings.mcp_read_from_config:
1399
+ raise RuntimeError("MCP config file disabled. Enable it in settings.")
1400
+
1387
1401
  # If the config file doesn't exist, throw an error.
1388
1402
  mcp_config_path = os.path.join(constants.LETTA_DIR, constants.MCP_CONFIG_NAME)
1389
1403
  if not os.path.exists(mcp_config_path):
1404
+ # If the file doesn't exist, raise an error
1390
1405
  raise FileNotFoundError(f"MCP config file not found: {mcp_config_path}")
1391
1406
 
1392
1407
  # If the file does exist, attempt to parse it get calling get_mcp_servers
@@ -18,6 +18,12 @@ class ToolSettings(BaseSettings):
18
18
  # Local Sandbox configurations
19
19
  local_sandbox_dir: Optional[str] = None
20
20
 
21
+ # MCP settings
22
+ mcp_connect_to_server_timeout: float = 15.0
23
+ mcp_list_tools_timeout: float = 10.0
24
+ mcp_execute_tool_timeout: float = 60.0
25
+ mcp_read_from_config: bool = True # if False, will throw if attempting to read/write from file
26
+
21
27
 
22
28
  class SummarizerSettings(BaseSettings):
23
29
  model_config = SettingsConfigDict(env_prefix="letta_summarizer_", extra="ignore")
@@ -3,16 +3,18 @@ from typing import List, Optional
3
3
  from letta.agent import Agent, AgentState
4
4
  from letta.constants import DEFAULT_MESSAGE_TOOL
5
5
  from letta.functions.function_sets.multi_agent import send_message_to_all_agents_in_group
6
+ from letta.functions.functions import parse_source_code
7
+ from letta.functions.schema_generator import generate_schema
6
8
  from letta.interface import AgentInterface
7
9
  from letta.orm import User
8
10
  from letta.orm.enums import ToolType
9
11
  from letta.schemas.letta_message_content import TextContent
10
12
  from letta.schemas.message import Message, MessageCreate
13
+ from letta.schemas.tool import Tool
11
14
  from letta.schemas.tool_rule import ChildToolRule, InitToolRule, TerminalToolRule
12
15
  from letta.schemas.usage import LettaUsageStatistics
13
16
  from letta.services.agent_manager import AgentManager
14
17
  from letta.services.tool_manager import ToolManager
15
- from tests.helpers.utils import create_tool_from_func
16
18
 
17
19
 
18
20
  class SupervisorMultiAgent(Agent):
@@ -47,7 +49,14 @@ class SupervisorMultiAgent(Agent):
47
49
 
48
50
  # add multi agent tool
49
51
  if self.tool_manager.get_tool_by_name(tool_name="send_message_to_all_agents_in_group", actor=self.user) is None:
50
- multi_agent_tool = create_tool_from_func(send_message_to_all_agents_in_group)
52
+ multi_agent_tool = Tool(
53
+ name=send_message_to_all_agents_in_group.__name__,
54
+ description="",
55
+ source_type="python",
56
+ tags=[],
57
+ source_code=parse_source_code(send_message_to_all_agents_in_group),
58
+ json_schema=generate_schema(send_message_to_all_agents_in_group, None),
59
+ )
51
60
  multi_agent_tool.tool_type = ToolType.LETTA_MULTI_AGENT_CORE
52
61
  multi_agent_tool = self.tool_manager.create_or_update_tool(
53
62
  pydantic_tool=multi_agent_tool,
@@ -90,8 +90,8 @@ async def trace_error_handler(_request: Request, exc: Exception) -> JSONResponse
90
90
  # Add error details to current span
91
91
  span = trace.get_current_span()
92
92
  if span:
93
- span.add_event(
94
- name="exception",
93
+ span.record_exception(
94
+ exc,
95
95
  attributes={
96
96
  "exception.message": error_msg,
97
97
  "exception.type": type(exc).__name__,
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "letta-nightly"
3
- version = "0.6.41.dev20250316104011"
3
+ version = "0.6.42.dev20250317175208"
4
4
  packages = [
5
5
  {include = "letta"},
6
6
  ]
@@ -1,61 +0,0 @@
1
- import asyncio
2
- from typing import List, Optional, Tuple
3
-
4
- from mcp import ClientSession, Tool
5
-
6
- from letta.functions.mcp_client.types import BaseServerConfig
7
- from letta.log import get_logger
8
-
9
- logger = get_logger(__name__)
10
-
11
-
12
- class BaseMCPClient:
13
- def __init__(self):
14
- self.session: Optional[ClientSession] = None
15
- self.stdio = None
16
- self.write = None
17
- self.initialized = False
18
- self.loop = asyncio.new_event_loop()
19
- self.cleanup_funcs = []
20
-
21
- def connect_to_server(self, server_config: BaseServerConfig):
22
- asyncio.set_event_loop(self.loop)
23
- success = self._initialize_connection(server_config)
24
-
25
- if success:
26
- self.loop.run_until_complete(self.session.initialize())
27
- self.initialized = True
28
- else:
29
- raise RuntimeError(
30
- f"Connecting to MCP server failed. Please review your server config: {server_config.model_dump_json(indent=4)}"
31
- )
32
-
33
- def _initialize_connection(self, server_config: BaseServerConfig) -> bool:
34
- raise NotImplementedError("Subclasses must implement _initialize_connection")
35
-
36
- def list_tools(self) -> List[Tool]:
37
- self._check_initialized()
38
- response = self.loop.run_until_complete(self.session.list_tools())
39
- return response.tools
40
-
41
- def execute_tool(self, tool_name: str, tool_args: dict) -> Tuple[str, bool]:
42
- self._check_initialized()
43
- result = self.loop.run_until_complete(self.session.call_tool(tool_name, tool_args))
44
- return str(result.content), result.isError
45
-
46
- def _check_initialized(self):
47
- if not self.initialized:
48
- logger.error("MCPClient has not been initialized")
49
- raise RuntimeError("MCPClient has not been initialized")
50
-
51
- def cleanup(self):
52
- try:
53
- for cleanup_func in self.cleanup_funcs:
54
- cleanup_func()
55
- self.initialized = False
56
- if not self.loop.is_closed():
57
- self.loop.close()
58
- except Exception as e:
59
- logger.warning(e)
60
- finally:
61
- logger.info("Cleaned up MCP clients on shutdown.")
@@ -1,21 +0,0 @@
1
- from mcp import ClientSession
2
- from mcp.client.sse import sse_client
3
-
4
- from letta.functions.mcp_client.base_client import BaseMCPClient
5
- from letta.functions.mcp_client.types import SSEServerConfig
6
-
7
- # see: https://modelcontextprotocol.io/quickstart/user
8
- MCP_CONFIG_TOPLEVEL_KEY = "mcpServers"
9
-
10
-
11
- class SSEMCPClient(BaseMCPClient):
12
- def _initialize_connection(self, server_config: SSEServerConfig) -> bool:
13
- sse_cm = sse_client(url=server_config.server_url)
14
- sse_transport = self.loop.run_until_complete(sse_cm.__aenter__())
15
- self.stdio, self.write = sse_transport
16
- self.cleanup_funcs.append(lambda: self.loop.run_until_complete(sse_cm.__aexit__(None, None, None)))
17
-
18
- session_cm = ClientSession(self.stdio, self.write)
19
- self.session = self.loop.run_until_complete(session_cm.__aenter__())
20
- self.cleanup_funcs.append(lambda: self.loop.run_until_complete(session_cm.__aexit__(None, None, None)))
21
- return True