letta-nightly 0.5.4.dev20241130104041__tar.gz → 0.5.4.dev20241204014655__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.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/PKG-INFO +6 -6
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/README.md +5 -5
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent.py +45 -44
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/cli/cli.py +2 -1
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/client/client.py +6 -1
- letta_nightly-0.5.4.dev20241204014655/letta/functions/functions.py +89 -0
- letta_nightly-0.5.4.dev20241204014655/letta/functions/schema_generator.py +477 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/helpers.py +99 -5
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/openai.py +8 -2
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/utils.py +8 -4
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/metadata.py +4 -5
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/tool.py +12 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/app.py +5 -4
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/agents.py +24 -30
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/sandbox_configs.py +19 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/sources.py +8 -1
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/tools.py +88 -1
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/server.py +146 -12
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/per_agent_lock_manager.py +3 -3
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/tool_execution_sandbox.py +51 -23
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/utils.py +0 -7
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/pyproject.toml +3 -3
- letta_nightly-0.5.4.dev20241130104041/letta/functions/functions.py +0 -104
- letta_nightly-0.5.4.dev20241130104041/letta/functions/schema_generator.py +0 -237
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/LICENSE +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/__main__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent_store/chroma.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent_store/db.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent_store/lancedb.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent_store/milvus.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent_store/qdrant.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent_store/storage.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/benchmark/benchmark.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/benchmark/constants.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/cli/cli_config.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/cli/cli_load.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/client/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/client/streaming.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/client/utils.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/config.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/constants.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/credentials.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/data_sources/connectors.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/data_sources/connectors_helper.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/embeddings.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/errors.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/functions/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/functions/function_sets/base.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/functions/function_sets/extras.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/functions/helpers.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/helpers/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/helpers/tool_rule_solver.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/humans/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/humans/examples/basic.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/humans/examples/cs_phd.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/interface.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/anthropic.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/azure_openai.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/azure_openai_constants.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/cohere.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/google_ai.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/llm_api_tools.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/llm_api/mistral.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/README.md +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/chat_completion_proxy.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/constants.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/function_parser.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/grammars/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/grammars/gbnf_grammar_generator.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/grammars/json.gbnf +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/grammars/json_func_calls_with_inner_thoughts.gbnf +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/json_parser.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/koboldcpp/api.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/koboldcpp/settings.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llamacpp/api.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llamacpp/settings.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/airoboros.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/chatml.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/configurable_wrapper.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/dolphin.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/llama3.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/simple_summary_wrapper.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/wrapper_base.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/llm_chat_completion_wrappers/zephyr.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/lmstudio/api.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/lmstudio/settings.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/ollama/api.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/ollama/settings.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/settings/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/settings/deterministic_mirostat.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/settings/settings.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/settings/simple.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/vllm/api.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/webui/api.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/webui/legacy_api.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/webui/legacy_settings.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/local_llm/webui/settings.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/log.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/main.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/memory.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/o1_agent.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/openai_backcompat/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/openai_backcompat/openai_object.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/__all__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/agents_tags.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/base.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/block.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/blocks_agents.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/enums.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/errors.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/file.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/mixins.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/organization.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/sandbox_config.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/source.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/sqlalchemy_base.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/tool.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/orm/user.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/persistence_manager.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/anna_pa.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/google_search_persona.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/memgpt_doc.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/memgpt_starter.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/o1_persona.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/sam.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/sam_pov.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/sam_simple_pov_gpt35.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/personas/examples/sqldb/test.db +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/gpt_summarize.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/gpt_system.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_base.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_chat.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_chat_compressed.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_chat_fstring.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_doc.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_gpt35_extralong.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_intuitive_knowledge.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_modified_chat.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/prompts/system/memgpt_modified_o1.txt +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/providers.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/pytest.ini +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/agent.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/agents_tags.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/api_key.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/block.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/blocks_agents.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/embedding_config.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/enums.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/file.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/health.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/job.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/letta_base.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/letta_message.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/letta_request.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/letta_response.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/llm_config.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/memory.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/message.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/openai/chat_completion_request.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/openai/chat_completion_response.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/openai/chat_completions.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/openai/embedding_response.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/openai/openai.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/organization.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/passage.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/sandbox_config.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/source.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/tool_rule.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/usage.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/schemas/user.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/constants.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/generate_openapi_schema.sh +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/auth/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/auth/index.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/auth_token.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/interface.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/assistants/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/assistants/assistants.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/assistants/schemas.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/assistants/threads.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/chat_completions/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/openai/chat_completions/chat_completions.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/blocks.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/health.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/jobs.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/llms.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/organizations.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/routers/v1/users.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/static_files.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/rest_api/utils.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/startup.sh +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/static_files/assets/index-3ab03d5b.css +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/static_files/assets/index-9fa459a2.js +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/static_files/favicon.ico +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/static_files/index.html +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/static_files/memgpt_logo_transparent.png +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/utils.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/ws_api/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/ws_api/example_client.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/ws_api/interface.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/ws_api/protocol.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/server/ws_api/server.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/__init__.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/agents_tags_manager.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/block_manager.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/blocks_agents_manager.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/organization_manager.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/sandbox_config_manager.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/source_manager.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/tool_manager.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/tool_sandbox_env/.gitkeep +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/services/user_manager.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/settings.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/streaming_interface.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/streaming_utils.py +0 -0
- {letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/system.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: letta-nightly
|
|
3
|
-
Version: 0.5.4.
|
|
3
|
+
Version: 0.5.4.dev20241204014655
|
|
4
4
|
Summary: Create LLM agents with long-term memory and custom tools
|
|
5
5
|
License: Apache License
|
|
6
6
|
Author: Letta Team
|
|
@@ -129,24 +129,24 @@ The two main ways to install Letta are through **pypi** (`pip`) or via **Docker*
|
|
|
129
129
|
|
|
130
130
|
### Step 1 - Install Letta using `pip`
|
|
131
131
|
```sh
|
|
132
|
-
|
|
132
|
+
pip install -U letta
|
|
133
133
|
```
|
|
134
134
|
|
|
135
135
|
### Step 2 - Set your environment variables for your chosen LLM / embedding providers
|
|
136
136
|
```sh
|
|
137
|
-
|
|
137
|
+
export OPENAI_API_KEY=sk-...
|
|
138
138
|
```
|
|
139
139
|
|
|
140
140
|
For Ollama (see our full [documentation](https://docs.letta.com/install) for examples of how to set up various providers):
|
|
141
141
|
```sh
|
|
142
|
-
|
|
142
|
+
export OLLAMA_BASE_URL=http://localhost:11434
|
|
143
143
|
```
|
|
144
144
|
|
|
145
145
|
### Step 3 - Run the Letta CLI
|
|
146
146
|
|
|
147
147
|
You can create agents and chat with them via the Letta CLI tool (`letta run`):
|
|
148
148
|
```sh
|
|
149
|
-
|
|
149
|
+
letta run
|
|
150
150
|
```
|
|
151
151
|
```
|
|
152
152
|
🧬 Creating new agent...
|
|
@@ -179,7 +179,7 @@ Hit enter to begin (will request first Letta message)
|
|
|
179
179
|
|
|
180
180
|
You can start the Letta API server with `letta server` (see the full API reference [here](https://docs.letta.com/api-reference)):
|
|
181
181
|
```sh
|
|
182
|
-
|
|
182
|
+
letta server
|
|
183
183
|
```
|
|
184
184
|
```
|
|
185
185
|
Initializing database...
|
|
@@ -44,24 +44,24 @@ The two main ways to install Letta are through **pypi** (`pip`) or via **Docker*
|
|
|
44
44
|
|
|
45
45
|
### Step 1 - Install Letta using `pip`
|
|
46
46
|
```sh
|
|
47
|
-
|
|
47
|
+
pip install -U letta
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
### Step 2 - Set your environment variables for your chosen LLM / embedding providers
|
|
51
51
|
```sh
|
|
52
|
-
|
|
52
|
+
export OPENAI_API_KEY=sk-...
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
For Ollama (see our full [documentation](https://docs.letta.com/install) for examples of how to set up various providers):
|
|
56
56
|
```sh
|
|
57
|
-
|
|
57
|
+
export OLLAMA_BASE_URL=http://localhost:11434
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
### Step 3 - Run the Letta CLI
|
|
61
61
|
|
|
62
62
|
You can create agents and chat with them via the Letta CLI tool (`letta run`):
|
|
63
63
|
```sh
|
|
64
|
-
|
|
64
|
+
letta run
|
|
65
65
|
```
|
|
66
66
|
```
|
|
67
67
|
🧬 Creating new agent...
|
|
@@ -94,7 +94,7 @@ Hit enter to begin (will request first Letta message)
|
|
|
94
94
|
|
|
95
95
|
You can start the Letta API server with `letta server` (see the full API reference [here](https://docs.letta.com/api-reference)):
|
|
96
96
|
```sh
|
|
97
|
-
|
|
97
|
+
letta server
|
|
98
98
|
```
|
|
99
99
|
```
|
|
100
100
|
Initializing database...
|
{letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/agent.py
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import datetime
|
|
2
2
|
import inspect
|
|
3
|
+
import time
|
|
3
4
|
import traceback
|
|
4
5
|
import warnings
|
|
5
6
|
from abc import ABC, abstractmethod
|
|
@@ -566,60 +567,60 @@ class Agent(BaseAgent):
|
|
|
566
567
|
self,
|
|
567
568
|
message_sequence: List[Message],
|
|
568
569
|
function_call: str = "auto",
|
|
569
|
-
first_message: bool = False,
|
|
570
|
+
first_message: bool = False,
|
|
570
571
|
stream: bool = False, # TODO move to config?
|
|
571
|
-
fail_on_empty_response: bool = False,
|
|
572
572
|
empty_response_retry_limit: int = 3,
|
|
573
|
+
backoff_factor: float = 0.5, # delay multiplier for exponential backoff
|
|
574
|
+
max_delay: float = 10.0, # max delay between retries
|
|
573
575
|
) -> ChatCompletionResponse:
|
|
574
|
-
"""Get response from LLM API"""
|
|
575
|
-
|
|
576
|
+
"""Get response from LLM API with robust retry mechanism."""
|
|
577
|
+
|
|
576
578
|
allowed_tool_names = self.tool_rules_solver.get_allowed_tool_names()
|
|
579
|
+
allowed_functions = (
|
|
580
|
+
self.functions if not allowed_tool_names else [func for func in self.functions if func["name"] in allowed_tool_names]
|
|
581
|
+
)
|
|
577
582
|
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
+
for attempt in range(1, empty_response_retry_limit + 1):
|
|
584
|
+
try:
|
|
585
|
+
response = create(
|
|
586
|
+
llm_config=self.agent_state.llm_config,
|
|
587
|
+
messages=message_sequence,
|
|
588
|
+
user_id=self.agent_state.user_id,
|
|
589
|
+
functions=allowed_functions,
|
|
590
|
+
functions_python=self.functions_python,
|
|
591
|
+
function_call=function_call,
|
|
592
|
+
first_message=first_message,
|
|
593
|
+
stream=stream,
|
|
594
|
+
stream_interface=self.interface,
|
|
595
|
+
)
|
|
583
596
|
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
llm_config=self.agent_state.llm_config,
|
|
588
|
-
messages=message_sequence,
|
|
589
|
-
user_id=self.agent_state.user_id,
|
|
590
|
-
functions=allowed_functions,
|
|
591
|
-
functions_python=self.functions_python,
|
|
592
|
-
function_call=function_call,
|
|
593
|
-
# hint
|
|
594
|
-
first_message=first_message,
|
|
595
|
-
# streaming
|
|
596
|
-
stream=stream,
|
|
597
|
-
stream_interface=self.interface,
|
|
598
|
-
)
|
|
597
|
+
# These bottom two are retryable
|
|
598
|
+
if len(response.choices) == 0 or response.choices[0] is None:
|
|
599
|
+
raise ValueError(f"API call returned an empty message: {response}")
|
|
599
600
|
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
message_sequence, function_call, first_message, stream, fail_on_empty_response, empty_response_retry_limit - 1
|
|
609
|
-
)
|
|
601
|
+
if response.choices[0].finish_reason not in ["stop", "function_call", "tool_calls"]:
|
|
602
|
+
if response.choices[0].finish_reason == "length":
|
|
603
|
+
# This is not retryable, hence RuntimeError v.s. ValueError
|
|
604
|
+
raise RuntimeError("Finish reason was length (maximum context length)")
|
|
605
|
+
else:
|
|
606
|
+
raise ValueError(f"Bad finish reason from API: {response.choices[0].finish_reason}")
|
|
607
|
+
|
|
608
|
+
return response
|
|
610
609
|
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
610
|
+
except ValueError as ve:
|
|
611
|
+
if attempt >= empty_response_retry_limit:
|
|
612
|
+
warnings.warn(f"Retry limit reached. Final error: {ve}")
|
|
613
|
+
break
|
|
614
|
+
else:
|
|
615
|
+
delay = min(backoff_factor * (2 ** (attempt - 1)), max_delay)
|
|
616
|
+
warnings.warn(f"Attempt {attempt} failed: {ve}. Retrying in {delay} seconds...")
|
|
617
|
+
time.sleep(delay)
|
|
614
618
|
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
raise
|
|
619
|
+
except Exception as e:
|
|
620
|
+
# For non-retryable errors, exit immediately
|
|
621
|
+
raise e
|
|
618
622
|
|
|
619
|
-
|
|
620
|
-
return response
|
|
621
|
-
except Exception as e:
|
|
622
|
-
raise e
|
|
623
|
+
raise Exception("Retries exhausted and no valid response received.")
|
|
623
624
|
|
|
624
625
|
def _handle_ai_response(
|
|
625
626
|
self,
|
{letta_nightly-0.5.4.dev20241130104041 → letta_nightly-0.5.4.dev20241204014655}/letta/cli/cli.py
RENAMED
|
@@ -220,7 +220,8 @@ def run(
|
|
|
220
220
|
|
|
221
221
|
# create agent
|
|
222
222
|
tools = [server.tool_manager.get_tool_by_name(tool_name=tool_name, actor=client.user) for tool_name in agent_state.tool_names]
|
|
223
|
-
|
|
223
|
+
agent_state.tools = tools
|
|
224
|
+
letta_agent = Agent(agent_state=agent_state, interface=interface(), user=client.user)
|
|
224
225
|
|
|
225
226
|
else: # create new agent
|
|
226
227
|
# create new agent config: override defaults with args if provided
|
|
@@ -434,6 +434,7 @@ class RESTClient(AbstractClient):
|
|
|
434
434
|
debug: bool = False,
|
|
435
435
|
default_llm_config: Optional[LLMConfig] = None,
|
|
436
436
|
default_embedding_config: Optional[EmbeddingConfig] = None,
|
|
437
|
+
headers: Optional[Dict] = None,
|
|
437
438
|
):
|
|
438
439
|
"""
|
|
439
440
|
Initializes a new instance of Client class.
|
|
@@ -442,12 +443,16 @@ class RESTClient(AbstractClient):
|
|
|
442
443
|
auto_save (bool): Whether to automatically save changes.
|
|
443
444
|
user_id (str): The user ID.
|
|
444
445
|
debug (bool): Whether to print debug information.
|
|
445
|
-
default
|
|
446
|
+
default_llm_config (Optional[LLMConfig]): The default LLM configuration.
|
|
447
|
+
default_embedding_config (Optional[EmbeddingConfig]): The default embedding configuration.
|
|
448
|
+
headers (Optional[Dict]): The additional headers for the REST API.
|
|
446
449
|
"""
|
|
447
450
|
super().__init__(debug=debug)
|
|
448
451
|
self.base_url = base_url
|
|
449
452
|
self.api_prefix = api_prefix
|
|
450
453
|
self.headers = {"accept": "application/json", "authorization": f"Bearer {token}"}
|
|
454
|
+
if headers:
|
|
455
|
+
self.headers.update(headers)
|
|
451
456
|
self._default_llm_config = default_llm_config
|
|
452
457
|
self._default_embedding_config = default_embedding_config
|
|
453
458
|
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import inspect
|
|
2
|
+
from textwrap import dedent # remove indentation
|
|
3
|
+
from types import ModuleType
|
|
4
|
+
from typing import Dict, List, Optional
|
|
5
|
+
|
|
6
|
+
from letta.errors import LettaToolCreateError
|
|
7
|
+
from letta.functions.schema_generator import generate_schema
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def derive_openai_json_schema(source_code: str, name: Optional[str] = None) -> dict:
|
|
11
|
+
"""Derives the OpenAI JSON schema for a given function source code.
|
|
12
|
+
|
|
13
|
+
First, attempts to execute the source code in a custom environment with only the necessary imports.
|
|
14
|
+
Then, it generates the schema from the function's docstring and signature.
|
|
15
|
+
"""
|
|
16
|
+
try:
|
|
17
|
+
# Define a custom environment with necessary imports
|
|
18
|
+
env = {
|
|
19
|
+
"Optional": Optional,
|
|
20
|
+
"List": List,
|
|
21
|
+
"Dict": Dict,
|
|
22
|
+
# To support Pydantic models
|
|
23
|
+
# "BaseModel": BaseModel,
|
|
24
|
+
# "Field": Field,
|
|
25
|
+
}
|
|
26
|
+
env.update(globals())
|
|
27
|
+
|
|
28
|
+
# print("About to execute source code...")
|
|
29
|
+
exec(source_code, env)
|
|
30
|
+
# print("Source code executed successfully")
|
|
31
|
+
|
|
32
|
+
functions = [f for f in env if callable(env[f]) and not f.startswith("__")]
|
|
33
|
+
if not functions:
|
|
34
|
+
raise LettaToolCreateError("No callable functions found in source code")
|
|
35
|
+
|
|
36
|
+
# print(f"Found functions: {functions}")
|
|
37
|
+
func = env[functions[-1]]
|
|
38
|
+
|
|
39
|
+
if not hasattr(func, "__doc__") or not func.__doc__:
|
|
40
|
+
raise LettaToolCreateError(f"Function {func.__name__} missing docstring")
|
|
41
|
+
|
|
42
|
+
# print("About to generate schema...")
|
|
43
|
+
try:
|
|
44
|
+
schema = generate_schema(func, name=name)
|
|
45
|
+
# print("Schema generated successfully")
|
|
46
|
+
return schema
|
|
47
|
+
except TypeError as e:
|
|
48
|
+
raise LettaToolCreateError(f"Type error in schema generation: {str(e)}")
|
|
49
|
+
except ValueError as e:
|
|
50
|
+
raise LettaToolCreateError(f"Value error in schema generation: {str(e)}")
|
|
51
|
+
except Exception as e:
|
|
52
|
+
raise LettaToolCreateError(f"Unexpected error in schema generation: {str(e)}")
|
|
53
|
+
|
|
54
|
+
except Exception as e:
|
|
55
|
+
import traceback
|
|
56
|
+
|
|
57
|
+
traceback.print_exc()
|
|
58
|
+
raise LettaToolCreateError(f"Schema generation failed: {str(e)}") from e
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def parse_source_code(func) -> str:
|
|
62
|
+
"""Parse the source code of a function and remove indendation"""
|
|
63
|
+
source_code = dedent(inspect.getsource(func))
|
|
64
|
+
return source_code
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def load_function_set(module: ModuleType) -> dict:
|
|
68
|
+
"""Load the functions and generate schema for them, given a module object"""
|
|
69
|
+
function_dict = {}
|
|
70
|
+
|
|
71
|
+
for attr_name in dir(module):
|
|
72
|
+
# Get the attribute
|
|
73
|
+
attr = getattr(module, attr_name)
|
|
74
|
+
|
|
75
|
+
# Check if it's a callable function and not a built-in or special method
|
|
76
|
+
if inspect.isfunction(attr) and attr.__module__ == module.__name__:
|
|
77
|
+
if attr_name in function_dict:
|
|
78
|
+
raise ValueError(f"Found a duplicate of function name '{attr_name}'")
|
|
79
|
+
|
|
80
|
+
generated_schema = generate_schema(attr)
|
|
81
|
+
function_dict[attr_name] = {
|
|
82
|
+
"module": inspect.getsource(module),
|
|
83
|
+
"python_function": attr,
|
|
84
|
+
"json_schema": generated_schema,
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if len(function_dict) == 0:
|
|
88
|
+
raise ValueError(f"No functions found in module {module}")
|
|
89
|
+
return function_dict
|