letta-nightly 0.6.41.dev20250317104157__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.
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/PKG-INFO +1 -1
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/embeddings.py +18 -8
- letta_nightly-0.6.42.dev20250317175208/letta/functions/mcp_client/base_client.py +87 -0
- letta_nightly-0.6.42.dev20250317175208/letta/functions/mcp_client/sse_client.py +33 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/mcp_client/stdio_client.py +8 -3
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/anthropic.py +1 -1
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/memory.py +6 -1
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/source.py +6 -1
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/app.py +6 -6
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/sources.py +15 -2
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/server.py +23 -8
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/settings.py +6 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/supervisor_multi_agent.py +11 -2
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/tracing.py +2 -2
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/pyproject.toml +1 -1
- letta_nightly-0.6.41.dev20250317104157/letta/functions/mcp_client/base_client.py +0 -61
- letta_nightly-0.6.41.dev20250317104157/letta/functions/mcp_client/sse_client.py +0 -21
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/LICENSE +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/README.md +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/__main__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/agents/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/agents/base_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/agents/ephemeral_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/agents/low_latency_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/benchmark/benchmark.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/benchmark/constants.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/cli/cli.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/cli/cli_config.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/cli/cli_load.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/client/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/client/client.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/client/streaming.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/client/utils.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/config.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/constants.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/data_sources/connectors.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/data_sources/connectors_helper.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/dynamic_multi_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/errors.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/ast_parsers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/function_sets/base.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/function_sets/extras.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/function_sets/multi_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/functions.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/helpers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/mcp_client/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/mcp_client/types.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/functions/schema_generator.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/composio_helpers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/converters.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/datetime_helpers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/json_helpers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/tool_execution_helper.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/helpers/tool_rule_solver.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/humans/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/humans/examples/basic.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/humans/examples/cs_phd.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/interfaces/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/interfaces/utils.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/aws_bedrock.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/azure_openai.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/azure_openai_constants.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/cohere.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/deepseek.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/google_ai.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/google_ai_client.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/google_constants.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/google_vertex.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/google_vertex_client.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/helpers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/llm_api_tools.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/llm_client.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/llm_client_base.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/mistral.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/llm_api/openai.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/README.md +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/chat_completion_proxy.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/constants.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/function_parser.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/grammars/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/grammars/json.gbnf +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/json_parser.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/koboldcpp/api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/koboldcpp/settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llamacpp/api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llamacpp/settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/lmstudio/api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/lmstudio/settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/ollama/api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/ollama/settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/settings/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/settings/settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/settings/simple.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/utils.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/vllm/api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/webui/api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/webui/legacy_api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/webui/legacy_settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/local_llm/webui/settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/log.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/main.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/offline_memory_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/openai_backcompat/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/openai_backcompat/openai_object.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/__all__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/agents_tags.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/base.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/block.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/blocks_agents.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/custom_columns.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/enums.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/errors.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/file.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/group.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/groups_agents.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/identities_agents.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/identities_blocks.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/identity.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/job.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/job_messages.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/message.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/mixins.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/organization.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/passage.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/provider.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/sandbox_config.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/source.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/sources_agents.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/sqlalchemy_base.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/sqlite_functions.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/step.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/tool.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/tools_agents.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/orm/user.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/anna_pa.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/google_search_persona.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/memgpt_doc.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/memgpt_starter.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/o1_persona.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/offline_memory_persona.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/sam.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/sam_pov.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/personas/examples/sqldb/test.db +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/gpt_summarize.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/gpt_system.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_base.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_chat.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_convo_only.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_doc.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_memory_only.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/pytest.ini +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/round_robin_multi_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/block.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/embedding_config.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/embedding_config_overrides.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/enums.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/environment_variables.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/file.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/group.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/health.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/identity.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/job.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/letta_base.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/letta_message.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/letta_message_content.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/letta_request.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/letta_response.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/llm_config.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/llm_config_overrides.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/memory.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/message.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/openai/chat_completion_request.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/openai/chat_completion_response.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/openai/chat_completions.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/openai/embedding_response.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/openai/openai.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/organization.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/passage.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/providers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/run.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/sandbox_config.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/step.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/tool.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/tool_rule.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/usage.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/schemas/user.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_base.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_block.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_message.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_tag.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/marshmallow_tool.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/serialize_schemas/pydantic_agent_schema.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/constants.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/db.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/generate_openapi_schema.sh +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/auth/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/auth/index.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/auth_token.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/chat_completions_interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/optimistic_json_parser.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/agents.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/blocks.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/groups.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/health.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/identities.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/jobs.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/llms.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/organizations.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/providers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/runs.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/steps.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/tags.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/tools.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/users.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/routers/v1/voice.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/static_files.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/rest_api/utils.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/startup.sh +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/static_files/assets/index-048c9598.js +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/static_files/assets/index-0e31b727.css +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/static_files/favicon.ico +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/static_files/index.html +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/utils.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/ws_api/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/ws_api/example_client.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/ws_api/interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/ws_api/protocol.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/server/ws_api/server.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/agent_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/block_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/group_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/helpers/agent_manager_helper.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/helpers/tool_execution_helper.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/identity_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/job_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/message_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/organization_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/passage_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/per_agent_lock_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/provider_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/sandbox_config_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/source_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/step_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/summarizer/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/summarizer/enums.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/summarizer/summarizer.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/tool_execution_sandbox.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/tool_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/services/user_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/streaming_interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/streaming_utils.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/system.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/utils.py +0 -0
|
@@ -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
|
-
|
|
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
|
|
{letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/memory.py
RENAMED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
260
|
-
if
|
|
261
|
-
print(f"▶ Using OTLP tracing with 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=
|
|
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
|
-
|
|
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(
|
|
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
|
-
) ->
|
|
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
|
-
|
|
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(
|
|
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
|
{letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/settings.py
RENAMED
|
@@ -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 =
|
|
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,
|
{letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/tracing.py
RENAMED
|
@@ -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.
|
|
94
|
-
|
|
93
|
+
span.record_exception(
|
|
94
|
+
exc,
|
|
95
95
|
attributes={
|
|
96
96
|
"exception.message": error_msg,
|
|
97
97
|
"exception.type": type(exc).__name__,
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
{letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/__init__.py
RENAMED
|
File without changes
|
{letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/__main__.py
RENAMED
|
File without changes
|
{letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/agent.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/cli/cli.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/config.py
RENAMED
|
File without changes
|
{letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/constants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.42.dev20250317175208}/letta/errors.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|