letta-nightly 0.8.12.dev20250709104346__tar.gz → 0.8.13.dev20250710230421__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.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/PKG-INFO +4 -4
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/__init__.py +1 -1
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/agents/base_agent.py +25 -6
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/agents/letta_agent.py +34 -8
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/ast_parsers.py +2 -1
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/helpers/json_helpers.py +2 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/helpers/pinecone_utils.py +33 -6
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/jobs/scheduler.py +23 -30
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/otel/metric_registry.py +24 -2
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/enums.py +8 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/tool.py +5 -8
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/app.py +4 -1
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/agents.py +65 -2
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/sources.py +33 -9
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/agent_manager.py +38 -7
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_manager.py +49 -5
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/file_processor.py +5 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/helpers/tool_parser_helper.py +2 -2
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/job_manager.py +35 -20
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_sandbox/local_sandbox.py +6 -3
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/templates/sandbox_code_file.py.j2 +25 -1
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/templates/sandbox_code_file_async.py.j2 +25 -2
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/pyproject.toml +5 -7
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/LICENSE +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/README.md +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/agent.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/agents/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/agents/ephemeral_agent.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/agents/ephemeral_summary_agent.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/agents/exceptions.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/agents/helpers.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/agents/letta_agent_batch.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/agents/voice_agent.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/agents/voice_sleeptime_agent.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/cli/cli.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/cli/cli_load.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/client/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/client/client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/client/streaming.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/client/utils.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/config.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/constants.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/data_sources/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/data_sources/connectors.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/data_sources/connectors_helper.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/data_sources/redis_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/embeddings.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/errors.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/async_composio_toolset.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/composio_helpers.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/function_sets/base.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/function_sets/builtin.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/function_sets/extras.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/function_sets/files.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/function_sets/multi_agent.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/function_sets/voice.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/functions.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/helpers.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/interface.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/mcp_client/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/mcp_client/base_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/mcp_client/exceptions.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/mcp_client/sse_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/mcp_client/stdio_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/mcp_client/types.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/prompts.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/schema_generator.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/functions/types.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/groups/dynamic_multi_agent.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/groups/helpers.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/groups/round_robin_multi_agent.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/groups/sleeptime_multi_agent.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/groups/sleeptime_multi_agent_v2.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/groups/supervisor_multi_agent.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/helpers/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/helpers/composio_helpers.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/helpers/converters.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/helpers/datetime_helpers.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/helpers/decorators.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/helpers/message_helper.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/helpers/singleton.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/helpers/tool_execution_helper.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/helpers/tool_rule_solver.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/humans/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/humans/examples/basic.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/humans/examples/cs_phd.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/interface.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/interfaces/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/interfaces/anthropic_streaming_interface.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/interfaces/openai_streaming_interface.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/interfaces/utils.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/jobs/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/jobs/helpers.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/jobs/llm_batch_job_polling.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/jobs/types.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/anthropic.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/anthropic_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/aws_bedrock.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/azure_openai.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/azure_openai_constants.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/bedrock_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/cohere.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/deepseek.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/google_ai_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/google_constants.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/google_vertex_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/helpers.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/llm_api_tools.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/llm_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/llm_client_base.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/mistral.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/openai.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/llm_api/openai_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/README.md +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/chat_completion_proxy.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/constants.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/function_parser.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/grammars/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/grammars/json.gbnf +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/json_parser.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/koboldcpp/api.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/koboldcpp/settings.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/llamacpp/api.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/llamacpp/settings.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/lmstudio/api.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/lmstudio/settings.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/ollama/api.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/ollama/settings.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/settings/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/settings/settings.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/settings/simple.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/utils.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/vllm/api.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/webui/api.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/webui/legacy_api.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/webui/legacy_settings.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/local_llm/webui/settings.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/log.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/main.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/memory.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/openai_backcompat/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/openai_backcompat/openai_object.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/__all__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/agent.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/agents_tags.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/base.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/block.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/block_history.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/blocks_agents.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/custom_columns.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/enums.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/errors.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/file.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/files_agents.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/group.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/groups_agents.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/groups_blocks.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/identities_agents.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/identities_blocks.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/identity.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/job.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/job_messages.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/llm_batch_items.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/llm_batch_job.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/mcp_server.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/message.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/mixins.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/organization.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/passage.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/provider.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/provider_trace.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/sandbox_config.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/source.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/sources_agents.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/sqlalchemy_base.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/sqlite_functions.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/step.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/tool.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/tools_agents.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/orm/user.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/otel/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/otel/context.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/otel/events.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/otel/metrics.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/otel/resource.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/otel/tracing.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/personas/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/personas/examples/anna_pa.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/personas/examples/google_search_persona.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/personas/examples/memgpt_doc.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/personas/examples/memgpt_starter.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/personas/examples/o1_persona.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/personas/examples/sam.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/personas/examples/sam_pov.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/personas/examples/sleeptime_doc_persona.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/personas/examples/sleeptime_memory_persona.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/personas/examples/sqldb/test.db +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/personas/examples/voice_memory_persona.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/plugins/README.md +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/plugins/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/plugins/defaults.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/plugins/plugins.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/gpt_summarize.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/gpt_system.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_base.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_chat.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_convo_only.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_doc.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_memory_only.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_sleeptime_chat.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/memgpt_v2_chat.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/react.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/sleeptime.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/sleeptime_doc_ingest.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/sleeptime_v2.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/summary_system_prompt.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/voice_chat.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/voice_sleeptime.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/prompts/system/workflow.txt +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/pytest.ini +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/agent.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/block.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/embedding_config.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/embedding_config_overrides.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/environment_variables.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/file.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/group.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/health.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/identity.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/job.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/letta_base.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/letta_message.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/letta_message_content.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/letta_request.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/letta_response.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/letta_stop_reason.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/llm_batch_job.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/llm_config.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/llm_config_overrides.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/mcp.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/memory.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/message.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/openai/chat_completion_request.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/openai/chat_completion_response.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/openai/chat_completions.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/openai/embedding_response.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/openai/openai.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/organization.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/passage.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/pip_requirement.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/provider_trace.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/providers.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/response_format.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/run.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/sandbox_config.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/source.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/source_metadata.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/step.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/tool_execution_result.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/tool_rule.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/usage.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/schemas/user.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/serialize_schemas/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/serialize_schemas/marshmallow_agent.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/serialize_schemas/marshmallow_base.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/serialize_schemas/marshmallow_block.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/serialize_schemas/marshmallow_message.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/serialize_schemas/marshmallow_tag.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/serialize_schemas/marshmallow_tool.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/serialize_schemas/pydantic_agent_schema.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/constants.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/db.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/generate_openapi_schema.sh +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/auth/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/auth/index.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/auth_token.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/chat_completions_interface.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/interface.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/json_parser.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/blocks.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/embeddings.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/groups.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/health.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/identities.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/jobs.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/llms.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/messages.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/organizations.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/providers.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/runs.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/steps.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/tags.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/telemetry.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/tools.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/users.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/routers/v1/voice.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/static_files.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/streaming_response.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/rest_api/utils.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/server.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/startup.sh +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/static_files/assets/index-048c9598.js +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/static_files/assets/index-0e31b727.css +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/static_files/favicon.ico +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/static_files/index.html +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/utils.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/ws_api/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/ws_api/example_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/ws_api/interface.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/ws_api/protocol.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/server/ws_api/server.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/block_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/context_window_calculator/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/context_window_calculator/context_window_calculator.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/context_window_calculator/token_counter.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/chunker/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/chunker/line_chunker.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/chunker/llama_index_chunker.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/embedder/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/embedder/base_embedder.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/embedder/openai_embedder.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/embedder/pinecone_embedder.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/file_types.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/parser/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/parser/base_parser.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/parser/mistral_parser.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/file_processor/types.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/files_agents_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/group_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/helpers/agent_manager_helper.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/helpers/tool_execution_helper.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/identity_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/llm_batch_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/mcp/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/mcp/base_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/mcp/sse_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/mcp/stdio_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/mcp/streamable_http_client.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/mcp/types.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/mcp_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/message_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/organization_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/passage_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/per_agent_lock_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/provider_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/sandbox_config_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/source_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/step_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/summarizer/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/summarizer/enums.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/summarizer/summarizer.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/telemetry_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_executor/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_executor/builtin_tool_executor.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_executor/composio_tool_executor.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_executor/core_tool_executor.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_executor/files_tool_executor.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_executor/mcp_tool_executor.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_executor/multi_agent_tool_executor.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_executor/tool_execution_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_executor/tool_execution_sandbox.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_executor/tool_executor.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_executor/tool_executor_base.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_sandbox/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_sandbox/base.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/tool_sandbox/e2b_sandbox.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/services/user_manager.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/settings.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/streaming_interface.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/streaming_utils.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/system.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/templates/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/templates/summary_request_text.j2 +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/templates/template_helper.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/types/__init__.py +0 -0
- {letta_nightly-0.8.12.dev20250709104346 → letta_nightly-0.8.13.dev20250710230421}/letta/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: letta-nightly
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.13.dev20250710230421
|
|
4
4
|
Summary: Create LLM agents with long-term memory and custom tools
|
|
5
5
|
License: Apache License
|
|
6
6
|
Author: Letta Team
|
|
@@ -19,13 +19,13 @@ Provides-Extra: dev
|
|
|
19
19
|
Provides-Extra: experimental
|
|
20
20
|
Provides-Extra: external-tools
|
|
21
21
|
Provides-Extra: google
|
|
22
|
+
Provides-Extra: pinecone
|
|
22
23
|
Provides-Extra: postgres
|
|
23
24
|
Provides-Extra: redis
|
|
24
25
|
Provides-Extra: server
|
|
25
26
|
Provides-Extra: tests
|
|
26
27
|
Requires-Dist: aioboto3 (>=14.3.0,<15.0.0) ; extra == "bedrock"
|
|
27
28
|
Requires-Dist: aiomultiprocess (>=0.9.1,<0.10.0)
|
|
28
|
-
Requires-Dist: aiosqlite (>=0.21.0,<0.22.0)
|
|
29
29
|
Requires-Dist: alembic (>=1.13.3,<2.0.0)
|
|
30
30
|
Requires-Dist: anthropic (>=0.49.0,<0.50.0)
|
|
31
31
|
Requires-Dist: apscheduler (>=3.11.0,<4.0.0)
|
|
@@ -56,7 +56,7 @@ Requires-Dist: isort (>=5.13.2,<6.0.0) ; extra == "dev" or extra == "all"
|
|
|
56
56
|
Requires-Dist: jinja2 (>=3.1.5,<4.0.0)
|
|
57
57
|
Requires-Dist: langchain (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
|
|
58
58
|
Requires-Dist: langchain-community (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
|
|
59
|
-
Requires-Dist: letta_client (>=0.1.
|
|
59
|
+
Requires-Dist: letta_client (>=0.1.197,<0.2.0)
|
|
60
60
|
Requires-Dist: llama-index (>=0.12.2,<0.13.0)
|
|
61
61
|
Requires-Dist: llama-index-embeddings-openai (>=0.3.1,<0.4.0)
|
|
62
62
|
Requires-Dist: locust (>=2.31.5,<3.0.0) ; extra == "dev" or extra == "desktop" or extra == "all"
|
|
@@ -75,7 +75,7 @@ Requires-Dist: pathvalidate (>=3.2.1,<4.0.0)
|
|
|
75
75
|
Requires-Dist: pexpect (>=4.9.0,<5.0.0) ; extra == "dev" or extra == "all"
|
|
76
76
|
Requires-Dist: pg8000 (>=1.30.3,<2.0.0) ; extra == "postgres" or extra == "desktop" or extra == "all"
|
|
77
77
|
Requires-Dist: pgvector (>=0.2.3,<0.3.0) ; extra == "postgres" or extra == "desktop" or extra == "all"
|
|
78
|
-
Requires-Dist: pinecone[asyncio] (>=7.3.0,<8.0.0)
|
|
78
|
+
Requires-Dist: pinecone[asyncio] (>=7.3.0,<8.0.0) ; extra == "pinecone" or extra == "all"
|
|
79
79
|
Requires-Dist: pre-commit (>=3.5.0,<4.0.0) ; extra == "dev" or extra == "all"
|
|
80
80
|
Requires-Dist: prettytable (>=3.9.0,<4.0.0)
|
|
81
81
|
Requires-Dist: psycopg2 (>=2.9.10,<3.0.0) ; extra == "postgres" or extra == "desktop" or extra == "all"
|
|
@@ -96,7 +96,7 @@ class BaseAgent(ABC):
|
|
|
96
96
|
"""
|
|
97
97
|
try:
|
|
98
98
|
# [DB Call] loading blocks (modifies: agent_state.memory.blocks)
|
|
99
|
-
await self.agent_manager.refresh_memory_async(agent_state=agent_state, actor=self.actor)
|
|
99
|
+
agent_state = await self.agent_manager.refresh_memory_async(agent_state=agent_state, actor=self.actor)
|
|
100
100
|
|
|
101
101
|
tool_constraint_block = None
|
|
102
102
|
if tool_rules_solver is not None:
|
|
@@ -104,18 +104,37 @@ class BaseAgent(ABC):
|
|
|
104
104
|
|
|
105
105
|
# TODO: This is a pretty brittle pattern established all over our code, need to get rid of this
|
|
106
106
|
curr_system_message = in_context_messages[0]
|
|
107
|
-
curr_memory_str = agent_state.memory.compile(tool_usage_rules=tool_constraint_block, sources=agent_state.sources)
|
|
108
107
|
curr_system_message_text = curr_system_message.content[0].text
|
|
109
|
-
|
|
108
|
+
|
|
109
|
+
# extract the dynamic section that includes memory blocks, tool rules, and directories
|
|
110
|
+
# this avoids timestamp comparison issues
|
|
111
|
+
def extract_dynamic_section(text):
|
|
112
|
+
start_marker = "</base_instructions>"
|
|
113
|
+
end_marker = "<memory_metadata>"
|
|
114
|
+
|
|
115
|
+
start_idx = text.find(start_marker)
|
|
116
|
+
end_idx = text.find(end_marker)
|
|
117
|
+
|
|
118
|
+
if start_idx != -1 and end_idx != -1:
|
|
119
|
+
return text[start_idx:end_idx]
|
|
120
|
+
return text # fallback to full text if markers not found
|
|
121
|
+
|
|
122
|
+
curr_dynamic_section = extract_dynamic_section(curr_system_message_text)
|
|
123
|
+
|
|
124
|
+
# generate just the memory string with current state for comparison
|
|
125
|
+
curr_memory_str = agent_state.memory.compile(tool_usage_rules=tool_constraint_block, sources=agent_state.sources)
|
|
126
|
+
new_dynamic_section = extract_dynamic_section(curr_memory_str)
|
|
127
|
+
|
|
128
|
+
# compare just the dynamic sections (memory blocks, tool rules, directories)
|
|
129
|
+
if curr_dynamic_section == new_dynamic_section:
|
|
110
130
|
logger.debug(
|
|
111
|
-
f"Memory
|
|
131
|
+
f"Memory and sources haven't changed for agent id={agent_state.id} and actor=({self.actor.id}, {self.actor.name}), skipping system prompt rebuild"
|
|
112
132
|
)
|
|
113
133
|
return in_context_messages
|
|
114
134
|
|
|
115
135
|
memory_edit_timestamp = get_utc_time()
|
|
116
136
|
|
|
117
|
-
#
|
|
118
|
-
# todo: blocking for now
|
|
137
|
+
# size of messages and archival memories
|
|
119
138
|
if num_messages is None:
|
|
120
139
|
num_messages = await self.message_manager.size_async(actor=self.actor, agent_id=agent_state.id)
|
|
121
140
|
if num_archival_memories is None:
|
|
@@ -3,7 +3,7 @@ import json
|
|
|
3
3
|
import uuid
|
|
4
4
|
from collections.abc import AsyncGenerator
|
|
5
5
|
from datetime import datetime
|
|
6
|
-
from typing import Optional
|
|
6
|
+
from typing import Optional, Union
|
|
7
7
|
|
|
8
8
|
from openai import AsyncStream
|
|
9
9
|
from openai.types.chat import ChatCompletionChunk
|
|
@@ -165,18 +165,28 @@ class LettaAgent(BaseAgent):
|
|
|
165
165
|
use_assistant_message: bool = True,
|
|
166
166
|
request_start_timestamp_ns: int | None = None,
|
|
167
167
|
include_return_message_types: list[MessageType] | None = None,
|
|
168
|
-
|
|
168
|
+
dry_run: bool = False,
|
|
169
|
+
) -> Union[LettaResponse, dict]:
|
|
169
170
|
# TODO (cliandy): pass in run_id and use at send_message endpoints for all step functions
|
|
170
171
|
agent_state = await self.agent_manager.get_agent_by_id_async(
|
|
171
|
-
agent_id=self.agent_id,
|
|
172
|
+
agent_id=self.agent_id,
|
|
173
|
+
include_relationships=["tools", "memory", "tool_exec_environment_variables", "sources"],
|
|
174
|
+
actor=self.actor,
|
|
172
175
|
)
|
|
173
|
-
|
|
176
|
+
result = await self._step(
|
|
174
177
|
agent_state=agent_state,
|
|
175
178
|
input_messages=input_messages,
|
|
176
179
|
max_steps=max_steps,
|
|
177
180
|
run_id=run_id,
|
|
178
181
|
request_start_timestamp_ns=request_start_timestamp_ns,
|
|
182
|
+
dry_run=dry_run,
|
|
179
183
|
)
|
|
184
|
+
|
|
185
|
+
# If dry run, return the request payload directly
|
|
186
|
+
if dry_run:
|
|
187
|
+
return result
|
|
188
|
+
|
|
189
|
+
_, new_in_context_messages, stop_reason, usage = result
|
|
180
190
|
return _create_letta_response(
|
|
181
191
|
new_in_context_messages=new_in_context_messages,
|
|
182
192
|
use_assistant_message=use_assistant_message,
|
|
@@ -195,7 +205,9 @@ class LettaAgent(BaseAgent):
|
|
|
195
205
|
include_return_message_types: list[MessageType] | None = None,
|
|
196
206
|
):
|
|
197
207
|
agent_state = await self.agent_manager.get_agent_by_id_async(
|
|
198
|
-
agent_id=self.agent_id,
|
|
208
|
+
agent_id=self.agent_id,
|
|
209
|
+
include_relationships=["tools", "memory", "tool_exec_environment_variables", "sources"],
|
|
210
|
+
actor=self.actor,
|
|
199
211
|
)
|
|
200
212
|
current_in_context_messages, new_in_context_messages = await _prepare_in_context_messages_no_persist_async(
|
|
201
213
|
input_messages, agent_state, self.message_manager, self.actor
|
|
@@ -279,6 +291,7 @@ class LettaAgent(BaseAgent):
|
|
|
279
291
|
tool_rules_solver,
|
|
280
292
|
response.usage,
|
|
281
293
|
reasoning_content=reasoning,
|
|
294
|
+
step_id=step_id,
|
|
282
295
|
initial_messages=initial_messages,
|
|
283
296
|
agent_step_span=agent_step_span,
|
|
284
297
|
is_final_step=(i == max_steps - 1),
|
|
@@ -357,7 +370,8 @@ class LettaAgent(BaseAgent):
|
|
|
357
370
|
max_steps: int = DEFAULT_MAX_STEPS,
|
|
358
371
|
run_id: str | None = None,
|
|
359
372
|
request_start_timestamp_ns: int | None = None,
|
|
360
|
-
|
|
373
|
+
dry_run: bool = False,
|
|
374
|
+
) -> Union[tuple[list[Message], list[Message], LettaStopReason | None, LettaUsageStatistics], dict]:
|
|
361
375
|
"""
|
|
362
376
|
Carries out an invocation of the agent loop. In each step, the agent
|
|
363
377
|
1. Rebuilds its memory
|
|
@@ -394,6 +408,16 @@ class LettaAgent(BaseAgent):
|
|
|
394
408
|
agent_step_span = tracer.start_span("agent_step", start_time=step_start)
|
|
395
409
|
agent_step_span.set_attributes({"step_id": step_id})
|
|
396
410
|
|
|
411
|
+
# If dry run, build request data and return it without making LLM call
|
|
412
|
+
if dry_run:
|
|
413
|
+
request_data, valid_tool_names = await self._create_llm_request_data_async(
|
|
414
|
+
llm_client=llm_client,
|
|
415
|
+
in_context_messages=current_in_context_messages + new_in_context_messages,
|
|
416
|
+
agent_state=agent_state,
|
|
417
|
+
tool_rules_solver=tool_rules_solver,
|
|
418
|
+
)
|
|
419
|
+
return request_data
|
|
420
|
+
|
|
397
421
|
request_data, response_data, current_in_context_messages, new_in_context_messages, valid_tool_names = (
|
|
398
422
|
await self._build_and_request_from_llm(
|
|
399
423
|
current_in_context_messages, new_in_context_messages, agent_state, llm_client, tool_rules_solver, agent_step_span
|
|
@@ -530,7 +554,9 @@ class LettaAgent(BaseAgent):
|
|
|
530
554
|
4. Processes the response
|
|
531
555
|
"""
|
|
532
556
|
agent_state = await self.agent_manager.get_agent_by_id_async(
|
|
533
|
-
agent_id=self.agent_id,
|
|
557
|
+
agent_id=self.agent_id,
|
|
558
|
+
include_relationships=["tools", "memory", "tool_exec_environment_variables", "sources"],
|
|
559
|
+
actor=self.actor,
|
|
534
560
|
)
|
|
535
561
|
current_in_context_messages, new_in_context_messages = await _prepare_in_context_messages_no_persist_async(
|
|
536
562
|
input_messages, agent_state, self.message_manager, self.actor
|
|
@@ -628,7 +654,7 @@ class LettaAgent(BaseAgent):
|
|
|
628
654
|
)
|
|
629
655
|
|
|
630
656
|
# log LLM request time
|
|
631
|
-
llm_request_ms = ns_to_ms(stream_end_time_ns -
|
|
657
|
+
llm_request_ms = ns_to_ms(stream_end_time_ns - provider_request_start_timestamp_ns)
|
|
632
658
|
agent_step_span.add_event(name="llm_request_ms", attributes={"duration_ms": llm_request_ms})
|
|
633
659
|
MetricRegistry().llm_execution_time_ms_histogram.record(
|
|
634
660
|
llm_request_ms,
|
|
@@ -129,7 +129,8 @@ def get_function_name_and_docstring(source_code: str, name: Optional[str] = None
|
|
|
129
129
|
raise LettaToolCreateError("Could not determine function name")
|
|
130
130
|
|
|
131
131
|
if not docstring:
|
|
132
|
-
|
|
132
|
+
# For tools with args_json_schema, the docstring is optional
|
|
133
|
+
docstring = f"The {function_name} tool"
|
|
133
134
|
|
|
134
135
|
return function_name, docstring
|
|
135
136
|
|
|
@@ -10,6 +10,8 @@ def json_dumps(data, indent=2):
|
|
|
10
10
|
def safe_serializer(obj):
|
|
11
11
|
if isinstance(obj, datetime):
|
|
12
12
|
return obj.isoformat()
|
|
13
|
+
if isinstance(obj, bytes):
|
|
14
|
+
return obj.decode("utf-8")
|
|
13
15
|
raise TypeError(f"Type {type(obj)} not serializable")
|
|
14
16
|
|
|
15
17
|
return json.dumps(data, indent=indent, default=safe_serializer, ensure_ascii=False)
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
from typing import Any, Dict, List
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
try:
|
|
4
|
+
from pinecone import IndexEmbed, PineconeAsyncio
|
|
5
|
+
from pinecone.exceptions.exceptions import NotFoundException
|
|
6
|
+
|
|
7
|
+
PINECONE_AVAILABLE = True
|
|
8
|
+
except ImportError:
|
|
9
|
+
PINECONE_AVAILABLE = False
|
|
4
10
|
|
|
5
11
|
from letta.constants import (
|
|
6
12
|
PINECONE_CLOUD,
|
|
@@ -27,11 +33,20 @@ def should_use_pinecone(verbose: bool = False):
|
|
|
27
33
|
bool(settings.pinecone_source_index),
|
|
28
34
|
)
|
|
29
35
|
|
|
30
|
-
return
|
|
36
|
+
return all(
|
|
37
|
+
(
|
|
38
|
+
PINECONE_AVAILABLE,
|
|
39
|
+
settings.enable_pinecone,
|
|
40
|
+
settings.pinecone_api_key,
|
|
41
|
+
settings.pinecone_agent_index,
|
|
42
|
+
settings.pinecone_source_index,
|
|
43
|
+
)
|
|
44
|
+
)
|
|
31
45
|
|
|
32
46
|
|
|
33
47
|
async def upsert_pinecone_indices():
|
|
34
|
-
|
|
48
|
+
if not PINECONE_AVAILABLE:
|
|
49
|
+
raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
|
|
35
50
|
|
|
36
51
|
for index_name in get_pinecone_indices():
|
|
37
52
|
async with PineconeAsyncio(api_key=settings.pinecone_api_key) as pc:
|
|
@@ -49,6 +64,9 @@ def get_pinecone_indices() -> List[str]:
|
|
|
49
64
|
|
|
50
65
|
|
|
51
66
|
async def upsert_file_records_to_pinecone_index(file_id: str, source_id: str, chunks: List[str], actor: User):
|
|
67
|
+
if not PINECONE_AVAILABLE:
|
|
68
|
+
raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
|
|
69
|
+
|
|
52
70
|
records = []
|
|
53
71
|
for i, chunk in enumerate(chunks):
|
|
54
72
|
record = {
|
|
@@ -63,7 +81,8 @@ async def upsert_file_records_to_pinecone_index(file_id: str, source_id: str, ch
|
|
|
63
81
|
|
|
64
82
|
|
|
65
83
|
async def delete_file_records_from_pinecone_index(file_id: str, actor: User):
|
|
66
|
-
|
|
84
|
+
if not PINECONE_AVAILABLE:
|
|
85
|
+
raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
|
|
67
86
|
|
|
68
87
|
namespace = actor.organization_id
|
|
69
88
|
try:
|
|
@@ -81,7 +100,8 @@ async def delete_file_records_from_pinecone_index(file_id: str, actor: User):
|
|
|
81
100
|
|
|
82
101
|
|
|
83
102
|
async def delete_source_records_from_pinecone_index(source_id: str, actor: User):
|
|
84
|
-
|
|
103
|
+
if not PINECONE_AVAILABLE:
|
|
104
|
+
raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
|
|
85
105
|
|
|
86
106
|
namespace = actor.organization_id
|
|
87
107
|
try:
|
|
@@ -94,6 +114,9 @@ async def delete_source_records_from_pinecone_index(source_id: str, actor: User)
|
|
|
94
114
|
|
|
95
115
|
|
|
96
116
|
async def upsert_records_to_pinecone_index(records: List[dict], actor: User):
|
|
117
|
+
if not PINECONE_AVAILABLE:
|
|
118
|
+
raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
|
|
119
|
+
|
|
97
120
|
async with PineconeAsyncio(api_key=settings.pinecone_api_key) as pc:
|
|
98
121
|
description = await pc.describe_index(name=settings.pinecone_source_index)
|
|
99
122
|
async with pc.IndexAsyncio(host=description.index.host) as dense_index:
|
|
@@ -104,6 +127,9 @@ async def upsert_records_to_pinecone_index(records: List[dict], actor: User):
|
|
|
104
127
|
|
|
105
128
|
|
|
106
129
|
async def search_pinecone_index(query: str, limit: int, filter: Dict[str, Any], actor: User) -> Dict[str, Any]:
|
|
130
|
+
if not PINECONE_AVAILABLE:
|
|
131
|
+
raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
|
|
132
|
+
|
|
107
133
|
async with PineconeAsyncio(api_key=settings.pinecone_api_key) as pc:
|
|
108
134
|
description = await pc.describe_index(name=settings.pinecone_source_index)
|
|
109
135
|
async with pc.IndexAsyncio(host=description.index.host) as dense_index:
|
|
@@ -127,7 +153,8 @@ async def search_pinecone_index(query: str, limit: int, filter: Dict[str, Any],
|
|
|
127
153
|
|
|
128
154
|
|
|
129
155
|
async def list_pinecone_index_for_files(file_id: str, actor: User, limit: int = None, pagination_token: str = None) -> List[str]:
|
|
130
|
-
|
|
156
|
+
if not PINECONE_AVAILABLE:
|
|
157
|
+
raise ImportError("Pinecone is not available. Please install pinecone to use this feature.")
|
|
131
158
|
|
|
132
159
|
namespace = actor.organization_id
|
|
133
160
|
try:
|
|
@@ -29,6 +29,7 @@ async def _try_acquire_lock_and_start_scheduler(server: SyncServer) -> bool:
|
|
|
29
29
|
if _is_scheduler_leader:
|
|
30
30
|
return True # Already leading
|
|
31
31
|
|
|
32
|
+
engine_name = None
|
|
32
33
|
lock_session = None
|
|
33
34
|
acquired_lock = False
|
|
34
35
|
try:
|
|
@@ -36,32 +37,25 @@ async def _try_acquire_lock_and_start_scheduler(server: SyncServer) -> bool:
|
|
|
36
37
|
engine = session.get_bind()
|
|
37
38
|
engine_name = engine.name
|
|
38
39
|
logger.info(f"Database engine type: {engine_name}")
|
|
39
|
-
if engine_name != "postgresql":
|
|
40
|
-
logger.warning(f"Advisory locks not supported for {engine_name} database. Starting scheduler without leader election.")
|
|
41
|
-
acquired_lock = True
|
|
42
|
-
else:
|
|
43
|
-
lock_session = db_registry.get_async_session_factory()()
|
|
44
|
-
result = await lock_session.execute(
|
|
45
|
-
text("SELECT pg_try_advisory_lock(CAST(:lock_key AS bigint))"), {"lock_key": ADVISORY_LOCK_KEY}
|
|
46
|
-
)
|
|
47
|
-
acquired_lock = result.scalar()
|
|
48
|
-
await lock_session.commit()
|
|
49
|
-
|
|
50
|
-
if not acquired_lock:
|
|
51
|
-
if lock_session:
|
|
52
|
-
await lock_session.close()
|
|
53
|
-
logger.info("Scheduler lock held by another instance.")
|
|
54
|
-
return False
|
|
55
40
|
|
|
56
|
-
if engine_name
|
|
57
|
-
logger.
|
|
58
|
-
|
|
59
|
-
lock_session = None
|
|
41
|
+
if engine_name != "postgresql":
|
|
42
|
+
logger.warning(f"Advisory locks not supported for {engine_name} database. Starting scheduler without leader election.")
|
|
43
|
+
acquired_lock = True
|
|
60
44
|
else:
|
|
61
|
-
|
|
62
|
-
|
|
45
|
+
lock_session = db_registry.get_async_session_factory()()
|
|
46
|
+
result = await lock_session.execute(
|
|
47
|
+
text("SELECT pg_try_advisory_lock(CAST(:lock_key AS bigint))"), {"lock_key": ADVISORY_LOCK_KEY}
|
|
48
|
+
)
|
|
49
|
+
acquired_lock = result.scalar()
|
|
50
|
+
await lock_session.commit()
|
|
51
|
+
|
|
52
|
+
if not acquired_lock:
|
|
63
53
|
await lock_session.close()
|
|
64
|
-
|
|
54
|
+
logger.info("Scheduler lock held by another instance.")
|
|
55
|
+
return False
|
|
56
|
+
else:
|
|
57
|
+
_advisory_lock_session = lock_session
|
|
58
|
+
lock_session = None
|
|
65
59
|
|
|
66
60
|
trigger = IntervalTrigger(
|
|
67
61
|
seconds=settings.poll_running_llm_batches_interval_seconds,
|
|
@@ -90,7 +84,6 @@ async def _try_acquire_lock_and_start_scheduler(server: SyncServer) -> bool:
|
|
|
90
84
|
if acquired_lock:
|
|
91
85
|
logger.warning("Attempting to release lock due to error during startup.")
|
|
92
86
|
try:
|
|
93
|
-
_advisory_lock_session = lock_session
|
|
94
87
|
await _release_advisory_lock(lock_session)
|
|
95
88
|
except Exception as unlock_err:
|
|
96
89
|
logger.error(f"Failed to release lock during error handling: {unlock_err}", exc_info=True)
|
|
@@ -108,8 +101,8 @@ async def _try_acquire_lock_and_start_scheduler(server: SyncServer) -> bool:
|
|
|
108
101
|
if lock_session:
|
|
109
102
|
try:
|
|
110
103
|
await lock_session.close()
|
|
111
|
-
except:
|
|
112
|
-
|
|
104
|
+
except Exception as e:
|
|
105
|
+
logger.error(f"Failed to close session during error handling: {e}", exc_info=True)
|
|
113
106
|
|
|
114
107
|
|
|
115
108
|
async def _background_lock_retry_loop(server: SyncServer):
|
|
@@ -138,15 +131,13 @@ async def _background_lock_retry_loop(server: SyncServer):
|
|
|
138
131
|
break
|
|
139
132
|
except Exception as e:
|
|
140
133
|
logger.error(f"Error in background lock retry loop: {e}", exc_info=True)
|
|
141
|
-
await asyncio.sleep(settings.poll_lock_retry_interval_seconds)
|
|
142
134
|
|
|
143
135
|
|
|
144
|
-
async def _release_advisory_lock(
|
|
136
|
+
async def _release_advisory_lock(target_lock_session=None):
|
|
145
137
|
"""Releases the advisory lock using the stored session."""
|
|
146
138
|
global _advisory_lock_session
|
|
147
139
|
|
|
148
|
-
lock_session =
|
|
149
|
-
_advisory_lock_session = None
|
|
140
|
+
lock_session = target_lock_session or _advisory_lock_session
|
|
150
141
|
|
|
151
142
|
if lock_session is not None:
|
|
152
143
|
logger.info(f"Attempting to release PostgreSQL advisory lock {ADVISORY_LOCK_KEY}")
|
|
@@ -161,6 +152,8 @@ async def _release_advisory_lock(lock_session=None):
|
|
|
161
152
|
if lock_session:
|
|
162
153
|
await lock_session.close()
|
|
163
154
|
logger.info("Closed database session that held advisory lock.")
|
|
155
|
+
if lock_session == _advisory_lock_session:
|
|
156
|
+
_advisory_lock_session = None
|
|
164
157
|
except Exception as e:
|
|
165
158
|
logger.error(f"Error closing advisory lock session: {e}", exc_info=True)
|
|
166
159
|
else:
|
|
@@ -58,7 +58,12 @@ class MetricRegistry:
|
|
|
58
58
|
def tool_execution_counter(self) -> Counter:
|
|
59
59
|
return self._get_or_create_metric(
|
|
60
60
|
"count_tool_execution",
|
|
61
|
-
partial(
|
|
61
|
+
partial(
|
|
62
|
+
self._meter.create_counter,
|
|
63
|
+
name="count_tool_execution",
|
|
64
|
+
description="Counts the number of tools executed.",
|
|
65
|
+
unit="1",
|
|
66
|
+
),
|
|
62
67
|
)
|
|
63
68
|
|
|
64
69
|
# project_id + model
|
|
@@ -66,7 +71,12 @@ class MetricRegistry:
|
|
|
66
71
|
def ttft_ms_histogram(self) -> Histogram:
|
|
67
72
|
return self._get_or_create_metric(
|
|
68
73
|
"hist_ttft_ms",
|
|
69
|
-
partial(
|
|
74
|
+
partial(
|
|
75
|
+
self._meter.create_histogram,
|
|
76
|
+
name="hist_ttft_ms",
|
|
77
|
+
description="Histogram for the Time to First Token (ms)",
|
|
78
|
+
unit="ms",
|
|
79
|
+
),
|
|
70
80
|
)
|
|
71
81
|
|
|
72
82
|
# (includes model name)
|
|
@@ -158,3 +168,15 @@ class MetricRegistry:
|
|
|
158
168
|
unit="1",
|
|
159
169
|
),
|
|
160
170
|
)
|
|
171
|
+
|
|
172
|
+
@property
|
|
173
|
+
def file_process_bytes_histogram(self) -> Histogram:
|
|
174
|
+
return self._get_or_create_metric(
|
|
175
|
+
"hist_file_process_bytes",
|
|
176
|
+
partial(
|
|
177
|
+
self._meter.create_histogram,
|
|
178
|
+
name="hist_file_process_bytes",
|
|
179
|
+
description="Histogram for file process in bytes",
|
|
180
|
+
unit="By",
|
|
181
|
+
),
|
|
182
|
+
)
|
|
@@ -139,3 +139,11 @@ class MCPServerType(str, Enum):
|
|
|
139
139
|
SSE = "sse"
|
|
140
140
|
STDIO = "stdio"
|
|
141
141
|
STREAMABLE_HTTP = "streamable_http"
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class DuplicateFileHandling(str, Enum):
|
|
145
|
+
"""How to handle duplicate filenames when uploading files"""
|
|
146
|
+
|
|
147
|
+
SKIP = "skip" # skip files with duplicate names
|
|
148
|
+
ERROR = "error" # error when duplicate names are encountered
|
|
149
|
+
SUFFIX = "suffix" # add numeric suffix to make names unique (default behavior)
|
|
@@ -77,9 +77,8 @@ class Tool(BaseTool):
|
|
|
77
77
|
|
|
78
78
|
if self.tool_type is ToolType.CUSTOM:
|
|
79
79
|
if not self.source_code:
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
raise ValueError(error_msg)
|
|
80
|
+
logger.error("Custom tool with id=%s is missing source_code field", self.id)
|
|
81
|
+
raise ValueError(f"Custom tool with id={self.id} is missing source_code field.")
|
|
83
82
|
|
|
84
83
|
# Always derive json_schema for freshest possible json_schema
|
|
85
84
|
if self.args_json_schema is not None:
|
|
@@ -96,8 +95,7 @@ class Tool(BaseTool):
|
|
|
96
95
|
try:
|
|
97
96
|
self.json_schema = derive_openai_json_schema(source_code=self.source_code)
|
|
98
97
|
except Exception as e:
|
|
99
|
-
|
|
100
|
-
logger.error(error_msg)
|
|
98
|
+
logger.error("Failed to derive json schema for tool with id=%s name=%s: %s", self.id, self.name, e)
|
|
101
99
|
elif self.tool_type in {ToolType.LETTA_CORE, ToolType.LETTA_MEMORY_CORE, ToolType.LETTA_SLEEPTIME_CORE}:
|
|
102
100
|
# If it's letta core tool, we generate the json_schema on the fly here
|
|
103
101
|
self.json_schema = get_json_schema_from_module(module_name=LETTA_CORE_TOOL_MODULE_NAME, function_name=self.name)
|
|
@@ -119,9 +117,8 @@ class Tool(BaseTool):
|
|
|
119
117
|
|
|
120
118
|
# At this point, we need to validate that at least json_schema is populated
|
|
121
119
|
if not self.json_schema:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
raise ValueError(error_msg)
|
|
120
|
+
logger.error("Tool with id=%s name=%s tool_type=%s is missing a json_schema", self.id, self.name, self.tool_type)
|
|
121
|
+
raise ValueError(f"Tool with id={self.id} name={self.name} tool_type={self.tool_type} is missing a json_schema.")
|
|
125
122
|
|
|
126
123
|
# Derive name from the JSON schema if not provided
|
|
127
124
|
if not self.name:
|
|
@@ -337,8 +337,11 @@ def create_application() -> "FastAPI":
|
|
|
337
337
|
# / static files
|
|
338
338
|
mount_static_files(app)
|
|
339
339
|
|
|
340
|
+
no_generation = "--no-generation" in sys.argv
|
|
341
|
+
|
|
340
342
|
# Generate OpenAPI schema after all routes are mounted
|
|
341
|
-
|
|
343
|
+
if not no_generation:
|
|
344
|
+
generate_openapi_schema(app)
|
|
342
345
|
|
|
343
346
|
return app
|
|
344
347
|
|
|
@@ -2,7 +2,7 @@ import asyncio
|
|
|
2
2
|
import json
|
|
3
3
|
import traceback
|
|
4
4
|
from datetime import datetime, timezone
|
|
5
|
-
from typing import Annotated, Any, List, Optional
|
|
5
|
+
from typing import Annotated, Any, Dict, List, Optional, Union
|
|
6
6
|
|
|
7
7
|
from fastapi import APIRouter, Body, Depends, File, Header, HTTPException, Query, Request, UploadFile, status
|
|
8
8
|
from fastapi.responses import JSONResponse
|
|
@@ -522,7 +522,7 @@ async def attach_block(
|
|
|
522
522
|
actor_id: str | None = Header(None, alias="user_id"),
|
|
523
523
|
):
|
|
524
524
|
"""
|
|
525
|
-
Attach a core
|
|
525
|
+
Attach a core memory block to an agent.
|
|
526
526
|
"""
|
|
527
527
|
actor = await server.user_manager.get_actor_or_default_async(actor_id=actor_id)
|
|
528
528
|
return await server.agent_manager.attach_block_async(agent_id=agent_id, block_id=block_id, actor=actor)
|
|
@@ -1160,6 +1160,69 @@ async def list_agent_groups(
|
|
|
1160
1160
|
return server.agent_manager.list_groups(agent_id=agent_id, manager_type=manager_type, actor=actor)
|
|
1161
1161
|
|
|
1162
1162
|
|
|
1163
|
+
@router.post(
|
|
1164
|
+
"/{agent_id}/messages/preview-raw-payload",
|
|
1165
|
+
response_model=Dict[str, Any],
|
|
1166
|
+
operation_id="preview_raw_payload",
|
|
1167
|
+
)
|
|
1168
|
+
async def preview_raw_payload(
|
|
1169
|
+
agent_id: str,
|
|
1170
|
+
request: Union[LettaRequest, LettaStreamingRequest] = Body(...),
|
|
1171
|
+
server: SyncServer = Depends(get_letta_server),
|
|
1172
|
+
actor_id: str | None = Header(None, alias="user_id"),
|
|
1173
|
+
):
|
|
1174
|
+
"""
|
|
1175
|
+
Inspect the raw LLM request payload without sending it.
|
|
1176
|
+
|
|
1177
|
+
This endpoint processes the message through the agent loop up until
|
|
1178
|
+
the LLM request, then returns the raw request payload that would
|
|
1179
|
+
be sent to the LLM provider. Useful for debugging and inspection.
|
|
1180
|
+
"""
|
|
1181
|
+
actor = await server.user_manager.get_actor_or_default_async(actor_id=actor_id)
|
|
1182
|
+
agent = await server.agent_manager.get_agent_by_id_async(agent_id, actor, include_relationships=["multi_agent_group"])
|
|
1183
|
+
agent_eligible = agent.multi_agent_group is None or agent.multi_agent_group.manager_type in ["sleeptime", "voice_sleeptime"]
|
|
1184
|
+
model_compatible = agent.llm_config.model_endpoint_type in ["anthropic", "openai", "together", "google_ai", "google_vertex", "bedrock"]
|
|
1185
|
+
|
|
1186
|
+
if agent_eligible and model_compatible:
|
|
1187
|
+
if agent.enable_sleeptime:
|
|
1188
|
+
# TODO: @caren need to support this for sleeptime
|
|
1189
|
+
raise HTTPException(
|
|
1190
|
+
status_code=status.HTTP_400_BAD_REQUEST,
|
|
1191
|
+
detail="Payload inspection is not supported for agents with sleeptime enabled.",
|
|
1192
|
+
)
|
|
1193
|
+
else:
|
|
1194
|
+
agent_loop = LettaAgent(
|
|
1195
|
+
agent_id=agent_id,
|
|
1196
|
+
message_manager=server.message_manager,
|
|
1197
|
+
agent_manager=server.agent_manager,
|
|
1198
|
+
block_manager=server.block_manager,
|
|
1199
|
+
job_manager=server.job_manager,
|
|
1200
|
+
passage_manager=server.passage_manager,
|
|
1201
|
+
actor=actor,
|
|
1202
|
+
step_manager=server.step_manager,
|
|
1203
|
+
telemetry_manager=server.telemetry_manager if settings.llm_api_logging else NoopTelemetryManager(),
|
|
1204
|
+
summarizer_mode=(
|
|
1205
|
+
SummarizationMode.STATIC_MESSAGE_BUFFER
|
|
1206
|
+
if agent.agent_type == AgentType.voice_convo_agent
|
|
1207
|
+
else SummarizationMode.PARTIAL_EVICT_MESSAGE_BUFFER
|
|
1208
|
+
),
|
|
1209
|
+
)
|
|
1210
|
+
|
|
1211
|
+
# TODO: Support step_streaming
|
|
1212
|
+
return await agent_loop.step(
|
|
1213
|
+
input_messages=request.messages,
|
|
1214
|
+
use_assistant_message=request.use_assistant_message,
|
|
1215
|
+
include_return_message_types=request.include_return_message_types,
|
|
1216
|
+
dry_run=True,
|
|
1217
|
+
)
|
|
1218
|
+
|
|
1219
|
+
else:
|
|
1220
|
+
raise HTTPException(
|
|
1221
|
+
status_code=status.HTTP_403_FORBIDDEN,
|
|
1222
|
+
detail="Payload inspection is not currently supported for this agent configuration.",
|
|
1223
|
+
)
|
|
1224
|
+
|
|
1225
|
+
|
|
1163
1226
|
@router.post("/{agent_id}/summarize", response_model=AgentState, operation_id="summarize_agent_conversation")
|
|
1164
1227
|
async def summarize_agent_conversation(
|
|
1165
1228
|
agent_id: str,
|