letta-nightly 0.8.16.dev20250721104533__tar.gz → 0.8.17.dev20250721222456__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.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/PKG-INFO +1 -1
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/__init__.py +1 -1
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/letta_message.py +3 -3
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/message.py +9 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/db.py +34 -9
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/streaming_response.py +1 -8
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/utils.py +4 -4
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/agent_file_manager.py +113 -44
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/source_manager.py +117 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_executor/builtin_tool_executor.py +13 -5
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_manager.py +50 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/settings.py +1 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/pyproject.toml +1 -1
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/LICENSE +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/README.md +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/agents/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/agents/base_agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/agents/ephemeral_agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/agents/ephemeral_summary_agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/agents/exceptions.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/agents/helpers.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/agents/letta_agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/agents/letta_agent_batch.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/agents/voice_agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/agents/voice_sleeptime_agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/cli/cli.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/cli/cli_load.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/client/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/client/client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/client/streaming.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/client/utils.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/config.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/constants.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/data_sources/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/data_sources/connectors.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/data_sources/connectors_helper.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/data_sources/redis_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/embeddings.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/errors.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/ast_parsers.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/async_composio_toolset.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/composio_helpers.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/function_sets/base.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/function_sets/builtin.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/function_sets/extras.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/function_sets/files.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/function_sets/multi_agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/function_sets/voice.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/functions.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/helpers.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/interface.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/mcp_client/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/mcp_client/base_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/mcp_client/exceptions.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/mcp_client/sse_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/mcp_client/stdio_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/mcp_client/types.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/prompts.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/schema_generator.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/functions/types.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/groups/dynamic_multi_agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/groups/helpers.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/groups/round_robin_multi_agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/groups/sleeptime_multi_agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/groups/sleeptime_multi_agent_v2.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/groups/supervisor_multi_agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/helpers/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/helpers/composio_helpers.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/helpers/converters.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/helpers/datetime_helpers.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/helpers/decorators.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/helpers/json_helpers.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/helpers/message_helper.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/helpers/pinecone_utils.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/helpers/singleton.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/helpers/tool_execution_helper.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/helpers/tool_rule_solver.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/humans/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/humans/examples/basic.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/humans/examples/cs_phd.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/interface.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/interfaces/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/interfaces/anthropic_streaming_interface.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/interfaces/openai_streaming_interface.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/interfaces/utils.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/jobs/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/jobs/helpers.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/jobs/llm_batch_job_polling.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/jobs/scheduler.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/jobs/types.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/anthropic.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/anthropic_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/aws_bedrock.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/azure_openai.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/azure_openai_constants.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/bedrock_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/cohere.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/deepseek.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/google_ai_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/google_constants.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/google_vertex_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/helpers.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/llm_api_tools.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/llm_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/llm_client_base.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/mistral.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/openai.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/llm_api/openai_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/README.md +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/chat_completion_proxy.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/constants.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/function_parser.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/grammars/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/grammars/json.gbnf +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/json_parser.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/koboldcpp/api.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/koboldcpp/settings.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/llamacpp/api.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/llamacpp/settings.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/lmstudio/api.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/lmstudio/settings.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/ollama/api.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/ollama/settings.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/settings/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/settings/settings.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/settings/simple.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/utils.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/vllm/api.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/webui/api.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/webui/legacy_api.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/webui/legacy_settings.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/local_llm/webui/settings.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/log.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/main.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/memory.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/openai_backcompat/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/openai_backcompat/openai_object.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/__all__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/agents_tags.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/base.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/block.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/block_history.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/blocks_agents.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/custom_columns.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/enums.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/errors.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/file.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/files_agents.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/group.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/groups_agents.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/groups_blocks.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/identities_agents.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/identities_blocks.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/identity.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/job.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/job_messages.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/llm_batch_items.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/llm_batch_job.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/mcp_server.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/message.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/mixins.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/organization.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/passage.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/provider.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/provider_trace.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/sandbox_config.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/source.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/sources_agents.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/sqlalchemy_base.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/sqlite_functions.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/step.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/tool.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/tools_agents.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/orm/user.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/otel/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/otel/context.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/otel/db_pool_monitoring.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/otel/events.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/otel/metric_registry.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/otel/metrics.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/otel/resource.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/otel/sqlalchemy_instrumentation.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/otel/sqlalchemy_instrumentation_integration.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/otel/tracing.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/personas/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/personas/examples/anna_pa.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/personas/examples/google_search_persona.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/personas/examples/memgpt_doc.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/personas/examples/memgpt_starter.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/personas/examples/o1_persona.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/personas/examples/sam.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/personas/examples/sam_pov.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/personas/examples/sleeptime_doc_persona.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/personas/examples/sleeptime_memory_persona.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/personas/examples/sqldb/test.db +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/personas/examples/voice_memory_persona.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/plugins/README.md +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/plugins/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/plugins/defaults.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/plugins/plugins.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/gpt_summarize.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/gpt_system.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_base.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_chat.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_convo_only.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_doc.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_memory_only.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_sleeptime_chat.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/memgpt_v2_chat.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/react.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/sleeptime.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/sleeptime_doc_ingest.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/sleeptime_v2.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/summary_system_prompt.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/voice_chat.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/voice_sleeptime.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/prompts/system/workflow.txt +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/pytest.ini +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/agent_file.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/block.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/embedding_config.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/embedding_config_overrides.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/enums.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/environment_variables.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/file.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/group.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/health.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/identity.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/job.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/letta_base.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/letta_message_content.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/letta_request.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/letta_response.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/letta_stop_reason.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/llm_batch_job.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/llm_config.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/llm_config_overrides.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/mcp.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/memory.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/openai/chat_completion_request.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/openai/chat_completion_response.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/openai/chat_completions.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/openai/embedding_response.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/openai/openai.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/organization.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/passage.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/pip_requirement.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/provider_trace.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/providers.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/response_format.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/run.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/sandbox_config.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/source.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/source_metadata.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/step.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/tool.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/tool_execution_result.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/tool_rule.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/usage.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/schemas/user.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/serialize_schemas/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/serialize_schemas/marshmallow_agent.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/serialize_schemas/marshmallow_base.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/serialize_schemas/marshmallow_block.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/serialize_schemas/marshmallow_message.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/serialize_schemas/marshmallow_tag.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/serialize_schemas/marshmallow_tool.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/serialize_schemas/pydantic_agent_schema.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/constants.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/generate_openapi_schema.sh +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/app.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/auth/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/auth/index.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/auth_token.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/chat_completions_interface.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/interface.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/json_parser.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/agents.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/blocks.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/embeddings.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/groups.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/health.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/identities.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/jobs.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/llms.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/messages.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/organizations.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/providers.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/runs.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/sources.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/steps.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/tags.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/telemetry.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/tools.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/users.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/routers/v1/voice.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/rest_api/static_files.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/server.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/startup.sh +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/static_files/assets/index-048c9598.js +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/static_files/assets/index-0e31b727.css +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/static_files/favicon.ico +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/static_files/index.html +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/utils.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/ws_api/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/ws_api/example_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/ws_api/interface.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/ws_api/protocol.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/ws_api/server.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/agent_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/block_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/context_window_calculator/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/context_window_calculator/context_window_calculator.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/context_window_calculator/token_counter.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/chunker/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/chunker/line_chunker.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/chunker/llama_index_chunker.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/embedder/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/embedder/base_embedder.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/embedder/openai_embedder.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/embedder/pinecone_embedder.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/file_processor.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/file_types.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/parser/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/parser/base_parser.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/parser/mistral_parser.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/file_processor/types.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/files_agents_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/group_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/helpers/agent_manager_helper.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/helpers/tool_execution_helper.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/helpers/tool_parser_helper.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/identity_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/job_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/llm_batch_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/mcp/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/mcp/base_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/mcp/sse_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/mcp/stdio_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/mcp/streamable_http_client.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/mcp/types.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/mcp_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/message_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/organization_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/passage_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/per_agent_lock_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/provider_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/sandbox_config_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/step_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/summarizer/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/summarizer/enums.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/summarizer/summarizer.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/telemetry_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_executor/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_executor/composio_tool_executor.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_executor/core_tool_executor.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_executor/files_tool_executor.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_executor/mcp_tool_executor.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_executor/multi_agent_tool_executor.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_executor/tool_execution_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_executor/tool_execution_sandbox.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_executor/tool_executor.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_executor/tool_executor_base.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_sandbox/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_sandbox/base.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_sandbox/e2b_sandbox.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/tool_sandbox/local_sandbox.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/services/user_manager.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/streaming_interface.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/streaming_utils.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/system.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/templates/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/templates/sandbox_code_file.py.j2 +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/templates/sandbox_code_file_async.py.j2 +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/templates/summary_request_text.j2 +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/templates/template_helper.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/types/__init__.py +0 -0
- {letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/utils.py +0 -0
@@ -63,13 +63,13 @@ class LettaMessage(BaseModel):
|
|
63
63
|
dt = dt.replace(tzinfo=timezone.utc)
|
64
64
|
return dt.isoformat(timespec="seconds")
|
65
65
|
|
66
|
-
@field_serializer("is_err",
|
67
|
-
def serialize_is_err(self, value: bool | None, _info):
|
66
|
+
@field_serializer("is_err", mode="wrap")
|
67
|
+
def serialize_is_err(self, value: bool | None, handler, _info):
|
68
68
|
"""
|
69
69
|
Only serialize is_err field when it's True (for debugging purposes).
|
70
70
|
When is_err is None or False, this field will be excluded from the JSON output.
|
71
71
|
"""
|
72
|
-
return value if value is True else None
|
72
|
+
return handler(value) if value is True else None
|
73
73
|
|
74
74
|
|
75
75
|
class SystemMessage(LettaMessage):
|
@@ -269,6 +269,7 @@ class Message(BaseMessage):
|
|
269
269
|
otid=otid,
|
270
270
|
sender_id=self.sender_id,
|
271
271
|
step_id=self.step_id,
|
272
|
+
is_err=self.is_err,
|
272
273
|
)
|
273
274
|
)
|
274
275
|
# Otherwise, we may have a list of multiple types
|
@@ -287,6 +288,7 @@ class Message(BaseMessage):
|
|
287
288
|
otid=otid,
|
288
289
|
sender_id=self.sender_id,
|
289
290
|
step_id=self.step_id,
|
291
|
+
is_err=self.is_err,
|
290
292
|
)
|
291
293
|
)
|
292
294
|
elif isinstance(content_part, ReasoningContent):
|
@@ -301,6 +303,7 @@ class Message(BaseMessage):
|
|
301
303
|
name=self.name,
|
302
304
|
otid=otid,
|
303
305
|
step_id=self.step_id,
|
306
|
+
is_err=self.is_err,
|
304
307
|
)
|
305
308
|
)
|
306
309
|
elif isinstance(content_part, RedactedReasoningContent):
|
@@ -315,6 +318,7 @@ class Message(BaseMessage):
|
|
315
318
|
otid=otid,
|
316
319
|
sender_id=self.sender_id,
|
317
320
|
step_id=self.step_id,
|
321
|
+
is_err=self.is_err,
|
318
322
|
)
|
319
323
|
)
|
320
324
|
elif isinstance(content_part, OmittedReasoningContent):
|
@@ -328,6 +332,7 @@ class Message(BaseMessage):
|
|
328
332
|
name=self.name,
|
329
333
|
otid=otid,
|
330
334
|
step_id=self.step_id,
|
335
|
+
is_err=self.is_err,
|
331
336
|
)
|
332
337
|
)
|
333
338
|
else:
|
@@ -355,6 +360,7 @@ class Message(BaseMessage):
|
|
355
360
|
otid=otid,
|
356
361
|
sender_id=self.sender_id,
|
357
362
|
step_id=self.step_id,
|
363
|
+
is_err=self.is_err,
|
358
364
|
)
|
359
365
|
)
|
360
366
|
else:
|
@@ -371,6 +377,7 @@ class Message(BaseMessage):
|
|
371
377
|
otid=otid,
|
372
378
|
sender_id=self.sender_id,
|
373
379
|
step_id=self.step_id,
|
380
|
+
is_err=self.is_err,
|
374
381
|
)
|
375
382
|
)
|
376
383
|
elif self.role == MessageRole.tool:
|
@@ -416,6 +423,7 @@ class Message(BaseMessage):
|
|
416
423
|
otid=Message.generate_otid_from_id(self.id, len(messages)),
|
417
424
|
sender_id=self.sender_id,
|
418
425
|
step_id=self.step_id,
|
426
|
+
is_err=self.is_err,
|
419
427
|
)
|
420
428
|
)
|
421
429
|
elif self.role == MessageRole.user:
|
@@ -437,6 +445,7 @@ class Message(BaseMessage):
|
|
437
445
|
otid=self.otid,
|
438
446
|
sender_id=self.sender_id,
|
439
447
|
step_id=self.step_id,
|
448
|
+
is_err=self.is_err,
|
440
449
|
)
|
441
450
|
)
|
442
451
|
elif self.role == MessageRole.system:
|
{letta_nightly-0.8.16.dev20250721104533 → letta_nightly-0.8.17.dev20250721222456}/letta/server/db.py
RENAMED
@@ -1,3 +1,4 @@
|
|
1
|
+
import asyncio
|
1
2
|
import os
|
2
3
|
import threading
|
3
4
|
import time
|
@@ -116,6 +117,13 @@ class DatabaseRegistry:
|
|
116
117
|
self.config = LettaConfig.load()
|
117
118
|
self.logger = get_logger(__name__)
|
118
119
|
|
120
|
+
if settings.db_max_concurrent_sessions:
|
121
|
+
self._db_semaphore = asyncio.Semaphore(settings.db_max_concurrent_sessions)
|
122
|
+
self.logger.info(f"Initialized database throttling with max {settings.db_max_concurrent_sessions} concurrent sessions")
|
123
|
+
else:
|
124
|
+
self.logger.info("Database throttling is disabled")
|
125
|
+
self._db_semaphore = None
|
126
|
+
|
119
127
|
def initialize_sync(self, force: bool = False) -> None:
|
120
128
|
"""Initialize the synchronous database engine if not already initialized."""
|
121
129
|
with self._lock:
|
@@ -364,16 +372,33 @@ class DatabaseRegistry:
|
|
364
372
|
@trace_method
|
365
373
|
@asynccontextmanager
|
366
374
|
async def async_session(self, name: str = "default") -> AsyncGenerator[AsyncSession, None]:
|
367
|
-
"""Async context manager for database sessions."""
|
368
|
-
|
369
|
-
|
370
|
-
|
375
|
+
"""Async context manager for database sessions with throttling."""
|
376
|
+
if self._db_semaphore:
|
377
|
+
async with self._db_semaphore:
|
378
|
+
session_factory = self.get_async_session_factory(name)
|
379
|
+
if not session_factory:
|
380
|
+
raise ValueError(f"No async session factory found for '{name}' or async database is not configured")
|
381
|
+
|
382
|
+
session = session_factory()
|
383
|
+
try:
|
384
|
+
yield session
|
385
|
+
finally:
|
386
|
+
await session.close()
|
387
|
+
else:
|
388
|
+
session_factory = self.get_async_session_factory(name)
|
389
|
+
if not session_factory:
|
390
|
+
raise ValueError(f"No async session factory found for '{name}' or async database is not configured")
|
371
391
|
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
392
|
+
session = session_factory()
|
393
|
+
try:
|
394
|
+
yield session
|
395
|
+
finally:
|
396
|
+
await session.close()
|
397
|
+
|
398
|
+
@trace_method
|
399
|
+
def session_caller_trace(self, caller_info: str):
|
400
|
+
"""Trace sync db caller information for debugging purposes."""
|
401
|
+
pass # wrapper used for otel tracing only
|
377
402
|
|
378
403
|
@trace_method
|
379
404
|
def session_caller_trace(self, caller_info: str):
|
@@ -125,14 +125,7 @@ class StreamingResponseWithStatusCode(StreamingResponse):
|
|
125
125
|
if not isinstance(content, bytes):
|
126
126
|
content = content.encode(self.charset)
|
127
127
|
more_body = False
|
128
|
-
|
129
|
-
{
|
130
|
-
"type": "http.response.body",
|
131
|
-
"body": content,
|
132
|
-
"more_body": more_body,
|
133
|
-
}
|
134
|
-
)
|
135
|
-
raise Exception(f"An exception occurred mid-stream with status code {status_code}", detail={"content": content})
|
128
|
+
raise Exception(f"An exception occurred mid-stream with status code {status_code} with content {content}")
|
136
129
|
else:
|
137
130
|
content = chunk
|
138
131
|
|
@@ -120,22 +120,22 @@ async def sse_async_generator(
|
|
120
120
|
yield sse_formatter(usage.model_dump(exclude={"steps_messages"}))
|
121
121
|
|
122
122
|
except ContextWindowExceededError as e:
|
123
|
-
|
123
|
+
capture_sentry_exception(e)
|
124
124
|
logger.error(f"ContextWindowExceededError error: {e}")
|
125
125
|
yield sse_formatter({"error": f"Stream failed: {e}", "code": str(e.code.value) if e.code else None})
|
126
126
|
|
127
127
|
except RateLimitExceededError as e:
|
128
|
-
|
128
|
+
capture_sentry_exception(e)
|
129
129
|
logger.error(f"RateLimitExceededError error: {e}")
|
130
130
|
yield sse_formatter({"error": f"Stream failed: {e}", "code": str(e.code.value) if e.code else None})
|
131
131
|
|
132
132
|
except Exception as e:
|
133
|
-
|
133
|
+
capture_sentry_exception(e)
|
134
134
|
logger.error(f"Caught unexpected Exception: {e}")
|
135
135
|
yield sse_formatter({"error": "Stream failed (internal error occurred)"})
|
136
136
|
|
137
137
|
except Exception as e:
|
138
|
-
|
138
|
+
capture_sentry_exception(e)
|
139
139
|
logger.error(f"Caught unexpected Exception: {e}")
|
140
140
|
yield sse_formatter({"error": "Stream failed (decoder encountered an error)"})
|
141
141
|
|
@@ -149,7 +149,7 @@ class AgentFileManager:
|
|
149
149
|
return sorted(unique_blocks.values(), key=lambda x: x.label)
|
150
150
|
|
151
151
|
async def _extract_unique_sources_and_files_from_agents(
|
152
|
-
self, agent_states: List[AgentState], actor: User
|
152
|
+
self, agent_states: List[AgentState], actor: User, files_agents_cache: dict = None
|
153
153
|
) -> tuple[List[Source], List[FileMetadata]]:
|
154
154
|
"""Extract unique sources and files from agent states using bulk operations"""
|
155
155
|
|
@@ -160,6 +160,10 @@ class AgentFileManager:
|
|
160
160
|
files_agents = await self.file_agent_manager.list_files_for_agent(
|
161
161
|
agent_id=agent_state.id, actor=actor, is_open_only=False, return_as_blocks=False
|
162
162
|
)
|
163
|
+
# cache the results for reuse during conversion
|
164
|
+
if files_agents_cache is not None:
|
165
|
+
files_agents_cache[agent_state.id] = files_agents
|
166
|
+
|
163
167
|
for file_agent in files_agents:
|
164
168
|
all_source_ids.add(file_agent.source_id)
|
165
169
|
all_file_ids.add(file_agent.file_id)
|
@@ -168,13 +172,18 @@ class AgentFileManager:
|
|
168
172
|
|
169
173
|
return sources, files
|
170
174
|
|
171
|
-
async def _convert_agent_state_to_schema(self, agent_state: AgentState, actor: User) -> AgentSchema:
|
175
|
+
async def _convert_agent_state_to_schema(self, agent_state: AgentState, actor: User, files_agents_cache: dict = None) -> AgentSchema:
|
172
176
|
"""Convert AgentState to AgentSchema with ID remapping"""
|
173
177
|
|
174
178
|
agent_file_id = self._map_db_to_file_id(agent_state.id, AgentSchema.__id_prefix__)
|
175
|
-
|
176
|
-
|
177
|
-
|
179
|
+
|
180
|
+
# use cached file-agent data if available, otherwise fetch
|
181
|
+
if files_agents_cache is not None and agent_state.id in files_agents_cache:
|
182
|
+
files_agents = files_agents_cache[agent_state.id]
|
183
|
+
else:
|
184
|
+
files_agents = await self.file_agent_manager.list_files_for_agent(
|
185
|
+
agent_id=agent_state.id, actor=actor, is_open_only=False, return_as_blocks=False
|
186
|
+
)
|
178
187
|
agent_schema = await AgentSchema.from_agent_state(
|
179
188
|
agent_state, message_manager=self.message_manager, files_agents=files_agents, actor=actor
|
180
189
|
)
|
@@ -264,15 +273,21 @@ class AgentFileManager:
|
|
264
273
|
missing_ids = [agent_id for agent_id in agent_ids if agent_id not in found_ids]
|
265
274
|
raise AgentFileExportError(f"The following agent IDs were not found: {missing_ids}")
|
266
275
|
|
276
|
+
# cache for file-agent relationships to avoid duplicate queries
|
277
|
+
files_agents_cache = {} # Maps agent_id to list of file_agent relationships
|
278
|
+
|
267
279
|
# Extract unique entities across all agents
|
268
280
|
tool_set = self._extract_unique_tools(agent_states)
|
269
281
|
block_set = self._extract_unique_blocks(agent_states)
|
270
282
|
|
271
|
-
# Extract sources and files from agent states BEFORE conversion
|
272
|
-
source_set, file_set = await self._extract_unique_sources_and_files_from_agents(agent_states, actor)
|
283
|
+
# Extract sources and files from agent states BEFORE conversion (with caching)
|
284
|
+
source_set, file_set = await self._extract_unique_sources_and_files_from_agents(agent_states, actor, files_agents_cache)
|
273
285
|
|
274
|
-
# Convert to schemas with ID remapping
|
275
|
-
agent_schemas = [
|
286
|
+
# Convert to schemas with ID remapping (reusing cached file-agent data)
|
287
|
+
agent_schemas = [
|
288
|
+
await self._convert_agent_state_to_schema(agent_state, actor=actor, files_agents_cache=files_agents_cache)
|
289
|
+
for agent_state in agent_states
|
290
|
+
]
|
276
291
|
tool_schemas = [self._convert_tool_to_schema(tool) for tool in tool_set]
|
277
292
|
block_schemas = [self._convert_block_to_schema(block) for block in block_set]
|
278
293
|
source_schemas = [self._convert_source_to_schema(source) for source in source_set]
|
@@ -332,32 +347,66 @@ class AgentFileManager:
|
|
332
347
|
# Import in dependency order
|
333
348
|
imported_count = 0
|
334
349
|
file_to_db_ids = {} # Maps file IDs to new database IDs
|
335
|
-
|
336
|
-
#
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
350
|
+
# in-memory cache for file metadata to avoid repeated db calls
|
351
|
+
file_metadata_cache = {} # Maps database file ID to FileMetadata
|
352
|
+
|
353
|
+
# 1. Create tools first (no dependencies) - using bulk upsert for efficiency
|
354
|
+
if schema.tools:
|
355
|
+
# convert tool schemas to pydantic tools
|
356
|
+
pydantic_tools = []
|
357
|
+
for tool_schema in schema.tools:
|
358
|
+
pydantic_tools.append(Tool(**tool_schema.model_dump(exclude={"id"})))
|
359
|
+
|
360
|
+
# bulk upsert all tools at once
|
361
|
+
created_tools = await self.tool_manager.bulk_upsert_tools_async(pydantic_tools, actor)
|
362
|
+
|
363
|
+
# map file ids to database ids
|
364
|
+
# note: tools are matched by name during upsert, so we need to match by name here too
|
365
|
+
created_tools_by_name = {tool.name: tool for tool in created_tools}
|
366
|
+
for tool_schema in schema.tools:
|
367
|
+
created_tool = created_tools_by_name.get(tool_schema.name)
|
368
|
+
if created_tool:
|
369
|
+
file_to_db_ids[tool_schema.id] = created_tool.id
|
370
|
+
imported_count += 1
|
371
|
+
else:
|
372
|
+
logger.warning(f"Tool {tool_schema.name} was not created during bulk upsert")
|
373
|
+
|
374
|
+
# 2. Create blocks (no dependencies) - using batch create for efficiency
|
375
|
+
if schema.blocks:
|
376
|
+
# convert block schemas to pydantic blocks (excluding IDs to create new blocks)
|
377
|
+
pydantic_blocks = []
|
378
|
+
for block_schema in schema.blocks:
|
379
|
+
pydantic_blocks.append(Block(**block_schema.model_dump(exclude={"id"})))
|
380
|
+
|
381
|
+
# batch create all blocks at once
|
382
|
+
created_blocks = await self.block_manager.batch_create_blocks_async(pydantic_blocks, actor)
|
383
|
+
|
384
|
+
# map file ids to database ids
|
385
|
+
for block_schema, created_block in zip(schema.blocks, created_blocks):
|
386
|
+
file_to_db_ids[block_schema.id] = created_block.id
|
387
|
+
imported_count += 1
|
388
|
+
|
389
|
+
# 3. Create sources (no dependencies) - using bulk upsert for efficiency
|
390
|
+
if schema.sources:
|
391
|
+
# convert source schemas to pydantic sources
|
392
|
+
pydantic_sources = []
|
393
|
+
for source_schema in schema.sources:
|
394
|
+
source_data = source_schema.model_dump(exclude={"id", "embedding", "embedding_chunk_size"})
|
395
|
+
pydantic_sources.append(Source(**source_data))
|
396
|
+
|
397
|
+
# bulk upsert all sources at once
|
398
|
+
created_sources = await self.source_manager.bulk_upsert_sources_async(pydantic_sources, actor)
|
399
|
+
|
400
|
+
# map file ids to database ids
|
401
|
+
# note: sources are matched by name during upsert, so we need to match by name here too
|
402
|
+
created_sources_by_name = {source.name: source for source in created_sources}
|
403
|
+
for source_schema in schema.sources:
|
404
|
+
created_source = created_sources_by_name.get(source_schema.name)
|
405
|
+
if created_source:
|
406
|
+
file_to_db_ids[source_schema.id] = created_source.id
|
407
|
+
imported_count += 1
|
408
|
+
else:
|
409
|
+
logger.warning(f"Source {source_schema.name} was not created during bulk upsert")
|
361
410
|
|
362
411
|
# 4. Create files (depends on sources)
|
363
412
|
for file_schema in schema.files:
|
@@ -383,8 +432,10 @@ class AgentFileManager:
|
|
383
432
|
file_db_id = file_to_db_ids[file_schema.id]
|
384
433
|
source_db_id = file_to_db_ids[file_schema.source_id]
|
385
434
|
|
386
|
-
# Get the created file metadata
|
387
|
-
|
435
|
+
# Get the created file metadata (with caching)
|
436
|
+
if file_db_id not in file_metadata_cache:
|
437
|
+
file_metadata_cache[file_db_id] = await self.file_manager.get_file_by_id(file_db_id, actor)
|
438
|
+
file_metadata = file_metadata_cache[file_db_id]
|
388
439
|
|
389
440
|
# Save the db call of fetching content again
|
390
441
|
file_metadata.content = file_schema.content
|
@@ -447,7 +498,11 @@ class AgentFileManager:
|
|
447
498
|
|
448
499
|
for file_agent_schema in agent_schema.files_agents:
|
449
500
|
file_db_id = file_to_db_ids[file_agent_schema.file_id]
|
450
|
-
|
501
|
+
|
502
|
+
# Use cached file metadata if available
|
503
|
+
if file_db_id not in file_metadata_cache:
|
504
|
+
file_metadata_cache[file_db_id] = await self.file_manager.get_file_by_id(file_db_id, actor)
|
505
|
+
file_metadata = file_metadata_cache[file_db_id]
|
451
506
|
files_for_agent.append(file_metadata)
|
452
507
|
|
453
508
|
if file_agent_schema.visible_content:
|
@@ -530,9 +585,16 @@ class AgentFileManager:
|
|
530
585
|
entity_ids = [entity.id for entity in entities]
|
531
586
|
|
532
587
|
# Check for duplicates within this entity type
|
533
|
-
|
534
|
-
|
535
|
-
|
588
|
+
seen = set()
|
589
|
+
duplicates = set()
|
590
|
+
for entity_id in entity_ids:
|
591
|
+
if entity_id in seen:
|
592
|
+
duplicates.add(entity_id)
|
593
|
+
else:
|
594
|
+
seen.add(entity_id)
|
595
|
+
|
596
|
+
if duplicates:
|
597
|
+
errors.append(f"Duplicate {entity_type} IDs found: {duplicates}")
|
536
598
|
|
537
599
|
# Check for duplicates across all entity types
|
538
600
|
for entity_id in entity_ids:
|
@@ -545,9 +607,16 @@ class AgentFileManager:
|
|
545
607
|
message_ids = [msg.id for msg in agent.messages]
|
546
608
|
|
547
609
|
# Check for duplicates within agent messages
|
548
|
-
|
549
|
-
|
550
|
-
|
610
|
+
seen = set()
|
611
|
+
duplicates = set()
|
612
|
+
for message_id in message_ids:
|
613
|
+
if message_id in seen:
|
614
|
+
duplicates.add(message_id)
|
615
|
+
else:
|
616
|
+
seen.add(message_id)
|
617
|
+
|
618
|
+
if duplicates:
|
619
|
+
errors.append(f"Duplicate message IDs in agent {agent.id}: {duplicates}")
|
551
620
|
|
552
621
|
# Check for duplicates across all entity types
|
553
622
|
for message_id in message_ids:
|
@@ -58,6 +58,123 @@ class SourceManager:
|
|
58
58
|
await source.create_async(session, actor=actor)
|
59
59
|
return source.to_pydantic()
|
60
60
|
|
61
|
+
@enforce_types
|
62
|
+
@trace_method
|
63
|
+
async def bulk_upsert_sources_async(self, pydantic_sources: List[PydanticSource], actor: PydanticUser) -> List[PydanticSource]:
|
64
|
+
"""
|
65
|
+
Bulk create or update multiple sources in a single database transaction.
|
66
|
+
|
67
|
+
Uses optimized PostgreSQL bulk upsert when available, falls back to individual
|
68
|
+
upserts for SQLite. This is much more efficient than calling create_source
|
69
|
+
in a loop.
|
70
|
+
|
71
|
+
IMPORTANT BEHAVIOR NOTES:
|
72
|
+
- Sources are matched by (name, organization_id) unique constraint, NOT by ID
|
73
|
+
- If a source with the same name already exists for the organization, it will be updated
|
74
|
+
regardless of any ID provided in the input source
|
75
|
+
- The existing source's ID is preserved during updates
|
76
|
+
- If you provide a source with an explicit ID but a name that matches an existing source,
|
77
|
+
the existing source will be updated and the provided ID will be ignored
|
78
|
+
- This matches the behavior of create_source which also checks by ID first
|
79
|
+
|
80
|
+
PostgreSQL optimization:
|
81
|
+
- Uses native ON CONFLICT (name, organization_id) DO UPDATE for atomic upserts
|
82
|
+
- All sources are processed in a single SQL statement for maximum efficiency
|
83
|
+
|
84
|
+
SQLite fallback:
|
85
|
+
- Falls back to individual create_source calls
|
86
|
+
- Still benefits from batched transaction handling
|
87
|
+
|
88
|
+
Args:
|
89
|
+
pydantic_sources: List of sources to create or update
|
90
|
+
actor: User performing the action
|
91
|
+
|
92
|
+
Returns:
|
93
|
+
List of created/updated sources
|
94
|
+
"""
|
95
|
+
if not pydantic_sources:
|
96
|
+
return []
|
97
|
+
|
98
|
+
from letta.settings import settings
|
99
|
+
|
100
|
+
if settings.letta_pg_uri_no_default:
|
101
|
+
# use optimized postgresql bulk upsert
|
102
|
+
async with db_registry.async_session() as session:
|
103
|
+
return await self._bulk_upsert_postgresql(session, pydantic_sources, actor)
|
104
|
+
else:
|
105
|
+
# fallback to individual upserts for sqlite
|
106
|
+
return await self._upsert_sources_individually(pydantic_sources, actor)
|
107
|
+
|
108
|
+
@trace_method
|
109
|
+
async def _bulk_upsert_postgresql(self, session, source_data_list: List[PydanticSource], actor: PydanticUser) -> List[PydanticSource]:
|
110
|
+
"""Hyper-optimized PostgreSQL bulk upsert using ON CONFLICT DO UPDATE."""
|
111
|
+
from sqlalchemy import func, select
|
112
|
+
from sqlalchemy.dialects.postgresql import insert
|
113
|
+
|
114
|
+
# prepare data for bulk insert
|
115
|
+
table = SourceModel.__table__
|
116
|
+
valid_columns = {col.name for col in table.columns}
|
117
|
+
|
118
|
+
insert_data = []
|
119
|
+
for source in source_data_list:
|
120
|
+
source_dict = source.model_dump(to_orm=True)
|
121
|
+
# set created/updated by fields
|
122
|
+
|
123
|
+
if actor:
|
124
|
+
source_dict["_created_by_id"] = actor.id
|
125
|
+
source_dict["_last_updated_by_id"] = actor.id
|
126
|
+
source_dict["organization_id"] = actor.organization_id
|
127
|
+
|
128
|
+
# filter to only include columns that exist in the table
|
129
|
+
filtered_dict = {k: v for k, v in source_dict.items() if k in valid_columns}
|
130
|
+
insert_data.append(filtered_dict)
|
131
|
+
|
132
|
+
# use postgresql's native bulk upsert
|
133
|
+
stmt = insert(table).values(insert_data)
|
134
|
+
|
135
|
+
# on conflict, update all columns except id, created_at, and _created_by_id
|
136
|
+
excluded = stmt.excluded
|
137
|
+
update_dict = {}
|
138
|
+
for col in table.columns:
|
139
|
+
if col.name not in ("id", "created_at", "_created_by_id"):
|
140
|
+
if col.name == "updated_at":
|
141
|
+
update_dict[col.name] = func.now()
|
142
|
+
else:
|
143
|
+
update_dict[col.name] = excluded[col.name]
|
144
|
+
|
145
|
+
upsert_stmt = stmt.on_conflict_do_update(index_elements=["name", "organization_id"], set_=update_dict)
|
146
|
+
|
147
|
+
await session.execute(upsert_stmt)
|
148
|
+
await session.commit()
|
149
|
+
|
150
|
+
# fetch results
|
151
|
+
source_names = [source.name for source in source_data_list]
|
152
|
+
result_query = select(SourceModel).where(
|
153
|
+
SourceModel.name.in_(source_names), SourceModel.organization_id == actor.organization_id, SourceModel.is_deleted == False
|
154
|
+
)
|
155
|
+
result = await session.execute(result_query)
|
156
|
+
return [source.to_pydantic() for source in result.scalars()]
|
157
|
+
|
158
|
+
@trace_method
|
159
|
+
async def _upsert_sources_individually(self, source_data_list: List[PydanticSource], actor: PydanticUser) -> List[PydanticSource]:
|
160
|
+
"""Fallback to individual upserts for SQLite."""
|
161
|
+
sources = []
|
162
|
+
for source in source_data_list:
|
163
|
+
# try to get existing source by name
|
164
|
+
existing_source = await self.get_source_by_name(source.name, actor)
|
165
|
+
if existing_source:
|
166
|
+
# update existing source
|
167
|
+
from letta.schemas.source import SourceUpdate
|
168
|
+
|
169
|
+
update_data = source.model_dump(exclude={"id"}, exclude_none=True)
|
170
|
+
updated_source = await self.update_source(existing_source.id, SourceUpdate(**update_data), actor)
|
171
|
+
sources.append(updated_source)
|
172
|
+
else:
|
173
|
+
# create new source
|
174
|
+
created_source = await self.create_source(source, actor)
|
175
|
+
sources.append(created_source)
|
176
|
+
return sources
|
177
|
+
|
61
178
|
@enforce_types
|
62
179
|
@trace_method
|
63
180
|
async def update_source(self, source_id: str, source_update: SourceUpdate, actor: PydanticUser) -> PydanticSource:
|
@@ -176,7 +176,9 @@ class LettaBuiltinToolExecutor(ToolExecutor):
|
|
176
176
|
app = AsyncFirecrawlApp(api_key=firecrawl_api_key)
|
177
177
|
|
178
178
|
# Process all search tasks in parallel
|
179
|
-
search_task_coroutines = [
|
179
|
+
search_task_coroutines = [
|
180
|
+
self._process_single_search_task(app, task, limit, return_raw, api_key_source, agent_state) for task in search_tasks
|
181
|
+
]
|
180
182
|
|
181
183
|
# Execute all searches concurrently
|
182
184
|
search_results = await asyncio.gather(*search_task_coroutines, return_exceptions=True)
|
@@ -205,7 +207,7 @@ class LettaBuiltinToolExecutor(ToolExecutor):
|
|
205
207
|
|
206
208
|
@trace_method
|
207
209
|
async def _process_single_search_task(
|
208
|
-
self, app: "AsyncFirecrawlApp", task: SearchTask, limit: int, return_raw: bool, api_key_source: str
|
210
|
+
self, app: "AsyncFirecrawlApp", task: SearchTask, limit: int, return_raw: bool, api_key_source: str, agent_state: "AgentState"
|
209
211
|
) -> Dict[str, Any]:
|
210
212
|
"""Process a single search task."""
|
211
213
|
from firecrawl import ScrapeOptions
|
@@ -246,7 +248,9 @@ class LettaBuiltinToolExecutor(ToolExecutor):
|
|
246
248
|
for result in search_result.get("data"):
|
247
249
|
if result.get("markdown"):
|
248
250
|
# Create async task for OpenAI analysis
|
249
|
-
analysis_task = self._analyze_document_with_openai(
|
251
|
+
analysis_task = self._analyze_document_with_openai(
|
252
|
+
client, result["markdown"], task.query, task.question, agent_state
|
253
|
+
)
|
250
254
|
analysis_tasks.append(analysis_task)
|
251
255
|
results_with_markdown.append(result)
|
252
256
|
else:
|
@@ -300,7 +304,9 @@ class LettaBuiltinToolExecutor(ToolExecutor):
|
|
300
304
|
return {"query": task.query, "question": task.question, "raw_results": search_result}
|
301
305
|
|
302
306
|
@trace_method
|
303
|
-
async def _analyze_document_with_openai(
|
307
|
+
async def _analyze_document_with_openai(
|
308
|
+
self, client, markdown_content: str, query: str, question: str, agent_state: "AgentState"
|
309
|
+
) -> Optional[DocumentAnalysis]:
|
304
310
|
"""Use OpenAI to analyze a document and extract relevant passages using line numbers."""
|
305
311
|
original_length = len(markdown_content)
|
306
312
|
|
@@ -324,7 +330,9 @@ class LettaBuiltinToolExecutor(ToolExecutor):
|
|
324
330
|
# Time the OpenAI request
|
325
331
|
start_time = time.time()
|
326
332
|
|
327
|
-
|
333
|
+
# Check agent state env vars first, then fall back to os.getenv
|
334
|
+
agent_state_tool_env_vars = agent_state.get_agent_env_vars_as_dict()
|
335
|
+
model = agent_state_tool_env_vars.get(WEB_SEARCH_MODEL_ENV_VAR_NAME) or WEB_SEARCH_MODEL_ENV_VAR_DEFAULT_VALUE
|
328
336
|
logger.info(f"Using model {model} for web search result parsing")
|
329
337
|
response = await client.beta.chat.completions.parse(
|
330
338
|
model=model,
|