letta-nightly 0.7.8.dev20250502104219__tar.gz → 0.7.9.dev20250503104103__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/PKG-INFO +2 -2
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/__init__.py +2 -2
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/agents/helpers.py +58 -1
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/agents/letta_agent.py +13 -3
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/agents/letta_agent_batch.py +33 -17
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/agents/voice_agent.py +1 -2
- letta_nightly-0.7.9.dev20250503104103/letta/agents/voice_sleeptime_agent.py +154 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/function_sets/multi_agent.py +1 -1
- letta_nightly-0.7.9.dev20250503104103/letta/functions/function_sets/voice.py +80 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/helpers.py +7 -7
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/helpers/datetime_helpers.py +6 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/helpers/message_helper.py +19 -18
- letta_nightly-0.7.9.dev20250503104103/letta/jobs/scheduler.py +255 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/google_ai_client.py +13 -4
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/google_vertex_client.py +5 -1
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/openai.py +10 -2
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/openai_client.py +14 -2
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/message.py +4 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/voice_sleeptime.txt +2 -3
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/letta_message.py +1 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/letta_request.py +8 -1
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/letta_response.py +5 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/llm_batch_job.py +6 -4
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/llm_config.py +9 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/message.py +23 -2
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/providers.py +3 -1
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/app.py +15 -7
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/agents.py +3 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/messages.py +46 -1
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/steps.py +1 -1
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/utils.py +25 -6
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/server.py +11 -3
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/llm_batch_manager.py +60 -1
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/message_manager.py +1 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/summarizer/summarizer.py +42 -36
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/settings.py +1 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/tracing.py +5 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/pyproject.toml +2 -2
- letta_nightly-0.7.8.dev20250502104219/letta/agents/voice_sleeptime_agent.py +0 -399
- letta_nightly-0.7.8.dev20250502104219/letta/functions/function_sets/voice.py +0 -92
- letta_nightly-0.7.8.dev20250502104219/letta/jobs/scheduler.py +0 -71
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/LICENSE +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/README.md +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/__main__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/agent.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/agents/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/agents/base_agent.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/agents/ephemeral_agent.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/agents/exceptions.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/benchmark/benchmark.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/benchmark/constants.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/cli/cli.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/cli/cli_config.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/cli/cli_load.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/client/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/client/client.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/client/streaming.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/client/utils.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/config.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/constants.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/data_sources/connectors.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/data_sources/connectors_helper.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/embeddings.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/errors.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/ast_parsers.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/composio_helpers.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/function_sets/base.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/function_sets/extras.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/functions.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/interface.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/mcp_client/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/mcp_client/base_client.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/mcp_client/exceptions.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/mcp_client/sse_client.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/mcp_client/stdio_client.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/mcp_client/types.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/functions/schema_generator.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/groups/dynamic_multi_agent.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/groups/helpers.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/groups/round_robin_multi_agent.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/groups/sleeptime_multi_agent.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/groups/sleeptime_multi_agent_v2.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/groups/supervisor_multi_agent.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/helpers/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/helpers/composio_helpers.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/helpers/converters.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/helpers/json_helpers.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/helpers/tool_execution_helper.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/helpers/tool_rule_solver.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/humans/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/humans/examples/basic.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/humans/examples/cs_phd.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/interface.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/interfaces/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/interfaces/anthropic_streaming_interface.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/interfaces/openai_chat_completions_streaming_interface.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/interfaces/utils.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/jobs/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/jobs/helpers.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/jobs/llm_batch_job_polling.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/jobs/types.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/anthropic.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/anthropic_client.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/aws_bedrock.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/azure_openai.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/azure_openai_constants.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/cohere.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/deepseek.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/google_constants.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/helpers.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/llm_api_tools.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/llm_client.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/llm_client_base.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/llm_api/mistral.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/README.md +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/chat_completion_proxy.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/constants.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/function_parser.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/grammars/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/grammars/json.gbnf +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/json_parser.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/koboldcpp/api.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/koboldcpp/settings.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/llamacpp/api.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/llamacpp/settings.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/lmstudio/api.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/lmstudio/settings.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/ollama/api.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/ollama/settings.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/settings/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/settings/settings.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/settings/simple.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/utils.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/vllm/api.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/webui/api.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/webui/legacy_api.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/webui/legacy_settings.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/local_llm/webui/settings.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/log.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/main.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/memory.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/openai_backcompat/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/openai_backcompat/openai_object.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/__all__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/agent.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/agents_tags.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/base.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/block.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/block_history.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/blocks_agents.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/custom_columns.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/enums.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/errors.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/file.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/group.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/groups_agents.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/groups_blocks.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/identities_agents.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/identities_blocks.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/identity.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/job.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/job_messages.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/llm_batch_items.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/llm_batch_job.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/mixins.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/organization.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/passage.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/provider.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/sandbox_config.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/source.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/sources_agents.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/sqlalchemy_base.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/sqlite_functions.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/step.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/tool.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/tools_agents.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/orm/user.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/personas/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/personas/examples/anna_pa.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/personas/examples/google_search_persona.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/personas/examples/memgpt_doc.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/personas/examples/memgpt_starter.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/personas/examples/o1_persona.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/personas/examples/sam.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/personas/examples/sam_pov.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/personas/examples/sleeptime_doc_persona.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/personas/examples/sleeptime_memory_persona.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/personas/examples/sqldb/test.db +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/personas/examples/voice_memory_persona.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/gpt_summarize.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/gpt_system.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_base.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_chat.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_convo_only.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_doc.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_memory_only.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/memgpt_sleeptime_chat.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/sleeptime.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/sleeptime_doc_ingest.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/prompts/system/voice_chat.txt +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/pytest.ini +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/agent.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/block.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/embedding_config.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/embedding_config_overrides.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/enums.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/environment_variables.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/file.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/group.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/health.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/identity.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/job.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/letta_base.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/letta_message_content.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/llm_config_overrides.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/memory.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/openai/chat_completion_request.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/openai/chat_completion_response.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/openai/chat_completions.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/openai/embedding_response.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/openai/openai.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/organization.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/passage.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/response_format.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/run.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/sandbox_config.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/source.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/step.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/tool.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/tool_execution_result.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/tool_rule.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/usage.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/schemas/user.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/serialize_schemas/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/serialize_schemas/marshmallow_agent.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/serialize_schemas/marshmallow_agent_environment_variable.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/serialize_schemas/marshmallow_base.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/serialize_schemas/marshmallow_block.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/serialize_schemas/marshmallow_custom_fields.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/serialize_schemas/marshmallow_message.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/serialize_schemas/marshmallow_tag.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/serialize_schemas/marshmallow_tool.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/serialize_schemas/pydantic_agent_schema.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/constants.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/db.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/generate_openapi_schema.sh +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/auth/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/auth/index.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/auth_token.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/chat_completions_interface.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/interface.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/json_parser.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/blocks.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/embeddings.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/groups.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/health.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/identities.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/jobs.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/llms.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/organizations.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/providers.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/runs.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/sources.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/tags.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/tools.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/users.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/routers/v1/voice.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/rest_api/static_files.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/startup.sh +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/static_files/assets/index-048c9598.js +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/static_files/assets/index-0e31b727.css +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/static_files/favicon.ico +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/static_files/index.html +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/utils.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/ws_api/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/ws_api/example_client.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/ws_api/interface.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/ws_api/protocol.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/server/ws_api/server.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/agent_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/block_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/group_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/helpers/agent_manager_helper.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/helpers/tool_execution_helper.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/identity_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/job_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/mcp/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/mcp/base_client.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/mcp/sse_client.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/mcp/stdio_client.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/mcp/types.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/organization_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/passage_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/per_agent_lock_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/provider_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/sandbox_config_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/source_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/step_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/summarizer/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/summarizer/enums.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/tool_executor/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/tool_executor/tool_execution_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/tool_executor/tool_execution_sandbox.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/tool_executor/tool_executor.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/tool_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/tool_sandbox/__init__.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/tool_sandbox/base.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/tool_sandbox/e2b_sandbox.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/tool_sandbox/local_sandbox.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/services/user_manager.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/streaming_interface.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/streaming_utils.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/system.py +0 -0
- {letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/utils.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: letta-nightly
|
3
|
-
Version: 0.7.
|
3
|
+
Version: 0.7.9.dev20250503104103
|
4
4
|
Summary: Create LLM agents with long-term memory and custom tools
|
5
5
|
License: Apache License
|
6
6
|
Author: Letta Team
|
@@ -50,7 +50,7 @@ Requires-Dist: isort (>=5.13.2,<6.0.0) ; extra == "dev" or extra == "all"
|
|
50
50
|
Requires-Dist: jinja2 (>=3.1.5,<4.0.0)
|
51
51
|
Requires-Dist: langchain (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
|
52
52
|
Requires-Dist: langchain-community (>=0.3.7,<0.4.0) ; extra == "external-tools" or extra == "desktop" or extra == "all"
|
53
|
-
Requires-Dist: letta_client (>=0.1.
|
53
|
+
Requires-Dist: letta_client (>=0.1.136,<0.2.0)
|
54
54
|
Requires-Dist: llama-index (>=0.12.2,<0.13.0)
|
55
55
|
Requires-Dist: llama-index-embeddings-openai (>=0.3.1,<0.4.0)
|
56
56
|
Requires-Dist: locust (>=2.31.5,<3.0.0) ; extra == "dev" or extra == "desktop" or extra == "all"
|
{letta_nightly-0.7.8.dev20250502104219 → letta_nightly-0.7.9.dev20250503104103}/letta/__init__.py
RENAMED
@@ -1,9 +1,9 @@
|
|
1
|
-
__version__ = "0.7.
|
1
|
+
__version__ = "0.7.9"
|
2
2
|
|
3
3
|
# import clients
|
4
4
|
from letta.client.client import LocalClient, RESTClient, create_client
|
5
5
|
|
6
|
-
#
|
6
|
+
# imports for easier access
|
7
7
|
from letta.schemas.agent import AgentState
|
8
8
|
from letta.schemas.block import Block
|
9
9
|
from letta.schemas.embedding_config import EmbeddingConfig
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import xml.etree.ElementTree as ET
|
1
2
|
from typing import List, Tuple
|
2
3
|
|
3
4
|
from letta.schemas.agent import AgentState
|
@@ -20,7 +21,10 @@ def _create_letta_response(new_in_context_messages: list[Message], use_assistant
|
|
20
21
|
|
21
22
|
|
22
23
|
def _prepare_in_context_messages(
|
23
|
-
input_messages: List[MessageCreate],
|
24
|
+
input_messages: List[MessageCreate],
|
25
|
+
agent_state: AgentState,
|
26
|
+
message_manager: MessageManager,
|
27
|
+
actor: User,
|
24
28
|
) -> Tuple[List[Message], List[Message]]:
|
25
29
|
"""
|
26
30
|
Prepares in-context messages for an agent, based on the current state and a new user input.
|
@@ -50,3 +54,56 @@ def _prepare_in_context_messages(
|
|
50
54
|
)
|
51
55
|
|
52
56
|
return current_in_context_messages, new_in_context_messages
|
57
|
+
|
58
|
+
|
59
|
+
def serialize_message_history(messages: List[str], context: str) -> str:
|
60
|
+
"""
|
61
|
+
Produce an XML document like:
|
62
|
+
|
63
|
+
<memory>
|
64
|
+
<messages>
|
65
|
+
<message>…</message>
|
66
|
+
<message>…</message>
|
67
|
+
…
|
68
|
+
</messages>
|
69
|
+
<context>…</context>
|
70
|
+
</memory>
|
71
|
+
"""
|
72
|
+
root = ET.Element("memory")
|
73
|
+
|
74
|
+
msgs_el = ET.SubElement(root, "messages")
|
75
|
+
for msg in messages:
|
76
|
+
m = ET.SubElement(msgs_el, "message")
|
77
|
+
m.text = msg
|
78
|
+
|
79
|
+
sum_el = ET.SubElement(root, "context")
|
80
|
+
sum_el.text = context
|
81
|
+
|
82
|
+
# ET.tostring will escape reserved chars for you
|
83
|
+
return ET.tostring(root, encoding="unicode")
|
84
|
+
|
85
|
+
|
86
|
+
def deserialize_message_history(xml_str: str) -> Tuple[List[str], str]:
|
87
|
+
"""
|
88
|
+
Parse the XML back into (messages, context). Raises ValueError if tags are missing.
|
89
|
+
"""
|
90
|
+
try:
|
91
|
+
root = ET.fromstring(xml_str)
|
92
|
+
except ET.ParseError as e:
|
93
|
+
raise ValueError(f"Invalid XML: {e}")
|
94
|
+
|
95
|
+
msgs_el = root.find("messages")
|
96
|
+
if msgs_el is None:
|
97
|
+
raise ValueError("Missing <messages> section")
|
98
|
+
|
99
|
+
messages = []
|
100
|
+
for m in msgs_el.findall("message"):
|
101
|
+
# .text may be None if empty, so coerce to empty string
|
102
|
+
messages.append(m.text or "")
|
103
|
+
|
104
|
+
sum_el = root.find("context")
|
105
|
+
if sum_el is None:
|
106
|
+
raise ValueError("Missing <context> section")
|
107
|
+
context = sum_el.text or ""
|
108
|
+
|
109
|
+
return messages, context
|
@@ -62,6 +62,14 @@ class LettaAgent(BaseAgent):
|
|
62
62
|
@trace_method
|
63
63
|
async def step(self, input_messages: List[MessageCreate], max_steps: int = 10) -> LettaResponse:
|
64
64
|
agent_state = self.agent_manager.get_agent_by_id(self.agent_id, actor=self.actor)
|
65
|
+
current_in_context_messages, new_in_context_messages = await self._step(
|
66
|
+
agent_state=agent_state, input_messages=input_messages, max_steps=max_steps
|
67
|
+
)
|
68
|
+
return _create_letta_response(new_in_context_messages=new_in_context_messages, use_assistant_message=self.use_assistant_message)
|
69
|
+
|
70
|
+
async def _step(
|
71
|
+
self, agent_state: AgentState, input_messages: List[MessageCreate], max_steps: int = 10
|
72
|
+
) -> Tuple[List[Message], List[Message]]:
|
65
73
|
current_in_context_messages, new_in_context_messages = _prepare_in_context_messages(
|
66
74
|
input_messages, agent_state, self.message_manager, self.actor
|
67
75
|
)
|
@@ -72,7 +80,7 @@ class LettaAgent(BaseAgent):
|
|
72
80
|
put_inner_thoughts_first=True,
|
73
81
|
actor_id=self.actor.id,
|
74
82
|
)
|
75
|
-
for
|
83
|
+
for _ in range(max_steps):
|
76
84
|
response = await self._get_ai_reply(
|
77
85
|
llm_client=llm_client,
|
78
86
|
in_context_messages=current_in_context_messages + new_in_context_messages,
|
@@ -83,6 +91,7 @@ class LettaAgent(BaseAgent):
|
|
83
91
|
)
|
84
92
|
|
85
93
|
tool_call = response.choices[0].message.tool_calls[0]
|
94
|
+
|
86
95
|
persisted_messages, should_continue = await self._handle_ai_response(tool_call, agent_state, tool_rules_solver)
|
87
96
|
self.response_messages.extend(persisted_messages)
|
88
97
|
new_in_context_messages.extend(persisted_messages)
|
@@ -95,7 +104,7 @@ class LettaAgent(BaseAgent):
|
|
95
104
|
message_ids = [m.id for m in (current_in_context_messages + new_in_context_messages)]
|
96
105
|
self.agent_manager.set_in_context_messages(agent_id=self.agent_id, message_ids=message_ids, actor=self.actor)
|
97
106
|
|
98
|
-
return
|
107
|
+
return current_in_context_messages, new_in_context_messages
|
99
108
|
|
100
109
|
@trace_method
|
101
110
|
async def step_stream(
|
@@ -117,7 +126,7 @@ class LettaAgent(BaseAgent):
|
|
117
126
|
actor_id=self.actor.id,
|
118
127
|
)
|
119
128
|
|
120
|
-
for
|
129
|
+
for _ in range(max_steps):
|
121
130
|
stream = await self._get_ai_reply(
|
122
131
|
llm_client=llm_client,
|
123
132
|
in_context_messages=current_in_context_messages + new_in_context_messages,
|
@@ -181,6 +190,7 @@ class LettaAgent(BaseAgent):
|
|
181
190
|
ToolType.LETTA_MEMORY_CORE,
|
182
191
|
ToolType.LETTA_MULTI_AGENT_CORE,
|
183
192
|
ToolType.LETTA_SLEEPTIME_CORE,
|
193
|
+
ToolType.LETTA_VOICE_SLEEPTIME_CORE,
|
184
194
|
}
|
185
195
|
or (t.tool_type == ToolType.LETTA_MULTI_AGENT_CORE and t.name == "send_message_to_agents_matching_tags")
|
186
196
|
or (t.tool_type == ToolType.EXTERNAL_COMPOSIO)
|
@@ -137,21 +137,37 @@ class LettaAgentBatch:
|
|
137
137
|
log_event(name="load_and_prepare_agents")
|
138
138
|
agent_messages_mapping: Dict[str, List[Message]] = {}
|
139
139
|
agent_tools_mapping: Dict[str, List[dict]] = {}
|
140
|
+
# TODO: This isn't optimal, moving fast - prone to bugs because we pass around this half formed pydantic object
|
141
|
+
agent_batch_item_mapping: Dict[str, LLMBatchItem] = {}
|
140
142
|
agent_states = []
|
141
143
|
for batch_request in batch_requests:
|
142
144
|
agent_id = batch_request.agent_id
|
143
145
|
agent_state = self.agent_manager.get_agent_by_id(agent_id, actor=self.actor)
|
144
146
|
agent_states.append(agent_state)
|
145
147
|
|
146
|
-
agent_messages_mapping[agent_id] = self._get_in_context_messages_per_agent(
|
147
|
-
agent_state=agent_state, input_messages=batch_request.messages
|
148
|
-
)
|
149
|
-
|
150
148
|
if agent_id not in agent_step_state_mapping:
|
151
149
|
agent_step_state_mapping[agent_id] = AgentStepState(
|
152
150
|
step_number=0, tool_rules_solver=ToolRulesSolver(tool_rules=agent_state.tool_rules)
|
153
151
|
)
|
154
152
|
|
153
|
+
llm_batch_item = LLMBatchItem(
|
154
|
+
llm_batch_id="", # TODO: This is hacky, it gets filled in later
|
155
|
+
agent_id=agent_state.id,
|
156
|
+
llm_config=agent_state.llm_config,
|
157
|
+
request_status=JobStatus.created,
|
158
|
+
step_status=AgentStepStatus.paused,
|
159
|
+
step_state=agent_step_state_mapping[agent_id],
|
160
|
+
)
|
161
|
+
agent_batch_item_mapping[agent_id] = llm_batch_item
|
162
|
+
|
163
|
+
# Fill in the batch_item_id for the message
|
164
|
+
for msg in batch_request.messages:
|
165
|
+
msg.batch_item_id = llm_batch_item.id
|
166
|
+
|
167
|
+
agent_messages_mapping[agent_id] = self._prepare_in_context_messages_per_agent(
|
168
|
+
agent_state=agent_state, input_messages=batch_request.messages
|
169
|
+
)
|
170
|
+
|
155
171
|
agent_tools_mapping[agent_id] = self._prepare_tools_per_agent(agent_state, agent_step_state_mapping[agent_id].tool_rules_solver)
|
156
172
|
|
157
173
|
log_event(name="init_llm_client")
|
@@ -182,21 +198,14 @@ class LettaAgentBatch:
|
|
182
198
|
log_event(name="prepare_batch_items")
|
183
199
|
batch_items = []
|
184
200
|
for state in agent_states:
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
agent_id=state.id,
|
190
|
-
llm_config=state.llm_config,
|
191
|
-
request_status=JobStatus.created,
|
192
|
-
step_status=AgentStepStatus.paused,
|
193
|
-
step_state=step_state,
|
194
|
-
)
|
195
|
-
)
|
201
|
+
llm_batch_item = agent_batch_item_mapping[state.id]
|
202
|
+
# TODO This is hacky
|
203
|
+
llm_batch_item.llm_batch_id = llm_batch_job.id
|
204
|
+
batch_items.append(llm_batch_item)
|
196
205
|
|
197
206
|
if batch_items:
|
198
207
|
log_event(name="bulk_create_batch_items")
|
199
|
-
self.batch_manager.create_llm_batch_items_bulk(batch_items, actor=self.actor)
|
208
|
+
batch_items_persisted = self.batch_manager.create_llm_batch_items_bulk(batch_items, actor=self.actor)
|
200
209
|
|
201
210
|
log_event(name="return_batch_response")
|
202
211
|
return LettaBatchResponse(
|
@@ -335,9 +344,14 @@ class LettaAgentBatch:
|
|
335
344
|
exec_results: Sequence[Tuple[str, Tuple[str, bool]]],
|
336
345
|
ctx: _ResumeContext,
|
337
346
|
) -> Dict[str, List[Message]]:
|
347
|
+
# TODO: This is redundant, we should have this ready on the ctx
|
348
|
+
# TODO: I am doing it quick and dirty for now
|
349
|
+
agent_item_map: Dict[str, LLMBatchItem] = {item.agent_id: item for item in ctx.batch_items}
|
350
|
+
|
338
351
|
msg_map: Dict[str, List[Message]] = {}
|
339
352
|
for aid, (tool_res, success) in exec_results:
|
340
353
|
msgs = self._create_tool_call_messages(
|
354
|
+
llm_batch_item_id=agent_item_map[aid].id,
|
341
355
|
agent_state=ctx.agent_state_map[aid],
|
342
356
|
tool_call_name=ctx.tool_call_name_map[aid],
|
343
357
|
tool_call_args=ctx.tool_call_args_map[aid],
|
@@ -399,6 +413,7 @@ class LettaAgentBatch:
|
|
399
413
|
|
400
414
|
def _create_tool_call_messages(
|
401
415
|
self,
|
416
|
+
llm_batch_item_id: str,
|
402
417
|
agent_state: AgentState,
|
403
418
|
tool_call_name: str,
|
404
419
|
tool_call_args: Dict[str, Any],
|
@@ -421,6 +436,7 @@ class LettaAgentBatch:
|
|
421
436
|
reasoning_content=reasoning_content,
|
422
437
|
pre_computed_assistant_message_id=None,
|
423
438
|
pre_computed_tool_message_id=None,
|
439
|
+
llm_batch_item_id=llm_batch_item_id,
|
424
440
|
)
|
425
441
|
|
426
442
|
return tool_call_messages
|
@@ -477,7 +493,7 @@ class LettaAgentBatch:
|
|
477
493
|
valid_tool_names = tool_rules_solver.get_allowed_tool_names(available_tools=set([t.name for t in tools]))
|
478
494
|
return [enable_strict_mode(t.json_schema) for t in tools if t.name in set(valid_tool_names)]
|
479
495
|
|
480
|
-
def
|
496
|
+
def _prepare_in_context_messages_per_agent(self, agent_state: AgentState, input_messages: List[MessageCreate]) -> List[Message]:
|
481
497
|
current_in_context_messages, new_in_context_messages = _prepare_in_context_messages(
|
482
498
|
input_messages, agent_state, self.message_manager, self.actor
|
483
499
|
)
|
@@ -97,13 +97,12 @@ class VoiceAgent(BaseAgent):
|
|
97
97
|
summarizer_agent=VoiceSleeptimeAgent(
|
98
98
|
agent_id=voice_sleeptime_agent_id,
|
99
99
|
convo_agent_state=agent_state,
|
100
|
-
openai_client=self.openai_client,
|
101
100
|
message_manager=self.message_manager,
|
102
101
|
agent_manager=self.agent_manager,
|
103
102
|
actor=self.actor,
|
104
103
|
block_manager=self.block_manager,
|
104
|
+
passage_manager=self.passage_manager,
|
105
105
|
target_block_label=self.summary_block_label,
|
106
|
-
message_transcripts=[],
|
107
106
|
),
|
108
107
|
message_buffer_limit=agent_state.multi_agent_group.max_message_buffer_length,
|
109
108
|
message_buffer_min=agent_state.multi_agent_group.min_message_buffer_length,
|
@@ -0,0 +1,154 @@
|
|
1
|
+
from typing import AsyncGenerator, List, Tuple, Union
|
2
|
+
|
3
|
+
from letta.agents.helpers import _create_letta_response, serialize_message_history
|
4
|
+
from letta.agents.letta_agent import LettaAgent
|
5
|
+
from letta.orm.enums import ToolType
|
6
|
+
from letta.schemas.agent import AgentState
|
7
|
+
from letta.schemas.block import BlockUpdate
|
8
|
+
from letta.schemas.enums import MessageStreamStatus
|
9
|
+
from letta.schemas.letta_message import LegacyLettaMessage, LettaMessage
|
10
|
+
from letta.schemas.letta_response import LettaResponse
|
11
|
+
from letta.schemas.message import MessageCreate
|
12
|
+
from letta.schemas.tool_rule import ChildToolRule, ContinueToolRule, InitToolRule, TerminalToolRule
|
13
|
+
from letta.schemas.user import User
|
14
|
+
from letta.services.agent_manager import AgentManager
|
15
|
+
from letta.services.block_manager import BlockManager
|
16
|
+
from letta.services.message_manager import MessageManager
|
17
|
+
from letta.services.passage_manager import PassageManager
|
18
|
+
from letta.services.summarizer.enums import SummarizationMode
|
19
|
+
from letta.services.summarizer.summarizer import Summarizer
|
20
|
+
from letta.tracing import trace_method
|
21
|
+
|
22
|
+
|
23
|
+
class VoiceSleeptimeAgent(LettaAgent):
|
24
|
+
"""
|
25
|
+
A special variant of the LettaAgent that helps with offline memory computations specifically for voice.
|
26
|
+
"""
|
27
|
+
|
28
|
+
def __init__(
|
29
|
+
self,
|
30
|
+
agent_id: str,
|
31
|
+
convo_agent_state: AgentState,
|
32
|
+
message_manager: MessageManager,
|
33
|
+
agent_manager: AgentManager,
|
34
|
+
block_manager: BlockManager,
|
35
|
+
passage_manager: PassageManager,
|
36
|
+
target_block_label: str,
|
37
|
+
actor: User,
|
38
|
+
):
|
39
|
+
super().__init__(
|
40
|
+
agent_id=agent_id,
|
41
|
+
message_manager=message_manager,
|
42
|
+
agent_manager=agent_manager,
|
43
|
+
block_manager=block_manager,
|
44
|
+
passage_manager=passage_manager,
|
45
|
+
actor=actor,
|
46
|
+
)
|
47
|
+
|
48
|
+
self.convo_agent_state = convo_agent_state
|
49
|
+
self.target_block_label = target_block_label
|
50
|
+
self.message_transcripts = []
|
51
|
+
self.summarizer = Summarizer(
|
52
|
+
mode=SummarizationMode.STATIC_MESSAGE_BUFFER,
|
53
|
+
summarizer_agent=None,
|
54
|
+
message_buffer_limit=20,
|
55
|
+
message_buffer_min=10,
|
56
|
+
)
|
57
|
+
|
58
|
+
def update_message_transcript(self, message_transcripts: List[str]):
|
59
|
+
self.message_transcripts = message_transcripts
|
60
|
+
|
61
|
+
async def step(self, input_messages: List[MessageCreate], max_steps: int = 20) -> LettaResponse:
|
62
|
+
"""
|
63
|
+
Process the user's input message, allowing the model to call memory-related tools
|
64
|
+
until it decides to stop and provide a final response.
|
65
|
+
"""
|
66
|
+
agent_state = self.agent_manager.get_agent_by_id(self.agent_id, actor=self.actor)
|
67
|
+
|
68
|
+
# Add tool rules to the agent_state specifically for this type of agent
|
69
|
+
agent_state.tool_rules = [
|
70
|
+
InitToolRule(tool_name="store_memories"),
|
71
|
+
ChildToolRule(tool_name="store_memories", children=["rethink_user_memory"]),
|
72
|
+
ContinueToolRule(tool_name="rethink_user_memory"),
|
73
|
+
TerminalToolRule(tool_name="finish_rethinking_memory"),
|
74
|
+
]
|
75
|
+
|
76
|
+
# Summarize
|
77
|
+
current_in_context_messages, new_in_context_messages = await super()._step(
|
78
|
+
agent_state=agent_state, input_messages=input_messages, max_steps=max_steps
|
79
|
+
)
|
80
|
+
new_in_context_messages, updated = self.summarizer.summarize(
|
81
|
+
in_context_messages=current_in_context_messages, new_letta_messages=new_in_context_messages
|
82
|
+
)
|
83
|
+
self.agent_manager.set_in_context_messages(
|
84
|
+
agent_id=self.agent_id, message_ids=[m.id for m in new_in_context_messages], actor=self.actor
|
85
|
+
)
|
86
|
+
|
87
|
+
return _create_letta_response(new_in_context_messages=new_in_context_messages, use_assistant_message=self.use_assistant_message)
|
88
|
+
|
89
|
+
@trace_method
|
90
|
+
async def _execute_tool(self, tool_name: str, tool_args: dict, agent_state: AgentState) -> Tuple[str, bool]:
|
91
|
+
"""
|
92
|
+
Executes a tool and returns (result, success_flag).
|
93
|
+
"""
|
94
|
+
# Special memory case
|
95
|
+
target_tool = next((x for x in agent_state.tools if x.name == tool_name), None)
|
96
|
+
if not target_tool:
|
97
|
+
return f"Tool not found: {tool_name}", False
|
98
|
+
|
99
|
+
try:
|
100
|
+
if target_tool.name == "rethink_user_memory" and target_tool.tool_type == ToolType.LETTA_VOICE_SLEEPTIME_CORE:
|
101
|
+
return self.rethink_user_memory(agent_state=agent_state, **tool_args)
|
102
|
+
elif target_tool.name == "finish_rethinking_memory" and target_tool.tool_type == ToolType.LETTA_VOICE_SLEEPTIME_CORE:
|
103
|
+
return "", True
|
104
|
+
elif target_tool.name == "store_memories" and target_tool.tool_type == ToolType.LETTA_VOICE_SLEEPTIME_CORE:
|
105
|
+
chunks = tool_args.get("chunks", [])
|
106
|
+
results = [self.store_memory(agent_state=self.convo_agent_state, **chunk_args) for chunk_args in chunks]
|
107
|
+
|
108
|
+
aggregated_result = next((res for res, _ in results if res is not None), None)
|
109
|
+
aggregated_success = all(success for _, success in results)
|
110
|
+
|
111
|
+
return aggregated_result, aggregated_success # Note that here we store to the convo agent's archival memory
|
112
|
+
else:
|
113
|
+
result = f"Voice sleeptime agent tried invoking invalid tool with type {target_tool.tool_type}: {target_tool}"
|
114
|
+
return result, False
|
115
|
+
except Exception as e:
|
116
|
+
return f"Failed to call tool. Error: {e}", False
|
117
|
+
|
118
|
+
def rethink_user_memory(self, new_memory: str, agent_state: AgentState) -> Tuple[str, bool]:
|
119
|
+
if agent_state.memory.get_block(self.target_block_label) is None:
|
120
|
+
agent_state.memory.create_block(label=self.target_block_label, value=new_memory)
|
121
|
+
|
122
|
+
agent_state.memory.update_block_value(label=self.target_block_label, value=new_memory)
|
123
|
+
|
124
|
+
target_block = agent_state.memory.get_block(self.target_block_label)
|
125
|
+
self.block_manager.update_block(block_id=target_block.id, block_update=BlockUpdate(value=target_block.value), actor=self.actor)
|
126
|
+
|
127
|
+
return "", True
|
128
|
+
|
129
|
+
def store_memory(self, start_index: int, end_index: int, context: str, agent_state: AgentState) -> Tuple[str, bool]:
|
130
|
+
"""
|
131
|
+
Store a memory.
|
132
|
+
"""
|
133
|
+
try:
|
134
|
+
messages = self.message_transcripts[start_index : end_index + 1]
|
135
|
+
memory = serialize_message_history(messages, context)
|
136
|
+
self.agent_manager.passage_manager.insert_passage(
|
137
|
+
agent_state=agent_state,
|
138
|
+
agent_id=agent_state.id,
|
139
|
+
text=memory,
|
140
|
+
actor=self.actor,
|
141
|
+
)
|
142
|
+
self.agent_manager.rebuild_system_prompt(agent_id=agent_state.id, actor=self.actor, force=True)
|
143
|
+
|
144
|
+
return "", True
|
145
|
+
except Exception as e:
|
146
|
+
return f"Failed to store memory given start_index {start_index} and end_index {end_index}: {e}", False
|
147
|
+
|
148
|
+
async def step_stream(
|
149
|
+
self, input_messages: List[MessageCreate], max_steps: int = 10, use_assistant_message: bool = False
|
150
|
+
) -> AsyncGenerator[Union[LettaMessage, LegacyLettaMessage, MessageStreamStatus], None]:
|
151
|
+
"""
|
152
|
+
This agent is synchronous-only. If called in an async context, raise an error.
|
153
|
+
"""
|
154
|
+
raise NotImplementedError("VoiceSleeptimeAgent does not support async step.")
|
@@ -68,7 +68,7 @@ def send_message_to_agent_async(self: "Agent", message: str, other_agent_id: str
|
|
68
68
|
messages=messages,
|
69
69
|
other_agent_id=other_agent_id,
|
70
70
|
log_prefix="[send_message_to_agent_async]",
|
71
|
-
use_retries=False, # or True if you want to use
|
71
|
+
use_retries=False, # or True if you want to use _async_send_message_with_retries
|
72
72
|
)
|
73
73
|
|
74
74
|
# Immediately return to caller
|
@@ -0,0 +1,80 @@
|
|
1
|
+
## Voice chat + sleeptime tools
|
2
|
+
from typing import List, Optional
|
3
|
+
|
4
|
+
from pydantic import BaseModel, Field
|
5
|
+
|
6
|
+
|
7
|
+
def rethink_user_memory(agent_state: "AgentState", new_memory: str) -> None:
|
8
|
+
"""
|
9
|
+
Rewrite memory block for the main agent, new_memory should contain all current information from the block that is not outdated or inconsistent, integrating any new information, resulting in a new memory block that is organized, readable, and comprehensive.
|
10
|
+
|
11
|
+
Args:
|
12
|
+
new_memory (str): The new memory with information integrated from the memory block. If there is no new information, then this should be the same as the content in the source block.
|
13
|
+
|
14
|
+
Returns:
|
15
|
+
None: None is always returned as this function does not produce a response.
|
16
|
+
"""
|
17
|
+
# This is implemented directly in the agent loop
|
18
|
+
return None
|
19
|
+
|
20
|
+
|
21
|
+
def finish_rethinking_memory(agent_state: "AgentState") -> None: # type: ignore
|
22
|
+
"""
|
23
|
+
This function is called when the agent is done rethinking the memory.
|
24
|
+
|
25
|
+
Returns:
|
26
|
+
Optional[str]: None is always returned as this function does not produce a response.
|
27
|
+
"""
|
28
|
+
return None
|
29
|
+
|
30
|
+
|
31
|
+
class MemoryChunk(BaseModel):
|
32
|
+
start_index: int = Field(
|
33
|
+
...,
|
34
|
+
description="Zero-based index of the first evicted line in this chunk.",
|
35
|
+
)
|
36
|
+
end_index: int = Field(
|
37
|
+
...,
|
38
|
+
description="Zero-based index of the last evicted line (inclusive).",
|
39
|
+
)
|
40
|
+
context: str = Field(
|
41
|
+
...,
|
42
|
+
description="1-3 sentence paraphrase capturing key facts/details, user preferences, or goals that this chunk reveals—written for future retrieval.",
|
43
|
+
)
|
44
|
+
|
45
|
+
|
46
|
+
def store_memories(agent_state: "AgentState", chunks: List[MemoryChunk]) -> None:
|
47
|
+
"""
|
48
|
+
Persist dialogue that is about to fall out of the agent’s context window.
|
49
|
+
|
50
|
+
Args:
|
51
|
+
chunks (List[MemoryChunk]):
|
52
|
+
Each chunk pinpoints a contiguous block of **evicted** lines and provides a short, forward-looking synopsis (`context`) that will be embedded for future semantic lookup.
|
53
|
+
|
54
|
+
Returns:
|
55
|
+
None
|
56
|
+
"""
|
57
|
+
# This is implemented directly in the agent loop
|
58
|
+
return None
|
59
|
+
|
60
|
+
|
61
|
+
def search_memory(
|
62
|
+
agent_state: "AgentState",
|
63
|
+
convo_keyword_queries: Optional[List[str]],
|
64
|
+
start_minutes_ago: Optional[int],
|
65
|
+
end_minutes_ago: Optional[int],
|
66
|
+
) -> Optional[str]:
|
67
|
+
"""
|
68
|
+
Look in long-term or earlier-conversation memory only when the user asks about something missing from the visible context. The user’s latest utterance is sent automatically as the main query.
|
69
|
+
|
70
|
+
Args:
|
71
|
+
convo_keyword_queries (Optional[List[str]]): Extra keywords (e.g., order ID, place name). Use *null* if not appropriate for the latest user message.
|
72
|
+
start_minutes_ago (Optional[int]): Newer bound of the time window for results, specified in minutes ago. Use *null* if no lower time bound is needed.
|
73
|
+
end_minutes_ago (Optional[int]): Older bound of the time window, in minutes ago. Use *null* if no upper bound is needed.
|
74
|
+
|
75
|
+
Returns:
|
76
|
+
Optional[str]: A formatted string of matching memory entries, or None if no
|
77
|
+
relevant memories are found.
|
78
|
+
"""
|
79
|
+
# This is implemented directly in the agent loop
|
80
|
+
return None
|
@@ -231,7 +231,7 @@ async def async_execute_send_message_to_agent(
|
|
231
231
|
"""
|
232
232
|
Async helper to:
|
233
233
|
1) validate the target agent exists & is in the same org,
|
234
|
-
2) send a message via
|
234
|
+
2) send a message via _async_send_message_with_retries.
|
235
235
|
"""
|
236
236
|
server = get_letta_server()
|
237
237
|
|
@@ -242,7 +242,7 @@ async def async_execute_send_message_to_agent(
|
|
242
242
|
raise ValueError(f"Target agent {other_agent_id} either does not exist or is not in org " f"({sender_agent.user.organization_id}).")
|
243
243
|
|
244
244
|
# 2. Use your async retry logic
|
245
|
-
return await
|
245
|
+
return await _async_send_message_with_retries(
|
246
246
|
server=server,
|
247
247
|
sender_agent=sender_agent,
|
248
248
|
target_agent_id=other_agent_id,
|
@@ -304,7 +304,7 @@ async def _async_send_message_with_retries(
|
|
304
304
|
timeout: int,
|
305
305
|
logging_prefix: Optional[str] = None,
|
306
306
|
) -> str:
|
307
|
-
logging_prefix = logging_prefix or "[
|
307
|
+
logging_prefix = logging_prefix or "[_async_send_message_with_retries]"
|
308
308
|
|
309
309
|
for attempt in range(1, max_retries + 1):
|
310
310
|
try:
|
@@ -363,7 +363,7 @@ def fire_and_forget_send_to_agent(
|
|
363
363
|
messages (List[MessageCreate]): The messages to send.
|
364
364
|
other_agent_id (str): The ID of the target agent.
|
365
365
|
log_prefix (str): Prefix for logging.
|
366
|
-
use_retries (bool): If True, uses
|
366
|
+
use_retries (bool): If True, uses _async_send_message_with_retries;
|
367
367
|
if False, calls server.send_message_to_agent directly.
|
368
368
|
"""
|
369
369
|
server = get_letta_server()
|
@@ -381,7 +381,7 @@ def fire_and_forget_send_to_agent(
|
|
381
381
|
async def background_task():
|
382
382
|
try:
|
383
383
|
if use_retries:
|
384
|
-
result = await
|
384
|
+
result = await _async_send_message_with_retries(
|
385
385
|
server=server,
|
386
386
|
sender_agent=sender_agent,
|
387
387
|
target_agent_id=other_agent_id,
|
@@ -434,7 +434,7 @@ async def _send_message_to_agents_matching_tags_async(
|
|
434
434
|
sender_agent: "Agent", server: "SyncServer", messages: List[MessageCreate], matching_agents: List["AgentState"]
|
435
435
|
) -> List[str]:
|
436
436
|
async def _send_single(agent_state):
|
437
|
-
return await
|
437
|
+
return await _async_send_message_with_retries(
|
438
438
|
server=server,
|
439
439
|
sender_agent=sender_agent,
|
440
440
|
target_agent_id=agent_state.id,
|
@@ -475,7 +475,7 @@ async def _send_message_to_all_agents_in_group_async(sender_agent: "Agent", mess
|
|
475
475
|
|
476
476
|
async def _send_single(agent_state):
|
477
477
|
async with sem:
|
478
|
-
return await
|
478
|
+
return await _async_send_message_with_retries(
|
479
479
|
server=server,
|
480
480
|
sender_agent=sender_agent,
|
481
481
|
target_agent_id=agent_state.id,
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import re
|
2
|
+
import time
|
2
3
|
from datetime import datetime, timedelta, timezone
|
3
4
|
from time import strftime
|
4
5
|
|
@@ -77,6 +78,11 @@ def get_utc_time_int() -> int:
|
|
77
78
|
return int(get_utc_time().timestamp())
|
78
79
|
|
79
80
|
|
81
|
+
def get_utc_timestamp_ns() -> int:
|
82
|
+
"""Get the current UTC time in nanoseconds"""
|
83
|
+
return int(time.time_ns())
|
84
|
+
|
85
|
+
|
80
86
|
def timestamp_to_datetime(timestamp_seconds: int) -> datetime:
|
81
87
|
"""Convert Unix timestamp in seconds to UTC datetime object"""
|
82
88
|
return datetime.fromtimestamp(timestamp_seconds, tz=timezone.utc)
|