letta-nightly 0.6.41.dev20250317104157__tar.gz → 0.6.43.dev20250318012126__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of letta-nightly might be problematic. Click here for more details.
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/PKG-INFO +2 -2
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/__init__.py +1 -1
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/agent.py +11 -3
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/embeddings.py +18 -8
- letta_nightly-0.6.43.dev20250318012126/letta/functions/mcp_client/base_client.py +87 -0
- letta_nightly-0.6.43.dev20250318012126/letta/functions/mcp_client/sse_client.py +33 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/mcp_client/stdio_client.py +8 -3
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/helpers/converters.py +17 -5
- letta_nightly-0.6.43.dev20250318012126/letta/helpers/tool_rule_solver.py +129 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/anthropic.py +1 -1
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/memory.py +6 -1
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/sqlalchemy_base.py +7 -4
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/tool.py +1 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/enums.py +1 -5
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/message.py +6 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/source.py +6 -1
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/tool.py +1 -4
- letta_nightly-0.6.43.dev20250318012126/letta/schemas/tool_rule.py +133 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/pydantic_agent_schema.py +3 -2
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/app.py +6 -6
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/sources.py +15 -2
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/tools.py +1 -1
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/server.py +33 -11
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/tool_manager.py +7 -3
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/settings.py +7 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/supervisor_multi_agent.py +11 -2
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/tracing.py +12 -2
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/pyproject.toml +3 -3
- 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/helpers/tool_rule_solver.py +0 -149
- letta_nightly-0.6.41.dev20250317104157/letta/schemas/tool_rule.py +0 -62
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/LICENSE +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/README.md +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/__main__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/agents/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/agents/base_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/agents/ephemeral_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/agents/low_latency_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/benchmark/benchmark.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/benchmark/constants.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/cli/cli.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/cli/cli_config.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/cli/cli_load.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/client/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/client/client.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/client/streaming.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/client/utils.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/config.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/constants.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/data_sources/connectors.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/data_sources/connectors_helper.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/dynamic_multi_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/errors.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/ast_parsers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/function_sets/base.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/function_sets/extras.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/function_sets/multi_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/functions.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/helpers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/mcp_client/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/mcp_client/types.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/functions/schema_generator.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/helpers/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/helpers/composio_helpers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/helpers/datetime_helpers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/helpers/json_helpers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/helpers/tool_execution_helper.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/humans/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/humans/examples/basic.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/humans/examples/cs_phd.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/interfaces/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/interfaces/utils.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/aws_bedrock.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/azure_openai.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/azure_openai_constants.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/cohere.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/deepseek.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/google_ai.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/google_ai_client.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/google_constants.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/google_vertex.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/google_vertex_client.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/helpers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/llm_api_tools.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/llm_client.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/llm_client_base.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/mistral.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/llm_api/openai.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/README.md +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/chat_completion_proxy.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/constants.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/function_parser.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/grammars/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/grammars/json.gbnf +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/json_parser.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/koboldcpp/api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/koboldcpp/settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llamacpp/api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llamacpp/settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/lmstudio/api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/lmstudio/settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/ollama/api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/ollama/settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/settings/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/settings/settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/settings/simple.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/utils.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/vllm/api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/webui/api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/webui/legacy_api.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/webui/legacy_settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/local_llm/webui/settings.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/log.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/main.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/offline_memory_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/openai_backcompat/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/openai_backcompat/openai_object.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/__all__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/agents_tags.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/base.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/block.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/blocks_agents.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/custom_columns.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/enums.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/errors.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/file.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/group.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/groups_agents.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/identities_agents.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/identities_blocks.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/identity.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/job.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/job_messages.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/message.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/mixins.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/organization.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/passage.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/provider.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/sandbox_config.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/source.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/sources_agents.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/sqlite_functions.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/step.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/tools_agents.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/user.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/anna_pa.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/google_search_persona.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/memgpt_doc.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/memgpt_starter.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/o1_persona.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/offline_memory_persona.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/sam.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/sam_pov.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/personas/examples/sqldb/test.db +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/gpt_summarize.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/gpt_system.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_base.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_chat.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_convo_only.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_doc.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_memory_only.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/pytest.ini +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/round_robin_multi_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/block.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/embedding_config.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/embedding_config_overrides.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/environment_variables.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/file.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/group.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/health.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/identity.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/job.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/letta_base.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/letta_message.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/letta_message_content.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/letta_request.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/letta_response.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/llm_config.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/llm_config_overrides.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/memory.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/openai/chat_completion_request.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/openai/chat_completion_response.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/openai/chat_completions.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/openai/embedding_response.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/openai/openai.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/organization.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/passage.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/providers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/run.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/sandbox_config.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/step.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/usage.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/schemas/user.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_agent.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_base.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_block.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_message.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_tag.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/serialize_schemas/marshmallow_tool.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/constants.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/db.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/generate_openapi_schema.sh +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/auth/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/auth/index.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/auth_token.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/chat_completions_interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/optimistic_json_parser.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/agents.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/blocks.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/groups.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/health.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/identities.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/jobs.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/llms.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/organizations.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/providers.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/runs.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/steps.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/tags.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/users.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/routers/v1/voice.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/static_files.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/rest_api/utils.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/startup.sh +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/static_files/assets/index-048c9598.js +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/static_files/assets/index-0e31b727.css +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/static_files/favicon.ico +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/static_files/index.html +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/utils.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/ws_api/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/ws_api/example_client.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/ws_api/interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/ws_api/protocol.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/server/ws_api/server.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/agent_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/block_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/group_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/helpers/agent_manager_helper.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/helpers/tool_execution_helper.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/identity_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/job_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/message_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/organization_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/passage_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/per_agent_lock_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/provider_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/sandbox_config_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/source_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/step_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/summarizer/__init__.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/summarizer/enums.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/summarizer/summarizer.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/tool_execution_sandbox.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/services/user_manager.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/streaming_interface.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/streaming_utils.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/system.py +0 -0
- {letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: letta-nightly
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.43.dev20250318012126
|
|
4
4
|
Summary: Create LLM agents with long-term memory and custom tools
|
|
5
5
|
License: Apache License
|
|
6
6
|
Author: Letta Team
|
|
@@ -31,7 +31,7 @@ Requires-Dist: brotli (>=1.1.0,<2.0.0)
|
|
|
31
31
|
Requires-Dist: colorama (>=0.4.6,<0.5.0)
|
|
32
32
|
Requires-Dist: composio-core (>=0.7.7,<0.8.0)
|
|
33
33
|
Requires-Dist: composio-langchain (>=0.7.7,<0.8.0)
|
|
34
|
-
Requires-Dist: datamodel-code-generator[http] (>=0.25.0,<0.26.0)
|
|
34
|
+
Requires-Dist: datamodel-code-generator[http] (>=0.25.0,<0.26.0)
|
|
35
35
|
Requires-Dist: demjson3 (>=3.0.6,<4.0.0)
|
|
36
36
|
Requires-Dist: docker (>=7.1.0,<8.0.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
|
|
37
37
|
Requires-Dist: docstring-parser (>=0.16,<0.17)
|
{letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/agent.py
RENAMED
|
@@ -367,7 +367,10 @@ class Agent(BaseAgent):
|
|
|
367
367
|
) -> ChatCompletionResponse:
|
|
368
368
|
"""Get response from LLM API with robust retry mechanism."""
|
|
369
369
|
log_telemetry(self.logger, "_get_ai_reply start")
|
|
370
|
-
|
|
370
|
+
available_tools = set([t.name for t in self.agent_state.tools])
|
|
371
|
+
allowed_tool_names = self.tool_rules_solver.get_allowed_tool_names(
|
|
372
|
+
available_tools=available_tools, last_function_response=self.last_function_response
|
|
373
|
+
)
|
|
371
374
|
agent_state_tool_jsons = [t.json_schema for t in self.agent_state.tools]
|
|
372
375
|
|
|
373
376
|
allowed_functions = (
|
|
@@ -377,8 +380,8 @@ class Agent(BaseAgent):
|
|
|
377
380
|
)
|
|
378
381
|
|
|
379
382
|
# Don't allow a tool to be called if it failed last time
|
|
380
|
-
if last_function_failed and self.tool_rules_solver.
|
|
381
|
-
allowed_functions = [f for f in allowed_functions if f["name"] != self.tool_rules_solver.
|
|
383
|
+
if last_function_failed and self.tool_rules_solver.tool_call_history:
|
|
384
|
+
allowed_functions = [f for f in allowed_functions if f["name"] != self.tool_rules_solver.tool_call_history[-1]]
|
|
382
385
|
if not allowed_functions:
|
|
383
386
|
return None
|
|
384
387
|
|
|
@@ -773,6 +776,11 @@ class Agent(BaseAgent):
|
|
|
773
776
|
**kwargs,
|
|
774
777
|
) -> LettaUsageStatistics:
|
|
775
778
|
"""Run Agent.step in a loop, handling chaining via heartbeat requests and function failures"""
|
|
779
|
+
# Defensively clear the tool rules solver history
|
|
780
|
+
# Usually this would be extraneous as Agent loop is re-loaded on every message send
|
|
781
|
+
# But just to be safe
|
|
782
|
+
self.tool_rules_solver.clear_tool_history()
|
|
783
|
+
|
|
776
784
|
next_input_message = messages if isinstance(messages, list) else [messages]
|
|
777
785
|
counter = 0
|
|
778
786
|
total_usage = UsageStatistics()
|
|
@@ -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
|
|
|
@@ -20,7 +20,15 @@ from letta.schemas.letta_message_content import (
|
|
|
20
20
|
)
|
|
21
21
|
from letta.schemas.llm_config import LLMConfig
|
|
22
22
|
from letta.schemas.message import ToolReturn
|
|
23
|
-
from letta.schemas.tool_rule import
|
|
23
|
+
from letta.schemas.tool_rule import (
|
|
24
|
+
ChildToolRule,
|
|
25
|
+
ConditionalToolRule,
|
|
26
|
+
ContinueToolRule,
|
|
27
|
+
InitToolRule,
|
|
28
|
+
MaxCountPerStepToolRule,
|
|
29
|
+
TerminalToolRule,
|
|
30
|
+
ToolRule,
|
|
31
|
+
)
|
|
24
32
|
|
|
25
33
|
# --------------------------
|
|
26
34
|
# LLMConfig Serialization
|
|
@@ -85,23 +93,27 @@ def deserialize_tool_rules(data: Optional[List[Dict]]) -> List[Union[ChildToolRu
|
|
|
85
93
|
return [deserialize_tool_rule(rule_data) for rule_data in data]
|
|
86
94
|
|
|
87
95
|
|
|
88
|
-
def deserialize_tool_rule(
|
|
96
|
+
def deserialize_tool_rule(
|
|
97
|
+
data: Dict,
|
|
98
|
+
) -> Union[ChildToolRule, InitToolRule, TerminalToolRule, ConditionalToolRule, ContinueToolRule, MaxCountPerStepToolRule]:
|
|
89
99
|
"""Deserialize a dictionary to the appropriate ToolRule subclass based on 'type'."""
|
|
90
100
|
rule_type = ToolRuleType(data.get("type"))
|
|
91
101
|
|
|
92
|
-
if rule_type == ToolRuleType.run_first
|
|
102
|
+
if rule_type == ToolRuleType.run_first:
|
|
93
103
|
data["type"] = ToolRuleType.run_first
|
|
94
104
|
return InitToolRule(**data)
|
|
95
|
-
elif rule_type == ToolRuleType.exit_loop
|
|
105
|
+
elif rule_type == ToolRuleType.exit_loop:
|
|
96
106
|
data["type"] = ToolRuleType.exit_loop
|
|
97
107
|
return TerminalToolRule(**data)
|
|
98
|
-
elif rule_type == ToolRuleType.constrain_child_tools
|
|
108
|
+
elif rule_type == ToolRuleType.constrain_child_tools:
|
|
99
109
|
data["type"] = ToolRuleType.constrain_child_tools
|
|
100
110
|
return ChildToolRule(**data)
|
|
101
111
|
elif rule_type == ToolRuleType.conditional:
|
|
102
112
|
return ConditionalToolRule(**data)
|
|
103
113
|
elif rule_type == ToolRuleType.continue_loop:
|
|
104
114
|
return ContinueToolRule(**data)
|
|
115
|
+
elif rule_type == ToolRuleType.max_count_per_step:
|
|
116
|
+
return MaxCountPerStepToolRule(**data)
|
|
105
117
|
raise ValueError(f"Unknown ToolRule type: {rule_type}")
|
|
106
118
|
|
|
107
119
|
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
from typing import List, Optional, Set, Union
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
|
|
5
|
+
from letta.schemas.enums import ToolRuleType
|
|
6
|
+
from letta.schemas.tool_rule import (
|
|
7
|
+
BaseToolRule,
|
|
8
|
+
ChildToolRule,
|
|
9
|
+
ConditionalToolRule,
|
|
10
|
+
ContinueToolRule,
|
|
11
|
+
InitToolRule,
|
|
12
|
+
MaxCountPerStepToolRule,
|
|
13
|
+
TerminalToolRule,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ToolRuleValidationError(Exception):
|
|
18
|
+
"""Custom exception for tool rule validation errors in ToolRulesSolver."""
|
|
19
|
+
|
|
20
|
+
def __init__(self, message: str):
|
|
21
|
+
super().__init__(f"ToolRuleValidationError: {message}")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class ToolRulesSolver(BaseModel):
|
|
25
|
+
init_tool_rules: List[InitToolRule] = Field(
|
|
26
|
+
default_factory=list, description="Initial tool rules to be used at the start of tool execution."
|
|
27
|
+
)
|
|
28
|
+
continue_tool_rules: List[ContinueToolRule] = Field(
|
|
29
|
+
default_factory=list, description="Continue tool rules to be used to continue tool execution."
|
|
30
|
+
)
|
|
31
|
+
# TODO: This should be renamed?
|
|
32
|
+
# TODO: These are tools that control the set of allowed functions in the next turn
|
|
33
|
+
child_based_tool_rules: List[Union[ChildToolRule, ConditionalToolRule, MaxCountPerStepToolRule]] = Field(
|
|
34
|
+
default_factory=list, description="Standard tool rules for controlling execution sequence and allowed transitions."
|
|
35
|
+
)
|
|
36
|
+
terminal_tool_rules: List[TerminalToolRule] = Field(
|
|
37
|
+
default_factory=list, description="Terminal tool rules that end the agent loop if called."
|
|
38
|
+
)
|
|
39
|
+
tool_call_history: List[str] = Field(default_factory=list, description="History of tool calls, updated with each tool call.")
|
|
40
|
+
|
|
41
|
+
def __init__(self, tool_rules: List[BaseToolRule], **kwargs):
|
|
42
|
+
super().__init__(**kwargs)
|
|
43
|
+
# Separate the provided tool rules into init, standard, and terminal categories
|
|
44
|
+
for rule in tool_rules:
|
|
45
|
+
if rule.type == ToolRuleType.run_first:
|
|
46
|
+
assert isinstance(rule, InitToolRule)
|
|
47
|
+
self.init_tool_rules.append(rule)
|
|
48
|
+
elif rule.type == ToolRuleType.constrain_child_tools:
|
|
49
|
+
assert isinstance(rule, ChildToolRule)
|
|
50
|
+
self.child_based_tool_rules.append(rule)
|
|
51
|
+
elif rule.type == ToolRuleType.conditional:
|
|
52
|
+
assert isinstance(rule, ConditionalToolRule)
|
|
53
|
+
self.validate_conditional_tool(rule)
|
|
54
|
+
self.child_based_tool_rules.append(rule)
|
|
55
|
+
elif rule.type == ToolRuleType.exit_loop:
|
|
56
|
+
assert isinstance(rule, TerminalToolRule)
|
|
57
|
+
self.terminal_tool_rules.append(rule)
|
|
58
|
+
elif rule.type == ToolRuleType.continue_loop:
|
|
59
|
+
assert isinstance(rule, ContinueToolRule)
|
|
60
|
+
self.continue_tool_rules.append(rule)
|
|
61
|
+
elif rule.type == ToolRuleType.max_count_per_step:
|
|
62
|
+
assert isinstance(rule, MaxCountPerStepToolRule)
|
|
63
|
+
self.child_based_tool_rules.append(rule)
|
|
64
|
+
|
|
65
|
+
def update_tool_usage(self, tool_name: str):
|
|
66
|
+
"""Update the internal state to track tool call history."""
|
|
67
|
+
self.tool_call_history.append(tool_name)
|
|
68
|
+
|
|
69
|
+
def clear_tool_history(self):
|
|
70
|
+
"""Clear the history of tool calls."""
|
|
71
|
+
self.tool_call_history.clear()
|
|
72
|
+
|
|
73
|
+
def get_allowed_tool_names(
|
|
74
|
+
self, available_tools: Set[str], error_on_empty: bool = False, last_function_response: Optional[str] = None
|
|
75
|
+
) -> List[str]:
|
|
76
|
+
"""Get a list of tool names allowed based on the last tool called."""
|
|
77
|
+
# TODO: This piece of code here is quite ugly and deserves a refactor
|
|
78
|
+
# TODO: There's some weird logic encoded here:
|
|
79
|
+
# TODO: -> This only takes into consideration Init, and a set of Child/Conditional/MaxSteps tool rules
|
|
80
|
+
# TODO: -> Init tool rules outputs are treated additively, Child/Conditional/MaxSteps are intersection based
|
|
81
|
+
# TODO: -> Tool rules should probably be refactored to take in a set of tool names?
|
|
82
|
+
# If no tool has been called yet, return InitToolRules additively
|
|
83
|
+
if not self.tool_call_history:
|
|
84
|
+
if self.init_tool_rules:
|
|
85
|
+
# If there are init tool rules, only return those defined in the init tool rules
|
|
86
|
+
return [rule.tool_name for rule in self.init_tool_rules]
|
|
87
|
+
else:
|
|
88
|
+
# Otherwise, return all the available tools
|
|
89
|
+
return list(available_tools)
|
|
90
|
+
else:
|
|
91
|
+
# Collect valid tools from all child-based rules
|
|
92
|
+
valid_tool_sets = [
|
|
93
|
+
rule.get_valid_tools(self.tool_call_history, available_tools, last_function_response)
|
|
94
|
+
for rule in self.child_based_tool_rules
|
|
95
|
+
]
|
|
96
|
+
|
|
97
|
+
# Compute intersection of all valid tool sets
|
|
98
|
+
final_allowed_tools = set.intersection(*valid_tool_sets) if valid_tool_sets else available_tools
|
|
99
|
+
|
|
100
|
+
if error_on_empty and not final_allowed_tools:
|
|
101
|
+
raise ValueError("No valid tools found based on tool rules.")
|
|
102
|
+
|
|
103
|
+
return list(final_allowed_tools)
|
|
104
|
+
|
|
105
|
+
def is_terminal_tool(self, tool_name: str) -> bool:
|
|
106
|
+
"""Check if the tool is defined as a terminal tool in the terminal tool rules."""
|
|
107
|
+
return any(rule.tool_name == tool_name for rule in self.terminal_tool_rules)
|
|
108
|
+
|
|
109
|
+
def has_children_tools(self, tool_name):
|
|
110
|
+
"""Check if the tool has children tools"""
|
|
111
|
+
return any(rule.tool_name == tool_name for rule in self.child_based_tool_rules)
|
|
112
|
+
|
|
113
|
+
def is_continue_tool(self, tool_name):
|
|
114
|
+
"""Check if the tool is defined as a continue tool in the tool rules."""
|
|
115
|
+
return any(rule.tool_name == tool_name for rule in self.continue_tool_rules)
|
|
116
|
+
|
|
117
|
+
def validate_conditional_tool(self, rule: ConditionalToolRule):
|
|
118
|
+
"""
|
|
119
|
+
Validate a conditional tool rule
|
|
120
|
+
|
|
121
|
+
Args:
|
|
122
|
+
rule (ConditionalToolRule): The conditional tool rule to validate
|
|
123
|
+
|
|
124
|
+
Raises:
|
|
125
|
+
ToolRuleValidationError: If the rule is invalid
|
|
126
|
+
"""
|
|
127
|
+
if len(rule.child_output_mapping) == 0:
|
|
128
|
+
raise ToolRuleValidationError("Conditional tool rule must have at least one child tool.")
|
|
129
|
+
return True
|
{letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/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(
|
|
@@ -508,10 +508,13 @@ class SqlalchemyBase(CommonSqlalchemyMetaMixins, Base):
|
|
|
508
508
|
raise NotImplementedError("Sqlalchemy models must declare a __pydantic_model__ property to be convertable.")
|
|
509
509
|
|
|
510
510
|
def to_pydantic(self) -> "BaseModel":
|
|
511
|
-
"""
|
|
512
|
-
model = self.__pydantic_model__.model_validate(self)
|
|
513
|
-
|
|
514
|
-
|
|
511
|
+
"""Converts the SQLAlchemy model to its corresponding Pydantic model."""
|
|
512
|
+
model = self.__pydantic_model__.model_validate(self, from_attributes=True)
|
|
513
|
+
|
|
514
|
+
# Explicitly map metadata_ to metadata in Pydantic model
|
|
515
|
+
if hasattr(self, "metadata_") and hasattr(model, "metadata_"):
|
|
516
|
+
setattr(model, "metadata_", self.metadata_) # Ensures correct assignment
|
|
517
|
+
|
|
515
518
|
return model
|
|
516
519
|
|
|
517
520
|
def pretty_print_columns(self) -> str:
|
{letta_nightly-0.6.41.dev20250317104157 → letta_nightly-0.6.43.dev20250318012126}/letta/orm/tool.py
RENAMED
|
@@ -44,5 +44,6 @@ class Tool(SqlalchemyBase, OrganizationMixin):
|
|
|
44
44
|
source_code: Mapped[Optional[str]] = mapped_column(String, doc="The source code of the function.")
|
|
45
45
|
json_schema: Mapped[Optional[dict]] = mapped_column(JSON, default=lambda: {}, doc="The OAI compatable JSON schema of the function.")
|
|
46
46
|
args_json_schema: Mapped[Optional[dict]] = mapped_column(JSON, default=lambda: {}, doc="The JSON schema of the function arguments.")
|
|
47
|
+
metadata_: Mapped[Optional[dict]] = mapped_column(JSON, default=lambda: {}, doc="A dictionary of additional metadata for the tool.")
|
|
47
48
|
# relationships
|
|
48
49
|
organization: Mapped["Organization"] = relationship("Organization", back_populates="tools", lazy="selectin")
|
|
@@ -47,8 +47,4 @@ class ToolRuleType(str, Enum):
|
|
|
47
47
|
continue_loop = "continue_loop"
|
|
48
48
|
conditional = "conditional"
|
|
49
49
|
constrain_child_tools = "constrain_child_tools"
|
|
50
|
-
|
|
51
|
-
# Deprecated
|
|
52
|
-
InitToolRule = "InitToolRule"
|
|
53
|
-
TerminalToolRule = "TerminalToolRule"
|
|
54
|
-
ToolRule = "ToolRule"
|
|
50
|
+
max_count_per_step = "max_count_per_step"
|
|
@@ -748,6 +748,12 @@ class Message(BaseMessage):
|
|
|
748
748
|
else:
|
|
749
749
|
raise ValueError(self.role)
|
|
750
750
|
|
|
751
|
+
# Validate that parts is never empty before returning
|
|
752
|
+
if "parts" not in google_ai_message or not google_ai_message["parts"]:
|
|
753
|
+
# If parts is empty, add a default text part
|
|
754
|
+
google_ai_message["parts"] = [{"text": "empty message"}]
|
|
755
|
+
warnings.warn(f"Empty 'parts' detected in message with role '{self.role}'. Added default empty text part.")
|
|
756
|
+
|
|
751
757
|
return google_ai_message
|
|
752
758
|
|
|
753
759
|
def to_cohere_dict(
|
|
@@ -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.")
|
|
@@ -66,6 +66,7 @@ class Tool(BaseTool):
|
|
|
66
66
|
# metadata fields
|
|
67
67
|
created_by_id: Optional[str] = Field(None, description="The id of the user that made this Tool.")
|
|
68
68
|
last_updated_by_id: Optional[str] = Field(None, description="The id of the user that made this Tool.")
|
|
69
|
+
metadata_: Optional[Dict[str, Any]] = Field(default_factory=dict, description="A dictionary of additional metadata for the tool.")
|
|
69
70
|
|
|
70
71
|
@model_validator(mode="after")
|
|
71
72
|
def refresh_source_code_and_json_schema(self):
|
|
@@ -137,10 +138,6 @@ class ToolCreate(LettaBase):
|
|
|
137
138
|
|
|
138
139
|
@classmethod
|
|
139
140
|
def from_mcp(cls, mcp_server_name: str, mcp_tool: MCPTool) -> "ToolCreate":
|
|
140
|
-
|
|
141
|
-
# Get the MCP tool from the MCP server
|
|
142
|
-
# NVM
|
|
143
|
-
|
|
144
141
|
# Pass the MCP tool to the schema generator
|
|
145
142
|
json_schema = generate_tool_schema_for_mcp(mcp_tool=mcp_tool)
|
|
146
143
|
|