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.
Files changed (158) hide show
  1. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.env.example +3 -0
  2. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/CHANGELOG.md +11 -0
  3. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/PKG-INFO +4 -4
  4. langgraph_agent_toolkit-0.7.8/langgraph_agent_toolkit/agents/agent.py +35 -0
  5. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/components/utils.py +33 -1
  6. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/memory/postgres.py +27 -5
  7. langgraph_agent_toolkit-0.7.8/langgraph_agent_toolkit/core/prompts/prompt_manager.py +126 -0
  8. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/settings.py +4 -0
  9. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/helper/utils.py +19 -0
  10. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/pyproject.toml +5 -4
  11. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/client/test_client.py +2 -2
  12. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/core/test_memory.py +4 -0
  13. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/service/test_service.py +1 -1
  14. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/uv.lock +517 -522
  15. langgraph_agent_toolkit-0.7.7/langgraph_agent_toolkit/agents/agent.py +0 -13
  16. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.coveragerc +0 -0
  17. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.dockerignore +0 -0
  18. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  20. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  21. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/RELEASE_TEMPLATE/release-template.md +0 -0
  22. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/codecov.yml +0 -0
  23. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/dependabot.yml +0 -0
  24. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/scripts/tag_from_pyproject.sh +0 -0
  25. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/workflows/deploy.yml +0 -0
  26. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/workflows/release.yml +0 -0
  27. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/workflows/sphinx.yml +0 -0
  28. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.github/workflows/test.yml +0 -0
  29. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.gitignore +0 -0
  30. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.pre-commit-config.yaml +0 -0
  31. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/.project-root +0 -0
  32. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/CONTRIBUTING.md +0 -0
  33. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/LICENSE +0 -0
  34. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/Makefile +0 -0
  35. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/README.md +0 -0
  36. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/clickhouse/.clickhouse.env.example +0 -0
  37. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/langfuse/.langfuse.env.example +0 -0
  38. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/litellm/.litellm.env.example +0 -0
  39. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/litellm/config.example.yaml +0 -0
  40. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/minio/.minio.env.example +0 -0
  41. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/postgres/.postgres.env.example +0 -0
  42. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/configs/redis/.redis.env.example +0 -0
  43. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docker/app/Dockerfile +0 -0
  44. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docker/service/Dockerfile +0 -0
  45. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docker-compose.yaml +0 -0
  46. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/.gitignore +0 -0
  47. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/Makefile +0 -0
  48. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/_static/custom.css +0 -0
  49. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/_templates/class.rst +0 -0
  50. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/_templates/layout.html +0 -0
  51. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/_templates/module.rst +0 -0
  52. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/conf.py +0 -0
  53. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/contributing.rst +0 -0
  54. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/environment_setup.rst +0 -0
  55. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/index.rst +0 -0
  56. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/installation.rst +0 -0
  57. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/make.bat +0 -0
  58. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/media/agent_architecture.excalidraw +0 -0
  59. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/media/agent_architecture.png +0 -0
  60. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/media/agent_diagram.png +0 -0
  61. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/media/logo.svg +0 -0
  62. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/docs/usage.rst +0 -0
  63. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph.json +0 -0
  64. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/__init__.py +0 -0
  65. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/__init__.py +0 -0
  66. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/agent_executor.py +0 -0
  67. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/__init__.py +0 -0
  68. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/__init__.py +0 -0
  69. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/agent.py +0 -0
  70. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/task.py +0 -0
  71. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/utils.py +0 -0
  72. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/chatbot/__init__.py +0 -0
  73. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/chatbot/agent.py +0 -0
  74. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/command_agent/__init__.py +0 -0
  75. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/command_agent/agent.py +0 -0
  76. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/__init__.py +0 -0
  77. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/agent.py +0 -0
  78. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/knowledge_base_agent/__init__.py +0 -0
  79. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/knowledge_base_agent/agent.py +0 -0
  80. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/react/__init__.py +0 -0
  81. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/react/agent.py +0 -0
  82. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/react_so/__init__.py +0 -0
  83. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/react_so/agent.py +0 -0
  84. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/__init__.py +0 -0
  85. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/agent.py +0 -0
  86. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/components/__init__.py +0 -0
  87. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/components/creators/__init__.py +0 -0
  88. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/components/creators/create_react_agent.py +0 -0
  89. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/agents/components/tools.py +0 -0
  90. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/client/__init__.py +0 -0
  91. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/client/client.py +0 -0
  92. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/__init__.py +0 -0
  93. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/memory/__init__.py +0 -0
  94. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/memory/base.py +0 -0
  95. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/memory/factory.py +0 -0
  96. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/memory/sqlite.py +0 -0
  97. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/memory/types.py +0 -0
  98. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/models/__init__.py +0 -0
  99. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/models/chat_openai.py +0 -0
  100. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/models/factory.py +0 -0
  101. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/models/fake.py +0 -0
  102. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/__init__.py +0 -0
  103. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/base.py +0 -0
  104. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/empty.py +0 -0
  105. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/factory.py +0 -0
  106. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/langfuse.py +0 -0
  107. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/langsmith.py +0 -0
  108. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/observability/types.py +0 -0
  109. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/prompts/__init__.py +0 -0
  110. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/core/prompts/chat_prompt_template.py +0 -0
  111. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/helper/__init__.py +0 -0
  112. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/helper/constants.py +0 -0
  113. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/helper/logging.py +0 -0
  114. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/helper/types.py +0 -0
  115. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/run_agent.py +0 -0
  116. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/run_client.py +0 -0
  117. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/run_service.py +0 -0
  118. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/schema/__init__.py +0 -0
  119. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/schema/models.py +0 -0
  120. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/schema/schema.py +0 -0
  121. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/schema/task_data.py +0 -0
  122. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/__init__.py +0 -0
  123. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/exception_handlers.py +0 -0
  124. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/factory.py +0 -0
  125. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/handler.py +0 -0
  126. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/middleware.py +0 -0
  127. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/routes.py +0 -0
  128. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/types.py +0 -0
  129. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/service/utils.py +0 -0
  130. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/langgraph_agent_toolkit/streamlit_app.py +0 -0
  131. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/postgres-init/create_databases.sql +0 -0
  132. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/postgres-init/create_schema.sql +0 -0
  133. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/01-invoke-proxy.py +0 -0
  134. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/02-test-local-pm.py +0 -0
  135. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/03-test-langfuse-pm.py +0 -0
  136. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/04-test-langsmith-pm.py +0 -0
  137. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/05-test-prompt-types.py +0 -0
  138. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/06-test-custom-chat-prompt-template.py +0 -0
  139. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/07-test-get-chat-history.py +0 -0
  140. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/08-test-update-chat-history.py +0 -0
  141. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/09-test-clear-chat-history.py +0 -0
  142. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/scripts/python/099-t.py +0 -0
  143. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/agents/test_agent_executor.py +0 -0
  144. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/agents/test_service_streaming.py +0 -0
  145. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/app/conftest.py +0 -0
  146. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/app/test_streamlit_app.py +0 -0
  147. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/client/conftest.py +0 -0
  148. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/conftest.py +0 -0
  149. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/core/test_llm.py +0 -0
  150. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/core/test_observability.py +0 -0
  151. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/core/test_prompts.py +0 -0
  152. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/core/test_settings.py +0 -0
  153. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/integration/test_docker_e2e.py +0 -0
  154. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/service/conftest.py +0 -0
  155. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/service/test_auth.py +0 -0
  156. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/service/test_factory.py +0 -0
  157. {langgraph_agent_toolkit-0.7.7 → langgraph_agent_toolkit-0.7.8}/tests/service/test_service_e2e.py +0 -0
  158. {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.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~=2.0.21
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.4.5
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.47,>=1.45
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, factory_func: Callable[[AsyncConnectionPool], T]
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 = {"autocommit": True, "prepare_threshold": 0, "row_factory": dict_row}
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(lambda pool: AsyncPostgresSaver(conn=pool)) as saver:
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(lambda pool: AsyncPostgresStore(conn=pool)) as store:
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"
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.4.5",
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.21",
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,< 1.47",
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
- # Explicitly set raise_for_status as an AsyncMock to make it awaitable
252
- mock_response.raise_for_status = AsyncMock()
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()
@@ -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.pregel.types import StateSnapshot
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