letta-nightly 0.6.42.dev20250317175208__tar.gz → 0.6.43.dev20250318012126__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.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/PKG-INFO +2 -2
  2. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/__init__.py +1 -1
  3. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/agent.py +11 -3
  4. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/helpers/converters.py +17 -5
  5. letta_nightly-0.6.43.dev20250318012126/letta/helpers/tool_rule_solver.py +129 -0
  6. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/sqlalchemy_base.py +7 -4
  7. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/tool.py +1 -0
  8. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/enums.py +1 -5
  9. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/message.py +6 -0
  10. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/tool.py +1 -4
  11. letta_nightly-0.6.43.dev20250318012126/letta/schemas/tool_rule.py +133 -0
  12. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/pydantic_agent_schema.py +3 -2
  13. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/app.py +1 -1
  14. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/tools.py +1 -1
  15. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/server.py +10 -3
  16. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/tool_manager.py +7 -3
  17. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/settings.py +1 -0
  18. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/tracing.py +10 -0
  19. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/pyproject.toml +3 -3
  20. letta_nightly-0.6.42.dev20250317175208/letta/helpers/tool_rule_solver.py +0 -149
  21. letta_nightly-0.6.42.dev20250317175208/letta/schemas/tool_rule.py +0 -62
  22. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/LICENSE +0 -0
  23. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/README.md +0 -0
  24. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/__main__.py +0 -0
  25. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/agents/__init__.py +0 -0
  26. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/agents/base_agent.py +0 -0
  27. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/agents/ephemeral_agent.py +0 -0
  28. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/agents/low_latency_agent.py +0 -0
  29. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/benchmark/benchmark.py +0 -0
  30. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/benchmark/constants.py +0 -0
  31. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/cli/cli.py +0 -0
  32. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/cli/cli_config.py +0 -0
  33. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/cli/cli_load.py +0 -0
  34. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/client/__init__.py +0 -0
  35. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/client/client.py +0 -0
  36. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/client/streaming.py +0 -0
  37. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/client/utils.py +0 -0
  38. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/config.py +0 -0
  39. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/constants.py +0 -0
  40. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/data_sources/connectors.py +0 -0
  41. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/data_sources/connectors_helper.py +0 -0
  42. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/dynamic_multi_agent.py +0 -0
  43. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/embeddings.py +0 -0
  44. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/errors.py +0 -0
  45. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/__init__.py +0 -0
  46. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/ast_parsers.py +0 -0
  47. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/function_sets/base.py +0 -0
  48. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/function_sets/extras.py +0 -0
  49. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/function_sets/multi_agent.py +0 -0
  50. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/functions.py +0 -0
  51. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/helpers.py +0 -0
  52. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/interface.py +0 -0
  53. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/mcp_client/__init__.py +0 -0
  54. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/mcp_client/base_client.py +0 -0
  55. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/mcp_client/sse_client.py +0 -0
  56. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/mcp_client/stdio_client.py +0 -0
  57. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/mcp_client/types.py +0 -0
  58. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/schema_generator.py +0 -0
  59. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/helpers/__init__.py +0 -0
  60. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/helpers/composio_helpers.py +0 -0
  61. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/helpers/datetime_helpers.py +0 -0
  62. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/helpers/json_helpers.py +0 -0
  63. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/helpers/tool_execution_helper.py +0 -0
  64. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/humans/__init__.py +0 -0
  65. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/humans/examples/basic.txt +0 -0
  66. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/humans/examples/cs_phd.txt +0 -0
  67. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/interface.py +0 -0
  68. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/interfaces/__init__.py +0 -0
  69. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
  70. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/interfaces/utils.py +0 -0
  71. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/__init__.py +0 -0
  72. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/anthropic.py +0 -0
  73. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/aws_bedrock.py +0 -0
  74. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/azure_openai.py +0 -0
  75. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/azure_openai_constants.py +0 -0
  76. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/cohere.py +0 -0
  77. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/deepseek.py +0 -0
  78. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/google_ai.py +0 -0
  79. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/google_ai_client.py +0 -0
  80. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/google_constants.py +0 -0
  81. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/google_vertex.py +0 -0
  82. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/google_vertex_client.py +0 -0
  83. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/helpers.py +0 -0
  84. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/llm_api_tools.py +0 -0
  85. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/llm_client.py +0 -0
  86. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/llm_client_base.py +0 -0
  87. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/mistral.py +0 -0
  88. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/openai.py +0 -0
  89. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/README.md +0 -0
  90. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/__init__.py +0 -0
  91. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/chat_completion_proxy.py +0 -0
  92. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/constants.py +0 -0
  93. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/function_parser.py +0 -0
  94. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/grammars/__init__.py +0 -0
  95. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
  96. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/grammars/json.gbnf +0 -0
  97. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
  98. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/json_parser.py +0 -0
  99. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/koboldcpp/api.py +0 -0
  100. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/koboldcpp/settings.py +0 -0
  101. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llamacpp/api.py +0 -0
  102. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llamacpp/settings.py +0 -0
  103. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
  104. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
  105. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
  106. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
  107. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
  108. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
  109. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
  110. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
  111. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
  112. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/lmstudio/api.py +0 -0
  113. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/lmstudio/settings.py +0 -0
  114. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/ollama/api.py +0 -0
  115. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/ollama/settings.py +0 -0
  116. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/settings/__init__.py +0 -0
  117. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
  118. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/settings/settings.py +0 -0
  119. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/settings/simple.py +0 -0
  120. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/utils.py +0 -0
  121. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/vllm/api.py +0 -0
  122. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/webui/api.py +0 -0
  123. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/webui/legacy_api.py +0 -0
  124. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/webui/legacy_settings.py +0 -0
  125. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/webui/settings.py +0 -0
  126. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/log.py +0 -0
  127. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/main.py +0 -0
  128. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/memory.py +0 -0
  129. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/offline_memory_agent.py +0 -0
  130. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/openai_backcompat/__init__.py +0 -0
  131. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/openai_backcompat/openai_object.py +0 -0
  132. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/__all__.py +0 -0
  133. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/__init__.py +0 -0
  134. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/agent.py +0 -0
  135. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/agents_tags.py +0 -0
  136. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/base.py +0 -0
  137. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/block.py +0 -0
  138. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/blocks_agents.py +0 -0
  139. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/custom_columns.py +0 -0
  140. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/enums.py +0 -0
  141. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/errors.py +0 -0
  142. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/file.py +0 -0
  143. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/group.py +0 -0
  144. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/groups_agents.py +0 -0
  145. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/identities_agents.py +0 -0
  146. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/identities_blocks.py +0 -0
  147. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/identity.py +0 -0
  148. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/job.py +0 -0
  149. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/job_messages.py +0 -0
  150. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/message.py +0 -0
  151. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/mixins.py +0 -0
  152. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/organization.py +0 -0
  153. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/passage.py +0 -0
  154. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/provider.py +0 -0
  155. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/sandbox_config.py +0 -0
  156. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/source.py +0 -0
  157. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/sources_agents.py +0 -0
  158. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/sqlite_functions.py +0 -0
  159. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/step.py +0 -0
  160. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/tools_agents.py +0 -0
  161. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/user.py +0 -0
  162. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/__init__.py +0 -0
  163. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/anna_pa.txt +0 -0
  164. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/google_search_persona.txt +0 -0
  165. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/memgpt_doc.txt +0 -0
  166. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/memgpt_starter.txt +0 -0
  167. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/o1_persona.txt +0 -0
  168. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/offline_memory_persona.txt +0 -0
  169. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/sam.txt +0 -0
  170. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/sam_pov.txt +0 -0
  171. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
  172. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/sqldb/test.db +0 -0
  173. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/__init__.py +0 -0
  174. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/gpt_summarize.py +0 -0
  175. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/gpt_system.py +0 -0
  176. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_base.txt +0 -0
  177. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_chat.txt +0 -0
  178. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
  179. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
  180. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_convo_only.txt +0 -0
  181. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_doc.txt +0 -0
  182. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
  183. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
  184. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_memory_only.txt +0 -0
  185. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
  186. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
  187. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
  188. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
  189. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/pytest.ini +0 -0
  190. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/round_robin_multi_agent.py +0 -0
  191. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/agent.py +0 -0
  192. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/block.py +0 -0
  193. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/embedding_config.py +0 -0
  194. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/embedding_config_overrides.py +0 -0
  195. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/environment_variables.py +0 -0
  196. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/file.py +0 -0
  197. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/group.py +0 -0
  198. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/health.py +0 -0
  199. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/identity.py +0 -0
  200. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/job.py +0 -0
  201. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/letta_base.py +0 -0
  202. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/letta_message.py +0 -0
  203. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/letta_message_content.py +0 -0
  204. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/letta_request.py +0 -0
  205. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/letta_response.py +0 -0
  206. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/llm_config.py +0 -0
  207. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/llm_config_overrides.py +0 -0
  208. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/memory.py +0 -0
  209. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/openai/chat_completion_request.py +0 -0
  210. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/openai/chat_completion_response.py +0 -0
  211. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/openai/chat_completions.py +0 -0
  212. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/openai/embedding_response.py +0 -0
  213. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/openai/openai.py +0 -0
  214. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/organization.py +0 -0
  215. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/passage.py +0 -0
  216. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/providers.py +0 -0
  217. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/run.py +0 -0
  218. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/sandbox_config.py +0 -0
  219. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/source.py +0 -0
  220. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/step.py +0 -0
  221. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/usage.py +0 -0
  222. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/user.py +0 -0
  223. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/__init__.py +0 -0
  224. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_agent.py +0 -0
  225. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
  226. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_base.py +0 -0
  227. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_block.py +0 -0
  228. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
  229. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_message.py +0 -0
  230. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_tag.py +0 -0
  231. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_tool.py +0 -0
  232. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/__init__.py +0 -0
  233. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/constants.py +0 -0
  234. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/db.py +0 -0
  235. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/generate_openapi_schema.sh +0 -0
  236. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/__init__.py +0 -0
  237. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/auth/__init__.py +0 -0
  238. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/auth/index.py +0 -0
  239. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/auth_token.py +0 -0
  240. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/chat_completions_interface.py +0 -0
  241. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/interface.py +0 -0
  242. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/optimistic_json_parser.py +0 -0
  243. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/__init__.py +0 -0
  244. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
  245. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
  246. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/__init__.py +0 -0
  247. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/agents.py +0 -0
  248. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/blocks.py +0 -0
  249. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/groups.py +0 -0
  250. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/health.py +0 -0
  251. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/identities.py +0 -0
  252. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/jobs.py +0 -0
  253. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/llms.py +0 -0
  254. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/organizations.py +0 -0
  255. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/providers.py +0 -0
  256. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/runs.py +0 -0
  257. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
  258. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/sources.py +0 -0
  259. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/steps.py +0 -0
  260. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/tags.py +0 -0
  261. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/users.py +0 -0
  262. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/voice.py +0 -0
  263. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/static_files.py +0 -0
  264. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/utils.py +0 -0
  265. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/startup.sh +0 -0
  266. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/static_files/assets/index-048c9598.js +0 -0
  267. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/static_files/assets/index-0e31b727.css +0 -0
  268. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/static_files/favicon.ico +0 -0
  269. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/static_files/index.html +0 -0
  270. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
  271. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/utils.py +0 -0
  272. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/ws_api/__init__.py +0 -0
  273. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/ws_api/example_client.py +0 -0
  274. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/ws_api/interface.py +0 -0
  275. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/ws_api/protocol.py +0 -0
  276. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/server/ws_api/server.py +0 -0
  277. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/__init__.py +0 -0
  278. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/agent_manager.py +0 -0
  279. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/block_manager.py +0 -0
  280. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/group_manager.py +0 -0
  281. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/helpers/agent_manager_helper.py +0 -0
  282. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/helpers/tool_execution_helper.py +0 -0
  283. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/identity_manager.py +0 -0
  284. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/job_manager.py +0 -0
  285. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/message_manager.py +0 -0
  286. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/organization_manager.py +0 -0
  287. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/passage_manager.py +0 -0
  288. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/per_agent_lock_manager.py +0 -0
  289. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/provider_manager.py +0 -0
  290. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/sandbox_config_manager.py +0 -0
  291. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/source_manager.py +0 -0
  292. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/step_manager.py +0 -0
  293. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/summarizer/__init__.py +0 -0
  294. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/summarizer/enums.py +0 -0
  295. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/summarizer/summarizer.py +0 -0
  296. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/tool_execution_sandbox.py +0 -0
  297. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/services/user_manager.py +0 -0
  298. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/streaming_interface.py +0 -0
  299. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/streaming_utils.py +0 -0
  300. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/supervisor_multi_agent.py +0 -0
  301. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/system.py +0 -0
  302. {letta_nightly-0.6.42.dev20250317175208 → letta_nightly-0.6.43.dev20250318012126}/letta/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: letta-nightly
3
- Version: 0.6.42.dev20250317175208
3
+ Version: 0.6.43.dev20250318012126
4
4
  Summary: Create LLM agents with long-term memory and custom tools
5
5
  License: Apache License
6
6
  Author: Letta Team
@@ -31,7 +31,7 @@ Requires-Dist: brotli (>=1.1.0,<2.0.0)
31
31
  Requires-Dist: colorama (>=0.4.6,<0.5.0)
32
32
  Requires-Dist: composio-core (>=0.7.7,<0.8.0)
33
33
  Requires-Dist: composio-langchain (>=0.7.7,<0.8.0)
34
- Requires-Dist: datamodel-code-generator[http] (>=0.25.0,<0.26.0) ; extra == "desktop" or extra == "all"
34
+ Requires-Dist: datamodel-code-generator[http] (>=0.25.0,<0.26.0)
35
35
  Requires-Dist: demjson3 (>=3.0.6,<4.0.0)
36
36
  Requires-Dist: docker (>=7.1.0,<8.0.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
37
37
  Requires-Dist: docstring-parser (>=0.16,<0.17)
@@ -1,4 +1,4 @@
1
- __version__ = "0.6.41"
1
+ __version__ = "0.6.43"
2
2
 
3
3
  # import clients
4
4
  from letta.client.client import LocalClient, RESTClient, create_client
@@ -367,7 +367,10 @@ class Agent(BaseAgent):
367
367
  ) -> ChatCompletionResponse:
368
368
  """Get response from LLM API with robust retry mechanism."""
369
369
  log_telemetry(self.logger, "_get_ai_reply start")
370
- allowed_tool_names = self.tool_rules_solver.get_allowed_tool_names(last_function_response=self.last_function_response)
370
+ available_tools = set([t.name for t in self.agent_state.tools])
371
+ allowed_tool_names = self.tool_rules_solver.get_allowed_tool_names(
372
+ available_tools=available_tools, last_function_response=self.last_function_response
373
+ )
371
374
  agent_state_tool_jsons = [t.json_schema for t in self.agent_state.tools]
372
375
 
373
376
  allowed_functions = (
@@ -377,8 +380,8 @@ class Agent(BaseAgent):
377
380
  )
378
381
 
379
382
  # Don't allow a tool to be called if it failed last time
380
- if last_function_failed and self.tool_rules_solver.last_tool_name:
381
- allowed_functions = [f for f in allowed_functions if f["name"] != self.tool_rules_solver.last_tool_name]
383
+ if last_function_failed and self.tool_rules_solver.tool_call_history:
384
+ allowed_functions = [f for f in allowed_functions if f["name"] != self.tool_rules_solver.tool_call_history[-1]]
382
385
  if not allowed_functions:
383
386
  return None
384
387
 
@@ -773,6 +776,11 @@ class Agent(BaseAgent):
773
776
  **kwargs,
774
777
  ) -> LettaUsageStatistics:
775
778
  """Run Agent.step in a loop, handling chaining via heartbeat requests and function failures"""
779
+ # Defensively clear the tool rules solver history
780
+ # Usually this would be extraneous as Agent loop is re-loaded on every message send
781
+ # But just to be safe
782
+ self.tool_rules_solver.clear_tool_history()
783
+
776
784
  next_input_message = messages if isinstance(messages, list) else [messages]
777
785
  counter = 0
778
786
  total_usage = UsageStatistics()
@@ -20,7 +20,15 @@ from letta.schemas.letta_message_content import (
20
20
  )
21
21
  from letta.schemas.llm_config import LLMConfig
22
22
  from letta.schemas.message import ToolReturn
23
- from letta.schemas.tool_rule import ChildToolRule, ConditionalToolRule, ContinueToolRule, InitToolRule, TerminalToolRule, ToolRule
23
+ from letta.schemas.tool_rule import (
24
+ ChildToolRule,
25
+ ConditionalToolRule,
26
+ ContinueToolRule,
27
+ InitToolRule,
28
+ MaxCountPerStepToolRule,
29
+ TerminalToolRule,
30
+ ToolRule,
31
+ )
24
32
 
25
33
  # --------------------------
26
34
  # LLMConfig Serialization
@@ -85,23 +93,27 @@ def deserialize_tool_rules(data: Optional[List[Dict]]) -> List[Union[ChildToolRu
85
93
  return [deserialize_tool_rule(rule_data) for rule_data in data]
86
94
 
87
95
 
88
- def deserialize_tool_rule(data: Dict) -> Union[ChildToolRule, InitToolRule, TerminalToolRule, ConditionalToolRule, ContinueToolRule]:
96
+ def deserialize_tool_rule(
97
+ data: Dict,
98
+ ) -> Union[ChildToolRule, InitToolRule, TerminalToolRule, ConditionalToolRule, ContinueToolRule, MaxCountPerStepToolRule]:
89
99
  """Deserialize a dictionary to the appropriate ToolRule subclass based on 'type'."""
90
100
  rule_type = ToolRuleType(data.get("type"))
91
101
 
92
- if rule_type == ToolRuleType.run_first or rule_type == ToolRuleType.InitToolRule:
102
+ if rule_type == ToolRuleType.run_first:
93
103
  data["type"] = ToolRuleType.run_first
94
104
  return InitToolRule(**data)
95
- elif rule_type == ToolRuleType.exit_loop or rule_type == ToolRuleType.TerminalToolRule:
105
+ elif rule_type == ToolRuleType.exit_loop:
96
106
  data["type"] = ToolRuleType.exit_loop
97
107
  return TerminalToolRule(**data)
98
- elif rule_type == ToolRuleType.constrain_child_tools or rule_type == ToolRuleType.ToolRule:
108
+ elif rule_type == ToolRuleType.constrain_child_tools:
99
109
  data["type"] = ToolRuleType.constrain_child_tools
100
110
  return ChildToolRule(**data)
101
111
  elif rule_type == ToolRuleType.conditional:
102
112
  return ConditionalToolRule(**data)
103
113
  elif rule_type == ToolRuleType.continue_loop:
104
114
  return ContinueToolRule(**data)
115
+ elif rule_type == ToolRuleType.max_count_per_step:
116
+ return MaxCountPerStepToolRule(**data)
105
117
  raise ValueError(f"Unknown ToolRule type: {rule_type}")
106
118
 
107
119
 
@@ -0,0 +1,129 @@
1
+ from typing import List, Optional, Set, Union
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from letta.schemas.enums import ToolRuleType
6
+ from letta.schemas.tool_rule import (
7
+ BaseToolRule,
8
+ ChildToolRule,
9
+ ConditionalToolRule,
10
+ ContinueToolRule,
11
+ InitToolRule,
12
+ MaxCountPerStepToolRule,
13
+ TerminalToolRule,
14
+ )
15
+
16
+
17
+ class ToolRuleValidationError(Exception):
18
+ """Custom exception for tool rule validation errors in ToolRulesSolver."""
19
+
20
+ def __init__(self, message: str):
21
+ super().__init__(f"ToolRuleValidationError: {message}")
22
+
23
+
24
+ class ToolRulesSolver(BaseModel):
25
+ init_tool_rules: List[InitToolRule] = Field(
26
+ default_factory=list, description="Initial tool rules to be used at the start of tool execution."
27
+ )
28
+ continue_tool_rules: List[ContinueToolRule] = Field(
29
+ default_factory=list, description="Continue tool rules to be used to continue tool execution."
30
+ )
31
+ # TODO: This should be renamed?
32
+ # TODO: These are tools that control the set of allowed functions in the next turn
33
+ child_based_tool_rules: List[Union[ChildToolRule, ConditionalToolRule, MaxCountPerStepToolRule]] = Field(
34
+ default_factory=list, description="Standard tool rules for controlling execution sequence and allowed transitions."
35
+ )
36
+ terminal_tool_rules: List[TerminalToolRule] = Field(
37
+ default_factory=list, description="Terminal tool rules that end the agent loop if called."
38
+ )
39
+ tool_call_history: List[str] = Field(default_factory=list, description="History of tool calls, updated with each tool call.")
40
+
41
+ def __init__(self, tool_rules: List[BaseToolRule], **kwargs):
42
+ super().__init__(**kwargs)
43
+ # Separate the provided tool rules into init, standard, and terminal categories
44
+ for rule in tool_rules:
45
+ if rule.type == ToolRuleType.run_first:
46
+ assert isinstance(rule, InitToolRule)
47
+ self.init_tool_rules.append(rule)
48
+ elif rule.type == ToolRuleType.constrain_child_tools:
49
+ assert isinstance(rule, ChildToolRule)
50
+ self.child_based_tool_rules.append(rule)
51
+ elif rule.type == ToolRuleType.conditional:
52
+ assert isinstance(rule, ConditionalToolRule)
53
+ self.validate_conditional_tool(rule)
54
+ self.child_based_tool_rules.append(rule)
55
+ elif rule.type == ToolRuleType.exit_loop:
56
+ assert isinstance(rule, TerminalToolRule)
57
+ self.terminal_tool_rules.append(rule)
58
+ elif rule.type == ToolRuleType.continue_loop:
59
+ assert isinstance(rule, ContinueToolRule)
60
+ self.continue_tool_rules.append(rule)
61
+ elif rule.type == ToolRuleType.max_count_per_step:
62
+ assert isinstance(rule, MaxCountPerStepToolRule)
63
+ self.child_based_tool_rules.append(rule)
64
+
65
+ def update_tool_usage(self, tool_name: str):
66
+ """Update the internal state to track tool call history."""
67
+ self.tool_call_history.append(tool_name)
68
+
69
+ def clear_tool_history(self):
70
+ """Clear the history of tool calls."""
71
+ self.tool_call_history.clear()
72
+
73
+ def get_allowed_tool_names(
74
+ self, available_tools: Set[str], error_on_empty: bool = False, last_function_response: Optional[str] = None
75
+ ) -> List[str]:
76
+ """Get a list of tool names allowed based on the last tool called."""
77
+ # TODO: This piece of code here is quite ugly and deserves a refactor
78
+ # TODO: There's some weird logic encoded here:
79
+ # TODO: -> This only takes into consideration Init, and a set of Child/Conditional/MaxSteps tool rules
80
+ # TODO: -> Init tool rules outputs are treated additively, Child/Conditional/MaxSteps are intersection based
81
+ # TODO: -> Tool rules should probably be refactored to take in a set of tool names?
82
+ # If no tool has been called yet, return InitToolRules additively
83
+ if not self.tool_call_history:
84
+ if self.init_tool_rules:
85
+ # If there are init tool rules, only return those defined in the init tool rules
86
+ return [rule.tool_name for rule in self.init_tool_rules]
87
+ else:
88
+ # Otherwise, return all the available tools
89
+ return list(available_tools)
90
+ else:
91
+ # Collect valid tools from all child-based rules
92
+ valid_tool_sets = [
93
+ rule.get_valid_tools(self.tool_call_history, available_tools, last_function_response)
94
+ for rule in self.child_based_tool_rules
95
+ ]
96
+
97
+ # Compute intersection of all valid tool sets
98
+ final_allowed_tools = set.intersection(*valid_tool_sets) if valid_tool_sets else available_tools
99
+
100
+ if error_on_empty and not final_allowed_tools:
101
+ raise ValueError("No valid tools found based on tool rules.")
102
+
103
+ return list(final_allowed_tools)
104
+
105
+ def is_terminal_tool(self, tool_name: str) -> bool:
106
+ """Check if the tool is defined as a terminal tool in the terminal tool rules."""
107
+ return any(rule.tool_name == tool_name for rule in self.terminal_tool_rules)
108
+
109
+ def has_children_tools(self, tool_name):
110
+ """Check if the tool has children tools"""
111
+ return any(rule.tool_name == tool_name for rule in self.child_based_tool_rules)
112
+
113
+ def is_continue_tool(self, tool_name):
114
+ """Check if the tool is defined as a continue tool in the tool rules."""
115
+ return any(rule.tool_name == tool_name for rule in self.continue_tool_rules)
116
+
117
+ def validate_conditional_tool(self, rule: ConditionalToolRule):
118
+ """
119
+ Validate a conditional tool rule
120
+
121
+ Args:
122
+ rule (ConditionalToolRule): The conditional tool rule to validate
123
+
124
+ Raises:
125
+ ToolRuleValidationError: If the rule is invalid
126
+ """
127
+ if len(rule.child_output_mapping) == 0:
128
+ raise ToolRuleValidationError("Conditional tool rule must have at least one child tool.")
129
+ return True
@@ -508,10 +508,13 @@ class SqlalchemyBase(CommonSqlalchemyMetaMixins, Base):
508
508
  raise NotImplementedError("Sqlalchemy models must declare a __pydantic_model__ property to be convertable.")
509
509
 
510
510
  def to_pydantic(self) -> "BaseModel":
511
- """converts to the basic pydantic model counterpart"""
512
- model = self.__pydantic_model__.model_validate(self)
513
- if hasattr(self, "metadata_"):
514
- model.metadata = self.metadata_
511
+ """Converts the SQLAlchemy model to its corresponding Pydantic model."""
512
+ model = self.__pydantic_model__.model_validate(self, from_attributes=True)
513
+
514
+ # Explicitly map metadata_ to metadata in Pydantic model
515
+ if hasattr(self, "metadata_") and hasattr(model, "metadata_"):
516
+ setattr(model, "metadata_", self.metadata_) # Ensures correct assignment
517
+
515
518
  return model
516
519
 
517
520
  def pretty_print_columns(self) -> str:
@@ -44,5 +44,6 @@ class Tool(SqlalchemyBase, OrganizationMixin):
44
44
  source_code: Mapped[Optional[str]] = mapped_column(String, doc="The source code of the function.")
45
45
  json_schema: Mapped[Optional[dict]] = mapped_column(JSON, default=lambda: {}, doc="The OAI compatable JSON schema of the function.")
46
46
  args_json_schema: Mapped[Optional[dict]] = mapped_column(JSON, default=lambda: {}, doc="The JSON schema of the function arguments.")
47
+ metadata_: Mapped[Optional[dict]] = mapped_column(JSON, default=lambda: {}, doc="A dictionary of additional metadata for the tool.")
47
48
  # relationships
48
49
  organization: Mapped["Organization"] = relationship("Organization", back_populates="tools", lazy="selectin")
@@ -47,8 +47,4 @@ class ToolRuleType(str, Enum):
47
47
  continue_loop = "continue_loop"
48
48
  conditional = "conditional"
49
49
  constrain_child_tools = "constrain_child_tools"
50
- require_parent_tools = "require_parent_tools"
51
- # Deprecated
52
- InitToolRule = "InitToolRule"
53
- TerminalToolRule = "TerminalToolRule"
54
- ToolRule = "ToolRule"
50
+ max_count_per_step = "max_count_per_step"
@@ -748,6 +748,12 @@ class Message(BaseMessage):
748
748
  else:
749
749
  raise ValueError(self.role)
750
750
 
751
+ # Validate that parts is never empty before returning
752
+ if "parts" not in google_ai_message or not google_ai_message["parts"]:
753
+ # If parts is empty, add a default text part
754
+ google_ai_message["parts"] = [{"text": "empty message"}]
755
+ warnings.warn(f"Empty 'parts' detected in message with role '{self.role}'. Added default empty text part.")
756
+
751
757
  return google_ai_message
752
758
 
753
759
  def to_cohere_dict(
@@ -66,6 +66,7 @@ class Tool(BaseTool):
66
66
  # metadata fields
67
67
  created_by_id: Optional[str] = Field(None, description="The id of the user that made this Tool.")
68
68
  last_updated_by_id: Optional[str] = Field(None, description="The id of the user that made this Tool.")
69
+ metadata_: Optional[Dict[str, Any]] = Field(default_factory=dict, description="A dictionary of additional metadata for the tool.")
69
70
 
70
71
  @model_validator(mode="after")
71
72
  def refresh_source_code_and_json_schema(self):
@@ -137,10 +138,6 @@ class ToolCreate(LettaBase):
137
138
 
138
139
  @classmethod
139
140
  def from_mcp(cls, mcp_server_name: str, mcp_tool: MCPTool) -> "ToolCreate":
140
-
141
- # Get the MCP tool from the MCP server
142
- # NVM
143
-
144
141
  # Pass the MCP tool to the schema generator
145
142
  json_schema = generate_tool_schema_for_mcp(mcp_tool=mcp_tool)
146
143
 
@@ -0,0 +1,133 @@
1
+ import json
2
+ from typing import Annotated, Any, Dict, List, Literal, Optional, Set, Union
3
+
4
+ from pydantic import Field
5
+
6
+ from letta.schemas.enums import ToolRuleType
7
+ from letta.schemas.letta_base import LettaBase
8
+
9
+
10
+ class BaseToolRule(LettaBase):
11
+ __id_prefix__ = "tool_rule"
12
+ tool_name: str = Field(..., description="The name of the tool. Must exist in the database for the user's organization.")
13
+ type: ToolRuleType = Field(..., description="The type of the message.")
14
+
15
+ def get_valid_tools(self, tool_call_history: List[str], available_tools: Set[str], last_function_response: Optional[str]) -> set[str]:
16
+ raise NotImplementedError
17
+
18
+
19
+ class ChildToolRule(BaseToolRule):
20
+ """
21
+ A ToolRule represents a tool that can be invoked by the agent.
22
+ """
23
+
24
+ type: Literal[ToolRuleType.constrain_child_tools] = ToolRuleType.constrain_child_tools
25
+ children: List[str] = Field(..., description="The children tools that can be invoked.")
26
+
27
+ def get_valid_tools(self, tool_call_history: List[str], available_tools: Set[str], last_function_response: Optional[str]) -> Set[str]:
28
+ last_tool = tool_call_history[-1] if tool_call_history else None
29
+ return set(self.children) if last_tool == self.tool_name else available_tools
30
+
31
+
32
+ class ConditionalToolRule(BaseToolRule):
33
+ """
34
+ A ToolRule that conditionally maps to different child tools based on the output.
35
+ """
36
+
37
+ type: Literal[ToolRuleType.conditional] = ToolRuleType.conditional
38
+ default_child: Optional[str] = Field(None, description="The default child tool to be called. If None, any tool can be called.")
39
+ child_output_mapping: Dict[Any, str] = Field(..., description="The output case to check for mapping")
40
+ require_output_mapping: bool = Field(default=False, description="Whether to throw an error when output doesn't match any case")
41
+
42
+ def get_valid_tools(self, tool_call_history: List[str], available_tools: Set[str], last_function_response: Optional[str]) -> Set[str]:
43
+ """Determine valid tools based on function output mapping."""
44
+ if not tool_call_history or tool_call_history[-1] != self.tool_name:
45
+ return available_tools # No constraints if this rule doesn't apply
46
+
47
+ if not last_function_response:
48
+ raise ValueError("Conditional tool rule requires an LLM response to determine which child tool to use")
49
+
50
+ try:
51
+ json_response = json.loads(last_function_response)
52
+ function_output = json_response.get("message", "")
53
+ except json.JSONDecodeError:
54
+ if self.require_output_mapping:
55
+ return set() # Strict mode: Invalid response means no allowed tools
56
+ return {self.default_child} if self.default_child else available_tools
57
+
58
+ # Match function output to a mapped child tool
59
+ for key, tool in self.child_output_mapping.items():
60
+ if self._matches_key(function_output, key):
61
+ return {tool}
62
+
63
+ # If no match found, use default or allow all tools if no default is set
64
+ if self.require_output_mapping:
65
+ return set() # Strict mode: No match means no valid tools
66
+
67
+ return {self.default_child} if self.default_child else available_tools
68
+
69
+ def _matches_key(self, function_output: str, key: Any) -> bool:
70
+ """Helper function to determine if function output matches a mapping key."""
71
+ if isinstance(key, bool):
72
+ return function_output.lower() == "true" if key else function_output.lower() == "false"
73
+ elif isinstance(key, int):
74
+ try:
75
+ return int(function_output) == key
76
+ except ValueError:
77
+ return False
78
+ elif isinstance(key, float):
79
+ try:
80
+ return float(function_output) == key
81
+ except ValueError:
82
+ return False
83
+ else: # Assume string
84
+ return str(function_output) == str(key)
85
+
86
+
87
+ class InitToolRule(BaseToolRule):
88
+ """
89
+ Represents the initial tool rule configuration.
90
+ """
91
+
92
+ type: Literal[ToolRuleType.run_first] = ToolRuleType.run_first
93
+
94
+
95
+ class TerminalToolRule(BaseToolRule):
96
+ """
97
+ Represents a terminal tool rule configuration where if this tool gets called, it must end the agent loop.
98
+ """
99
+
100
+ type: Literal[ToolRuleType.exit_loop] = ToolRuleType.exit_loop
101
+
102
+
103
+ class ContinueToolRule(BaseToolRule):
104
+ """
105
+ Represents a tool rule configuration where if this tool gets called, it must continue the agent loop.
106
+ """
107
+
108
+ type: Literal[ToolRuleType.continue_loop] = ToolRuleType.continue_loop
109
+
110
+
111
+ class MaxCountPerStepToolRule(BaseToolRule):
112
+ """
113
+ Represents a tool rule configuration which constrains the total number of times this tool can be invoked in a single step.
114
+ """
115
+
116
+ type: Literal[ToolRuleType.max_count_per_step] = ToolRuleType.max_count_per_step
117
+ max_count_limit: int = Field(..., description="The max limit for the total number of times this tool can be invoked in a single step.")
118
+
119
+ def get_valid_tools(self, tool_call_history: List[str], available_tools: Set[str], last_function_response: Optional[str]) -> Set[str]:
120
+ """Restricts the tool if it has been called max_count_limit times in the current step."""
121
+ count = tool_call_history.count(self.tool_name)
122
+
123
+ # If the tool has been used max_count_limit times, it is no longer allowed
124
+ if count >= self.max_count_limit:
125
+ return available_tools - {self.tool_name}
126
+
127
+ return available_tools
128
+
129
+
130
+ ToolRule = Annotated[
131
+ Union[ChildToolRule, InitToolRule, TerminalToolRule, ConditionalToolRule, ContinueToolRule, MaxCountPerStepToolRule],
132
+ Field(discriminator="type"),
133
+ ]
@@ -15,7 +15,7 @@ class CoreMemoryBlockSchema(BaseModel):
15
15
  is_template: bool
16
16
  label: str
17
17
  limit: int
18
- metadata_: Dict[str, Any] = Field(default_factory=dict)
18
+ metadata_: Optional[Dict] = None
19
19
  template_name: Optional[str]
20
20
  updated_at: str
21
21
  value: str
@@ -85,6 +85,7 @@ class ToolSchema(BaseModel):
85
85
  tags: List[str]
86
86
  tool_type: str
87
87
  updated_at: str
88
+ metadata_: Optional[Dict] = None
88
89
 
89
90
 
90
91
  class AgentSchema(BaseModel):
@@ -99,7 +100,7 @@ class AgentSchema(BaseModel):
99
100
  llm_config: LLMConfig
100
101
  message_buffer_autoclear: bool
101
102
  messages: List[MessageSchema]
102
- metadata_: Dict
103
+ metadata_: Optional[Dict] = None
103
104
  multi_agent_group: Optional[Any]
104
105
  name: str
105
106
  system: str
@@ -257,7 +257,7 @@ def create_application() -> "FastAPI":
257
257
 
258
258
  # Set up OpenTelemetry tracing
259
259
  otlp_endpoint = settings.otel_exporter_otlp_endpoint
260
- if otlp_endpoint:
260
+ if otlp_endpoint and not settings.disable_tracing:
261
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"
@@ -398,7 +398,7 @@ def add_mcp_tool(
398
398
  )
399
399
 
400
400
  tool_create = ToolCreate.from_mcp(mcp_server_name=mcp_server_name, mcp_tool=mcp_tool)
401
- return server.tool_manager.create_or_update_mcp_tool(tool_create=tool_create, actor=actor)
401
+ return server.tool_manager.create_or_update_mcp_tool(tool_create=tool_create, mcp_server_name=mcp_server_name, actor=actor)
402
402
 
403
403
 
404
404
  @router.put("/mcp/servers", response_model=List[Union[StdioServerConfig, SSEServerConfig]], operation_id="add_mcp_server")
@@ -723,10 +723,17 @@ class SyncServer(Server):
723
723
  assert isinstance(message, MessageCreate)
724
724
 
725
725
  # If wrapping is enabled, wrap with metadata before placing content inside the Message object
726
+ if isinstance(message.content, str):
727
+ message_content = message.content
728
+ elif message.content and len(message.content) > 0 and isinstance(message.content[0], TextContent):
729
+ message_content = message.content[0].text
730
+ else:
731
+ assert message_content is not None, "Message content is empty"
732
+
726
733
  if message.role == MessageRole.user and wrap_user_message:
727
- message.content = system.package_user_message(user_message=message.content)
734
+ message_content = system.package_user_message(user_message=message_content)
728
735
  elif message.role == MessageRole.system and wrap_system_message:
729
- message.content = system.package_system_message(system_message=message.content)
736
+ message_content = system.package_system_message(system_message=message_content)
730
737
  else:
731
738
  raise ValueError(f"Invalid message role: {message.role}")
732
739
 
@@ -735,7 +742,7 @@ class SyncServer(Server):
735
742
  Message(
736
743
  agent_id=agent_id,
737
744
  role=message.role,
738
- content=[TextContent(text=message.content)] if message.content else [],
745
+ content=[TextContent(text=message_content)] if message_content else [],
739
746
  name=message.name,
740
747
  # assigned later?
741
748
  model=None,
@@ -2,7 +2,7 @@ import importlib
2
2
  import warnings
3
3
  from typing import List, Optional
4
4
 
5
- from letta.constants import BASE_FUNCTION_RETURN_CHAR_LIMIT, BASE_MEMORY_TOOLS, BASE_TOOLS, MULTI_AGENT_TOOLS
5
+ from letta.constants import BASE_FUNCTION_RETURN_CHAR_LIMIT, BASE_MEMORY_TOOLS, BASE_TOOLS, MCP_TOOL_TAG_NAME_PREFIX, MULTI_AGENT_TOOLS
6
6
  from letta.functions.functions import derive_openai_json_schema, load_function_set
7
7
  from letta.log import get_logger
8
8
  from letta.orm.enums import ToolType
@@ -57,9 +57,13 @@ class ToolManager:
57
57
  return tool
58
58
 
59
59
  @enforce_types
60
- def create_or_update_mcp_tool(self, tool_create: ToolCreate, actor: PydanticUser) -> PydanticTool:
60
+ def create_or_update_mcp_tool(self, tool_create: ToolCreate, mcp_server_name: str, actor: PydanticUser) -> PydanticTool:
61
+ metadata = {MCP_TOOL_TAG_NAME_PREFIX: {"server_name": mcp_server_name}}
61
62
  return self.create_or_update_tool(
62
- PydanticTool(tool_type=ToolType.EXTERNAL_MCP, name=tool_create.json_schema["name"], **tool_create.model_dump()), actor
63
+ PydanticTool(
64
+ tool_type=ToolType.EXTERNAL_MCP, name=tool_create.json_schema["name"], metadata_=metadata, **tool_create.model_dump()
65
+ ),
66
+ actor,
63
67
  )
64
68
 
65
69
  @enforce_types
@@ -180,6 +180,7 @@ class Settings(BaseSettings):
180
180
  # telemetry logging
181
181
  verbose_telemetry_logging: bool = False
182
182
  otel_exporter_otlp_endpoint: str = "http://localhost:4317"
183
+ disable_tracing: bool = False
183
184
 
184
185
  # uvicorn settings
185
186
  uvicorn_workers: int = 1
@@ -112,6 +112,16 @@ def setup_tracing(
112
112
  global _is_tracing_initialized
113
113
 
114
114
  provider = TracerProvider(resource=Resource.create({"service.name": service_name}))
115
+ import uuid
116
+
117
+ provider = TracerProvider(
118
+ resource=Resource.create(
119
+ {
120
+ "service.name": service_name,
121
+ "device.id": uuid.getnode(), # MAC address as unique device identifier
122
+ }
123
+ )
124
+ )
115
125
  if endpoint:
116
126
  provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint=endpoint)))
117
127
  _is_tracing_initialized = True
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "letta-nightly"
3
- version = "0.6.42.dev20250317175208"
3
+ version = "0.6.43.dev20250318012126"
4
4
  packages = [
5
5
  {include = "letta"},
6
6
  ]
@@ -100,8 +100,8 @@ external-tools = ["docker", "langchain", "wikipedia", "langchain-community"]
100
100
  tests = ["wikipedia"]
101
101
  bedrock = ["boto3"]
102
102
  google = ["google-genai"]
103
- desktop = ["pgvector", "pg8000", "psycopg2-binary", "psycopg2", "pyright", "websockets", "fastapi", "uvicorn", "docker", "langchain", "wikipedia", "langchain-community", "locust", "datamodel-code-generator"]
104
- all = ["pgvector", "pg8000", "psycopg2-binary", "psycopg2", "pytest", "pytest-asyncio", "pexpect", "black", "pre-commit", "pyright", "pytest-order", "autoflake", "isort", "websockets", "fastapi", "uvicorn", "docker", "langchain", "wikipedia", "langchain-community", "locust", "datamodel-code-generator"]
103
+ desktop = ["pgvector", "pg8000", "psycopg2-binary", "psycopg2", "pyright", "websockets", "fastapi", "uvicorn", "docker", "langchain", "wikipedia", "langchain-community", "locust"]
104
+ all = ["pgvector", "pg8000", "psycopg2-binary", "psycopg2", "pytest", "pytest-asyncio", "pexpect", "black", "pre-commit", "pyright", "pytest-order", "autoflake", "isort", "websockets", "fastapi", "uvicorn", "docker", "langchain", "wikipedia", "langchain-community", "locust"]
105
105
 
106
106
  [tool.poetry.group.dev.dependencies]
107
107
  black = "^24.4.2"