langgraph-agent-toolkit 0.4.4__tar.gz → 0.5.0__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.4.4 → langgraph_agent_toolkit-0.5.0}/CHANGELOG.md +16 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/PKG-INFO +6 -1
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/README.md +4 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/react/agent.py +1 -1
- langgraph_agent_toolkit-0.5.0/langgraph_agent_toolkit/agents/components/utils.py +40 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/models/factory.py +8 -5
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/base.py +5 -5
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/empty.py +3 -3
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/langfuse.py +54 -11
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/langsmith.py +6 -2
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/helper/constants.py +4 -1
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/streamlit_app.py +17 -12
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/pyproject.toml +2 -1
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/01-invoke-proxy.py +11 -3
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/02-test-local-pm.py +10 -2
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/03-test-langfuse-pm.py +10 -2
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/04-test-langsmith-pm.py +9 -2
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/05-test-prompt-types.py +10 -2
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/06-test-custom-chat-prompt-template.py +11 -4
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/07-test-get-chat-history.py +11 -6
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/08-test-update-chat-history.py +11 -6
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/09-test-clear-chat-history.py +11 -6
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/core/test_observability.py +140 -117
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/uv.lock +96 -1
- langgraph_agent_toolkit-0.4.4/langgraph_agent_toolkit/agents/components/utils.py +0 -50
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.coveragerc +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.dockerignore +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.env.example +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/RELEASE_TEMPLATE/release-template.md +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/codecov.yml +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/dependabot.yml +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/scripts/tag_from_pyproject.sh +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/workflows/deploy.yml +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/workflows/release.yml +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/workflows/sphinx.yml +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/workflows/test.yml +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.gitignore +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.pre-commit-config.yaml +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.project-root +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/CONTRIBUTING.md +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/LICENSE +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/Makefile +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/clickhouse/.clickhouse.env.example +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/langfuse/.langfuse.env.example +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/litellm/.litellm.env.example +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/litellm/config.example.yaml +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/minio/.minio.env.example +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/postgres/.postgres.env.example +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/redis/.redis.env.example +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docker/app/Dockerfile +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docker/service/Dockerfile +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docker-compose.yaml +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/.gitignore +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/Makefile +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/_static/custom.css +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/_templates/class.rst +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/_templates/layout.html +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/_templates/module.rst +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/conf.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/contributing.rst +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/environment_setup.rst +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/index.rst +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/installation.rst +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/make.bat +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/media/agent_architecture.excalidraw +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/media/agent_architecture.png +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/media/agent_diagram.png +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/media/logo.svg +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/usage.rst +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph.json +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/agent.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/agent_executor.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/agent.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/task.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/utils.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/chatbot/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/chatbot/agent.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/command_agent/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/command_agent/agent.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/agent.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/knowledge_base_agent/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/knowledge_base_agent/agent.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/react/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/react_so/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/react_so/agent.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/agent.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/components/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/components/creators/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/components/creators/create_react_agent.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/components/tools.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/client/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/client/client.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/memory/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/memory/base.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/memory/factory.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/memory/postgres.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/memory/sqlite.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/memory/types.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/models/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/models/chat_openai.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/models/fake.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/factory.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/types.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/prompts/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/prompts/chat_prompt_template.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/settings.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/helper/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/helper/logging.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/helper/types.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/helper/utils.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/run_agent.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/run_client.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/run_service.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/schema/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/schema/models.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/schema/schema.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/schema/task_data.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/__init__.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/exception_handlers.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/factory.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/handler.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/middleware.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/routes.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/types.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/utils.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/postgres-init/create_databases.sql +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/agents/test_agent_executor.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/agents/test_service_streaming.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/app/conftest.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/app/test_streamlit_app.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/client/conftest.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/client/test_client.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/conftest.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/core/test_llm.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/core/test_memory.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/core/test_prompts.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/core/test_settings.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/integration/test_docker_e2e.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/service/conftest.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/service/test_auth.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/service/test_factory.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/service/test_service.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/service/test_service_e2e.py +0 -0
- {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/service/test_utils.py +0 -0
|
@@ -6,6 +6,22 @@ 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.5.0]
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Streamlit UI bugs
|
|
14
|
+
- Windows compatibility issue
|
|
15
|
+
- Enhance message handling inside `pre_hook_model`
|
|
16
|
+
- Add prompt hash to Langfuse observability class
|
|
17
|
+
- Rename few parameters
|
|
18
|
+
|
|
19
|
+
## [0.4.5]
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- Strucuted output and model factory
|
|
24
|
+
|
|
9
25
|
## [0.4.4]
|
|
10
26
|
|
|
11
27
|
### Updated
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: langgraph-agent-toolkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
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
|
|
@@ -40,6 +40,7 @@ Requires-Dist: loguru~=0.7.3
|
|
|
40
40
|
Requires-Dist: multidict>6.3.2
|
|
41
41
|
Requires-Dist: numpy~=1.26.4; python_version <= '3.12'
|
|
42
42
|
Requires-Dist: numpy~=2.2.3; python_version >= '3.13'
|
|
43
|
+
Requires-Dist: onnxruntime~=1.21.1
|
|
43
44
|
Requires-Dist: pandas~=2.2.3
|
|
44
45
|
Requires-Dist: psycopg[binary,pool]~=3.2.4
|
|
45
46
|
Requires-Dist: pyarrow>=19.0.1
|
|
@@ -299,10 +300,14 @@ and includes:
|
|
|
299
300
|
- [LangGraph documentation](https://langchain-ai.github.io/langgraph/concepts/low_level/#multiple-schemas)
|
|
300
301
|
- [LangGraph Memory Concept](https://langchain-ai.github.io/langgraph/concepts/memory/)
|
|
301
302
|
- [LangGraph Memory Persistence](https://langchain-ai.github.io/langgraph/concepts/persistence/#memory)
|
|
303
|
+
- [LangGraph Memory Template](https://github.com/langchain-ai/memory-template)
|
|
304
|
+
- [LangGraph Human in the Loop](https://langchain-ai.github.io/langgraph/how-tos/human_in_the_loop/wait-user-input/)
|
|
302
305
|
- [LangGraph 101 - blueprints](https://github.com/langchain-ai/langgraph-101)
|
|
303
306
|
- [LangGraph - Examples](https://github.com/langchain-ai/langgraph/tree/main/examples)
|
|
304
307
|
- [Complex data extraction with function calling](https://langchain-ai.github.io/langgraph/tutorials/extraction/retries/)
|
|
305
308
|
- [How to edit graph state](https://langchain-ai.github.io/langgraph/how-tos/human_in_the_loop/edit-graph-state/)
|
|
309
|
+
- [Memory in the background](https://www.youtube.com/watch?v=R1jKQ1Jn5T4&ab_channel=LangChain)
|
|
310
|
+
- [Building an agent with LangGraph](https://www.kaggle.com/code/markishere/day-3-building-an-agent-with-langgraph/)
|
|
306
311
|
- [How to create tools in Langchain](https://python.langchain.com/docs/how_to/custom_tools/)
|
|
307
312
|
- [Simple Serverless FastAPI with AWS Lambda](https://www.deadbear.io/simple-serverless-fastapi-with-aws-lambda/)
|
|
308
313
|
|
|
@@ -197,10 +197,14 @@ and includes:
|
|
|
197
197
|
- [LangGraph documentation](https://langchain-ai.github.io/langgraph/concepts/low_level/#multiple-schemas)
|
|
198
198
|
- [LangGraph Memory Concept](https://langchain-ai.github.io/langgraph/concepts/memory/)
|
|
199
199
|
- [LangGraph Memory Persistence](https://langchain-ai.github.io/langgraph/concepts/persistence/#memory)
|
|
200
|
+
- [LangGraph Memory Template](https://github.com/langchain-ai/memory-template)
|
|
201
|
+
- [LangGraph Human in the Loop](https://langchain-ai.github.io/langgraph/how-tos/human_in_the_loop/wait-user-input/)
|
|
200
202
|
- [LangGraph 101 - blueprints](https://github.com/langchain-ai/langgraph-101)
|
|
201
203
|
- [LangGraph - Examples](https://github.com/langchain-ai/langgraph/tree/main/examples)
|
|
202
204
|
- [Complex data extraction with function calling](https://langchain-ai.github.io/langgraph/tutorials/extraction/retries/)
|
|
203
205
|
- [How to edit graph state](https://langchain-ai.github.io/langgraph/how-tos/human_in_the_loop/edit-graph-state/)
|
|
206
|
+
- [Memory in the background](https://www.youtube.com/watch?v=R1jKQ1Jn5T4&ab_channel=LangChain)
|
|
207
|
+
- [Building an agent with LangGraph](https://www.kaggle.com/code/markishere/day-3-building-an-agent-with-langgraph/)
|
|
204
208
|
- [How to create tools in Langchain](https://python.langchain.com/docs/how_to/custom_tools/)
|
|
205
209
|
- [Simple Serverless FastAPI with AWS Lambda](https://www.deadbear.io/simple-serverless-fastapi-with-aws-lambda/)
|
|
206
210
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from typing import TypeVar
|
|
2
|
+
|
|
3
|
+
from langchain_core.messages.utils import trim_messages
|
|
4
|
+
from langchain_core.runnables import RunnableConfig
|
|
5
|
+
from langgraph.managed.is_last_step import RemainingSteps
|
|
6
|
+
from langgraph.prebuilt.chat_agent_executor import AgentState, AgentStateWithStructuredResponse
|
|
7
|
+
|
|
8
|
+
from langgraph_agent_toolkit.helper.constants import DEFAULT_MAX_MESSAGE_HISTORY_LENGTH
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
T = TypeVar("T")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class AgentStateWithRemainingSteps(AgentState):
|
|
15
|
+
remaining_steps: RemainingSteps
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class AgentStateWithStructuredResponseAndRemainingSteps(AgentStateWithStructuredResponse):
|
|
19
|
+
remaining_steps: RemainingSteps
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def pre_model_hook_standard(state: T, config: RunnableConfig):
|
|
23
|
+
_max_messages = config.get("configurable", {}).get("memory_saver_params", {}).get("k", None)
|
|
24
|
+
|
|
25
|
+
updated_messages = trim_messages(
|
|
26
|
+
state["messages"],
|
|
27
|
+
token_counter=len,
|
|
28
|
+
max_tokens=_max_messages or DEFAULT_MAX_MESSAGE_HISTORY_LENGTH,
|
|
29
|
+
strategy="last",
|
|
30
|
+
start_on="human",
|
|
31
|
+
end_on=("human", "tool"),
|
|
32
|
+
include_system=True,
|
|
33
|
+
allow_partial=False,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
return {"llm_input_messages": updated_messages}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def default_pre_model_hook(state: T, config: RunnableConfig) -> T:
|
|
40
|
+
return state
|
|
@@ -87,7 +87,7 @@ class ModelFactory:
|
|
|
87
87
|
model_name: Optional[str] = None,
|
|
88
88
|
configurable_fields: Optional[Union[Literal["any"], List[str], Tuple[str, ...]]] = None,
|
|
89
89
|
config_prefix: Optional[str] = None,
|
|
90
|
-
model_parameter_values: Optional[
|
|
90
|
+
model_parameter_values: Optional[Tuple[Tuple[str, Any], ...]] = None, # Changed to tuple of tuples
|
|
91
91
|
**kwargs: Any,
|
|
92
92
|
) -> ModelT:
|
|
93
93
|
"""Create and return a model instance.
|
|
@@ -97,7 +97,8 @@ class ModelFactory:
|
|
|
97
97
|
model_name: The name of the model to use. If not provided, the default model name will be used.
|
|
98
98
|
configurable_fields: The fields that are configurable. If not provided, the default fields will be used.
|
|
99
99
|
config_prefix: The prefix to use for the configuration. If not provided, the default prefix will be used.
|
|
100
|
-
model_parameter_values: The values for the model parameters
|
|
100
|
+
model_parameter_values: The values for the model parameters as a tuple of (key, value) pairs.
|
|
101
|
+
If not provided, the default values will be used.
|
|
101
102
|
**kwargs: Additional keyword arguments to pass to the model.
|
|
102
103
|
|
|
103
104
|
Returns:
|
|
@@ -108,8 +109,10 @@ class ModelFactory:
|
|
|
108
109
|
|
|
109
110
|
""" # noqa: E501
|
|
110
111
|
_configurable_fields = DEFAULT_CONFIGURABLE_FIELDS if configurable_fields is None else configurable_fields
|
|
111
|
-
_config_prefix = config_prefix
|
|
112
|
-
_model_parameter_values =
|
|
112
|
+
_config_prefix = DEFAULT_CONFIG_PREFIX if config_prefix is None else config_prefix
|
|
113
|
+
_model_parameter_values = (
|
|
114
|
+
DEFAULT_MODEL_PARAMETER_VALUES if model_parameter_values is None else dict(model_parameter_values)
|
|
115
|
+
)
|
|
113
116
|
|
|
114
117
|
match model_provider:
|
|
115
118
|
case ModelProvider.FAKE:
|
|
@@ -165,4 +168,4 @@ class ModelFactory:
|
|
|
165
168
|
params.update(override_params)
|
|
166
169
|
|
|
167
170
|
# Create and return the model
|
|
168
|
-
return cls.create(model_provider=provider, model_name=model_name, **params)
|
|
171
|
+
return cls.create(model_provider=provider, model_name=model_name, model_parameter_values=(), **params)
|
|
@@ -89,7 +89,7 @@ class BaseObservabilityPlatform(ABC):
|
|
|
89
89
|
def _handle_existing_prompt(
|
|
90
90
|
self,
|
|
91
91
|
name: str,
|
|
92
|
-
|
|
92
|
+
force_create_new_version: bool = True,
|
|
93
93
|
client: Any = None,
|
|
94
94
|
client_pull_method: Optional[str] = None,
|
|
95
95
|
client_delete_method: Optional[str] = None,
|
|
@@ -106,11 +106,11 @@ class BaseObservabilityPlatform(ABC):
|
|
|
106
106
|
if not pull_method or not delete_method:
|
|
107
107
|
return (existing_prompt, url)
|
|
108
108
|
|
|
109
|
-
if not
|
|
109
|
+
if not force_create_new_version:
|
|
110
110
|
try:
|
|
111
111
|
existing_prompt = pull_method(name=name)
|
|
112
112
|
url = getattr(existing_prompt, "url", None)
|
|
113
|
-
logger.debug(f"Using existing prompt '{name}' as
|
|
113
|
+
logger.debug(f"Using existing prompt '{name}' as force_create_new_version is False")
|
|
114
114
|
except Exception:
|
|
115
115
|
logger.debug(f"Existing prompt '{name}' not found, will create a new one")
|
|
116
116
|
else:
|
|
@@ -275,14 +275,14 @@ class BaseObservabilityPlatform(ABC):
|
|
|
275
275
|
name: str,
|
|
276
276
|
prompt_template: PromptTemplateType,
|
|
277
277
|
metadata: Optional[Dict[str, Any]] = None,
|
|
278
|
-
|
|
278
|
+
force_create_new_version: bool = True,
|
|
279
279
|
) -> None:
|
|
280
280
|
self._prompts_dir.mkdir(exist_ok=True, parents=True)
|
|
281
281
|
|
|
282
282
|
file_path = self._prompts_dir / f"{name}.jinja2"
|
|
283
283
|
metadata_path = self._prompts_dir / f"{name}.metadata.joblib"
|
|
284
284
|
|
|
285
|
-
if
|
|
285
|
+
if force_create_new_version:
|
|
286
286
|
if file_path.exists():
|
|
287
287
|
file_path.unlink()
|
|
288
288
|
if metadata_path.exists():
|
|
@@ -35,7 +35,7 @@ class EmptyObservability(BaseObservabilityPlatform):
|
|
|
35
35
|
name: str,
|
|
36
36
|
prompt_template: PromptTemplateType,
|
|
37
37
|
metadata: Optional[Dict[str, Any]] = None,
|
|
38
|
-
|
|
38
|
+
force_create_new_version: bool = True,
|
|
39
39
|
) -> None:
|
|
40
40
|
"""Push a prompt using local storage.
|
|
41
41
|
|
|
@@ -43,10 +43,10 @@ class EmptyObservability(BaseObservabilityPlatform):
|
|
|
43
43
|
name: Name of the prompt
|
|
44
44
|
prompt_template: String template, list of message dicts, or prompt object
|
|
45
45
|
metadata: Additional metadata for the prompt
|
|
46
|
-
|
|
46
|
+
force_create_new_version: If True, overwrite existing prompt with new version
|
|
47
47
|
|
|
48
48
|
"""
|
|
49
|
-
super().push_prompt(name, prompt_template, metadata,
|
|
49
|
+
super().push_prompt(name, prompt_template, metadata, force_create_new_version)
|
|
50
50
|
|
|
51
51
|
def pull_prompt(
|
|
52
52
|
self,
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import hashlib
|
|
2
|
+
import json
|
|
1
3
|
from typing import Any, Dict, Literal, Optional, Tuple, Union
|
|
2
4
|
|
|
3
5
|
from langfuse import Langfuse
|
|
@@ -32,44 +34,85 @@ class LangfuseObservability(BaseObservabilityPlatform):
|
|
|
32
34
|
**kwargs,
|
|
33
35
|
)
|
|
34
36
|
|
|
37
|
+
def _compute_prompt_hash(self, prompt_template: PromptTemplateType) -> str:
|
|
38
|
+
"""Compute a hash of the prompt content to detect changes."""
|
|
39
|
+
if isinstance(prompt_template, str):
|
|
40
|
+
content_to_hash = prompt_template
|
|
41
|
+
elif isinstance(prompt_template, list):
|
|
42
|
+
content_to_hash = json.dumps(prompt_template, sort_keys=True)
|
|
43
|
+
else:
|
|
44
|
+
content_to_hash = str(prompt_template)
|
|
45
|
+
|
|
46
|
+
return hashlib.md5(content_to_hash.encode("utf-8")).hexdigest()
|
|
47
|
+
|
|
35
48
|
@BaseObservabilityPlatform.requires_env_vars
|
|
36
49
|
def push_prompt(
|
|
37
50
|
self,
|
|
38
51
|
name: str,
|
|
39
52
|
prompt_template: PromptTemplateType,
|
|
40
53
|
metadata: Optional[Dict[str, Any]] = None,
|
|
41
|
-
|
|
54
|
+
force_create_new_version: bool = True,
|
|
42
55
|
) -> None:
|
|
43
56
|
langfuse = Langfuse()
|
|
44
57
|
labels = metadata.get("labels", ["production"]) if metadata else ["production"]
|
|
45
58
|
|
|
59
|
+
# Generate hash for the current prompt
|
|
60
|
+
prompt_hash = self._compute_prompt_hash(prompt_template)
|
|
61
|
+
|
|
46
62
|
# Handle existing prompt versions - custom implementation for Langfuse
|
|
47
63
|
existing_prompt = None
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
64
|
+
content_changed = True
|
|
65
|
+
|
|
66
|
+
try:
|
|
67
|
+
existing_prompt = langfuse.get_prompt(name=name)
|
|
68
|
+
|
|
69
|
+
# Check if content has changed by comparing hashes
|
|
70
|
+
if existing_prompt.commit_message and existing_prompt.commit_message == prompt_hash:
|
|
71
|
+
content_changed = False
|
|
72
|
+
logger.debug(f"Prompt '{name}' content unchanged")
|
|
73
|
+
else:
|
|
74
|
+
logger.debug(f"Prompt '{name}' content changed from previous version")
|
|
75
|
+
except Exception:
|
|
76
|
+
logger.debug(f"Existing prompt '{name}' not found, will create a new one")
|
|
54
77
|
|
|
55
78
|
prompt_obj = self._convert_to_chat_prompt(prompt_template)
|
|
56
79
|
type_prompt = "text" if isinstance(prompt_template, str) else "chat"
|
|
57
80
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
81
|
+
create_new = (
|
|
82
|
+
# When force_create_new_version=True, always create a new version
|
|
83
|
+
force_create_new_version
|
|
84
|
+
or
|
|
85
|
+
# When no existing prompt, create a new one
|
|
86
|
+
existing_prompt is None
|
|
87
|
+
or
|
|
88
|
+
# When content has changed and we're not forcing to keep the old version
|
|
89
|
+
content_changed
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
if create_new:
|
|
61
93
|
langfuse_prompt = langfuse.create_prompt(
|
|
62
94
|
name=name,
|
|
63
95
|
prompt=prompt_template,
|
|
64
96
|
labels=labels,
|
|
65
97
|
type=type_prompt,
|
|
98
|
+
commit_message=prompt_hash, # Store hash in commit_message
|
|
66
99
|
)
|
|
100
|
+
if existing_prompt is None:
|
|
101
|
+
logger.debug(f"Created new prompt '{name}' as it didn't exist before")
|
|
102
|
+
elif content_changed:
|
|
103
|
+
logger.debug(f"Created new prompt version '{name}' because content changed (hash: {prompt_hash})")
|
|
104
|
+
else:
|
|
105
|
+
logger.debug(f"Created new prompt version '{name}' because force_create_new_version=True")
|
|
106
|
+
else:
|
|
107
|
+
# Content unchanged and not forcing new version
|
|
108
|
+
langfuse_prompt = existing_prompt
|
|
109
|
+
logger.debug(f"Reusing existing prompt '{name}' as content is unchanged and force_create_new_version=False")
|
|
67
110
|
|
|
68
111
|
full_metadata = metadata.copy() if metadata else {}
|
|
69
112
|
full_metadata["langfuse_prompt"] = langfuse_prompt
|
|
70
113
|
full_metadata["original_prompt"] = prompt_obj
|
|
71
114
|
|
|
72
|
-
super().push_prompt(name, prompt_template, full_metadata)
|
|
115
|
+
super().push_prompt(name, prompt_template, full_metadata, force_create_new_version)
|
|
73
116
|
|
|
74
117
|
@BaseObservabilityPlatform.requires_env_vars
|
|
75
118
|
def pull_prompt(
|
|
@@ -54,7 +54,7 @@ class LangsmithObservability(BaseObservabilityPlatform):
|
|
|
54
54
|
name: str,
|
|
55
55
|
prompt_template: PromptTemplateType,
|
|
56
56
|
metadata: Optional[Dict[str, Any]] = None,
|
|
57
|
-
|
|
57
|
+
force_create_new_version: bool = True,
|
|
58
58
|
) -> None:
|
|
59
59
|
"""Push a prompt to LangSmith."""
|
|
60
60
|
client = LangsmithClient()
|
|
@@ -64,7 +64,11 @@ class LangsmithObservability(BaseObservabilityPlatform):
|
|
|
64
64
|
|
|
65
65
|
# Handle existing prompt versions
|
|
66
66
|
existing_prompt, existing_url = self._handle_existing_prompt(
|
|
67
|
-
name,
|
|
67
|
+
name,
|
|
68
|
+
force_create_new_version,
|
|
69
|
+
client,
|
|
70
|
+
client_pull_method="pull_prompt",
|
|
71
|
+
client_delete_method="delete_prompt",
|
|
68
72
|
)
|
|
69
73
|
|
|
70
74
|
url = None
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
|
|
1
4
|
# This is the initial default agent name, but it may be overridden at runtime
|
|
2
5
|
DEFAULT_AGENT = "react-agent"
|
|
3
6
|
_CURRENT_DEFAULT_AGENT = DEFAULT_AGENT
|
|
@@ -13,7 +16,7 @@ def set_default_agent(agent_name):
|
|
|
13
16
|
return _CURRENT_DEFAULT_AGENT
|
|
14
17
|
|
|
15
18
|
|
|
16
|
-
DEFAULT_MAX_MESSAGE_HISTORY_LENGTH =
|
|
19
|
+
DEFAULT_MAX_MESSAGE_HISTORY_LENGTH = os.getenv("DEFAULT_MAX_MESSAGE_HISTORY_LENGTH", 18)
|
|
17
20
|
DEFAULT_RECURSION_LIMIT = 25
|
|
18
21
|
DEFAULT_CONFIG_PREFIX = "agent"
|
|
19
22
|
DEFAULT_CONFIGURABLE_FIELDS = ("temperature", "max_tokens", "top_p", "streaming")
|
|
@@ -30,6 +30,20 @@ APP_TITLE = "Agent Service Toolkit"
|
|
|
30
30
|
APP_ICON = "🧰"
|
|
31
31
|
|
|
32
32
|
|
|
33
|
+
def create_welcome_message(agent: str) -> ChatMessage:
|
|
34
|
+
"""Create a welcome message based on the current agent."""
|
|
35
|
+
match agent:
|
|
36
|
+
case "chatbot":
|
|
37
|
+
welcome_content = "Hello! I'm a simple chatbot. Ask me anything!"
|
|
38
|
+
case "interrupt-agent":
|
|
39
|
+
welcome_content = (
|
|
40
|
+
"Hello! I'm an interrupt agent. Tell me your birthday and I will predict your personality!"
|
|
41
|
+
)
|
|
42
|
+
case _:
|
|
43
|
+
welcome_content = "Hello! I'm an AI agent. Ask me anything!"
|
|
44
|
+
return ChatMessage(type="ai", content=welcome_content)
|
|
45
|
+
|
|
46
|
+
|
|
33
47
|
async def main() -> None:
|
|
34
48
|
st.set_page_config(
|
|
35
49
|
page_title=APP_TITLE,
|
|
@@ -76,18 +90,7 @@ async def main() -> None:
|
|
|
76
90
|
thread_id = str(uuid.uuid4())
|
|
77
91
|
messages = []
|
|
78
92
|
# Add welcome message to messages when creating a new thread
|
|
79
|
-
|
|
80
|
-
match agent_client.agent:
|
|
81
|
-
case "chatbot":
|
|
82
|
-
welcome_content = "Hello! I'm a simple chatbot. Ask me anything!"
|
|
83
|
-
case "interrupt-agent":
|
|
84
|
-
welcome_content = (
|
|
85
|
-
"Hello! I'm an interrupt agent. Tell me your birthday and I will predict your personality!"
|
|
86
|
-
)
|
|
87
|
-
case _:
|
|
88
|
-
welcome_content = "Hello! I'm an AI agent. Ask me anything!"
|
|
89
|
-
welcome_message = ChatMessage(type="ai", content=welcome_content)
|
|
90
|
-
messages.append(welcome_message)
|
|
93
|
+
messages.append(create_welcome_message(agent_client.agent))
|
|
91
94
|
else:
|
|
92
95
|
try:
|
|
93
96
|
messages: List[ChatMessage] = agent_client.get_history(
|
|
@@ -111,6 +114,8 @@ async def main() -> None:
|
|
|
111
114
|
if st.button(":material/chat: New Chat", use_container_width=True):
|
|
112
115
|
st.session_state.messages = []
|
|
113
116
|
st.session_state.thread_id = str(uuid.uuid4())
|
|
117
|
+
# Add welcome message to new chat
|
|
118
|
+
st.session_state.messages.append(create_welcome_message(agent_client.agent))
|
|
114
119
|
st.rerun()
|
|
115
120
|
|
|
116
121
|
with st.popover(":material/settings: Settings", use_container_width=True):
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "langgraph-agent-toolkit"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.5.0"
|
|
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" }]
|
|
@@ -43,6 +43,7 @@ dependencies = [
|
|
|
43
43
|
"langgraph-supervisor ~= 0.0.21",
|
|
44
44
|
"numpy ~= 1.26.4; python_version <= '3.12'",
|
|
45
45
|
"numpy ~= 2.2.3; python_version >= '3.13'",
|
|
46
|
+
"onnxruntime ~= 1.21.1",
|
|
46
47
|
"pandas ~= 2.2.3",
|
|
47
48
|
"psycopg[binary,pool] ~= 3.2.4",
|
|
48
49
|
"pyarrow >= 19.0.1",
|
{langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/01-invoke-proxy.py
RENAMED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import os
|
|
2
2
|
|
|
3
|
+
import rootutils
|
|
3
4
|
from dotenv import find_dotenv, load_dotenv
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
_ = rootutils.setup_root(
|
|
8
|
+
search_from=__file__,
|
|
9
|
+
indicator=".project-root",
|
|
10
|
+
pythonpath=True,
|
|
11
|
+
dotenv=False,
|
|
12
|
+
)
|
|
13
|
+
load_dotenv(find_dotenv(".local.env"), override=True)
|
|
14
|
+
|
|
4
15
|
from langchain.schema import HumanMessage
|
|
5
16
|
from langchain_openai import ChatOpenAI
|
|
6
17
|
from pydantic import BaseModel, Field
|
|
7
18
|
|
|
8
19
|
|
|
9
|
-
load_dotenv(find_dotenv())
|
|
10
|
-
|
|
11
|
-
|
|
12
20
|
class Response(BaseModel):
|
|
13
21
|
answer: str = Field(..., description="The answer to the question.")
|
|
14
22
|
similar_questions: list[str] = Field(..., description="A list of similar questions to the one asked. Limit: 3")
|
{langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/02-test-local-pm.py
RENAMED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
import rootutils
|
|
2
2
|
from dotenv import find_dotenv, load_dotenv
|
|
3
3
|
|
|
4
|
+
|
|
5
|
+
PATH_TO_ROOT = rootutils.setup_root(
|
|
6
|
+
search_from=__file__,
|
|
7
|
+
indicator=".project-root",
|
|
8
|
+
pythonpath=True,
|
|
9
|
+
dotenv=False,
|
|
10
|
+
)
|
|
11
|
+
load_dotenv(find_dotenv(".local.env"), override=True)
|
|
12
|
+
|
|
4
13
|
from langgraph_agent_toolkit.core.observability.empty import EmptyObservability
|
|
5
14
|
|
|
6
15
|
|
|
7
|
-
|
|
8
|
-
custom_dir = rootutils.find_root(__file__, indicator=".project-root") / "data" / "prompts"
|
|
16
|
+
custom_dir = PATH_TO_ROOT / "data" / "prompts"
|
|
9
17
|
|
|
10
18
|
|
|
11
19
|
if __name__ == "__main__":
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
import rootutils
|
|
1
2
|
from dotenv import find_dotenv, load_dotenv
|
|
2
3
|
|
|
3
|
-
from langgraph_agent_toolkit.core.observability.langfuse import LangfuseObservability
|
|
4
4
|
|
|
5
|
+
_ = rootutils.setup_root(
|
|
6
|
+
search_from=__file__,
|
|
7
|
+
indicator=".project-root",
|
|
8
|
+
pythonpath=True,
|
|
9
|
+
dotenv=False,
|
|
10
|
+
)
|
|
11
|
+
load_dotenv(find_dotenv(".local.env"), override=True)
|
|
5
12
|
|
|
6
|
-
|
|
13
|
+
from langgraph_agent_toolkit.core.observability.langfuse import LangfuseObservability
|
|
7
14
|
|
|
8
15
|
|
|
9
16
|
if __name__ == "__main__":
|
|
@@ -22,6 +29,7 @@ Additional context:
|
|
|
22
29
|
observability.push_prompt(
|
|
23
30
|
name="joke-generator",
|
|
24
31
|
prompt_template=joke_template,
|
|
32
|
+
force_create_new_version=True,
|
|
25
33
|
)
|
|
26
34
|
print("Prompt pushed to Langfuse")
|
|
27
35
|
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
import rootutils
|
|
1
2
|
from dotenv import find_dotenv, load_dotenv
|
|
2
3
|
|
|
3
|
-
from langgraph_agent_toolkit.core.observability.langsmith import LangsmithObservability
|
|
4
4
|
|
|
5
|
+
_ = rootutils.setup_root(
|
|
6
|
+
search_from=__file__,
|
|
7
|
+
indicator=".project-root",
|
|
8
|
+
pythonpath=True,
|
|
9
|
+
dotenv=False,
|
|
10
|
+
)
|
|
11
|
+
load_dotenv(find_dotenv(".local.env"), override=True)
|
|
5
12
|
|
|
6
|
-
|
|
13
|
+
from langgraph_agent_toolkit.core.observability.langsmith import LangsmithObservability
|
|
7
14
|
|
|
8
15
|
|
|
9
16
|
if __name__ == "__main__":
|
|
@@ -1,11 +1,19 @@
|
|
|
1
|
+
import rootutils
|
|
1
2
|
from dotenv import find_dotenv, load_dotenv
|
|
2
3
|
|
|
4
|
+
|
|
5
|
+
_ = rootutils.setup_root(
|
|
6
|
+
search_from=__file__,
|
|
7
|
+
indicator=".project-root",
|
|
8
|
+
pythonpath=True,
|
|
9
|
+
dotenv=False,
|
|
10
|
+
)
|
|
11
|
+
load_dotenv(find_dotenv(".local.env"), override=True)
|
|
12
|
+
|
|
3
13
|
from langgraph_agent_toolkit.core.observability.factory import ObservabilityFactory
|
|
4
14
|
from langgraph_agent_toolkit.core.observability.types import ChatMessageDict, ObservabilityBackend
|
|
5
15
|
|
|
6
16
|
|
|
7
|
-
load_dotenv(find_dotenv())
|
|
8
|
-
|
|
9
17
|
if __name__ == "__main__":
|
|
10
18
|
# Create observability instance using the factory
|
|
11
19
|
observability = ObservabilityFactory.create(ObservabilityBackend.EMPTY)
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
import time
|
|
2
2
|
from typing import List
|
|
3
3
|
|
|
4
|
+
import rootutils
|
|
4
5
|
from dotenv import find_dotenv, load_dotenv
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
_ = rootutils.setup_root(
|
|
9
|
+
search_from=__file__,
|
|
10
|
+
indicator=".project-root",
|
|
11
|
+
pythonpath=True,
|
|
12
|
+
dotenv=False,
|
|
13
|
+
)
|
|
14
|
+
load_dotenv(find_dotenv(".local.env"), override=True)
|
|
15
|
+
|
|
5
16
|
from langchain_core.messages import HumanMessage, SystemMessage
|
|
6
17
|
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
|
|
7
|
-
from langgraph.prebuilt import create_react_agent
|
|
8
18
|
|
|
9
19
|
from langgraph_agent_toolkit.core.observability.factory import ObservabilityFactory
|
|
10
20
|
from langgraph_agent_toolkit.core.observability.types import ChatMessageDict, ObservabilityBackend
|
|
@@ -25,9 +35,6 @@ def print_separator(title: str = None):
|
|
|
25
35
|
print(f"\n{'=' * width}")
|
|
26
36
|
|
|
27
37
|
|
|
28
|
-
# Load environment variables
|
|
29
|
-
load_dotenv(find_dotenv())
|
|
30
|
-
|
|
31
38
|
if __name__ == "__main__":
|
|
32
39
|
print_separator("ObservabilityChatPromptTemplate Demo")
|
|
33
40
|
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import rootutils
|
|
3
2
|
from dotenv import find_dotenv, load_dotenv
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
_ = rootutils.setup_root(
|
|
6
|
+
search_from=__file__,
|
|
7
|
+
indicator=".project-root",
|
|
8
|
+
pythonpath=True,
|
|
9
|
+
dotenv=False,
|
|
10
|
+
)
|
|
11
|
+
load_dotenv(find_dotenv(".local.env"), override=True)
|
|
12
|
+
|
|
4
13
|
from langchain_core.messages import AnyMessage
|
|
5
14
|
from langchain_core.runnables import RunnableConfig
|
|
6
15
|
from langgraph.func import Pregel
|
|
7
16
|
|
|
8
|
-
|
|
9
|
-
load_dotenv(find_dotenv(filename=".local.env"), override=True)
|
|
10
|
-
sys.path.append(".")
|
|
11
|
-
|
|
12
17
|
from langgraph_agent_toolkit.agents.agent import Agent
|
|
13
18
|
from langgraph_agent_toolkit.agents.blueprints.react.agent import react_agent
|
|
14
19
|
from langgraph_agent_toolkit.core.memory.factory import MemoryFactory
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import rootutils
|
|
3
2
|
from dotenv import find_dotenv, load_dotenv
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
_ = rootutils.setup_root(
|
|
6
|
+
search_from=__file__,
|
|
7
|
+
indicator=".project-root",
|
|
8
|
+
pythonpath=True,
|
|
9
|
+
dotenv=False,
|
|
10
|
+
)
|
|
11
|
+
load_dotenv(find_dotenv(".local.env"), override=True)
|
|
12
|
+
|
|
4
13
|
from langchain_core.messages import AnyMessage
|
|
5
14
|
from langchain_core.runnables import RunnableConfig
|
|
6
15
|
from langgraph.func import Pregel
|
|
7
16
|
|
|
8
|
-
|
|
9
|
-
load_dotenv(find_dotenv(filename=".local.env"), override=True)
|
|
10
|
-
sys.path.append(".")
|
|
11
|
-
|
|
12
17
|
from langgraph_agent_toolkit.agents.agent import Agent
|
|
13
18
|
from langgraph_agent_toolkit.agents.blueprints.react.agent import react_agent
|
|
14
19
|
from langgraph_agent_toolkit.core.memory.factory import MemoryFactory
|