letta-nightly 0.8.6.dev20250627220317__tar.gz → 0.8.7.dev20250627220731__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.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/PKG-INFO +1 -1
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/__init__.py +2 -1
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/constants.py +2 -1
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/function_sets/files.py +20 -18
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/schema_generator.py +119 -3
- letta_nightly-0.8.7.dev20250627220731/letta/functions/types.py +18 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/groups/sleeptime_multi_agent_v2.py +5 -1
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/sqlalchemy_base.py +9 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/agent.py +1 -3
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/steps.py +4 -1
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/server.py +1 -1
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/agent_manager.py +9 -4
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/file_processor/chunker/line_chunker.py +6 -3
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/files_agents_manager.py +34 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/helpers/agent_manager_helper.py +17 -2
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/step_manager.py +11 -29
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_executor/files_tool_executor.py +129 -60
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/utils.py +1 -1
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/pyproject.toml +1 -1
- letta_nightly-0.8.6.dev20250627220317/letta/functions/types.py +0 -6
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/LICENSE +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/README.md +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/agents/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/agents/base_agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/agents/ephemeral_agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/agents/ephemeral_summary_agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/agents/exceptions.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/agents/helpers.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/agents/letta_agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/agents/letta_agent_batch.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/agents/prompts/summary_system_prompt.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/agents/voice_agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/agents/voice_sleeptime_agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/cli/cli.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/cli/cli_load.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/client/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/client/client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/client/streaming.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/client/utils.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/config.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/data_sources/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/data_sources/connectors.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/data_sources/connectors_helper.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/data_sources/redis_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/embeddings.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/errors.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/ast_parsers.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/async_composio_toolset.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/composio_helpers.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/function_sets/base.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/function_sets/builtin.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/function_sets/extras.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/function_sets/multi_agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/function_sets/voice.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/functions.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/helpers.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/interface.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/mcp_client/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/mcp_client/base_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/mcp_client/exceptions.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/mcp_client/sse_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/mcp_client/stdio_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/mcp_client/types.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/functions/prompts.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/groups/dynamic_multi_agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/groups/helpers.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/groups/round_robin_multi_agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/groups/sleeptime_multi_agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/groups/supervisor_multi_agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/helpers/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/helpers/composio_helpers.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/helpers/converters.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/helpers/datetime_helpers.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/helpers/decorators.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/helpers/json_helpers.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/helpers/message_helper.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/helpers/singleton.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/helpers/tool_execution_helper.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/helpers/tool_rule_solver.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/humans/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/humans/examples/basic.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/humans/examples/cs_phd.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/interface.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/interfaces/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/interfaces/anthropic_streaming_interface.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/interfaces/openai_streaming_interface.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/interfaces/utils.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/jobs/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/jobs/helpers.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/jobs/llm_batch_job_polling.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/jobs/scheduler.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/jobs/types.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/anthropic.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/anthropic_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/aws_bedrock.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/azure_openai.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/azure_openai_constants.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/bedrock_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/cohere.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/deepseek.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/google_ai_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/google_constants.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/google_vertex_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/helpers.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/llm_api_tools.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/llm_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/llm_client_base.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/mistral.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/openai.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/llm_api/openai_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/README.md +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/chat_completion_proxy.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/constants.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/function_parser.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/grammars/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/grammars/json.gbnf +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/json_parser.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/koboldcpp/api.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/koboldcpp/settings.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/llamacpp/api.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/llamacpp/settings.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/lmstudio/api.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/lmstudio/settings.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/ollama/api.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/ollama/settings.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/settings/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/settings/settings.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/settings/simple.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/utils.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/vllm/api.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/webui/api.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/webui/legacy_api.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/webui/legacy_settings.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/local_llm/webui/settings.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/log.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/main.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/memory.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/openai_backcompat/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/openai_backcompat/openai_object.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/__all__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/agents_tags.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/base.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/block.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/block_history.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/blocks_agents.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/custom_columns.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/enums.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/errors.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/file.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/files_agents.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/group.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/groups_agents.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/groups_blocks.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/identities_agents.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/identities_blocks.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/identity.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/job.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/job_messages.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/llm_batch_items.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/llm_batch_job.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/mcp_server.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/message.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/mixins.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/organization.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/passage.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/provider.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/provider_trace.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/sandbox_config.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/source.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/sources_agents.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/sqlite_functions.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/step.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/tool.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/tools_agents.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/orm/user.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/otel/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/otel/context.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/otel/events.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/otel/metric_registry.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/otel/metrics.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/otel/resource.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/otel/tracing.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/personas/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/personas/examples/anna_pa.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/personas/examples/google_search_persona.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/personas/examples/memgpt_doc.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/personas/examples/memgpt_starter.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/personas/examples/o1_persona.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/personas/examples/sam.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/personas/examples/sam_pov.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/personas/examples/sleeptime_doc_persona.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/personas/examples/sleeptime_memory_persona.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/personas/examples/sqldb/test.db +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/personas/examples/voice_memory_persona.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/plugins/README.md +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/plugins/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/plugins/defaults.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/plugins/plugins.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/gpt_summarize.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/gpt_system.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_base.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_chat.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_convo_only.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_doc.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_memory_only.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_sleeptime_chat.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/memgpt_v2_chat.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/react.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/sleeptime.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/sleeptime_doc_ingest.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/sleeptime_v2.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/voice_chat.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/voice_sleeptime.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/prompts/system/workflow.txt +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/pytest.ini +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/block.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/embedding_config.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/embedding_config_overrides.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/enums.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/environment_variables.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/file.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/group.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/health.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/identity.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/job.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/letta_base.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/letta_message.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/letta_message_content.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/letta_request.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/letta_response.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/letta_stop_reason.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/llm_batch_job.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/llm_config.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/llm_config_overrides.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/mcp.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/memory.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/message.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/openai/chat_completion_request.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/openai/chat_completion_response.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/openai/chat_completions.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/openai/embedding_response.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/openai/openai.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/organization.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/passage.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/pip_requirement.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/provider_trace.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/providers.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/response_format.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/run.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/sandbox_config.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/source.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/step.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/tool.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/tool_execution_result.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/tool_rule.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/usage.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/schemas/user.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/serialize_schemas/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/serialize_schemas/marshmallow_agent.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/serialize_schemas/marshmallow_base.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/serialize_schemas/marshmallow_block.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/serialize_schemas/marshmallow_message.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/serialize_schemas/marshmallow_tag.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/serialize_schemas/marshmallow_tool.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/serialize_schemas/pydantic_agent_schema.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/constants.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/db.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/generate_openapi_schema.sh +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/app.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/auth/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/auth/index.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/auth_token.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/chat_completions_interface.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/interface.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/json_parser.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/agents.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/blocks.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/embeddings.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/groups.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/health.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/identities.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/jobs.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/llms.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/messages.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/organizations.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/providers.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/runs.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/sources.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/tags.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/telemetry.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/tools.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/users.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/routers/v1/voice.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/static_files.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/streaming_response.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/rest_api/utils.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/startup.sh +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/static_files/assets/index-048c9598.js +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/static_files/assets/index-0e31b727.css +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/static_files/favicon.ico +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/static_files/index.html +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/utils.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/ws_api/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/ws_api/example_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/ws_api/interface.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/ws_api/protocol.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/server/ws_api/server.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/block_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/context_window_calculator/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/context_window_calculator/context_window_calculator.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/context_window_calculator/token_counter.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/file_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/file_processor/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/file_processor/chunker/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/file_processor/chunker/llama_index_chunker.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/file_processor/embedder/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/file_processor/embedder/openai_embedder.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/file_processor/file_processor.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/file_processor/file_types.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/file_processor/parser/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/file_processor/parser/base_parser.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/file_processor/parser/mistral_parser.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/file_processor/types.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/group_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/helpers/tool_execution_helper.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/helpers/tool_parser_helper.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/identity_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/job_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/llm_batch_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/mcp/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/mcp/base_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/mcp/sse_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/mcp/stdio_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/mcp/streamable_http_client.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/mcp/types.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/mcp_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/message_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/organization_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/passage_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/per_agent_lock_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/provider_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/sandbox_config_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/source_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/summarizer/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/summarizer/enums.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/summarizer/summarizer.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/telemetry_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_executor/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_executor/builtin_tool_executor.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_executor/composio_tool_executor.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_executor/core_tool_executor.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_executor/mcp_tool_executor.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_executor/multi_agent_tool_executor.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_executor/tool_execution_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_executor/tool_execution_sandbox.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_executor/tool_executor.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_executor/tool_executor_base.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_sandbox/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_sandbox/base.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_sandbox/e2b_sandbox.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/tool_sandbox/local_sandbox.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/services/user_manager.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/settings.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/streaming_interface.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/streaming_utils.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/system.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/templates/__init__.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/templates/sandbox_code_file.py.j2 +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/templates/sandbox_code_file_async.py.j2 +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/templates/template_helper.py +0 -0
- {letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/types/__init__.py +0 -0
{letta_nightly-0.8.6.dev20250627220317 → letta_nightly-0.8.7.dev20250627220731}/letta/constants.py
RENAMED
@@ -83,6 +83,7 @@ SEND_MESSAGE_TOOL_NAME = "send_message"
|
|
83
83
|
# Base tools that cannot be edited, as they access agent state directly
|
84
84
|
# Note that we don't include "conversation_search_date" for now
|
85
85
|
BASE_TOOLS = [SEND_MESSAGE_TOOL_NAME, "conversation_search", "archival_memory_insert", "archival_memory_search"]
|
86
|
+
DEPRECATED_BASE_TOOLS = ["archival_memory_insert", "archival_memory_search"]
|
86
87
|
# Base memory tools CAN be edited, and are added by default by the server
|
87
88
|
BASE_MEMORY_TOOLS = ["core_memory_append", "core_memory_replace"]
|
88
89
|
# New v2 collection of the base memory tools (effecitvely same as sleeptime set), to pair with memgpt_v2 prompt
|
@@ -129,7 +130,7 @@ MEMORY_TOOLS_LINE_NUMBER_PREFIX_REGEX = re.compile(
|
|
129
130
|
BUILTIN_TOOLS = ["run_code", "web_search"]
|
130
131
|
|
131
132
|
# Built in tools
|
132
|
-
FILES_TOOLS = ["
|
133
|
+
FILES_TOOLS = ["open_files", "grep_files", "search_files"]
|
133
134
|
|
134
135
|
FILE_MEMORY_EXISTS_MESSAGE = "The following files are currently accessible in memory:"
|
135
136
|
FILE_MEMORY_EMPTY_MESSAGE = (
|
@@ -1,30 +1,32 @@
|
|
1
|
-
from typing import TYPE_CHECKING, List, Optional
|
1
|
+
from typing import TYPE_CHECKING, List, Optional
|
2
|
+
|
3
|
+
from letta.functions.types import FileOpenRequest
|
2
4
|
|
3
5
|
if TYPE_CHECKING:
|
4
6
|
from letta.schemas.agent import AgentState
|
5
7
|
from letta.schemas.file import FileMetadata
|
6
8
|
|
7
9
|
|
8
|
-
async def
|
9
|
-
"""
|
10
|
-
Open the file with name `file_name` and load the contents into files section in core memory.
|
10
|
+
async def open_files(agent_state: "AgentState", file_requests: List[FileOpenRequest], close_all_others: bool = False) -> str:
|
11
|
+
"""Open one or more files and load their contents into files section in core memory. Maximum of 5 files can be opened simultaneously.
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
Examples:
|
14
|
+
Open single file (entire content):
|
15
|
+
file_requests = [FileOpenRequest(file_name="config.py")]
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
Open multiple files with different view ranges:
|
18
|
+
file_requests = [
|
19
|
+
FileOpenRequest(file_name="config.py", offset=1, length=50), # Lines 1-50
|
20
|
+
FileOpenRequest(file_name="main.py", offset=100, length=100), # Lines 100-199
|
21
|
+
FileOpenRequest(file_name="utils.py") # Entire file
|
22
|
+
]
|
20
23
|
|
21
|
-
|
22
|
-
|
23
|
-
"""
|
24
|
-
Close file with name `file_name` in files section in core memory.
|
24
|
+
Close all other files and open new ones:
|
25
|
+
open_files(agent_state, file_requests, close_all_others=True)
|
25
26
|
|
26
27
|
Args:
|
27
|
-
|
28
|
+
file_requests (List[FileOpenRequest]): List of file open requests, each specifying file name and optional view range.
|
29
|
+
close_all_others (bool): If True, closes all other currently open files first. Defaults to False.
|
28
30
|
|
29
31
|
Returns:
|
30
32
|
str: A status message
|
@@ -32,7 +34,7 @@ async def close_file(agent_state: "AgentState", file_name: str) -> str:
|
|
32
34
|
raise NotImplementedError("Tool not implemented. Please contact the Letta team.")
|
33
35
|
|
34
36
|
|
35
|
-
async def
|
37
|
+
async def grep_files(
|
36
38
|
agent_state: "AgentState",
|
37
39
|
pattern: str,
|
38
40
|
include: Optional[str] = None,
|
@@ -45,7 +47,7 @@ async def grep(
|
|
45
47
|
pattern (str): Keyword or regex pattern to search within file contents.
|
46
48
|
include (Optional[str]): Optional keyword or regex pattern to filter filenames to include in the search.
|
47
49
|
context_lines (Optional[int]): Number of lines of context to show before and after each match.
|
48
|
-
Equivalent to `-C` in
|
50
|
+
Equivalent to `-C` in grep_files. Defaults to 3.
|
49
51
|
|
50
52
|
Returns:
|
51
53
|
str: Matching lines with optional surrounding context or a summary output.
|
@@ -9,6 +9,56 @@ from typing_extensions import Literal
|
|
9
9
|
|
10
10
|
from letta.constants import REQUEST_HEARTBEAT_DESCRIPTION, REQUEST_HEARTBEAT_PARAM
|
11
11
|
from letta.functions.mcp_client.types import MCPTool
|
12
|
+
from letta.log import get_logger
|
13
|
+
|
14
|
+
logger = get_logger(__name__)
|
15
|
+
|
16
|
+
|
17
|
+
def validate_google_style_docstring(function):
|
18
|
+
"""Validate that a function's docstring follows Google Python style format.
|
19
|
+
|
20
|
+
Args:
|
21
|
+
function: The function to validate
|
22
|
+
|
23
|
+
Raises:
|
24
|
+
ValueError: If the docstring is not in Google Python style format
|
25
|
+
"""
|
26
|
+
if not function.__doc__:
|
27
|
+
raise ValueError(
|
28
|
+
f"Function '{function.__name__}' has no docstring. Expected Google Python style docstring with Args and Returns sections."
|
29
|
+
)
|
30
|
+
|
31
|
+
docstring = function.__doc__.strip()
|
32
|
+
|
33
|
+
# Basic Google style requirements:
|
34
|
+
# 1. Should have Args: section if function has parameters (excluding self, agent_state)
|
35
|
+
# 2. Should have Returns: section if function returns something other than None
|
36
|
+
# 3. Args and Returns sections should be properly formatted
|
37
|
+
|
38
|
+
sig = inspect.signature(function)
|
39
|
+
has_params = any(param.name not in ["self", "agent_state"] for param in sig.parameters.values())
|
40
|
+
|
41
|
+
# Check for Args section if function has parameters
|
42
|
+
if has_params and "Args:" not in docstring:
|
43
|
+
raise ValueError(f"Function '{function.__name__}' with parameters must have 'Args:' section in Google Python style docstring")
|
44
|
+
|
45
|
+
# NOTE: No check for Returns section - this is irrelevant to the LLM
|
46
|
+
# In proper Google Python format, the Returns: is required
|
47
|
+
|
48
|
+
# Validate Args section format if present
|
49
|
+
if "Args:" in docstring:
|
50
|
+
args_start = docstring.find("Args:")
|
51
|
+
args_end = docstring.find("Returns:", args_start) if "Returns:" in docstring[args_start:] else len(docstring)
|
52
|
+
args_section = docstring[args_start:args_end].strip()
|
53
|
+
|
54
|
+
# Check that each parameter is documented
|
55
|
+
for param in sig.parameters.values():
|
56
|
+
if param.name in ["self", "agent_state"]:
|
57
|
+
continue
|
58
|
+
if f"{param.name} (" not in args_section and f"{param.name}:" not in args_section:
|
59
|
+
raise ValueError(
|
60
|
+
f"Function '{function.__name__}' parameter '{param.name}' not documented in Args section of Google Python style docstring"
|
61
|
+
)
|
12
62
|
|
13
63
|
|
14
64
|
def is_optional(annotation):
|
@@ -277,6 +327,20 @@ def pydantic_model_to_json_schema(model: Type[BaseModel]) -> dict:
|
|
277
327
|
"description": prop["description"],
|
278
328
|
}
|
279
329
|
|
330
|
+
# Handle the case where the property uses anyOf (e.g., Optional types)
|
331
|
+
if "anyOf" in prop:
|
332
|
+
# For Optional types, extract the non-null type
|
333
|
+
non_null_types = [t for t in prop["anyOf"] if t.get("type") != "null"]
|
334
|
+
if len(non_null_types) == 1:
|
335
|
+
# Simple Optional[T] case - use the non-null type
|
336
|
+
return {
|
337
|
+
"type": non_null_types[0]["type"],
|
338
|
+
"description": prop["description"],
|
339
|
+
}
|
340
|
+
else:
|
341
|
+
# Complex anyOf case - not supported yet
|
342
|
+
raise ValueError(f"Complex anyOf patterns are not supported: {prop}")
|
343
|
+
|
280
344
|
# If it's a regular property with a direct type (e.g., string, number)
|
281
345
|
return {
|
282
346
|
"type": "string" if prop["type"] == "string" else prop["type"],
|
@@ -344,7 +408,18 @@ def pydantic_model_to_json_schema(model: Type[BaseModel]) -> dict:
|
|
344
408
|
return clean_schema(schema_part=schema, full_schema=schema)
|
345
409
|
|
346
410
|
|
347
|
-
def generate_schema(function, name: Optional[str] = None, description: Optional[str] = None) -> dict:
|
411
|
+
def generate_schema(function, name: Optional[str] = None, description: Optional[str] = None, tool_id: Optional[str] = None) -> dict:
|
412
|
+
# Validate that the function has a Google Python style docstring
|
413
|
+
try:
|
414
|
+
validate_google_style_docstring(function)
|
415
|
+
except ValueError:
|
416
|
+
logger.warning(
|
417
|
+
f"Function `{function.__name__}` in module `{function.__module__}` "
|
418
|
+
f"{'(tool_id=' + tool_id + ') ' if tool_id else ''}"
|
419
|
+
f"is not in Google style docstring format. "
|
420
|
+
f"Docstring received:\n{repr(function.__doc__[:200]) if function.__doc__ else 'None'}"
|
421
|
+
)
|
422
|
+
|
348
423
|
# Get the signature of the function
|
349
424
|
sig = inspect.signature(function)
|
350
425
|
|
@@ -353,10 +428,19 @@ def generate_schema(function, name: Optional[str] = None, description: Optional[
|
|
353
428
|
|
354
429
|
if not description:
|
355
430
|
# Support multiline docstrings for complex functions, TODO (cliandy): consider having this as a setting
|
356
|
-
|
431
|
+
# Always prefer combining short + long description when both exist
|
432
|
+
if docstring.short_description and docstring.long_description:
|
433
|
+
description = f"{docstring.short_description}\n\n{docstring.long_description}"
|
434
|
+
elif docstring.short_description:
|
435
|
+
description = docstring.short_description
|
436
|
+
elif docstring.long_description:
|
357
437
|
description = docstring.long_description
|
358
438
|
else:
|
359
|
-
description =
|
439
|
+
description = "No description available"
|
440
|
+
|
441
|
+
examples_section = extract_examples_section(function.__doc__)
|
442
|
+
if examples_section and "Examples:" not in description:
|
443
|
+
description = f"{description}\n\n{examples_section}"
|
360
444
|
|
361
445
|
# Prepare the schema dictionary
|
362
446
|
schema = {
|
@@ -443,6 +527,38 @@ def generate_schema(function, name: Optional[str] = None, description: Optional[
|
|
443
527
|
return schema
|
444
528
|
|
445
529
|
|
530
|
+
def extract_examples_section(docstring: Optional[str]) -> Optional[str]:
|
531
|
+
"""Extracts the 'Examples:' section from a Google-style docstring.
|
532
|
+
|
533
|
+
Args:
|
534
|
+
docstring (Optional[str]): The full docstring of a function.
|
535
|
+
|
536
|
+
Returns:
|
537
|
+
Optional[str]: The extracted examples section, or None if not found.
|
538
|
+
"""
|
539
|
+
if not docstring or "Examples:" not in docstring:
|
540
|
+
return None
|
541
|
+
|
542
|
+
lines = docstring.strip().splitlines()
|
543
|
+
in_examples = False
|
544
|
+
examples_lines = []
|
545
|
+
|
546
|
+
for line in lines:
|
547
|
+
stripped = line.strip()
|
548
|
+
|
549
|
+
if not in_examples and stripped.startswith("Examples:"):
|
550
|
+
in_examples = True
|
551
|
+
examples_lines.append(line)
|
552
|
+
continue
|
553
|
+
|
554
|
+
if in_examples:
|
555
|
+
if stripped and not line.startswith(" ") and stripped.endswith(":"):
|
556
|
+
break
|
557
|
+
examples_lines.append(line)
|
558
|
+
|
559
|
+
return "\n".join(examples_lines).strip() if examples_lines else None
|
560
|
+
|
561
|
+
|
446
562
|
def generate_schema_from_args_schema_v2(
|
447
563
|
args_schema: Type[BaseModel], name: Optional[str] = None, description: Optional[str] = None, append_heartbeat: bool = True
|
448
564
|
) -> Dict[str, Any]:
|
@@ -0,0 +1,18 @@
|
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from pydantic import BaseModel, Field
|
4
|
+
|
5
|
+
|
6
|
+
class SearchTask(BaseModel):
|
7
|
+
query: str = Field(description="Search query for web search")
|
8
|
+
question: str = Field(description="Question to answer from search results, considering full conversation context")
|
9
|
+
|
10
|
+
|
11
|
+
class FileOpenRequest(BaseModel):
|
12
|
+
file_name: str = Field(description="Name of the file to open")
|
13
|
+
offset: Optional[int] = Field(
|
14
|
+
default=None, description="Optional starting line number (1-indexed). If not specified, starts from beginning of file."
|
15
|
+
)
|
16
|
+
length: Optional[int] = Field(
|
17
|
+
default=None, description="Optional number of lines to view from offset. If not specified, views to end of file."
|
18
|
+
)
|
@@ -141,7 +141,11 @@ class SleeptimeMultiAgentV2(BaseAgent):
|
|
141
141
|
include_return_message_types: Optional[List[MessageType]] = None,
|
142
142
|
):
|
143
143
|
response = await self.step(
|
144
|
-
input_messages,
|
144
|
+
input_messages=input_messages,
|
145
|
+
max_steps=max_steps,
|
146
|
+
use_assistant_message=use_assistant_message,
|
147
|
+
request_start_timestamp_ns=request_start_timestamp_ns,
|
148
|
+
include_return_message_types=include_return_message_types,
|
145
149
|
)
|
146
150
|
|
147
151
|
for message in response.messages:
|
@@ -183,6 +183,7 @@ class SqlalchemyBase(CommonSqlalchemyMetaMixins, Base):
|
|
183
183
|
identifier_keys: Optional[List[str]] = None,
|
184
184
|
identity_id: Optional[str] = None,
|
185
185
|
query_options: Sequence[ORMOption] | None = None, # ← new
|
186
|
+
has_feedback: Optional[bool] = None,
|
186
187
|
**kwargs,
|
187
188
|
) -> List["SqlalchemyBase"]:
|
188
189
|
"""
|
@@ -281,6 +282,7 @@ class SqlalchemyBase(CommonSqlalchemyMetaMixins, Base):
|
|
281
282
|
identifier_keys: Optional[List[str]] = None,
|
282
283
|
identity_id: Optional[str] = None,
|
283
284
|
check_is_deleted: bool = False,
|
285
|
+
has_feedback: Optional[bool] = None,
|
284
286
|
**kwargs,
|
285
287
|
):
|
286
288
|
"""
|
@@ -337,6 +339,13 @@ class SqlalchemyBase(CommonSqlalchemyMetaMixins, Base):
|
|
337
339
|
if end_date:
|
338
340
|
query = query.filter(cls.created_at < end_date)
|
339
341
|
|
342
|
+
# Feedback filtering
|
343
|
+
if has_feedback is not None and hasattr(cls, "feedback"):
|
344
|
+
if has_feedback:
|
345
|
+
query = query.filter(cls.feedback.isnot(None))
|
346
|
+
else:
|
347
|
+
query = query.filter(cls.feedback.is_(None))
|
348
|
+
|
340
349
|
# Handle pagination based on before/after
|
341
350
|
if before_obj or after_obj:
|
342
351
|
conditions = []
|
@@ -152,9 +152,7 @@ class CreateAgent(BaseModel, validate_assignment=True): #
|
|
152
152
|
initial_message_sequence: Optional[List[MessageCreate]] = Field(
|
153
153
|
None, description="The initial set of messages to put in the agent's in-context memory."
|
154
154
|
)
|
155
|
-
include_base_tools: bool = Field(
|
156
|
-
True, description="If true, attaches the Letta core tools (e.g. archival_memory and core_memory related functions)."
|
157
|
-
)
|
155
|
+
include_base_tools: bool = Field(True, description="If true, attaches the Letta core tools (e.g. core_memory related functions).")
|
158
156
|
include_multi_agent_tools: bool = Field(
|
159
157
|
False, description="If true, attaches the Letta multi-agent tools (e.g. sending a message to another agent)."
|
160
158
|
)
|
@@ -7,6 +7,7 @@ from letta.orm.errors import NoResultFound
|
|
7
7
|
from letta.schemas.step import Step
|
8
8
|
from letta.server.rest_api.utils import get_letta_server
|
9
9
|
from letta.server.server import SyncServer
|
10
|
+
from letta.services.step_manager import FeedbackType
|
10
11
|
|
11
12
|
router = APIRouter(prefix="/steps", tags=["steps"])
|
12
13
|
|
@@ -23,6 +24,7 @@ async def list_steps(
|
|
23
24
|
agent_id: Optional[str] = Query(None, description="Filter by the ID of the agent that performed the step"),
|
24
25
|
trace_ids: Optional[list[str]] = Query(None, description="Filter by trace ids returned by the server"),
|
25
26
|
feedback: Optional[Literal["positive", "negative"]] = Query(None, description="Filter by feedback"),
|
27
|
+
has_feedback: Optional[bool] = Query(None, description="Filter by whether steps have feedback (true) or not (false)"),
|
26
28
|
tags: Optional[list[str]] = Query(None, description="Filter by tags"),
|
27
29
|
server: SyncServer = Depends(get_letta_server),
|
28
30
|
actor_id: Optional[str] = Header(None, alias="user_id"),
|
@@ -49,6 +51,7 @@ async def list_steps(
|
|
49
51
|
agent_id=agent_id,
|
50
52
|
trace_ids=trace_ids,
|
51
53
|
feedback=feedback,
|
54
|
+
has_feedback=has_feedback,
|
52
55
|
tags=tags,
|
53
56
|
)
|
54
57
|
|
@@ -72,7 +75,7 @@ async def retrieve_step(
|
|
72
75
|
@router.patch("/{step_id}/feedback", response_model=Step, operation_id="add_feedback")
|
73
76
|
async def add_feedback(
|
74
77
|
step_id: str,
|
75
|
-
feedback: Optional[
|
78
|
+
feedback: Optional[FeedbackType],
|
76
79
|
actor_id: Optional[str] = Header(None, alias="user_id"),
|
77
80
|
server: SyncServer = Depends(get_letta_server),
|
78
81
|
):
|
@@ -1496,7 +1496,7 @@ class SyncServer(Server):
|
|
1496
1496
|
await self.agent_manager.attach_block_async(agent_id=main_agent.id, block_id=block.id, actor=actor)
|
1497
1497
|
|
1498
1498
|
if clear_history and block.value != "":
|
1499
|
-
block = await self.block_manager.update_block_async(block_id=block.id,
|
1499
|
+
block = await self.block_manager.update_block_async(block_id=block.id, block_update=BlockUpdate(value=""), actor=actor)
|
1500
1500
|
|
1501
1501
|
request = CreateAgent(
|
1502
1502
|
name=main_agent.name + "-doc-sleeptime",
|
@@ -16,6 +16,7 @@ from letta.constants import (
|
|
16
16
|
BASE_VOICE_SLEEPTIME_CHAT_TOOLS,
|
17
17
|
BASE_VOICE_SLEEPTIME_TOOLS,
|
18
18
|
DEFAULT_TIMEZONE,
|
19
|
+
DEPRECATED_BASE_TOOLS,
|
19
20
|
FILES_TOOLS,
|
20
21
|
MULTI_AGENT_TOOLS,
|
21
22
|
)
|
@@ -77,6 +78,7 @@ from letta.services.helpers.agent_manager_helper import (
|
|
77
78
|
build_agent_passage_query,
|
78
79
|
build_passage_query,
|
79
80
|
build_source_passage_query,
|
81
|
+
calculate_base_tools,
|
80
82
|
check_supports_structured_output,
|
81
83
|
compile_system_message,
|
82
84
|
derive_system_message,
|
@@ -261,13 +263,13 @@ class AgentManager:
|
|
261
263
|
elif agent_create.enable_sleeptime:
|
262
264
|
tool_names |= set(BASE_SLEEPTIME_CHAT_TOOLS)
|
263
265
|
elif agent_create.agent_type == AgentType.memgpt_v2_agent:
|
264
|
-
tool_names |=
|
266
|
+
tool_names |= calculate_base_tools(is_v2=True)
|
265
267
|
elif agent_create.agent_type == AgentType.react_agent:
|
266
268
|
pass # no default tools
|
267
269
|
elif agent_create.agent_type == AgentType.workflow_agent:
|
268
270
|
pass # no default tools
|
269
271
|
else:
|
270
|
-
tool_names |=
|
272
|
+
tool_names |= calculate_base_tools(is_v2=False)
|
271
273
|
if agent_create.include_multi_agent_tools:
|
272
274
|
tool_names |= set(MULTI_AGENT_TOOLS)
|
273
275
|
|
@@ -428,16 +430,19 @@ class AgentManager:
|
|
428
430
|
elif agent_create.enable_sleeptime:
|
429
431
|
tool_names |= set(BASE_SLEEPTIME_CHAT_TOOLS)
|
430
432
|
elif agent_create.agent_type == AgentType.memgpt_v2_agent:
|
431
|
-
tool_names |=
|
433
|
+
tool_names |= calculate_base_tools(is_v2=True)
|
432
434
|
elif agent_create.agent_type == AgentType.react_agent:
|
433
435
|
pass # no default tools
|
434
436
|
elif agent_create.agent_type == AgentType.workflow_agent:
|
435
437
|
pass # no default tools
|
436
438
|
else:
|
437
|
-
tool_names |=
|
439
|
+
tool_names |= calculate_base_tools(is_v2=False)
|
438
440
|
if agent_create.include_multi_agent_tools:
|
439
441
|
tool_names |= set(MULTI_AGENT_TOOLS)
|
440
442
|
|
443
|
+
# take out the deprecated tool names
|
444
|
+
tool_names.difference_update(set(DEPRECATED_BASE_TOOLS))
|
445
|
+
|
441
446
|
supplied_ids = set(agent_create.tool_ids or [])
|
442
447
|
|
443
448
|
source_ids = agent_create.source_ids or []
|
@@ -124,8 +124,8 @@ class LineChunker:
|
|
124
124
|
else:
|
125
125
|
line_offset = 0
|
126
126
|
|
127
|
-
# Add line numbers for all strategies
|
128
|
-
content_lines = [f"{i + line_offset}: {line}" for i, line in enumerate(content_lines)]
|
127
|
+
# Add line numbers for all strategies (1-indexed for user display)
|
128
|
+
content_lines = [f"{i + line_offset + 1}: {line}" for i, line in enumerate(content_lines)]
|
129
129
|
|
130
130
|
# Add metadata about total chunks
|
131
131
|
if add_metadata:
|
@@ -133,7 +133,10 @@ class LineChunker:
|
|
133
133
|
"sentences" if strategy == ChunkingStrategy.DOCUMENTATION else "chunks" if strategy == ChunkingStrategy.PROSE else "lines"
|
134
134
|
)
|
135
135
|
if start is not None and end is not None:
|
136
|
-
|
136
|
+
# Display 1-indexed ranges for users
|
137
|
+
start_display = start + 1
|
138
|
+
end_display = end
|
139
|
+
content_lines.insert(0, f"[Viewing {chunk_type} {start_display} to {end_display} (out of {total_chunks} {chunk_type})]")
|
137
140
|
else:
|
138
141
|
content_lines.insert(0, f"[Viewing file start (out of {total_chunks} {chunk_type})]")
|
139
142
|
|
@@ -283,6 +283,40 @@ class FileAgentManager:
|
|
283
283
|
await session.execute(stmt)
|
284
284
|
await session.commit()
|
285
285
|
|
286
|
+
@enforce_types
|
287
|
+
@trace_method
|
288
|
+
async def close_all_other_files(self, *, agent_id: str, keep_file_names: List[str], actor: PydanticUser) -> List[str]:
|
289
|
+
"""Close every open file for this agent except those in keep_file_names.
|
290
|
+
|
291
|
+
Args:
|
292
|
+
agent_id: ID of the agent
|
293
|
+
keep_file_names: List of file names to keep open
|
294
|
+
actor: User performing the action
|
295
|
+
|
296
|
+
Returns:
|
297
|
+
List of file names that were closed
|
298
|
+
"""
|
299
|
+
async with db_registry.async_session() as session:
|
300
|
+
stmt = (
|
301
|
+
update(FileAgentModel)
|
302
|
+
.where(
|
303
|
+
and_(
|
304
|
+
FileAgentModel.agent_id == agent_id,
|
305
|
+
FileAgentModel.organization_id == actor.organization_id,
|
306
|
+
FileAgentModel.is_open.is_(True),
|
307
|
+
# Only add the NOT IN filter when there are names to keep
|
308
|
+
~FileAgentModel.file_name.in_(keep_file_names) if keep_file_names else True,
|
309
|
+
)
|
310
|
+
)
|
311
|
+
.values(is_open=False, visible_content=None)
|
312
|
+
.returning(FileAgentModel.file_name) # Gets the names we closed
|
313
|
+
.execution_options(synchronize_session=False) # No need to sync ORM state
|
314
|
+
)
|
315
|
+
|
316
|
+
closed_file_names = [row.file_name for row in (await session.execute(stmt))]
|
317
|
+
await session.commit()
|
318
|
+
return closed_file_names
|
319
|
+
|
286
320
|
@enforce_types
|
287
321
|
@trace_method
|
288
322
|
async def enforce_max_open_files_and_open(
|
@@ -1,12 +1,20 @@
|
|
1
1
|
from datetime import datetime
|
2
|
-
from typing import List, Literal, Optional
|
2
|
+
from typing import List, Literal, Optional, Set
|
3
3
|
|
4
4
|
import numpy as np
|
5
5
|
from sqlalchemy import Select, and_, asc, desc, func, literal, nulls_last, or_, select, union_all
|
6
6
|
from sqlalchemy.sql.expression import exists
|
7
7
|
|
8
8
|
from letta import system
|
9
|
-
from letta.constants import
|
9
|
+
from letta.constants import (
|
10
|
+
BASE_MEMORY_TOOLS,
|
11
|
+
BASE_MEMORY_TOOLS_V2,
|
12
|
+
BASE_TOOLS,
|
13
|
+
DEPRECATED_BASE_TOOLS,
|
14
|
+
IN_CONTEXT_MEMORY_KEYWORD,
|
15
|
+
MAX_EMBEDDING_DIM,
|
16
|
+
STRUCTURED_OUTPUT_MODELS,
|
17
|
+
)
|
10
18
|
from letta.embeddings import embedding_model
|
11
19
|
from letta.helpers import ToolRulesSolver
|
12
20
|
from letta.helpers.datetime_helpers import format_datetime, get_local_time, get_local_time_fast
|
@@ -1038,3 +1046,10 @@ def build_agent_passage_query(
|
|
1038
1046
|
query = query.order_by(AgentPassage.created_at.desc(), AgentPassage.id.asc())
|
1039
1047
|
|
1040
1048
|
return query
|
1049
|
+
|
1050
|
+
|
1051
|
+
def calculate_base_tools(is_v2: bool) -> Set[str]:
|
1052
|
+
if is_v2:
|
1053
|
+
return (set(BASE_TOOLS) - set(DEPRECATED_BASE_TOOLS)) | set(BASE_MEMORY_TOOLS_V2)
|
1054
|
+
else:
|
1055
|
+
return (set(BASE_TOOLS) - set(DEPRECATED_BASE_TOOLS)) | set(BASE_MEMORY_TOOLS)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
from datetime import datetime
|
2
|
+
from enum import Enum
|
2
3
|
from typing import List, Literal, Optional
|
3
4
|
|
4
5
|
from sqlalchemy import select
|
@@ -18,6 +19,11 @@ from letta.server.db import db_registry
|
|
18
19
|
from letta.utils import enforce_types
|
19
20
|
|
20
21
|
|
22
|
+
class FeedbackType(str, Enum):
|
23
|
+
POSITIVE = "positive"
|
24
|
+
NEGATIVE = "negative"
|
25
|
+
|
26
|
+
|
21
27
|
class StepManager:
|
22
28
|
|
23
29
|
@enforce_types
|
@@ -35,6 +41,7 @@ class StepManager:
|
|
35
41
|
agent_id: Optional[str] = None,
|
36
42
|
trace_ids: Optional[list[str]] = None,
|
37
43
|
feedback: Optional[Literal["positive", "negative"]] = None,
|
44
|
+
has_feedback: Optional[bool] = None,
|
38
45
|
) -> List[PydanticStep]:
|
39
46
|
"""List all jobs with optional pagination and status filter."""
|
40
47
|
async with db_registry.async_session() as session:
|
@@ -55,6 +62,7 @@ class StepManager:
|
|
55
62
|
end_date=end_date,
|
56
63
|
limit=limit,
|
57
64
|
ascending=True if order == "asc" else False,
|
65
|
+
has_feedback=has_feedback,
|
58
66
|
**filter_kwargs,
|
59
67
|
)
|
60
68
|
return [step.to_pydantic() for step in steps]
|
@@ -154,9 +162,7 @@ class StepManager:
|
|
154
162
|
|
155
163
|
@enforce_types
|
156
164
|
@trace_method
|
157
|
-
async def add_feedback_async(
|
158
|
-
self, step_id: str, feedback: Optional[Literal["positive", "negative"]], actor: PydanticUser
|
159
|
-
) -> PydanticStep:
|
165
|
+
async def add_feedback_async(self, step_id: str, feedback: Optional[FeedbackType], actor: PydanticUser) -> PydanticStep:
|
160
166
|
async with db_registry.async_session() as session:
|
161
167
|
step = await StepModel.read_async(db_session=session, identifier=step_id, actor=actor)
|
162
168
|
if not step:
|
@@ -250,6 +256,7 @@ class StepManager:
|
|
250
256
|
return job
|
251
257
|
|
252
258
|
|
259
|
+
# noinspection PyTypeChecker
|
253
260
|
@singleton
|
254
261
|
class NoopStepManager(StepManager):
|
255
262
|
"""
|
@@ -292,29 +299,4 @@ class NoopStepManager(StepManager):
|
|
292
299
|
job_id: Optional[str] = None,
|
293
300
|
step_id: Optional[str] = None,
|
294
301
|
) -> PydanticStep:
|
295
|
-
|
296
|
-
"origin": None,
|
297
|
-
"organization_id": actor.organization_id,
|
298
|
-
"agent_id": agent_id,
|
299
|
-
"provider_id": provider_id,
|
300
|
-
"provider_name": provider_name,
|
301
|
-
"provider_category": provider_category,
|
302
|
-
"model": model,
|
303
|
-
"model_endpoint": model_endpoint,
|
304
|
-
"context_window_limit": context_window_limit,
|
305
|
-
"completion_tokens": usage.completion_tokens,
|
306
|
-
"prompt_tokens": usage.prompt_tokens,
|
307
|
-
"total_tokens": usage.total_tokens,
|
308
|
-
"job_id": job_id,
|
309
|
-
"tags": [],
|
310
|
-
"tid": None,
|
311
|
-
"trace_id": get_trace_id(), # Get the current trace ID
|
312
|
-
}
|
313
|
-
if step_id:
|
314
|
-
step_data["id"] = step_id
|
315
|
-
async with db_registry.async_session() as session:
|
316
|
-
if job_id:
|
317
|
-
await self._verify_job_access_async(session, job_id, actor, access=["write"])
|
318
|
-
new_step = StepModel(**step_data)
|
319
|
-
await new_step.create_async(session)
|
320
|
-
return new_step.to_pydantic()
|
302
|
+
return
|