letta-nightly 0.6.27.dev20250219104103__tar.gz → 0.6.28.dev20250220163833__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of letta-nightly might be problematic. Click here for more details.
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/PKG-INFO +9 -2
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/__init__.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/agent.py +13 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/client/client.py +2 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/constants.py +2 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/schema_generator.py +6 -6
- letta_nightly-0.6.28.dev20250220163833/letta/helpers/converters.py +153 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/helpers/tool_rule_solver.py +11 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/anthropic.py +10 -5
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/aws_bedrock.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/azure_openai_constants.py +1 -0
- letta_nightly-0.6.28.dev20250220163833/letta/llm_api/deepseek.py +303 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/llm_api_tools.py +81 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/openai.py +13 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/chat_completion_proxy.py +15 -2
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/lmstudio/api.py +75 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/__init__.py +1 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/agent.py +14 -5
- letta_nightly-0.6.28.dev20250220163833/letta/orm/custom_columns.py +80 -0
- letta_nightly-0.6.28.dev20250220163833/letta/orm/identity.py +39 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/organization.py +2 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/agent.py +13 -1
- letta_nightly-0.6.28.dev20250220163833/letta/schemas/identity.py +44 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/llm_config.py +2 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/message.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/openai/chat_completion_response.py +2 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/providers.py +72 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/tool_rule.py +9 -1
- letta_nightly-0.6.28.dev20250220163833/letta/serialize_schemas/__init__.py +1 -0
- letta_nightly-0.6.28.dev20250220163833/letta/serialize_schemas/agent.py +36 -0
- letta_nightly-0.6.28.dev20250220163833/letta/serialize_schemas/base.py +12 -0
- letta_nightly-0.6.28.dev20250220163833/letta/serialize_schemas/custom_fields.py +69 -0
- letta_nightly-0.6.28.dev20250220163833/letta/serialize_schemas/message.py +15 -0
- letta_nightly-0.6.28.dev20250220163833/letta/server/db.py +111 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/app.py +8 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/interface.py +114 -9
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/__init__.py +2 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/agents.py +7 -1
- letta_nightly-0.6.28.dev20250220163833/letta/server/rest_api/routers/v1/identities.py +111 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/server.py +13 -116
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/agent_manager.py +54 -6
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/block_manager.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/helpers/agent_manager_helper.py +15 -0
- letta_nightly-0.6.28.dev20250220163833/letta/services/identity_manager.py +140 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/job_manager.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/message_manager.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/organization_manager.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/passage_manager.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/provider_manager.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/sandbox_config_manager.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/source_manager.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/step_manager.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/tool_manager.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/user_manager.py +1 -1
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/settings.py +3 -0
- letta_nightly-0.6.28.dev20250220163833/letta/tracing.py +205 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/utils.py +4 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/pyproject.toml +9 -2
- letta_nightly-0.6.27.dev20250219104103/letta/orm/custom_columns.py +0 -159
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/LICENSE +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/README.md +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/__main__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/benchmark/benchmark.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/benchmark/constants.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/chat_only_agent.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/cli/cli.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/cli/cli_config.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/cli/cli_load.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/client/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/client/streaming.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/client/utils.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/config.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/data_sources/connectors.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/data_sources/connectors_helper.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/embeddings.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/errors.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/ast_parsers.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/function_sets/base.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/function_sets/extras.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/function_sets/multi_agent.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/functions.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/helpers.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/functions/interface.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/helpers/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/helpers/composio_helpers.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/helpers/datetime_helpers.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/helpers/json_helpers.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/humans/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/humans/examples/basic.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/humans/examples/cs_phd.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/interface.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/azure_openai.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/cohere.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/google_ai.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/google_constants.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/google_vertex.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/helpers.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/llm_api/mistral.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/README.md +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/constants.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/function_parser.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/grammars/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/grammars/json.gbnf +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/json_parser.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/koboldcpp/api.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/koboldcpp/settings.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llamacpp/api.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llamacpp/settings.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/lmstudio/settings.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/ollama/api.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/ollama/settings.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/settings/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/settings/settings.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/settings/simple.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/utils.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/vllm/api.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/webui/api.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/webui/legacy_api.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/webui/legacy_settings.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/local_llm/webui/settings.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/log.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/main.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/memory.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/offline_memory_agent.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/openai_backcompat/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/openai_backcompat/openai_object.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/__all__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/agents_tags.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/base.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/block.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/blocks_agents.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/enums.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/errors.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/file.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/job.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/job_messages.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/message.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/mixins.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/passage.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/provider.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/sandbox_config.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/source.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/sources_agents.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/sqlalchemy_base.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/sqlite_functions.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/step.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/tool.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/tools_agents.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/orm/user.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/anna_pa.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/google_search_persona.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/memgpt_doc.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/memgpt_starter.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/o1_persona.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/offline_memory_persona.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/sam.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/sam_pov.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/personas/examples/sqldb/test.db +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/gpt_summarize.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/gpt_system.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_base.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_chat.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_convo_only.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_doc.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/pytest.ini +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/block.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/embedding_config.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/embedding_config_overrides.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/enums.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/environment_variables.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/file.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/health.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/job.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/letta_base.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/letta_message.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/letta_request.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/letta_response.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/llm_config_overrides.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/memory.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/openai/chat_completion_request.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/openai/chat_completions.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/openai/embedding_response.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/openai/openai.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/organization.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/passage.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/run.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/sandbox_config.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/source.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/step.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/tool.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/usage.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/schemas/user.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/constants.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/generate_openapi_schema.sh +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/auth/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/auth/index.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/auth_token.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/chat_completions_interface.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/optimistic_json_parser.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/blocks.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/health.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/jobs.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/llms.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/organizations.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/providers.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/runs.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/sources.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/steps.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/tags.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/tools.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/routers/v1/users.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/static_files.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/rest_api/utils.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/startup.sh +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/static_files/assets/index-048c9598.js +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/static_files/assets/index-0e31b727.css +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/static_files/favicon.ico +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/static_files/index.html +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/utils.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/ws_api/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/ws_api/example_client.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/ws_api/interface.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/ws_api/protocol.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/server/ws_api/server.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/__init__.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/helpers/tool_execution_helper.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/per_agent_lock_manager.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/services/tool_execution_sandbox.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/streaming_interface.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/streaming_utils.py +0 -0
- {letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/system.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: letta-nightly
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.28.dev20250220163833
|
|
4
4
|
Summary: Create LLM agents with long-term memory and custom tools
|
|
5
5
|
License: Apache License
|
|
6
6
|
Author: Letta Team
|
|
@@ -20,11 +20,13 @@ Provides-Extra: google
|
|
|
20
20
|
Provides-Extra: postgres
|
|
21
21
|
Provides-Extra: qdrant
|
|
22
22
|
Provides-Extra: server
|
|
23
|
+
Provides-Extra: telemetry
|
|
23
24
|
Provides-Extra: tests
|
|
24
25
|
Requires-Dist: alembic (>=1.13.3,<2.0.0)
|
|
25
26
|
Requires-Dist: anthropic (>=0.43.0,<0.44.0)
|
|
26
27
|
Requires-Dist: autoflake (>=2.3.0,<3.0.0) ; extra == "dev" or extra == "all"
|
|
27
28
|
Requires-Dist: black[jupyter] (>=24.2.0,<25.0.0) ; extra == "dev" or extra == "all"
|
|
29
|
+
Requires-Dist: boto3 (>=1.36.24,<2.0.0) ; extra == "bedrock" or extra == "all"
|
|
28
30
|
Requires-Dist: brotli (>=1.1.0,<2.0.0)
|
|
29
31
|
Requires-Dist: colorama (>=0.4.6,<0.5.0)
|
|
30
32
|
Requires-Dist: composio-core (>=0.7.2,<0.8.0)
|
|
@@ -37,7 +39,7 @@ Requires-Dist: docx2txt (>=0.8,<0.9)
|
|
|
37
39
|
Requires-Dist: e2b-code-interpreter (>=1.0.3,<2.0.0) ; extra == "cloud-tool-sandbox"
|
|
38
40
|
Requires-Dist: faker (>=36.1.0,<37.0.0)
|
|
39
41
|
Requires-Dist: fastapi (>=0.115.6,<0.116.0) ; extra == "server" or extra == "all"
|
|
40
|
-
Requires-Dist: google-genai (>=1.1.0,<2.0.0) ; extra == "google"
|
|
42
|
+
Requires-Dist: google-genai (>=1.1.0,<2.0.0) ; extra == "google" or extra == "all"
|
|
41
43
|
Requires-Dist: grpcio (>=1.68.1,<2.0.0)
|
|
42
44
|
Requires-Dist: grpcio-tools (>=1.68.1,<2.0.0)
|
|
43
45
|
Requires-Dist: html2text (>=2020.1.16,<2021.0.0)
|
|
@@ -51,9 +53,14 @@ Requires-Dist: letta_client (>=0.1.23,<0.2.0)
|
|
|
51
53
|
Requires-Dist: llama-index (>=0.12.2,<0.13.0)
|
|
52
54
|
Requires-Dist: llama-index-embeddings-openai (>=0.3.1,<0.4.0)
|
|
53
55
|
Requires-Dist: locust (>=2.31.5,<3.0.0) ; extra == "dev" or extra == "all"
|
|
56
|
+
Requires-Dist: marshmallow-sqlalchemy (>=1.4.1,<2.0.0)
|
|
54
57
|
Requires-Dist: nltk (>=3.8.1,<4.0.0)
|
|
55
58
|
Requires-Dist: numpy (>=1.26.2,<2.0.0)
|
|
56
59
|
Requires-Dist: openai (>=1.60.0,<2.0.0)
|
|
60
|
+
Requires-Dist: opentelemetry-api (==1.30.0) ; extra == "telemetry" or extra == "all"
|
|
61
|
+
Requires-Dist: opentelemetry-exporter-otlp (==1.30.0) ; extra == "telemetry" or extra == "all"
|
|
62
|
+
Requires-Dist: opentelemetry-instrumentation-requests (==0.51b0) ; extra == "telemetry" or extra == "all"
|
|
63
|
+
Requires-Dist: opentelemetry-sdk (==1.30.0) ; extra == "telemetry" or extra == "all"
|
|
57
64
|
Requires-Dist: pathvalidate (>=3.2.1,<4.0.0)
|
|
58
65
|
Requires-Dist: pexpect (>=4.9.0,<5.0.0) ; extra == "dev" or extra == "all"
|
|
59
66
|
Requires-Dist: pg8000 (>=1.30.3,<2.0.0) ; extra == "postgres" or extra == "all"
|
{letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/agent.py
RENAMED
|
@@ -60,6 +60,7 @@ from letta.services.tool_manager import ToolManager
|
|
|
60
60
|
from letta.settings import summarizer_settings
|
|
61
61
|
from letta.streaming_interface import StreamingRefreshCLIInterface
|
|
62
62
|
from letta.system import get_heartbeat, get_token_limit_warning, package_function_response, package_summarize_message, package_user_message
|
|
63
|
+
from letta.tracing import trace_method
|
|
63
64
|
from letta.utils import (
|
|
64
65
|
count_tokens,
|
|
65
66
|
get_friendly_error_msg,
|
|
@@ -309,6 +310,7 @@ class Agent(BaseAgent):
|
|
|
309
310
|
# Return updated messages
|
|
310
311
|
return messages
|
|
311
312
|
|
|
313
|
+
@trace_method("Get AI Reply")
|
|
312
314
|
def _get_ai_reply(
|
|
313
315
|
self,
|
|
314
316
|
message_sequence: List[Message],
|
|
@@ -399,6 +401,7 @@ class Agent(BaseAgent):
|
|
|
399
401
|
log_telemetry(self.logger, "_handle_ai_response finish catch-all exception")
|
|
400
402
|
raise Exception("Retries exhausted and no valid response received.")
|
|
401
403
|
|
|
404
|
+
@trace_method("Handle AI Response")
|
|
402
405
|
def _handle_ai_response(
|
|
403
406
|
self,
|
|
404
407
|
response_message: ChatCompletionMessage, # TODO should we eventually move the Message creation outside of this function?
|
|
@@ -492,7 +495,10 @@ class Agent(BaseAgent):
|
|
|
492
495
|
try:
|
|
493
496
|
raw_function_args = function_call.arguments
|
|
494
497
|
function_args = parse_json(raw_function_args)
|
|
495
|
-
|
|
498
|
+
if not isinstance(function_args, dict):
|
|
499
|
+
raise ValueError(f"Function arguments are not a dictionary: {function_args} (raw={raw_function_args})")
|
|
500
|
+
except Exception as e:
|
|
501
|
+
print(e)
|
|
496
502
|
error_msg = f"Error parsing JSON for function '{function_name}' arguments: {function_call.arguments}"
|
|
497
503
|
function_response = "None" # more like "never ran?"
|
|
498
504
|
messages = self._handle_function_error_response(
|
|
@@ -627,9 +633,15 @@ class Agent(BaseAgent):
|
|
|
627
633
|
elif self.tool_rules_solver.is_terminal_tool(function_name):
|
|
628
634
|
heartbeat_request = False
|
|
629
635
|
|
|
636
|
+
# if continue tool rule, then must request a heartbeat
|
|
637
|
+
# TODO: dont even include heartbeats in the args
|
|
638
|
+
if self.tool_rules_solver.is_continue_tool(function_name):
|
|
639
|
+
heartbeat_request = True
|
|
640
|
+
|
|
630
641
|
log_telemetry(self.logger, "_handle_ai_response finish")
|
|
631
642
|
return messages, heartbeat_request, function_failed
|
|
632
643
|
|
|
644
|
+
@trace_method("Agent Step")
|
|
633
645
|
def step(
|
|
634
646
|
self,
|
|
635
647
|
messages: Union[Message, List[Message]],
|
|
@@ -2351,6 +2351,7 @@ class LocalClient(AbstractClient):
|
|
|
2351
2351
|
tool_rules: Optional[List[BaseToolRule]] = None,
|
|
2352
2352
|
include_base_tools: Optional[bool] = True,
|
|
2353
2353
|
include_multi_agent_tools: bool = False,
|
|
2354
|
+
include_base_tool_rules: bool = True,
|
|
2354
2355
|
# metadata
|
|
2355
2356
|
metadata: Optional[Dict] = {"human:": DEFAULT_HUMAN, "persona": DEFAULT_PERSONA},
|
|
2356
2357
|
description: Optional[str] = None,
|
|
@@ -2402,6 +2403,7 @@ class LocalClient(AbstractClient):
|
|
|
2402
2403
|
"tool_rules": tool_rules,
|
|
2403
2404
|
"include_base_tools": include_base_tools,
|
|
2404
2405
|
"include_multi_agent_tools": include_multi_agent_tools,
|
|
2406
|
+
"include_base_tool_rules": include_base_tool_rules,
|
|
2405
2407
|
"system": system,
|
|
2406
2408
|
"agent_type": agent_type,
|
|
2407
2409
|
"llm_config": llm_config if llm_config else self._default_llm_config,
|
{letta_nightly-0.6.27.dev20250219104103 → letta_nightly-0.6.28.dev20250220163833}/letta/constants.py
RENAMED
|
@@ -86,6 +86,8 @@ NON_USER_MSG_PREFIX = "[This is an automated system message hidden from the user
|
|
|
86
86
|
# The max amount of tokens supported by the underlying model (eg 8k for gpt-4 and Mistral 7B)
|
|
87
87
|
LLM_MAX_TOKENS = {
|
|
88
88
|
"DEFAULT": 8192,
|
|
89
|
+
"deepseek-chat": 64000,
|
|
90
|
+
"deepseek-reasoner": 64000,
|
|
89
91
|
## OpenAI models: https://platform.openai.com/docs/models/overview
|
|
90
92
|
# "o1-preview
|
|
91
93
|
"chatgpt-4o-latest": 128000,
|
|
@@ -394,12 +394,12 @@ def generate_schema(function, name: Optional[str] = None, description: Optional[
|
|
|
394
394
|
# append the heartbeat
|
|
395
395
|
# TODO: don't hard-code
|
|
396
396
|
# TODO: if terminal, don't include this
|
|
397
|
-
if function.__name__ not in ["send_message"]:
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
397
|
+
# if function.__name__ not in ["send_message"]:
|
|
398
|
+
schema["parameters"]["properties"]["request_heartbeat"] = {
|
|
399
|
+
"type": "boolean",
|
|
400
|
+
"description": "Request an immediate heartbeat after function execution. Set to `True` if you want to send a follow-up message or run a follow-up function.",
|
|
401
|
+
}
|
|
402
|
+
schema["parameters"]["required"].append("request_heartbeat")
|
|
403
403
|
|
|
404
404
|
return schema
|
|
405
405
|
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import base64
|
|
2
|
+
from typing import Any, Dict, List, Optional, Union
|
|
3
|
+
|
|
4
|
+
import numpy as np
|
|
5
|
+
from openai.types.chat.chat_completion_message_tool_call import ChatCompletionMessageToolCall as OpenAIToolCall
|
|
6
|
+
from openai.types.chat.chat_completion_message_tool_call import Function as OpenAIFunction
|
|
7
|
+
from sqlalchemy import Dialect
|
|
8
|
+
|
|
9
|
+
from letta.schemas.embedding_config import EmbeddingConfig
|
|
10
|
+
from letta.schemas.enums import ToolRuleType
|
|
11
|
+
from letta.schemas.llm_config import LLMConfig
|
|
12
|
+
from letta.schemas.tool_rule import ChildToolRule, ConditionalToolRule, ContinueToolRule, InitToolRule, TerminalToolRule, ToolRule
|
|
13
|
+
|
|
14
|
+
# --------------------------
|
|
15
|
+
# LLMConfig Serialization
|
|
16
|
+
# --------------------------
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def serialize_llm_config(config: Union[Optional[LLMConfig], Dict]) -> Optional[Dict]:
|
|
20
|
+
"""Convert an LLMConfig object into a JSON-serializable dictionary."""
|
|
21
|
+
if config and isinstance(config, LLMConfig):
|
|
22
|
+
return config.model_dump()
|
|
23
|
+
return config
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def deserialize_llm_config(data: Optional[Dict]) -> Optional[LLMConfig]:
|
|
27
|
+
"""Convert a dictionary back into an LLMConfig object."""
|
|
28
|
+
return LLMConfig(**data) if data else None
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# --------------------------
|
|
32
|
+
# EmbeddingConfig Serialization
|
|
33
|
+
# --------------------------
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def serialize_embedding_config(config: Union[Optional[EmbeddingConfig], Dict]) -> Optional[Dict]:
|
|
37
|
+
"""Convert an EmbeddingConfig object into a JSON-serializable dictionary."""
|
|
38
|
+
if config and isinstance(config, EmbeddingConfig):
|
|
39
|
+
return config.model_dump()
|
|
40
|
+
return config
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def deserialize_embedding_config(data: Optional[Dict]) -> Optional[EmbeddingConfig]:
|
|
44
|
+
"""Convert a dictionary back into an EmbeddingConfig object."""
|
|
45
|
+
return EmbeddingConfig(**data) if data else None
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# --------------------------
|
|
49
|
+
# ToolRule Serialization
|
|
50
|
+
# --------------------------
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def serialize_tool_rules(tool_rules: Optional[List[ToolRule]]) -> List[Dict[str, Any]]:
|
|
54
|
+
"""Convert a list of ToolRules into a JSON-serializable format."""
|
|
55
|
+
|
|
56
|
+
if not tool_rules:
|
|
57
|
+
return []
|
|
58
|
+
|
|
59
|
+
data = [{**rule.model_dump(), "type": rule.type.value} for rule in tool_rules] # Convert Enum to string for JSON compatibility
|
|
60
|
+
|
|
61
|
+
# Validate ToolRule structure
|
|
62
|
+
for rule_data in data:
|
|
63
|
+
if rule_data["type"] == ToolRuleType.constrain_child_tools.value and "children" not in rule_data:
|
|
64
|
+
raise ValueError(f"Invalid ToolRule serialization: 'children' field missing for rule {rule_data}")
|
|
65
|
+
|
|
66
|
+
return data
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def deserialize_tool_rules(data: Optional[List[Dict]]) -> List[Union[ChildToolRule, InitToolRule, TerminalToolRule, ConditionalToolRule]]:
|
|
70
|
+
"""Convert a list of dictionaries back into ToolRule objects."""
|
|
71
|
+
if not data:
|
|
72
|
+
return []
|
|
73
|
+
|
|
74
|
+
return [deserialize_tool_rule(rule_data) for rule_data in data]
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def deserialize_tool_rule(data: Dict) -> Union[ChildToolRule, InitToolRule, TerminalToolRule, ConditionalToolRule, ContinueToolRule]:
|
|
78
|
+
"""Deserialize a dictionary to the appropriate ToolRule subclass based on 'type'."""
|
|
79
|
+
rule_type = ToolRuleType(data.get("type"))
|
|
80
|
+
|
|
81
|
+
if rule_type == ToolRuleType.run_first:
|
|
82
|
+
return InitToolRule(**data)
|
|
83
|
+
elif rule_type == ToolRuleType.exit_loop:
|
|
84
|
+
return TerminalToolRule(**data)
|
|
85
|
+
elif rule_type == ToolRuleType.constrain_child_tools:
|
|
86
|
+
return ChildToolRule(**data)
|
|
87
|
+
elif rule_type == ToolRuleType.conditional:
|
|
88
|
+
return ConditionalToolRule(**data)
|
|
89
|
+
elif rule_type == ToolRuleType.continue_loop:
|
|
90
|
+
return ContinueToolRule(**data)
|
|
91
|
+
raise ValueError(f"Unknown ToolRule type: {rule_type}")
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
# --------------------------
|
|
95
|
+
# ToolCall Serialization
|
|
96
|
+
# --------------------------
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def serialize_tool_calls(tool_calls: Optional[List[Union[OpenAIToolCall, dict]]]) -> List[Dict]:
|
|
100
|
+
"""Convert a list of OpenAI ToolCall objects into JSON-serializable format."""
|
|
101
|
+
if not tool_calls:
|
|
102
|
+
return []
|
|
103
|
+
|
|
104
|
+
serialized_calls = []
|
|
105
|
+
for call in tool_calls:
|
|
106
|
+
if isinstance(call, OpenAIToolCall):
|
|
107
|
+
serialized_calls.append(call.model_dump())
|
|
108
|
+
elif isinstance(call, dict):
|
|
109
|
+
serialized_calls.append(call) # Already a dictionary, leave it as-is
|
|
110
|
+
else:
|
|
111
|
+
raise TypeError(f"Unexpected tool call type: {type(call)}")
|
|
112
|
+
|
|
113
|
+
return serialized_calls
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def deserialize_tool_calls(data: Optional[List[Dict]]) -> List[OpenAIToolCall]:
|
|
117
|
+
"""Convert a JSON list back into OpenAIToolCall objects."""
|
|
118
|
+
if not data:
|
|
119
|
+
return []
|
|
120
|
+
|
|
121
|
+
calls = []
|
|
122
|
+
for item in data:
|
|
123
|
+
func_data = item.pop("function", None)
|
|
124
|
+
tool_call_function = OpenAIFunction(**func_data) if func_data else None
|
|
125
|
+
calls.append(OpenAIToolCall(function=tool_call_function, **item))
|
|
126
|
+
|
|
127
|
+
return calls
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
# --------------------------
|
|
131
|
+
# Vector Serialization
|
|
132
|
+
# --------------------------
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def serialize_vector(vector: Optional[Union[List[float], np.ndarray]]) -> Optional[bytes]:
|
|
136
|
+
"""Convert a NumPy array or list into a base64-encoded byte string."""
|
|
137
|
+
if vector is None:
|
|
138
|
+
return None
|
|
139
|
+
if isinstance(vector, list):
|
|
140
|
+
vector = np.array(vector, dtype=np.float32)
|
|
141
|
+
|
|
142
|
+
return base64.b64encode(vector.tobytes())
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def deserialize_vector(data: Optional[bytes], dialect: Dialect) -> Optional[np.ndarray]:
|
|
146
|
+
"""Convert a base64-encoded byte string back into a NumPy array."""
|
|
147
|
+
if not data:
|
|
148
|
+
return None
|
|
149
|
+
|
|
150
|
+
if dialect.name == "sqlite":
|
|
151
|
+
data = base64.b64decode(data)
|
|
152
|
+
|
|
153
|
+
return np.frombuffer(data, dtype=np.float32)
|
|
@@ -4,7 +4,7 @@ from typing import List, Optional, Union
|
|
|
4
4
|
from pydantic import BaseModel, Field
|
|
5
5
|
|
|
6
6
|
from letta.schemas.enums import ToolRuleType
|
|
7
|
-
from letta.schemas.tool_rule import BaseToolRule, ChildToolRule, ConditionalToolRule, InitToolRule, TerminalToolRule
|
|
7
|
+
from letta.schemas.tool_rule import BaseToolRule, ChildToolRule, ConditionalToolRule, ContinueToolRule, InitToolRule, TerminalToolRule
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class ToolRuleValidationError(Exception):
|
|
@@ -18,6 +18,9 @@ class ToolRulesSolver(BaseModel):
|
|
|
18
18
|
init_tool_rules: List[InitToolRule] = Field(
|
|
19
19
|
default_factory=list, description="Initial tool rules to be used at the start of tool execution."
|
|
20
20
|
)
|
|
21
|
+
continue_tool_rules: List[ContinueToolRule] = Field(
|
|
22
|
+
default_factory=list, description="Continue tool rules to be used to continue tool execution."
|
|
23
|
+
)
|
|
21
24
|
tool_rules: List[Union[ChildToolRule, ConditionalToolRule]] = Field(
|
|
22
25
|
default_factory=list, description="Standard tool rules for controlling execution sequence and allowed transitions."
|
|
23
26
|
)
|
|
@@ -43,6 +46,9 @@ class ToolRulesSolver(BaseModel):
|
|
|
43
46
|
elif rule.type == ToolRuleType.exit_loop:
|
|
44
47
|
assert isinstance(rule, TerminalToolRule)
|
|
45
48
|
self.terminal_tool_rules.append(rule)
|
|
49
|
+
elif rule.type == ToolRuleType.continue_loop:
|
|
50
|
+
assert isinstance(rule, ContinueToolRule)
|
|
51
|
+
self.continue_tool_rules.append(rule)
|
|
46
52
|
|
|
47
53
|
def update_tool_usage(self, tool_name: str):
|
|
48
54
|
"""Update the internal state to track the last tool called."""
|
|
@@ -80,6 +86,10 @@ class ToolRulesSolver(BaseModel):
|
|
|
80
86
|
"""Check if the tool has children tools"""
|
|
81
87
|
return any(rule.tool_name == tool_name for rule in self.tool_rules)
|
|
82
88
|
|
|
89
|
+
def is_continue_tool(self, tool_name):
|
|
90
|
+
"""Check if the tool is defined as a continue tool in the tool rules."""
|
|
91
|
+
return any(rule.tool_name == tool_name for rule in self.continue_tool_rules)
|
|
92
|
+
|
|
83
93
|
def validate_conditional_tool(self, rule: ConditionalToolRule):
|
|
84
94
|
"""
|
|
85
95
|
Validate a conditional tool rule
|
|
@@ -519,6 +519,7 @@ def _prepare_anthropic_request(
|
|
|
519
519
|
prefix_fill: bool = True,
|
|
520
520
|
# if true, put COT inside the tool calls instead of inside the content
|
|
521
521
|
put_inner_thoughts_in_kwargs: bool = False,
|
|
522
|
+
bedrock: bool = False,
|
|
522
523
|
) -> dict:
|
|
523
524
|
"""Prepare the request data for Anthropic API format."""
|
|
524
525
|
|
|
@@ -606,10 +607,11 @@ def _prepare_anthropic_request(
|
|
|
606
607
|
# NOTE: cannot prefill with tools for opus:
|
|
607
608
|
# Your API request included an `assistant` message in the final position, which would pre-fill the `assistant` response. When using tools with "claude-3-opus-20240229"
|
|
608
609
|
if prefix_fill and not put_inner_thoughts_in_kwargs and "opus" not in data["model"]:
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
610
|
+
if not bedrock: # not support for bedrock
|
|
611
|
+
data["messages"].append(
|
|
612
|
+
# Start the thinking process for the assistant
|
|
613
|
+
{"role": "assistant", "content": f"<{inner_thoughts_xml_tag}>"},
|
|
614
|
+
)
|
|
613
615
|
|
|
614
616
|
# Validate max_tokens
|
|
615
617
|
assert "max_tokens" in data, data
|
|
@@ -651,13 +653,16 @@ def anthropic_bedrock_chat_completions_request(
|
|
|
651
653
|
inner_thoughts_xml_tag: Optional[str] = "thinking",
|
|
652
654
|
) -> ChatCompletionResponse:
|
|
653
655
|
"""Make a chat completion request to Anthropic via AWS Bedrock."""
|
|
654
|
-
data = _prepare_anthropic_request(data, inner_thoughts_xml_tag)
|
|
656
|
+
data = _prepare_anthropic_request(data, inner_thoughts_xml_tag, bedrock=True)
|
|
655
657
|
|
|
656
658
|
# Get the client
|
|
657
659
|
client = get_bedrock_client()
|
|
658
660
|
|
|
659
661
|
# Make the request
|
|
660
662
|
try:
|
|
663
|
+
# bedrock does not support certain args
|
|
664
|
+
data["tool_choice"] = {"type": "any"}
|
|
665
|
+
|
|
661
666
|
response = client.messages.create(**data)
|
|
662
667
|
return convert_anthropic_response_to_chatcompletion(response=response, inner_thoughts_xml_tag=inner_thoughts_xml_tag)
|
|
663
668
|
except PermissionDeniedError:
|
|
@@ -10,7 +10,7 @@ def has_valid_aws_credentials() -> bool:
|
|
|
10
10
|
"""
|
|
11
11
|
Check if AWS credentials are properly configured.
|
|
12
12
|
"""
|
|
13
|
-
valid_aws_credentials = os.getenv("
|
|
13
|
+
valid_aws_credentials = os.getenv("AWS_ACCESS_KEY") and os.getenv("AWS_SECRET_ACCESS_KEY") and os.getenv("AWS_REGION")
|
|
14
14
|
return valid_aws_credentials
|
|
15
15
|
|
|
16
16
|
|