langgraph-agent-toolkit 0.7.7__tar.gz → 0.7.8__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.
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.env.example +3 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/CHANGELOG.md +11 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/PKG-INFO +4 -4
- langgraph_agent_toolkit-0.7.8/langgraph_agent_toolkit/agents/agent.py +35 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/components/utils.py +33 -1
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/memory/postgres.py +27 -5
- langgraph_agent_toolkit-0.7.8/langgraph_agent_toolkit/core/prompts/prompt_manager.py +126 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/settings.py +4 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/helper/utils.py +19 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/pyproject.toml +5 -4
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/client/test_client.py +2 -2
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/core/test_memory.py +4 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/service/test_service.py +1 -1
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/uv.lock +517 -522
- langgraph_agent_toolkit-0.7.7/langgraph_agent_toolkit/agents/agent.py +0 -13
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.coveragerc +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.dockerignore +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/RELEASE_TEMPLATE/release-template.md +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/codecov.yml +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/dependabot.yml +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/scripts/tag_from_pyproject.sh +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/workflows/deploy.yml +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/workflows/release.yml +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/workflows/sphinx.yml +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/workflows/test.yml +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.gitignore +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.pre-commit-config.yaml +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.project-root +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/CONTRIBUTING.md +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/LICENSE +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/Makefile +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/README.md +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/clickhouse/.clickhouse.env.example +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/langfuse/.langfuse.env.example +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/litellm/.litellm.env.example +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/litellm/config.example.yaml +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/minio/.minio.env.example +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/postgres/.postgres.env.example +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/redis/.redis.env.example +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docker/app/Dockerfile +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docker/service/Dockerfile +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docker-compose.yaml +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/.gitignore +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/Makefile +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/_static/custom.css +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/_templates/class.rst +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/_templates/layout.html +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/_templates/module.rst +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/conf.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/contributing.rst +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/environment_setup.rst +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/index.rst +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/installation.rst +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/make.bat +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/media/agent_architecture.excalidraw +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/media/agent_architecture.png +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/media/agent_diagram.png +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/media/logo.svg +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/usage.rst +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph.json +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/agent_executor.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/agent.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/task.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/utils.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/chatbot/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/chatbot/agent.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/command_agent/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/command_agent/agent.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/agent.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/knowledge_base_agent/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/knowledge_base_agent/agent.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/react/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/react/agent.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/react_so/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/react_so/agent.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/agent.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/components/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/components/creators/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/components/creators/create_react_agent.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/components/tools.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/client/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/client/client.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/memory/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/memory/base.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/memory/factory.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/memory/sqlite.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/memory/types.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/models/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/models/chat_openai.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/models/factory.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/models/fake.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/base.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/empty.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/factory.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/langfuse.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/langsmith.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/types.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/prompts/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/prompts/chat_prompt_template.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/helper/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/helper/constants.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/helper/logging.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/helper/types.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/run_agent.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/run_client.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/run_service.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/schema/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/schema/models.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/schema/schema.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/schema/task_data.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/__init__.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/exception_handlers.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/factory.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/handler.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/middleware.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/routes.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/types.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/utils.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/streamlit_app.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/postgres-init/create_databases.sql +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/postgres-init/create_schema.sql +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/01-invoke-proxy.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/02-test-local-pm.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/03-test-langfuse-pm.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/04-test-langsmith-pm.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/05-test-prompt-types.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/06-test-custom-chat-prompt-template.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/07-test-get-chat-history.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/08-test-update-chat-history.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/09-test-clear-chat-history.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/099-t.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/agents/test_agent_executor.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/agents/test_service_streaming.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/app/conftest.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/app/test_streamlit_app.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/client/conftest.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/conftest.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/core/test_llm.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/core/test_observability.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/core/test_prompts.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/core/test_settings.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/integration/test_docker_e2e.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/service/conftest.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/service/test_auth.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/service/test_factory.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/service/test_service_e2e.py +0 -0
- {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/service/test_utils.py +0 -0
|
@@ -84,6 +84,9 @@ DEEPSEEK_API_KEY=
|
|
|
84
84
|
OLLAMA_MODEL_NAME=
|
|
85
85
|
OLLAMA_BASE_URL=
|
|
86
86
|
|
|
87
|
+
# Openrouter
|
|
88
|
+
OPENROUTER_API_KEY=
|
|
89
|
+
|
|
87
90
|
# Model configurations - use multiline format with line continuation for readability
|
|
88
91
|
# It can be useful if you want to use different models for different agents or use different models from different providers.
|
|
89
92
|
MODEL_CONFIGS={"router":{"provider":"azure_openai","model_name":"gpt-4o","openai_api_key":"your-azure-key-here","azure_endpoint":"https://your-resource.openai.azure.com/","openai_api_version":"2024-12-01-preview","deployment_name":"gpt-4o-deployment"},"assistant":{"provider":"azure_openai","model_name":"gpt-4o-mini","openai_api_key":"your-azure-key-here","azure_endpoint":"https://your-resource.openai.azure.com/","openai_api_version":"2024-12-01-preview","deployment_name":"gpt-4o-mini-deployment"},"analyzer":{"provider":"google_genai","model_name":"gemini-pro","api_key":"your-google-key-here","temperature":0.7}}
|
|
@@ -6,6 +6,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
|
6
6
|
and this project adheres to
|
|
7
7
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
8
8
|
|
|
9
|
+
## [0.7.8]
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Prompt manager
|
|
14
|
+
- Utils functions
|
|
15
|
+
|
|
16
|
+
### Updated
|
|
17
|
+
|
|
18
|
+
- Dependencies
|
|
19
|
+
|
|
9
20
|
## [0.7.7]
|
|
10
21
|
|
|
11
22
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: langgraph-agent-toolkit
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.8
|
|
4
4
|
Summary: Full toolkit for running an AI agent service built with LangGraph, FastAPI and Streamlit
|
|
5
5
|
Project-URL: documentation, https://kryvokhyzha.github.io/langgraph-agent-toolkit
|
|
6
6
|
Project-URL: repository, https://github.com/kryvokhyzha/langgraph-agent-toolkit
|
|
@@ -31,11 +31,11 @@ Requires-Dist: jiter~=0.10.0
|
|
|
31
31
|
Requires-Dist: joblib>=1.4.2
|
|
32
32
|
Requires-Dist: langchain-community~=0.3.24
|
|
33
33
|
Requires-Dist: langchain-core~=0.3.60
|
|
34
|
-
Requires-Dist: langgraph-checkpoint-postgres
|
|
34
|
+
Requires-Dist: langgraph-checkpoint-postgres<=2.0.21
|
|
35
35
|
Requires-Dist: langgraph-checkpoint-sqlite~=2.0.7
|
|
36
36
|
Requires-Dist: langgraph-cli[inmem]<0.4.0,>=0.2.10
|
|
37
37
|
Requires-Dist: langgraph-supervisor~=0.0.21
|
|
38
|
-
Requires-Dist: langgraph~=0.
|
|
38
|
+
Requires-Dist: langgraph~=0.6.2
|
|
39
39
|
Requires-Dist: loguru~=0.7.3
|
|
40
40
|
Requires-Dist: multidict>6.3.2
|
|
41
41
|
Requires-Dist: numpy<2.4.0,>=2.2.3; python_version >= '3.13'
|
|
@@ -50,7 +50,7 @@ Requires-Dist: pyowm~=3.3.0
|
|
|
50
50
|
Requires-Dist: python-dotenv~=1.1.0
|
|
51
51
|
Requires-Dist: rootutils>=1.0.7
|
|
52
52
|
Requires-Dist: setuptools>=75.6.0
|
|
53
|
-
Requires-Dist: streamlit<1.
|
|
53
|
+
Requires-Dist: streamlit<1.48,>=1.45
|
|
54
54
|
Requires-Dist: uvicorn~=0.34.0
|
|
55
55
|
Requires-Dist: watchdog~=6.0.0
|
|
56
56
|
Provides-Extra: all-backends
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
import rootutils
|
|
6
|
+
from langgraph.func import Pregel
|
|
7
|
+
|
|
8
|
+
from langgraph_agent_toolkit.core.observability.base import BaseObservabilityPlatform
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class Agent:
|
|
13
|
+
name: str
|
|
14
|
+
description: str
|
|
15
|
+
graph: Pregel
|
|
16
|
+
observability: BaseObservabilityPlatform | None = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def draw_agent_graph(agent: Agent, image_path: Optional[str | Path] = None, **kwargs):
|
|
20
|
+
if image_path:
|
|
21
|
+
image_path = Path(image_path)
|
|
22
|
+
else:
|
|
23
|
+
path_to_root = rootutils.find_root(search_from=__file__, indicator=".project-root")
|
|
24
|
+
|
|
25
|
+
image_path = path_to_root / "docs" / "visualizations"
|
|
26
|
+
image_path.mkdir(exist_ok=True, parents=True)
|
|
27
|
+
|
|
28
|
+
image_path = image_path / f"{agent.name}.png"
|
|
29
|
+
|
|
30
|
+
graph_image = agent.graph.get_graph(xray=1).draw_mermaid_png(**kwargs)
|
|
31
|
+
with open(image_path, "wb") as f:
|
|
32
|
+
f.write(graph_image)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
__all__ = ["Agent", "draw_agent_graph"]
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
from typing import TypeVar
|
|
1
|
+
from typing import Sequence, TypeVar
|
|
2
2
|
|
|
3
|
+
from langchain_core.messages import BaseMessage
|
|
3
4
|
from langchain_core.messages.utils import trim_messages
|
|
4
5
|
from langchain_core.runnables import RunnableConfig
|
|
5
6
|
from langgraph.managed.is_last_step import RemainingSteps
|
|
@@ -38,3 +39,34 @@ def pre_model_hook_standard(state: T, config: RunnableConfig):
|
|
|
38
39
|
|
|
39
40
|
def default_pre_model_hook(state: T, config: RunnableConfig) -> T:
|
|
40
41
|
return state
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def trim_messages_wrapper(messages: Sequence[BaseMessage], config: RunnableConfig, **kwargs):
|
|
45
|
+
"""Trim messages to fit within the max token limit.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
messages (Sequence[BaseMessage]): The list of messages to trim.
|
|
49
|
+
config (RunnableConfig): Configuration containing parameters for trimming.
|
|
50
|
+
**kwargs: Additional keyword arguments to pass to the trim function.
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
Sequence[BaseMessage]: The trimmed list of messages.
|
|
54
|
+
|
|
55
|
+
"""
|
|
56
|
+
_max_messages = config.get("configurable", {}).get("checkpointer_params", {}).get("k", None)
|
|
57
|
+
|
|
58
|
+
default_kwargs = dict(
|
|
59
|
+
token_counter=len,
|
|
60
|
+
max_tokens=int(_max_messages or DEFAULT_MAX_MESSAGE_HISTORY_LENGTH),
|
|
61
|
+
strategy="last",
|
|
62
|
+
start_on="human",
|
|
63
|
+
end_on=("human", "tool"),
|
|
64
|
+
include_system=True,
|
|
65
|
+
allow_partial=False,
|
|
66
|
+
)
|
|
67
|
+
default_kwargs.update(kwargs)
|
|
68
|
+
|
|
69
|
+
return trim_messages(
|
|
70
|
+
messages=messages,
|
|
71
|
+
**default_kwargs,
|
|
72
|
+
)
|
|
@@ -34,6 +34,13 @@ class PostgresMemoryBackend(BaseMemoryBackend):
|
|
|
34
34
|
f"Missing required PostgreSQL configuration: {', '.join(missing)}. "
|
|
35
35
|
"These environment variables must be set to use PostgreSQL persistence."
|
|
36
36
|
)
|
|
37
|
+
|
|
38
|
+
if settings.POSTGRES_MIN_SIZE > settings.POSTGRES_POOL_SIZE:
|
|
39
|
+
raise ValueError(
|
|
40
|
+
f"POSTGRES_MIN_SIZE ({settings.POSTGRES_MIN_SIZE}) must be less than or equal to "
|
|
41
|
+
f"POSTGRES_POOL_SIZE ({settings.POSTGRES_POOL_SIZE})"
|
|
42
|
+
)
|
|
43
|
+
|
|
37
44
|
return True
|
|
38
45
|
|
|
39
46
|
@staticmethod
|
|
@@ -48,25 +55,35 @@ class PostgresMemoryBackend(BaseMemoryBackend):
|
|
|
48
55
|
|
|
49
56
|
@asynccontextmanager
|
|
50
57
|
async def _get_connection_context(
|
|
51
|
-
self,
|
|
58
|
+
self,
|
|
59
|
+
factory_func: Callable[[AsyncConnectionPool], T],
|
|
60
|
+
app_prefix: str,
|
|
52
61
|
) -> AsyncGenerator[T, None]:
|
|
53
62
|
"""Yield the result of the factory function.
|
|
54
63
|
|
|
55
64
|
Args:
|
|
56
65
|
factory_func: Function that creates the appropriate object from the connection pool
|
|
66
|
+
app_prefix: Prefix for the application name in the connection pool
|
|
57
67
|
|
|
58
68
|
Yields:
|
|
59
69
|
The object created by the factory_func
|
|
60
70
|
|
|
61
71
|
"""
|
|
72
|
+
application_name = f"{settings.POSTGRES_APPLICATION_NAME}-{app_prefix}"
|
|
73
|
+
|
|
62
74
|
logger.info(
|
|
63
75
|
f"Creating PostgreSQL connection pool: min_size={settings.POSTGRES_MIN_SIZE}, "
|
|
64
76
|
f"max_size={settings.POSTGRES_POOL_SIZE}, max_idle={settings.POSTGRES_MAX_IDLE}, "
|
|
65
|
-
f"schema={settings.POSTGRES_SCHEMA}"
|
|
77
|
+
f"schema={settings.POSTGRES_SCHEMA}, application_name={application_name}"
|
|
66
78
|
)
|
|
67
79
|
|
|
68
80
|
# Prepare connection kwargs with schema setting
|
|
69
|
-
connection_kwargs = {
|
|
81
|
+
connection_kwargs = {
|
|
82
|
+
"autocommit": True,
|
|
83
|
+
"prepare_threshold": 0,
|
|
84
|
+
"row_factory": dict_row,
|
|
85
|
+
"application_name": application_name,
|
|
86
|
+
}
|
|
70
87
|
|
|
71
88
|
# Set search_path using options parameter if schema is specified and not default
|
|
72
89
|
if settings.POSTGRES_SCHEMA and settings.POSTGRES_SCHEMA != "public":
|
|
@@ -78,6 +95,7 @@ class PostgresMemoryBackend(BaseMemoryBackend):
|
|
|
78
95
|
min_size=settings.POSTGRES_MIN_SIZE,
|
|
79
96
|
max_size=settings.POSTGRES_POOL_SIZE,
|
|
80
97
|
max_idle=settings.POSTGRES_MAX_IDLE,
|
|
98
|
+
check=AsyncConnectionPool.check_connection,
|
|
81
99
|
kwargs=connection_kwargs,
|
|
82
100
|
) as pool:
|
|
83
101
|
logger.info("PostgreSQL connection pool opened successfully")
|
|
@@ -95,7 +113,9 @@ class PostgresMemoryBackend(BaseMemoryBackend):
|
|
|
95
113
|
AsyncPostgresSaver: The database saver instance
|
|
96
114
|
|
|
97
115
|
"""
|
|
98
|
-
async with self._get_connection_context(
|
|
116
|
+
async with self._get_connection_context(
|
|
117
|
+
lambda pool: AsyncPostgresSaver(conn=pool), app_prefix="saver"
|
|
118
|
+
) as saver:
|
|
99
119
|
yield saver
|
|
100
120
|
|
|
101
121
|
@asynccontextmanager
|
|
@@ -106,7 +126,9 @@ class PostgresMemoryBackend(BaseMemoryBackend):
|
|
|
106
126
|
AsyncPostgresStore: The database store instance
|
|
107
127
|
|
|
108
128
|
"""
|
|
109
|
-
async with self._get_connection_context(
|
|
129
|
+
async with self._get_connection_context(
|
|
130
|
+
lambda pool: AsyncPostgresStore(conn=pool, app_prefix="store")
|
|
131
|
+
) as store:
|
|
110
132
|
yield store
|
|
111
133
|
|
|
112
134
|
def get_checkpoint_saver(self) -> AbstractAsyncContextManager[AsyncPostgresSaver]:
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
from typing import Dict, List, Optional
|
|
3
|
+
|
|
4
|
+
from langgraph_agent_toolkit.core.observability.factory import ObservabilityFactory
|
|
5
|
+
from langgraph_agent_toolkit.core.observability.types import ChatMessageDict, MessageRole
|
|
6
|
+
from langgraph_agent_toolkit.core.prompts.chat_prompt_template import ObservabilityChatPromptTemplate
|
|
7
|
+
from langgraph_agent_toolkit.core.settings import settings
|
|
8
|
+
from langgraph_agent_toolkit.helper.utils import read_file
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class PromptManager:
|
|
12
|
+
"""Manages prompt templates for the price plan assistant agent."""
|
|
13
|
+
|
|
14
|
+
def __init__(
|
|
15
|
+
self,
|
|
16
|
+
observability_backend: Optional[str] = None,
|
|
17
|
+
prompts_dir: Optional[Path] = None,
|
|
18
|
+
force_create_new_version: bool = False,
|
|
19
|
+
template_format: str = "jinja2",
|
|
20
|
+
load_at_runtime: bool = True,
|
|
21
|
+
):
|
|
22
|
+
"""Initialize the PromptManager with configurable parameters.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
observability_backend: Backend type for observability (defaults to settings.OBSERVABILITY_BACKEND)
|
|
26
|
+
prompts_dir: Directory containing prompt templates (defaults to ./prompts)
|
|
27
|
+
force_create_new_version: Whether to force creation of new prompt versions
|
|
28
|
+
template_format: Format for prompt templates (default: "jinja2")
|
|
29
|
+
load_at_runtime: Whether to load prompts at runtime (default: True)
|
|
30
|
+
|
|
31
|
+
"""
|
|
32
|
+
self._prompt_cache: Dict[str, ObservabilityChatPromptTemplate] = {}
|
|
33
|
+
self._observability = None
|
|
34
|
+
self._observability_backend = observability_backend or settings.OBSERVABILITY_BACKEND
|
|
35
|
+
self._prompts_dir = prompts_dir or (Path(__file__).parent / "prompts")
|
|
36
|
+
self._force_create_new_version = force_create_new_version
|
|
37
|
+
self._template_format = template_format
|
|
38
|
+
self._load_at_runtime = load_at_runtime
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def observability(self):
|
|
42
|
+
"""Lazy-loaded observability platform."""
|
|
43
|
+
if self._observability is None:
|
|
44
|
+
self._observability = ObservabilityFactory.create(self._observability_backend)
|
|
45
|
+
return self._observability
|
|
46
|
+
|
|
47
|
+
def _create_prompt_template(
|
|
48
|
+
self,
|
|
49
|
+
prompt_name: str,
|
|
50
|
+
template_path: Path,
|
|
51
|
+
input_variables: List[str],
|
|
52
|
+
has_messages_placeholder: bool = False,
|
|
53
|
+
partial_variables: Optional[Dict[str, str]] = None,
|
|
54
|
+
) -> ObservabilityChatPromptTemplate:
|
|
55
|
+
"""Create and cache a prompt template from a file."""
|
|
56
|
+
template_content = read_file(template_path)
|
|
57
|
+
|
|
58
|
+
# Build prompt template messages
|
|
59
|
+
prompt_template = [
|
|
60
|
+
ChatMessageDict(
|
|
61
|
+
role=MessageRole.SYSTEM,
|
|
62
|
+
content=template_content,
|
|
63
|
+
)
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
# Add messages placeholder if needed
|
|
67
|
+
if has_messages_placeholder:
|
|
68
|
+
prompt_template.append(
|
|
69
|
+
ChatMessageDict(
|
|
70
|
+
role=MessageRole.PLACEHOLDER,
|
|
71
|
+
content="messages",
|
|
72
|
+
)
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
# Push to observability platform
|
|
76
|
+
self.observability.push_prompt(
|
|
77
|
+
name=prompt_name,
|
|
78
|
+
prompt_template=prompt_template,
|
|
79
|
+
force_create_new_version=self._force_create_new_version,
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
# Create and cache the prompt
|
|
83
|
+
prompt = ObservabilityChatPromptTemplate.from_observability_platform(
|
|
84
|
+
prompt_name=prompt_name,
|
|
85
|
+
observability_platform=self.observability,
|
|
86
|
+
load_at_runtime=self._load_at_runtime,
|
|
87
|
+
template_format=self._template_format,
|
|
88
|
+
input_variables=input_variables,
|
|
89
|
+
partial_variables=partial_variables or {},
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
self._prompt_cache[prompt_name] = prompt
|
|
93
|
+
return prompt
|
|
94
|
+
|
|
95
|
+
def _get_or_create_prompt(
|
|
96
|
+
self,
|
|
97
|
+
prompt_name: str,
|
|
98
|
+
template_filename: str,
|
|
99
|
+
input_variables: List[str],
|
|
100
|
+
has_messages_placeholder: bool = False,
|
|
101
|
+
partial_variables: Optional[Dict[str, str]] = None,
|
|
102
|
+
) -> ObservabilityChatPromptTemplate:
|
|
103
|
+
"""Get cached prompt or create it if it doesn't exist."""
|
|
104
|
+
if prompt_name not in self._prompt_cache:
|
|
105
|
+
template_path = self._prompts_dir / template_filename
|
|
106
|
+
self._create_prompt_template(
|
|
107
|
+
prompt_name=prompt_name,
|
|
108
|
+
template_path=template_path,
|
|
109
|
+
input_variables=input_variables,
|
|
110
|
+
has_messages_placeholder=has_messages_placeholder,
|
|
111
|
+
partial_variables=partial_variables,
|
|
112
|
+
)
|
|
113
|
+
return self._prompt_cache[prompt_name]
|
|
114
|
+
|
|
115
|
+
def clear_cache(self) -> None:
|
|
116
|
+
"""Clear the prompt cache."""
|
|
117
|
+
self._prompt_cache.clear()
|
|
118
|
+
|
|
119
|
+
def get_cached_prompt_names(self) -> List[str]:
|
|
120
|
+
"""Get list of cached prompt names."""
|
|
121
|
+
return list(self._prompt_cache.keys())
|
|
122
|
+
|
|
123
|
+
def set_prompts_directory(self, prompts_dir: Path) -> None:
|
|
124
|
+
"""Update the prompts directory and clear cache."""
|
|
125
|
+
self._prompts_dir = prompts_dir
|
|
126
|
+
self.clear_cache()
|
|
@@ -70,6 +70,9 @@ class Settings(BaseSettings):
|
|
|
70
70
|
OLLAMA_MODEL_NAME: str | None = None
|
|
71
71
|
OLLAMA_BASE_URL: str | None = None
|
|
72
72
|
|
|
73
|
+
# OpenRouter Settings
|
|
74
|
+
OPENROUTER_API_KEY: str | None = None
|
|
75
|
+
|
|
73
76
|
# Observability platform
|
|
74
77
|
OBSERVABILITY_BACKEND: ObservabilityBackend | None = None
|
|
75
78
|
|
|
@@ -94,6 +97,7 @@ class Settings(BaseSettings):
|
|
|
94
97
|
SQLITE_DB_PATH: str = "checkpoints.db"
|
|
95
98
|
|
|
96
99
|
# postgresql Configuration
|
|
100
|
+
POSTGRES_APPLICATION_NAME: str = "langgraph-agent-toolkit"
|
|
97
101
|
POSTGRES_USER: str | None = None
|
|
98
102
|
POSTGRES_PASSWORD: SecretStr | None = None
|
|
99
103
|
POSTGRES_HOST: str | None = None
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import inspect
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from typing import Any
|
|
2
4
|
|
|
3
5
|
from langchain_core.messages import (
|
|
4
6
|
AIMessage,
|
|
@@ -100,3 +102,20 @@ def create_ai_message(parts: dict) -> AIMessage:
|
|
|
100
102
|
valid_keys = set(sig.parameters)
|
|
101
103
|
filtered = {k: v for k, v in parts.items() if k in valid_keys}
|
|
102
104
|
return AIMessage(**filtered)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def read_file(file_path: Path | str, mode: str = "r", encoding: str = "utf-8", **kwargs) -> Any:
|
|
108
|
+
"""Read the content of a file and return it as a string.
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
file_path (Path | str): The path to the file to read.
|
|
112
|
+
mode (str): The mode in which to open the file. Default is "r".
|
|
113
|
+
encoding (str): The encoding to use for reading the file. Default is "utf-8".
|
|
114
|
+
**kwargs: Additional arguments to pass to the open function.
|
|
115
|
+
|
|
116
|
+
Returns:
|
|
117
|
+
Any: The content of the file as a string.
|
|
118
|
+
|
|
119
|
+
"""
|
|
120
|
+
with open(file_path, mode=mode, encoding=encoding, **kwargs) as file:
|
|
121
|
+
return file.read()
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "langgraph-agent-toolkit"
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.8"
|
|
8
8
|
description = "Full toolkit for running an AI agent service built with LangGraph, FastAPI and Streamlit"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{ name = "Roman Kryvokhyzha", email = "kriwohizha@gmail.com" }, { name = "Joshua Carroll", email = "carroll.joshk@gmail.com" }]
|
|
@@ -36,10 +36,11 @@ dependencies = [
|
|
|
36
36
|
"jiter ~= 0.10.0",
|
|
37
37
|
"langchain-core ~= 0.3.60",
|
|
38
38
|
"langchain-community ~= 0.3.24",
|
|
39
|
-
"langgraph ~= 0.
|
|
39
|
+
"langgraph ~= 0.6.2",
|
|
40
40
|
"langgraph-cli[inmem] >= 0.2.10,< 0.4.0",
|
|
41
41
|
"langgraph-checkpoint-sqlite ~= 2.0.7",
|
|
42
|
-
"langgraph-checkpoint-postgres ~= 2.0.
|
|
42
|
+
# "langgraph-checkpoint-postgres (~=2.0.21, !=2.0.22)",
|
|
43
|
+
"langgraph-checkpoint-postgres <= 2.0.21",
|
|
43
44
|
"langgraph-supervisor ~= 0.0.21",
|
|
44
45
|
"numpy ~= 1.26.4; python_version <= '3.12'",
|
|
45
46
|
"numpy >= 2.2.3,< 2.4.0; python_version >= '3.13'",
|
|
@@ -52,7 +53,7 @@ dependencies = [
|
|
|
52
53
|
"pyowm ~= 3.3.0",
|
|
53
54
|
"python-dotenv ~= 1.1.0",
|
|
54
55
|
"setuptools >= 75.6.0",
|
|
55
|
-
"streamlit >= 1.45
|
|
56
|
+
"streamlit >= 1.45, < 1.48",
|
|
56
57
|
"watchdog ~= 6.0.0",
|
|
57
58
|
"joblib >= 1.4.2",
|
|
58
59
|
"uvicorn ~= 0.34.0",
|
|
@@ -248,8 +248,8 @@ async def test_astream(agent_client):
|
|
|
248
248
|
mock_response.aiter_lines = Mock(return_value=async_events())
|
|
249
249
|
mock_response.__aenter__ = AsyncMock(return_value=mock_response)
|
|
250
250
|
mock_response.__aexit__ = AsyncMock(return_value=None)
|
|
251
|
-
#
|
|
252
|
-
mock_response.raise_for_status =
|
|
251
|
+
# Use Mock() instead of AsyncMock() since raise_for_status is synchronous
|
|
252
|
+
mock_response.raise_for_status = Mock()
|
|
253
253
|
|
|
254
254
|
# Create a mock client that returns the mock_response directly (not as a coroutine)
|
|
255
255
|
mock_client = AsyncMock()
|
|
@@ -78,6 +78,8 @@ class TestPostgresMemoryBackend(unittest.TestCase):
|
|
|
78
78
|
mock_settings.POSTGRES_HOST = "localhost"
|
|
79
79
|
mock_settings.POSTGRES_PORT = "5432"
|
|
80
80
|
mock_settings.POSTGRES_DB = "testdb"
|
|
81
|
+
mock_settings.POSTGRES_MIN_SIZE = 1
|
|
82
|
+
mock_settings.POSTGRES_POOL_SIZE = 5
|
|
81
83
|
|
|
82
84
|
self.assertTrue(self.backend.validate_config())
|
|
83
85
|
|
|
@@ -89,6 +91,8 @@ class TestPostgresMemoryBackend(unittest.TestCase):
|
|
|
89
91
|
mock_settings.POSTGRES_HOST = "localhost"
|
|
90
92
|
mock_settings.POSTGRES_PORT = "5432"
|
|
91
93
|
mock_settings.POSTGRES_DB = "testdb"
|
|
94
|
+
mock_settings.POSTGRES_MIN_SIZE = 1
|
|
95
|
+
mock_settings.POSTGRES_POOL_SIZE = 5
|
|
92
96
|
|
|
93
97
|
with pytest.raises(ValueError, match=r"Missing required PostgreSQL configuration"):
|
|
94
98
|
self.backend.validate_config()
|
{langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/service/test_service.py
RENAMED
|
@@ -5,7 +5,7 @@ import langsmith
|
|
|
5
5
|
import pytest
|
|
6
6
|
from langchain_core.messages import AIMessage, HumanMessage
|
|
7
7
|
from langgraph.errors import GraphRecursionError
|
|
8
|
-
from langgraph.
|
|
8
|
+
from langgraph.types import StateSnapshot
|
|
9
9
|
|
|
10
10
|
from langgraph_agent_toolkit.schema import ChatHistory, ChatMessage, ServiceMetadata
|
|
11
11
|
from langgraph_agent_toolkit.schema.models import ModelProvider
|