letta-nightly 0.6.1.dev20241206104246__tar.gz → 0.6.1.dev20241208104134__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.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/PKG-INFO +2 -2
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/agent.py +68 -76
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/agent_store/db.py +1 -77
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/agent_store/storage.py +0 -5
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/cli/cli.py +1 -4
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/client/client.py +11 -14
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/constants.py +1 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/functions/function_sets/base.py +33 -5
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/functions/helpers.py +3 -3
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/llm_api/openai.py +0 -1
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +13 -1
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/main.py +2 -2
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/memory.py +4 -82
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/metadata.py +0 -35
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/o1_agent.py +7 -2
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/offline_memory_agent.py +6 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/__init__.py +2 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/file.py +1 -1
- letta_nightly-0.6.1.dev20241208104134/letta/orm/message.py +64 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/mixins.py +16 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/organization.py +1 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/sqlalchemy_base.py +118 -26
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/letta_base.py +7 -6
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/message.py +6 -12
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/tool.py +18 -11
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/app.py +2 -3
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/v1/agents.py +7 -6
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/v1/blocks.py +2 -2
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/v1/tools.py +26 -4
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/utils.py +3 -1
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/server.py +67 -62
- letta_nightly-0.6.1.dev20241208104134/letta/server/static_files/assets/index-43ab4d62.css +1 -0
- letta_nightly-0.6.1.dev20241208104134/letta/server/static_files/assets/index-4848e3d7.js +40 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/static_files/index.html +2 -2
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/block_manager.py +1 -1
- letta_nightly-0.6.1.dev20241208104134/letta/services/message_manager.py +194 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/organization_manager.py +6 -9
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/sandbox_config_manager.py +16 -1
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/source_manager.py +1 -1
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/tool_manager.py +2 -4
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/user_manager.py +1 -1
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/pyproject.toml +2 -2
- letta_nightly-0.6.1.dev20241206104246/letta/agent_store/lancedb.py +0 -177
- letta_nightly-0.6.1.dev20241206104246/letta/persistence_manager.py +0 -149
- letta_nightly-0.6.1.dev20241206104246/letta/server/static_files/assets/index-1b5d1a41.js +0 -271
- letta_nightly-0.6.1.dev20241206104246/letta/server/static_files/assets/index-56a3f8c6.css +0 -1
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/LICENSE +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/README.md +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/__main__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/agent_store/chroma.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/agent_store/milvus.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/agent_store/qdrant.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/benchmark/benchmark.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/benchmark/constants.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/chat_only_agent.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/cli/cli_config.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/cli/cli_load.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/client/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/client/streaming.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/client/utils.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/config.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/credentials.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/data_sources/connectors.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/data_sources/connectors_helper.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/embeddings.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/errors.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/functions/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/functions/function_sets/extras.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/functions/functions.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/functions/schema_generator.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/helpers/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/helpers/tool_rule_solver.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/humans/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/humans/examples/basic.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/humans/examples/cs_phd.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/interface.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/llm_api/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/llm_api/anthropic.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/llm_api/azure_openai.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/llm_api/azure_openai_constants.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/llm_api/cohere.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/llm_api/google_ai.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/llm_api/helpers.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/llm_api/llm_api_tools.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/llm_api/mistral.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/README.md +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/chat_completion_proxy.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/constants.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/function_parser.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/grammars/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/grammars/json.gbnf +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/json_parser.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/koboldcpp/api.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/koboldcpp/settings.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/llamacpp/api.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/llamacpp/settings.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/lmstudio/api.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/lmstudio/settings.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/ollama/api.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/ollama/settings.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/settings/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/settings/settings.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/settings/simple.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/utils.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/vllm/api.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/webui/api.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/webui/legacy_api.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/webui/legacy_settings.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/local_llm/webui/settings.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/log.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/openai_backcompat/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/openai_backcompat/openai_object.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/__all__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/agents_tags.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/base.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/block.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/blocks_agents.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/enums.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/errors.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/job.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/sandbox_config.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/source.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/tool.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/tools_agents.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/orm/user.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/personas/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/personas/examples/anna_pa.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/personas/examples/google_search_persona.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/personas/examples/memgpt_doc.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/personas/examples/memgpt_starter.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/personas/examples/o1_persona.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/personas/examples/offline_memory_persona.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/personas/examples/sam.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/personas/examples/sam_pov.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/personas/examples/sqldb/test.db +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/gpt_summarize.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/gpt_system.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/system/memgpt_base.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/system/memgpt_chat.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/system/memgpt_convo_only.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/system/memgpt_doc.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/system/memgpt_offline_memory.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/prompts/system/memgpt_offline_memory_chat.txt +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/providers.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/pytest.ini +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/agent.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/agents_tags.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/api_key.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/block.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/blocks_agents.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/embedding_config.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/enums.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/file.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/health.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/job.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/letta_message.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/letta_request.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/letta_response.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/llm_config.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/memory.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/openai/chat_completion_request.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/openai/chat_completion_response.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/openai/chat_completions.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/openai/embedding_response.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/openai/openai.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/organization.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/passage.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/sandbox_config.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/source.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/tool_rule.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/tools_agents.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/usage.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/schemas/user.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/constants.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/generate_openapi_schema.sh +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/auth/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/auth/index.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/auth_token.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/interface.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/openai/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/openai/assistants/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/openai/assistants/assistants.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/openai/assistants/schemas.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/openai/assistants/threads.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/v1/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/v1/health.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/v1/jobs.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/v1/llms.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/v1/organizations.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/v1/sandbox_configs.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/v1/sources.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/routers/v1/users.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/rest_api/static_files.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/startup.sh +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/static_files/favicon.ico +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/utils.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/ws_api/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/ws_api/example_client.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/ws_api/interface.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/ws_api/protocol.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/server/ws_api/server.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/__init__.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/agents_tags_manager.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/blocks_agents_manager.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/job_manager.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/per_agent_lock_manager.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/tool_execution_sandbox.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/tool_sandbox_env/.gitkeep +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/services/tools_agents_manager.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/settings.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/streaming_interface.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/streaming_utils.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/system.py +0 -0
- {letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: letta-nightly
|
|
3
|
-
Version: 0.6.1.
|
|
3
|
+
Version: 0.6.1.dev20241208104134
|
|
4
4
|
Summary: Create LLM agents with long-term memory and custom tools
|
|
5
5
|
License: Apache License
|
|
6
6
|
Author: Letta Team
|
|
@@ -26,7 +26,7 @@ Requires-Dist: alembic (>=1.13.3,<2.0.0)
|
|
|
26
26
|
Requires-Dist: autoflake (>=2.3.0,<3.0.0) ; extra == "dev" or extra == "all"
|
|
27
27
|
Requires-Dist: black[jupyter] (>=24.2.0,<25.0.0) ; extra == "dev" or extra == "all"
|
|
28
28
|
Requires-Dist: chromadb (>=0.4.24,<0.5.0)
|
|
29
|
-
Requires-Dist: composio-core (>=0.5.
|
|
29
|
+
Requires-Dist: composio-core (>=0.5.51,<0.6.0)
|
|
30
30
|
Requires-Dist: composio-langchain (>=0.5.28,<0.6.0)
|
|
31
31
|
Requires-Dist: datasets (>=2.14.6,<3.0.0) ; extra == "dev" or extra == "all"
|
|
32
32
|
Requires-Dist: demjson3 (>=3.0.6,<4.0.0)
|
{letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/agent.py
RENAMED
|
@@ -19,6 +19,7 @@ from letta.constants import (
|
|
|
19
19
|
MESSAGE_SUMMARY_TRUNC_KEEP_N_LAST,
|
|
20
20
|
MESSAGE_SUMMARY_TRUNC_TOKEN_FRAC,
|
|
21
21
|
MESSAGE_SUMMARY_WARNING_FRAC,
|
|
22
|
+
O1_BASE_TOOLS,
|
|
22
23
|
REQ_HEARTBEAT_MESSAGE,
|
|
23
24
|
)
|
|
24
25
|
from letta.errors import LLMError
|
|
@@ -27,16 +28,15 @@ from letta.interface import AgentInterface
|
|
|
27
28
|
from letta.llm_api.helpers import is_context_overflow_error
|
|
28
29
|
from letta.llm_api.llm_api_tools import create
|
|
29
30
|
from letta.local_llm.utils import num_tokens_from_functions, num_tokens_from_messages
|
|
30
|
-
from letta.memory import ArchivalMemory,
|
|
31
|
+
from letta.memory import ArchivalMemory, EmbeddingArchivalMemory, summarize_messages
|
|
31
32
|
from letta.metadata import MetadataStore
|
|
32
33
|
from letta.orm import User
|
|
33
|
-
from letta.persistence_manager import LocalStateManager
|
|
34
34
|
from letta.schemas.agent import AgentState, AgentStepResponse
|
|
35
35
|
from letta.schemas.block import BlockUpdate
|
|
36
36
|
from letta.schemas.embedding_config import EmbeddingConfig
|
|
37
37
|
from letta.schemas.enums import MessageRole
|
|
38
38
|
from letta.schemas.memory import ContextWindowOverview, Memory
|
|
39
|
-
from letta.schemas.message import Message,
|
|
39
|
+
from letta.schemas.message import Message, MessageUpdate
|
|
40
40
|
from letta.schemas.openai.chat_completion_request import (
|
|
41
41
|
Tool as ChatCompletionRequestTool,
|
|
42
42
|
)
|
|
@@ -49,7 +49,9 @@ from letta.schemas.passage import Passage
|
|
|
49
49
|
from letta.schemas.tool import Tool
|
|
50
50
|
from letta.schemas.tool_rule import TerminalToolRule
|
|
51
51
|
from letta.schemas.usage import LettaUsageStatistics
|
|
52
|
+
from letta.schemas.user import User as PydanticUser
|
|
52
53
|
from letta.services.block_manager import BlockManager
|
|
54
|
+
from letta.services.message_manager import MessageManager
|
|
53
55
|
from letta.services.source_manager import SourceManager
|
|
54
56
|
from letta.services.tool_execution_sandbox import ToolExecutionSandbox
|
|
55
57
|
from letta.services.user_manager import UserManager
|
|
@@ -80,9 +82,11 @@ from letta.utils import (
|
|
|
80
82
|
|
|
81
83
|
|
|
82
84
|
def compile_memory_metadata_block(
|
|
85
|
+
actor: PydanticUser,
|
|
86
|
+
agent_id: str,
|
|
83
87
|
memory_edit_timestamp: datetime.datetime,
|
|
84
88
|
archival_memory: Optional[ArchivalMemory] = None,
|
|
85
|
-
|
|
89
|
+
message_manager: Optional[MessageManager] = None,
|
|
86
90
|
) -> str:
|
|
87
91
|
# Put the timestamp in the local timezone (mimicking get_local_time())
|
|
88
92
|
timestamp_str = memory_edit_timestamp.astimezone().strftime("%Y-%m-%d %I:%M:%S %p %Z%z").strip()
|
|
@@ -91,7 +95,7 @@ def compile_memory_metadata_block(
|
|
|
91
95
|
memory_metadata_block = "\n".join(
|
|
92
96
|
[
|
|
93
97
|
f"### Memory [last modified: {timestamp_str}]",
|
|
94
|
-
f"{
|
|
98
|
+
f"{message_manager.size(actor=actor, agent_id=agent_id) if message_manager else 0} previous messages between you and the user are stored in recall memory (use functions to access them)",
|
|
95
99
|
f"{archival_memory.count() if archival_memory else 0} total memories you created are stored in archival memory (use functions to access them)",
|
|
96
100
|
"\nCore memory shown below (limited in size, additional information stored in archival / recall memory):",
|
|
97
101
|
]
|
|
@@ -101,10 +105,12 @@ def compile_memory_metadata_block(
|
|
|
101
105
|
|
|
102
106
|
def compile_system_message(
|
|
103
107
|
system_prompt: str,
|
|
108
|
+
agent_id: str,
|
|
104
109
|
in_context_memory: Memory,
|
|
105
110
|
in_context_memory_last_edit: datetime.datetime, # TODO move this inside of BaseMemory?
|
|
111
|
+
actor: PydanticUser,
|
|
106
112
|
archival_memory: Optional[ArchivalMemory] = None,
|
|
107
|
-
|
|
113
|
+
message_manager: Optional[MessageManager] = None,
|
|
108
114
|
user_defined_variables: Optional[dict] = None,
|
|
109
115
|
append_icm_if_missing: bool = True,
|
|
110
116
|
template_format: Literal["f-string", "mustache", "jinja2"] = "f-string",
|
|
@@ -129,9 +135,11 @@ def compile_system_message(
|
|
|
129
135
|
else:
|
|
130
136
|
# TODO should this all put into the memory.__repr__ function?
|
|
131
137
|
memory_metadata_string = compile_memory_metadata_block(
|
|
138
|
+
actor=actor,
|
|
139
|
+
agent_id=agent_id,
|
|
132
140
|
memory_edit_timestamp=in_context_memory_last_edit,
|
|
133
141
|
archival_memory=archival_memory,
|
|
134
|
-
|
|
142
|
+
message_manager=message_manager,
|
|
135
143
|
)
|
|
136
144
|
full_memory_string = memory_metadata_string + "\n" + in_context_memory.compile()
|
|
137
145
|
|
|
@@ -164,9 +172,11 @@ def compile_system_message(
|
|
|
164
172
|
def initialize_message_sequence(
|
|
165
173
|
model: str,
|
|
166
174
|
system: str,
|
|
175
|
+
agent_id: str,
|
|
167
176
|
memory: Memory,
|
|
177
|
+
actor: PydanticUser,
|
|
168
178
|
archival_memory: Optional[ArchivalMemory] = None,
|
|
169
|
-
|
|
179
|
+
message_manager: Optional[MessageManager] = None,
|
|
170
180
|
memory_edit_timestamp: Optional[datetime.datetime] = None,
|
|
171
181
|
include_initial_boot_message: bool = True,
|
|
172
182
|
) -> List[dict]:
|
|
@@ -177,11 +187,13 @@ def initialize_message_sequence(
|
|
|
177
187
|
# system, memory, memory_edit_timestamp, archival_memory=archival_memory, recall_memory=recall_memory
|
|
178
188
|
# )
|
|
179
189
|
full_system_message = compile_system_message(
|
|
190
|
+
agent_id=agent_id,
|
|
180
191
|
system_prompt=system,
|
|
181
192
|
in_context_memory=memory,
|
|
182
193
|
in_context_memory_last_edit=memory_edit_timestamp,
|
|
194
|
+
actor=actor,
|
|
183
195
|
archival_memory=archival_memory,
|
|
184
|
-
|
|
196
|
+
message_manager=message_manager,
|
|
185
197
|
user_defined_variables=None,
|
|
186
198
|
append_icm_if_missing=True,
|
|
187
199
|
)
|
|
@@ -282,7 +294,8 @@ class Agent(BaseAgent):
|
|
|
282
294
|
self.interface = interface
|
|
283
295
|
|
|
284
296
|
# Create the persistence manager object based on the AgentState info
|
|
285
|
-
self.
|
|
297
|
+
self.archival_memory = EmbeddingArchivalMemory(agent_state)
|
|
298
|
+
self.message_manager = MessageManager()
|
|
286
299
|
|
|
287
300
|
# State needed for heartbeat pausing
|
|
288
301
|
self.pause_heartbeats_start = None
|
|
@@ -309,9 +322,11 @@ class Agent(BaseAgent):
|
|
|
309
322
|
init_messages = initialize_message_sequence(
|
|
310
323
|
model=self.model,
|
|
311
324
|
system=self.agent_state.system,
|
|
325
|
+
agent_id=self.agent_state.id,
|
|
312
326
|
memory=self.agent_state.memory,
|
|
327
|
+
actor=self.user,
|
|
313
328
|
archival_memory=None,
|
|
314
|
-
|
|
329
|
+
message_manager=None,
|
|
315
330
|
memory_edit_timestamp=get_utc_time(),
|
|
316
331
|
include_initial_boot_message=True,
|
|
317
332
|
)
|
|
@@ -333,8 +348,10 @@ class Agent(BaseAgent):
|
|
|
333
348
|
model=self.model,
|
|
334
349
|
system=self.agent_state.system,
|
|
335
350
|
memory=self.agent_state.memory,
|
|
351
|
+
agent_id=self.agent_state.id,
|
|
352
|
+
actor=self.user,
|
|
336
353
|
archival_memory=None,
|
|
337
|
-
|
|
354
|
+
message_manager=None,
|
|
338
355
|
memory_edit_timestamp=get_utc_time(),
|
|
339
356
|
include_initial_boot_message=True,
|
|
340
357
|
)
|
|
@@ -356,7 +373,6 @@ class Agent(BaseAgent):
|
|
|
356
373
|
|
|
357
374
|
# Put the messages inside the message buffer
|
|
358
375
|
self.messages_total = 0
|
|
359
|
-
# self._append_to_messages(added_messages=[cast(Message, msg) for msg in init_messages_objs if msg is not None])
|
|
360
376
|
self._append_to_messages(added_messages=init_messages_objs)
|
|
361
377
|
self._validate_message_buffer_is_utc()
|
|
362
378
|
|
|
@@ -413,7 +429,10 @@ class Agent(BaseAgent):
|
|
|
413
429
|
# TODO: need to have an AgentState object that actually has full access to the block data
|
|
414
430
|
# this is because the sandbox tools need to be able to access block.value to edit this data
|
|
415
431
|
try:
|
|
416
|
-
|
|
432
|
+
# TODO: This is NO BUENO
|
|
433
|
+
# TODO: Matching purely by names is extremely problematic, users can create tools with these names and run them in the agent loop
|
|
434
|
+
# TODO: We will have probably have to match the function strings exactly for safety
|
|
435
|
+
if function_name in BASE_TOOLS or function_name in O1_BASE_TOOLS:
|
|
417
436
|
# base tools are allowed to access the `Agent` object and run on the database
|
|
418
437
|
function_args["self"] = self # need to attach self to arg since it's dynamically linked
|
|
419
438
|
function_response = function_to_call(**function_args)
|
|
@@ -458,10 +477,10 @@ class Agent(BaseAgent):
|
|
|
458
477
|
for tool in tools:
|
|
459
478
|
try:
|
|
460
479
|
# WARNING: name may not be consistent?
|
|
461
|
-
if tool.module: # execute the whole module
|
|
462
|
-
|
|
463
|
-
else:
|
|
464
|
-
|
|
480
|
+
# if tool.module: # execute the whole module
|
|
481
|
+
# exec(tool.module, env)
|
|
482
|
+
# else:
|
|
483
|
+
exec(tool.source_code, env)
|
|
465
484
|
self.functions_python[tool.json_schema["name"]] = env[tool.json_schema["name"]]
|
|
466
485
|
self.functions.append(tool.json_schema)
|
|
467
486
|
except Exception:
|
|
@@ -474,7 +493,7 @@ class Agent(BaseAgent):
|
|
|
474
493
|
# Pull the message objects from the database
|
|
475
494
|
message_objs = []
|
|
476
495
|
for msg_id in message_ids:
|
|
477
|
-
msg_obj = self.
|
|
496
|
+
msg_obj = self.message_manager.get_message_by_id(msg_id, actor=self.user)
|
|
478
497
|
if msg_obj:
|
|
479
498
|
if isinstance(msg_obj, Message):
|
|
480
499
|
message_objs.append(msg_obj)
|
|
@@ -493,9 +512,10 @@ class Agent(BaseAgent):
|
|
|
493
512
|
for m in self._messages:
|
|
494
513
|
# assert is_utc_datetime(m.created_at), f"created_at on message for agent {self.agent_state.name} isn't UTC:\n{vars(m)}"
|
|
495
514
|
# TODO eventually do casting via an edit_message function
|
|
496
|
-
if
|
|
497
|
-
|
|
498
|
-
|
|
515
|
+
if m.created_at:
|
|
516
|
+
if not is_utc_datetime(m.created_at):
|
|
517
|
+
printd(f"Warning - created_at on message for agent {self.agent_state.name} isn't UTC (text='{m.text}')")
|
|
518
|
+
m.created_at = m.created_at.replace(tzinfo=datetime.timezone.utc)
|
|
499
519
|
|
|
500
520
|
def set_message_buffer(self, message_ids: List[str], force_utc: bool = True):
|
|
501
521
|
"""Set the messages in the buffer to the message IDs list"""
|
|
@@ -522,16 +542,13 @@ class Agent(BaseAgent):
|
|
|
522
542
|
|
|
523
543
|
def _trim_messages(self, num):
|
|
524
544
|
"""Trim messages from the front, not including the system message"""
|
|
525
|
-
self.persistence_manager.trim_messages(num)
|
|
526
|
-
|
|
527
545
|
new_messages = [self._messages[0]] + self._messages[num:]
|
|
528
546
|
self._messages = new_messages
|
|
529
547
|
|
|
530
548
|
def _prepend_to_messages(self, added_messages: List[Message]):
|
|
531
549
|
"""Wrapper around self.messages.prepend to allow additional calls to a state/persistence manager"""
|
|
532
550
|
assert all([isinstance(msg, Message) for msg in added_messages])
|
|
533
|
-
|
|
534
|
-
self.persistence_manager.prepend_to_messages(added_messages)
|
|
551
|
+
self.message_manager.create_many_messages(added_messages, actor=self.user)
|
|
535
552
|
|
|
536
553
|
new_messages = [self._messages[0]] + added_messages + self._messages[1:] # prepend (no system)
|
|
537
554
|
self._messages = new_messages
|
|
@@ -540,8 +557,7 @@ class Agent(BaseAgent):
|
|
|
540
557
|
def _append_to_messages(self, added_messages: List[Message]):
|
|
541
558
|
"""Wrapper around self.messages.append to allow additional calls to a state/persistence manager"""
|
|
542
559
|
assert all([isinstance(msg, Message) for msg in added_messages])
|
|
543
|
-
|
|
544
|
-
self.persistence_manager.append_to_messages(added_messages)
|
|
560
|
+
self.message_manager.create_many_messages(added_messages, actor=self.user)
|
|
545
561
|
|
|
546
562
|
# strip extra metadata if it exists
|
|
547
563
|
# for msg in added_messages:
|
|
@@ -885,7 +901,6 @@ class Agent(BaseAgent):
|
|
|
885
901
|
messages=next_input_message,
|
|
886
902
|
**kwargs,
|
|
887
903
|
)
|
|
888
|
-
step_response.messages
|
|
889
904
|
heartbeat_request = step_response.heartbeat_request
|
|
890
905
|
function_failed = step_response.function_failed
|
|
891
906
|
token_warning = step_response.in_context_memory_warning
|
|
@@ -1247,7 +1262,7 @@ class Agent(BaseAgent):
|
|
|
1247
1262
|
assert new_system_message_obj.role == "system", new_system_message_obj
|
|
1248
1263
|
assert self._messages[0].role == "system", self._messages
|
|
1249
1264
|
|
|
1250
|
-
self.
|
|
1265
|
+
self.message_manager.create_message(new_system_message_obj, actor=self.user)
|
|
1251
1266
|
|
|
1252
1267
|
new_messages = [new_system_message_obj] + self._messages[1:] # swap index 0 (system)
|
|
1253
1268
|
self._messages = new_messages
|
|
@@ -1280,11 +1295,13 @@ class Agent(BaseAgent):
|
|
|
1280
1295
|
|
|
1281
1296
|
# update memory (TODO: potentially update recall/archival stats seperately)
|
|
1282
1297
|
new_system_message_str = compile_system_message(
|
|
1298
|
+
agent_id=self.agent_state.id,
|
|
1283
1299
|
system_prompt=self.agent_state.system,
|
|
1284
1300
|
in_context_memory=self.agent_state.memory,
|
|
1285
1301
|
in_context_memory_last_edit=memory_edit_timestamp,
|
|
1286
|
-
|
|
1287
|
-
|
|
1302
|
+
actor=self.user,
|
|
1303
|
+
archival_memory=self.archival_memory,
|
|
1304
|
+
message_manager=self.message_manager,
|
|
1288
1305
|
user_defined_variables=None,
|
|
1289
1306
|
append_icm_if_missing=True,
|
|
1290
1307
|
)
|
|
@@ -1370,55 +1387,29 @@ class Agent(BaseAgent):
|
|
|
1370
1387
|
# passage.id = create_uuid_from_string(f"{source_id}_{str(passage.agent_id)}_{passage.text}")
|
|
1371
1388
|
|
|
1372
1389
|
# insert into agent archival memory
|
|
1373
|
-
self.
|
|
1390
|
+
self.archival_memory.storage.insert_many(passages)
|
|
1374
1391
|
all_passages += passages
|
|
1375
1392
|
|
|
1376
1393
|
assert size == len(all_passages), f"Expected {size} passages, but only got {len(all_passages)}"
|
|
1377
1394
|
|
|
1378
1395
|
# save destination storage
|
|
1379
|
-
self.
|
|
1396
|
+
self.archival_memory.storage.save()
|
|
1380
1397
|
|
|
1381
1398
|
# attach to agent
|
|
1382
1399
|
source = SourceManager().get_source_by_id(source_id=source_id, actor=user)
|
|
1383
1400
|
assert source is not None, f"Source {source_id} not found in metadata store"
|
|
1384
1401
|
ms.attach_source(agent_id=self.agent_state.id, source_id=source_id, user_id=self.agent_state.user_id)
|
|
1385
1402
|
|
|
1386
|
-
total_agent_passages = self.
|
|
1403
|
+
total_agent_passages = self.archival_memory.storage.size()
|
|
1387
1404
|
|
|
1388
1405
|
printd(
|
|
1389
1406
|
f"Attached data source {source.name} to agent {self.agent_state.name}, consisting of {len(all_passages)}. Agent now has {total_agent_passages} embeddings in archival memory.",
|
|
1390
1407
|
)
|
|
1391
1408
|
|
|
1392
|
-
def update_message(self, request:
|
|
1409
|
+
def update_message(self, message_id: str, request: MessageUpdate) -> Message:
|
|
1393
1410
|
"""Update the details of a message associated with an agent"""
|
|
1394
|
-
|
|
1395
|
-
message = self.persistence_manager.recall_memory.storage.get(id=request.id)
|
|
1396
|
-
if message is None:
|
|
1397
|
-
raise ValueError(f"Message with id {request.id} not found")
|
|
1398
|
-
assert isinstance(message, Message), f"Message is not a Message object: {type(message)}"
|
|
1399
|
-
|
|
1400
|
-
# Override fields
|
|
1401
|
-
# NOTE: we try to do some sanity checking here (see asserts), but it's not foolproof
|
|
1402
|
-
if request.role:
|
|
1403
|
-
message.role = request.role
|
|
1404
|
-
if request.text:
|
|
1405
|
-
message.text = request.text
|
|
1406
|
-
if request.name:
|
|
1407
|
-
message.name = request.name
|
|
1408
|
-
if request.tool_calls:
|
|
1409
|
-
assert message.role == MessageRole.assistant, "Tool calls can only be added to assistant messages"
|
|
1410
|
-
message.tool_calls = request.tool_calls
|
|
1411
|
-
if request.tool_call_id:
|
|
1412
|
-
assert message.role == MessageRole.tool, "tool_call_id can only be added to tool messages"
|
|
1413
|
-
message.tool_call_id = request.tool_call_id
|
|
1414
|
-
|
|
1415
1411
|
# Save the updated message
|
|
1416
|
-
self.
|
|
1417
|
-
|
|
1418
|
-
# Return the updated message
|
|
1419
|
-
updated_message = self.persistence_manager.recall_memory.storage.get(id=message.id)
|
|
1420
|
-
if updated_message is None:
|
|
1421
|
-
raise ValueError(f"Error persisting message - message with id {request.id} not found")
|
|
1412
|
+
updated_message = self.message_manager.update_message_by_id(message_id=message_id, message_update=request, actor=self.user)
|
|
1422
1413
|
return updated_message
|
|
1423
1414
|
|
|
1424
1415
|
# TODO(sarah): should we be creating a new message here, or just editing a message?
|
|
@@ -1428,10 +1419,10 @@ class Agent(BaseAgent):
|
|
|
1428
1419
|
msg_obj = self._messages[x]
|
|
1429
1420
|
if msg_obj.role == MessageRole.assistant:
|
|
1430
1421
|
updated_message = self.update_message(
|
|
1431
|
-
|
|
1432
|
-
|
|
1422
|
+
message_id=msg_obj.id,
|
|
1423
|
+
request=MessageUpdate(
|
|
1433
1424
|
text=new_thought,
|
|
1434
|
-
)
|
|
1425
|
+
),
|
|
1435
1426
|
)
|
|
1436
1427
|
self.refresh_message_buffer()
|
|
1437
1428
|
return updated_message
|
|
@@ -1470,10 +1461,10 @@ class Agent(BaseAgent):
|
|
|
1470
1461
|
|
|
1471
1462
|
# Write the update to the DB
|
|
1472
1463
|
updated_message = self.update_message(
|
|
1473
|
-
|
|
1474
|
-
|
|
1464
|
+
message_id=message_obj.id,
|
|
1465
|
+
request=MessageUpdate(
|
|
1475
1466
|
tool_calls=message_obj.tool_calls,
|
|
1476
|
-
)
|
|
1467
|
+
),
|
|
1477
1468
|
)
|
|
1478
1469
|
self.refresh_message_buffer()
|
|
1479
1470
|
return updated_message
|
|
@@ -1496,7 +1487,7 @@ class Agent(BaseAgent):
|
|
|
1496
1487
|
deleted_message = self._messages.pop()
|
|
1497
1488
|
# then also remove it from recall storage
|
|
1498
1489
|
try:
|
|
1499
|
-
self.
|
|
1490
|
+
self.message_manager.delete_message_by_id(deleted_message.id, actor=self.user)
|
|
1500
1491
|
popped_messages.append(deleted_message)
|
|
1501
1492
|
except Exception as e:
|
|
1502
1493
|
warnings.warn(f"Error deleting message {deleted_message.id} from recall memory: {e}")
|
|
@@ -1522,7 +1513,6 @@ class Agent(BaseAgent):
|
|
|
1522
1513
|
|
|
1523
1514
|
def retry_message(self) -> List[Message]:
|
|
1524
1515
|
"""Retry / regenerate the last message"""
|
|
1525
|
-
|
|
1526
1516
|
self.pop_until_user()
|
|
1527
1517
|
user_message = self.pop_message(count=1)[0]
|
|
1528
1518
|
assert user_message.text is not None, "User message text is None"
|
|
@@ -1569,12 +1559,14 @@ class Agent(BaseAgent):
|
|
|
1569
1559
|
num_tokens_from_messages(messages=messages_openai_format[1:], model=self.model) if len(messages_openai_format) > 1 else 0
|
|
1570
1560
|
)
|
|
1571
1561
|
|
|
1572
|
-
num_archival_memory = self.
|
|
1573
|
-
|
|
1562
|
+
num_archival_memory = self.archival_memory.storage.size()
|
|
1563
|
+
message_manager_size = self.message_manager.size(actor=self.user, agent_id=self.agent_state.id)
|
|
1574
1564
|
external_memory_summary = compile_memory_metadata_block(
|
|
1565
|
+
actor=self.user,
|
|
1566
|
+
agent_id=self.agent_state.id,
|
|
1575
1567
|
memory_edit_timestamp=get_utc_time(), # dummy timestamp
|
|
1576
|
-
archival_memory=self.
|
|
1577
|
-
|
|
1568
|
+
archival_memory=self.archival_memory,
|
|
1569
|
+
message_manager=self.message_manager,
|
|
1578
1570
|
)
|
|
1579
1571
|
num_tokens_external_memory_summary = count_tokens(external_memory_summary)
|
|
1580
1572
|
|
|
@@ -1600,7 +1592,7 @@ class Agent(BaseAgent):
|
|
|
1600
1592
|
# context window breakdown (in messages)
|
|
1601
1593
|
num_messages=len(self._messages),
|
|
1602
1594
|
num_archival_memory=num_archival_memory,
|
|
1603
|
-
num_recall_memory=
|
|
1595
|
+
num_recall_memory=message_manager_size,
|
|
1604
1596
|
num_tokens_external_memory_summary=num_tokens_external_memory_summary,
|
|
1605
1597
|
# top-level information
|
|
1606
1598
|
context_window_size_max=self.agent_state.llm_config.context_window,
|
|
@@ -27,13 +27,11 @@ from tqdm import tqdm
|
|
|
27
27
|
from letta.agent_store.storage import StorageConnector, TableType
|
|
28
28
|
from letta.config import LettaConfig
|
|
29
29
|
from letta.constants import MAX_EMBEDDING_DIM
|
|
30
|
-
from letta.metadata import EmbeddingConfigColumn
|
|
30
|
+
from letta.metadata import EmbeddingConfigColumn
|
|
31
31
|
from letta.orm.base import Base
|
|
32
32
|
from letta.orm.file import FileMetadata as FileMetadataModel
|
|
33
33
|
|
|
34
34
|
# from letta.schemas.message import Message, Passage, Record, RecordType, ToolCall
|
|
35
|
-
from letta.schemas.message import Message
|
|
36
|
-
from letta.schemas.openai.chat_completions import ToolCall
|
|
37
35
|
from letta.schemas.passage import Passage
|
|
38
36
|
from letta.settings import settings
|
|
39
37
|
|
|
@@ -69,69 +67,6 @@ class CommonVector(TypeDecorator):
|
|
|
69
67
|
return np.frombuffer(value, dtype=np.float32)
|
|
70
68
|
|
|
71
69
|
|
|
72
|
-
class MessageModel(Base):
|
|
73
|
-
"""Defines data model for storing Message objects"""
|
|
74
|
-
|
|
75
|
-
__tablename__ = "messages"
|
|
76
|
-
__table_args__ = {"extend_existing": True}
|
|
77
|
-
|
|
78
|
-
# Assuming message_id is the primary key
|
|
79
|
-
id = Column(String, primary_key=True)
|
|
80
|
-
user_id = Column(String, nullable=False)
|
|
81
|
-
agent_id = Column(String, nullable=False)
|
|
82
|
-
|
|
83
|
-
# openai info
|
|
84
|
-
role = Column(String, nullable=False)
|
|
85
|
-
text = Column(String) # optional: can be null if function call
|
|
86
|
-
model = Column(String) # optional: can be null if LLM backend doesn't require specifying
|
|
87
|
-
name = Column(String) # optional: multi-agent only
|
|
88
|
-
|
|
89
|
-
# tool call request info
|
|
90
|
-
# if role == "assistant", this MAY be specified
|
|
91
|
-
# if role != "assistant", this must be null
|
|
92
|
-
# TODO align with OpenAI spec of multiple tool calls
|
|
93
|
-
# tool_calls = Column(ToolCallColumn)
|
|
94
|
-
tool_calls = Column(ToolCallColumn)
|
|
95
|
-
|
|
96
|
-
# tool call response info
|
|
97
|
-
# if role == "tool", then this must be specified
|
|
98
|
-
# if role != "tool", this must be null
|
|
99
|
-
tool_call_id = Column(String)
|
|
100
|
-
|
|
101
|
-
# Add a datetime column, with default value as the current time
|
|
102
|
-
created_at = Column(DateTime(timezone=True))
|
|
103
|
-
Index("message_idx_user", user_id, agent_id),
|
|
104
|
-
|
|
105
|
-
def __repr__(self):
|
|
106
|
-
return f"<Message(message_id='{self.id}', text='{self.text}')>"
|
|
107
|
-
|
|
108
|
-
def to_record(self):
|
|
109
|
-
# calls = (
|
|
110
|
-
# [ToolCall(id=tool_call["id"], function=ToolCallFunction(**tool_call["function"])) for tool_call in self.tool_calls]
|
|
111
|
-
# if self.tool_calls
|
|
112
|
-
# else None
|
|
113
|
-
# )
|
|
114
|
-
# if calls:
|
|
115
|
-
# assert isinstance(calls[0], ToolCall)
|
|
116
|
-
if self.tool_calls and len(self.tool_calls) > 0:
|
|
117
|
-
assert isinstance(self.tool_calls[0], ToolCall), type(self.tool_calls[0])
|
|
118
|
-
for tool in self.tool_calls:
|
|
119
|
-
assert isinstance(tool, ToolCall), type(tool)
|
|
120
|
-
return Message(
|
|
121
|
-
user_id=self.user_id,
|
|
122
|
-
agent_id=self.agent_id,
|
|
123
|
-
role=self.role,
|
|
124
|
-
name=self.name,
|
|
125
|
-
text=self.text,
|
|
126
|
-
model=self.model,
|
|
127
|
-
# tool_calls=[ToolCall(id=tool_call["id"], function=ToolCallFunction(**tool_call["function"])) for tool_call in self.tool_calls] if self.tool_calls else None,
|
|
128
|
-
tool_calls=self.tool_calls,
|
|
129
|
-
tool_call_id=self.tool_call_id,
|
|
130
|
-
created_at=self.created_at,
|
|
131
|
-
id=self.id,
|
|
132
|
-
)
|
|
133
|
-
|
|
134
|
-
|
|
135
70
|
class PassageModel(Base):
|
|
136
71
|
"""Defines data model for storing Passages (consisting of text, embedding)"""
|
|
137
72
|
|
|
@@ -367,11 +302,6 @@ class PostgresStorageConnector(SQLStorageConnector):
|
|
|
367
302
|
self.db_model = PassageModel
|
|
368
303
|
if self.config.archival_storage_uri is None:
|
|
369
304
|
raise ValueError(f"Must specify archival_storage_uri in config {self.config.config_path}")
|
|
370
|
-
elif table_type == TableType.RECALL_MEMORY:
|
|
371
|
-
self.uri = self.config.recall_storage_uri
|
|
372
|
-
self.db_model = MessageModel
|
|
373
|
-
if self.config.recall_storage_uri is None:
|
|
374
|
-
raise ValueError(f"Must specify recall_storage_uri in config {self.config.config_path}")
|
|
375
305
|
elif table_type == TableType.FILES:
|
|
376
306
|
self.uri = self.config.metadata_storage_uri
|
|
377
307
|
self.db_model = FileMetadataModel
|
|
@@ -490,12 +420,6 @@ class SQLLiteStorageConnector(SQLStorageConnector):
|
|
|
490
420
|
# get storage URI
|
|
491
421
|
if table_type == TableType.ARCHIVAL_MEMORY or table_type == TableType.PASSAGES:
|
|
492
422
|
raise ValueError(f"Table type {table_type} not implemented")
|
|
493
|
-
elif table_type == TableType.RECALL_MEMORY:
|
|
494
|
-
# TODO: eventually implement URI option
|
|
495
|
-
self.path = self.config.recall_storage_path
|
|
496
|
-
if self.path is None:
|
|
497
|
-
raise ValueError(f"Must specify recall_storage_path in config.")
|
|
498
|
-
self.db_model = MessageModel
|
|
499
423
|
elif table_type == TableType.FILES:
|
|
500
424
|
self.path = self.config.metadata_storage_path
|
|
501
425
|
if self.path is None:
|
|
@@ -110,11 +110,6 @@ class StorageConnector:
|
|
|
110
110
|
from letta.agent_store.qdrant import QdrantStorageConnector
|
|
111
111
|
|
|
112
112
|
return QdrantStorageConnector(table_type, config, user_id, agent_id)
|
|
113
|
-
# TODO: add back
|
|
114
|
-
# elif storage_type == "lancedb":
|
|
115
|
-
# from letta.agent_store.db import LanceDBConnector
|
|
116
|
-
|
|
117
|
-
# return LanceDBConnector(agent_config=agent_config, table_type=table_type)
|
|
118
113
|
|
|
119
114
|
elif storage_type == "sqlite":
|
|
120
115
|
from letta.agent_store.db import SQLLiteStorageConnector
|
{letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/cli/cli.py
RENAMED
|
@@ -51,7 +51,6 @@ def server(
|
|
|
51
51
|
port: Annotated[Optional[int], typer.Option(help="Port to run the server on")] = None,
|
|
52
52
|
host: Annotated[Optional[str], typer.Option(help="Host to run the server on (default to localhost)")] = None,
|
|
53
53
|
debug: Annotated[bool, typer.Option(help="Turn debugging output on")] = False,
|
|
54
|
-
ade: Annotated[bool, typer.Option(help="Allows remote access")] = False,
|
|
55
54
|
secure: Annotated[bool, typer.Option(help="Adds simple security access")] = False,
|
|
56
55
|
):
|
|
57
56
|
"""Launch a Letta server process"""
|
|
@@ -171,7 +170,6 @@ def run(
|
|
|
171
170
|
# printd("State path:", agent_config.save_state_dir())
|
|
172
171
|
# printd("Persistent manager path:", agent_config.save_persistence_manager_dir())
|
|
173
172
|
# printd("Index path:", agent_config.save_agent_index_dir())
|
|
174
|
-
# persistence_manager = LocalStateManager(agent_config).load() # TODO: implement load
|
|
175
173
|
# TODO: load prior agent state
|
|
176
174
|
|
|
177
175
|
# Allow overriding model specifics (model, model wrapper, model endpoint IP + type, context_window)
|
|
@@ -372,8 +370,7 @@ def delete_agent(
|
|
|
372
370
|
sys.exit(1)
|
|
373
371
|
|
|
374
372
|
|
|
375
|
-
def version():
|
|
373
|
+
def version() -> str:
|
|
376
374
|
import letta
|
|
377
375
|
|
|
378
|
-
print(letta.__version__)
|
|
379
376
|
return letta.__version__
|
|
@@ -22,7 +22,7 @@ from letta.schemas.embedding_config import EmbeddingConfig
|
|
|
22
22
|
from letta.schemas.enums import JobStatus, MessageRole
|
|
23
23
|
from letta.schemas.file import FileMetadata
|
|
24
24
|
from letta.schemas.job import Job
|
|
25
|
-
from letta.schemas.letta_request import LettaRequest
|
|
25
|
+
from letta.schemas.letta_request import LettaRequest, LettaStreamingRequest
|
|
26
26
|
from letta.schemas.letta_response import LettaResponse, LettaStreamingResponse
|
|
27
27
|
from letta.schemas.llm_config import LLMConfig
|
|
28
28
|
from letta.schemas.memory import (
|
|
@@ -32,7 +32,7 @@ from letta.schemas.memory import (
|
|
|
32
32
|
Memory,
|
|
33
33
|
RecallMemorySummary,
|
|
34
34
|
)
|
|
35
|
-
from letta.schemas.message import Message, MessageCreate,
|
|
35
|
+
from letta.schemas.message import Message, MessageCreate, MessageUpdate
|
|
36
36
|
from letta.schemas.openai.chat_completions import ToolCall
|
|
37
37
|
from letta.schemas.organization import Organization
|
|
38
38
|
from letta.schemas.passage import Passage
|
|
@@ -586,8 +586,7 @@ class RESTClient(AbstractClient):
|
|
|
586
586
|
tool_calls: Optional[List[ToolCall]] = None,
|
|
587
587
|
tool_call_id: Optional[str] = None,
|
|
588
588
|
) -> Message:
|
|
589
|
-
request =
|
|
590
|
-
id=message_id,
|
|
589
|
+
request = MessageUpdate(
|
|
591
590
|
role=role,
|
|
592
591
|
text=text,
|
|
593
592
|
name=name,
|
|
@@ -965,8 +964,10 @@ class RESTClient(AbstractClient):
|
|
|
965
964
|
if stream_tokens or stream_steps:
|
|
966
965
|
from letta.client.streaming import _sse_post
|
|
967
966
|
|
|
967
|
+
request = LettaStreamingRequest(messages=messages, stream_tokens=stream_tokens)
|
|
968
968
|
return _sse_post(f"{self.base_url}/{self.api_prefix}/agents/{agent_id}/messages/stream", request.model_dump(), self.headers)
|
|
969
969
|
else:
|
|
970
|
+
request = LettaRequest(messages=messages)
|
|
970
971
|
response = requests.post(
|
|
971
972
|
f"{self.base_url}/{self.api_prefix}/agents/{agent_id}/messages", json=request.model_dump(), headers=self.headers
|
|
972
973
|
)
|
|
@@ -2146,8 +2147,8 @@ class LocalClient(AbstractClient):
|
|
|
2146
2147
|
) -> Message:
|
|
2147
2148
|
message = self.server.update_agent_message(
|
|
2148
2149
|
agent_id=agent_id,
|
|
2149
|
-
|
|
2150
|
-
|
|
2150
|
+
message_id=message_id,
|
|
2151
|
+
request=MessageUpdate(
|
|
2151
2152
|
role=role,
|
|
2152
2153
|
text=text,
|
|
2153
2154
|
name=name,
|
|
@@ -2683,7 +2684,7 @@ class LocalClient(AbstractClient):
|
|
|
2683
2684
|
return self.server.tool_manager.create_or_update_tool(pydantic_tool=Tool(**tool_create.model_dump()), actor=self.user)
|
|
2684
2685
|
|
|
2685
2686
|
def load_composio_tool(self, action: "ActionType") -> Tool:
|
|
2686
|
-
tool_create = ToolCreate.from_composio(
|
|
2687
|
+
tool_create = ToolCreate.from_composio(action_name=action.name)
|
|
2687
2688
|
return self.server.tool_manager.create_or_update_tool(pydantic_tool=Tool(**tool_create.model_dump()), actor=self.user)
|
|
2688
2689
|
|
|
2689
2690
|
def create_tool(
|
|
@@ -3054,16 +3055,13 @@ class LocalClient(AbstractClient):
|
|
|
3054
3055
|
|
|
3055
3056
|
# recall memory
|
|
3056
3057
|
|
|
3057
|
-
def get_messages(
|
|
3058
|
-
self, agent_id: str, before: Optional[str] = None, after: Optional[str] = None, limit: Optional[int] = 1000
|
|
3059
|
-
) -> List[Message]:
|
|
3058
|
+
def get_messages(self, agent_id: str, cursor: Optional[str] = None, limit: Optional[int] = 1000) -> List[Message]:
|
|
3060
3059
|
"""
|
|
3061
3060
|
Get messages from an agent with pagination.
|
|
3062
3061
|
|
|
3063
3062
|
Args:
|
|
3064
3063
|
agent_id (str): ID of the agent
|
|
3065
|
-
|
|
3066
|
-
after (str): Get messages after a certain time
|
|
3064
|
+
cursor (str): Get messages after a certain time
|
|
3067
3065
|
limit (int): Limit number of messages
|
|
3068
3066
|
|
|
3069
3067
|
Returns:
|
|
@@ -3074,8 +3072,7 @@ class LocalClient(AbstractClient):
|
|
|
3074
3072
|
return self.server.get_agent_recall_cursor(
|
|
3075
3073
|
user_id=self.user_id,
|
|
3076
3074
|
agent_id=agent_id,
|
|
3077
|
-
|
|
3078
|
-
after=after,
|
|
3075
|
+
cursor=cursor,
|
|
3079
3076
|
limit=limit,
|
|
3080
3077
|
reverse=True,
|
|
3081
3078
|
)
|
{letta_nightly-0.6.1.dev20241206104246 → letta_nightly-0.6.1.dev20241208104134}/letta/constants.py
RENAMED
|
@@ -38,6 +38,7 @@ DEFAULT_PRESET = "memgpt_chat"
|
|
|
38
38
|
|
|
39
39
|
# Base tools that cannot be edited, as they access agent state directly
|
|
40
40
|
BASE_TOOLS = ["send_message", "conversation_search", "conversation_search_date", "archival_memory_insert", "archival_memory_search"]
|
|
41
|
+
O1_BASE_TOOLS = ["send_thinking_message", "send_final_message"]
|
|
41
42
|
# Base memory tools CAN be edited, and are added by default by the server
|
|
42
43
|
BASE_MEMORY_TOOLS = ["core_memory_append", "core_memory_replace"]
|
|
43
44
|
|