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