langgraph-agent-toolkit 0.7.0__tar.gz → 0.7.2__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 (156) hide show
  1. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.env.example +1 -25
  2. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/CHANGELOG.md +30 -0
  3. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/PKG-INFO +13 -10
  4. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/README.md +3 -0
  5. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/agent_executor.py +6 -1
  6. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/observability/langfuse.py +14 -3
  7. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/settings.py +19 -4
  8. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/pyproject.toml +16 -16
  9. langgraph_agent_toolkit-0.7.2/scripts/python/099-t.py +52 -0
  10. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/agents/test_agent_executor.py +30 -27
  11. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/core/test_prompts.py +2 -0
  12. langgraph_agent_toolkit-0.7.2/uv.lock +4467 -0
  13. langgraph_agent_toolkit-0.7.0/uv.lock +0 -4331
  14. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.coveragerc +0 -0
  15. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.dockerignore +0 -0
  16. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  18. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  19. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.github/RELEASE_TEMPLATE/release-template.md +0 -0
  20. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.github/codecov.yml +0 -0
  21. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.github/dependabot.yml +0 -0
  22. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.github/scripts/tag_from_pyproject.sh +0 -0
  23. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.github/workflows/deploy.yml +0 -0
  24. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.github/workflows/release.yml +0 -0
  25. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.github/workflows/sphinx.yml +0 -0
  26. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.github/workflows/test.yml +0 -0
  27. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.gitignore +0 -0
  28. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.pre-commit-config.yaml +0 -0
  29. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/.project-root +0 -0
  30. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/CONTRIBUTING.md +0 -0
  31. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/LICENSE +0 -0
  32. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/Makefile +0 -0
  33. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/configs/clickhouse/.clickhouse.env.example +0 -0
  34. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/configs/langfuse/.langfuse.env.example +0 -0
  35. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/configs/litellm/.litellm.env.example +0 -0
  36. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/configs/litellm/config.example.yaml +0 -0
  37. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/configs/minio/.minio.env.example +0 -0
  38. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/configs/postgres/.postgres.env.example +0 -0
  39. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/configs/redis/.redis.env.example +0 -0
  40. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docker/app/Dockerfile +0 -0
  41. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docker/service/Dockerfile +0 -0
  42. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docker-compose.yaml +0 -0
  43. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/.gitignore +0 -0
  44. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/Makefile +0 -0
  45. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/_static/custom.css +0 -0
  46. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/_templates/class.rst +0 -0
  47. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/_templates/layout.html +0 -0
  48. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/_templates/module.rst +0 -0
  49. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/conf.py +0 -0
  50. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/contributing.rst +0 -0
  51. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/environment_setup.rst +0 -0
  52. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/index.rst +0 -0
  53. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/installation.rst +0 -0
  54. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/make.bat +0 -0
  55. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/media/agent_architecture.excalidraw +0 -0
  56. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/media/agent_architecture.png +0 -0
  57. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/media/agent_diagram.png +0 -0
  58. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/media/logo.svg +0 -0
  59. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/docs/usage.rst +0 -0
  60. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph.json +0 -0
  61. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/__init__.py +0 -0
  62. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/__init__.py +0 -0
  63. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/agent.py +0 -0
  64. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/__init__.py +0 -0
  65. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/__init__.py +0 -0
  66. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/agent.py +0 -0
  67. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/task.py +0 -0
  68. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/utils.py +0 -0
  69. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/chatbot/__init__.py +0 -0
  70. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/chatbot/agent.py +0 -0
  71. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/command_agent/__init__.py +0 -0
  72. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/command_agent/agent.py +0 -0
  73. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/__init__.py +0 -0
  74. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/agent.py +0 -0
  75. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/knowledge_base_agent/__init__.py +0 -0
  76. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/knowledge_base_agent/agent.py +0 -0
  77. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/react/__init__.py +0 -0
  78. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/react/agent.py +0 -0
  79. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/react_so/__init__.py +0 -0
  80. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/react_so/agent.py +0 -0
  81. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/__init__.py +0 -0
  82. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/agent.py +0 -0
  83. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/components/__init__.py +0 -0
  84. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/components/creators/__init__.py +0 -0
  85. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/components/creators/create_react_agent.py +0 -0
  86. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/components/tools.py +0 -0
  87. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/agents/components/utils.py +0 -0
  88. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/client/__init__.py +0 -0
  89. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/client/client.py +0 -0
  90. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/__init__.py +0 -0
  91. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/memory/__init__.py +0 -0
  92. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/memory/base.py +0 -0
  93. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/memory/factory.py +0 -0
  94. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/memory/postgres.py +0 -0
  95. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/memory/sqlite.py +0 -0
  96. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/memory/types.py +0 -0
  97. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/models/__init__.py +0 -0
  98. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/models/chat_openai.py +0 -0
  99. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/models/factory.py +0 -0
  100. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/models/fake.py +0 -0
  101. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/observability/__init__.py +0 -0
  102. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/observability/base.py +0 -0
  103. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/observability/empty.py +0 -0
  104. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/observability/factory.py +0 -0
  105. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/observability/langsmith.py +0 -0
  106. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/observability/types.py +0 -0
  107. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/prompts/__init__.py +0 -0
  108. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/core/prompts/chat_prompt_template.py +0 -0
  109. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/helper/__init__.py +0 -0
  110. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/helper/constants.py +0 -0
  111. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/helper/logging.py +0 -0
  112. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/helper/types.py +0 -0
  113. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/helper/utils.py +0 -0
  114. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/run_agent.py +0 -0
  115. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/run_client.py +0 -0
  116. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/run_service.py +0 -0
  117. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/schema/__init__.py +0 -0
  118. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/schema/models.py +0 -0
  119. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/schema/schema.py +0 -0
  120. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/schema/task_data.py +0 -0
  121. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/service/__init__.py +0 -0
  122. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/service/exception_handlers.py +0 -0
  123. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/service/factory.py +0 -0
  124. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/service/handler.py +0 -0
  125. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/service/middleware.py +0 -0
  126. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/service/routes.py +0 -0
  127. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/service/types.py +0 -0
  128. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/service/utils.py +0 -0
  129. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/langgraph_agent_toolkit/streamlit_app.py +0 -0
  130. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/scripts/postgres-init/create_databases.sql +0 -0
  131. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/scripts/python/01-invoke-proxy.py +0 -0
  132. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/scripts/python/02-test-local-pm.py +0 -0
  133. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/scripts/python/03-test-langfuse-pm.py +0 -0
  134. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/scripts/python/04-test-langsmith-pm.py +0 -0
  135. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/scripts/python/05-test-prompt-types.py +0 -0
  136. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/scripts/python/06-test-custom-chat-prompt-template.py +0 -0
  137. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/scripts/python/07-test-get-chat-history.py +0 -0
  138. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/scripts/python/08-test-update-chat-history.py +0 -0
  139. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/scripts/python/09-test-clear-chat-history.py +0 -0
  140. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/agents/test_service_streaming.py +0 -0
  141. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/app/conftest.py +0 -0
  142. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/app/test_streamlit_app.py +0 -0
  143. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/client/conftest.py +0 -0
  144. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/client/test_client.py +0 -0
  145. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/conftest.py +0 -0
  146. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/core/test_llm.py +0 -0
  147. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/core/test_memory.py +0 -0
  148. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/core/test_observability.py +0 -0
  149. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/core/test_settings.py +0 -0
  150. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/integration/test_docker_e2e.py +0 -0
  151. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/service/conftest.py +0 -0
  152. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/service/test_auth.py +0 -0
  153. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/service/test_factory.py +0 -0
  154. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/service/test_service.py +0 -0
  155. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/service/test_service_e2e.py +0 -0
  156. {langgraph_agent_toolkit-0.7.0 → langgraph_agent_toolkit-0.7.2}/tests/service/test_utils.py +0 -0
@@ -85,31 +85,7 @@ OLLAMA_BASE_URL=
85
85
 
86
86
  # Model configurations - use multiline format with line continuation for readability
87
87
  # It can be useful if you want to use different models for different agents or use different models from different providers.
88
- MODEL_CONFIGS={\
89
- "gpt4o": {\
90
- "provider": "azure_openai",\
91
- "name": "gpt-4o",\
92
- "api_key": "azure-key-123",\
93
- "endpoint": "https://your-resource.openai.azure.com/",\
94
- "api_version": "2023-05-15",\
95
- "deployment": "gpt4o-deployment",\
96
- "temperature": 0.7\
97
- },\
98
- "gpt4o-mini": {\
99
- "provider": "azure_openai",\
100
- "name": "gpt-4o-mini",\
101
- "api_key": "azure-key-123",\
102
- "endpoint": "https://your-resource.openai.azure.com/",\
103
- "api_version": "2023-05-15",\
104
- "deployment": "gpt4o-mini-deployment"\
105
- },\
106
- "gemini": {\
107
- "provider": "google_genai",\
108
- "name": "gemini-pro",\
109
- "api_key": "google-key-123",\
110
- "temperature": 0.7\
111
- }\
112
- }
88
+ 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}}
113
89
 
114
90
  # Amazon Bedrock Knowledge Base ID
115
91
  AWS_KB_ID=
@@ -6,6 +6,36 @@ 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.2]
10
+
11
+ ### Added
12
+
13
+ - New env variable for model config
14
+
15
+ ## [0.7.1]
16
+
17
+ ### Fixed
18
+
19
+ - Agent executor test mock assertion to include additional `environment` and
20
+ `tags` parameters
21
+ - Async test methods missing `@pytest.mark.asyncio` decorator in prompts tests
22
+
23
+ ### Updated
24
+
25
+ - Dependencies to latest versions
26
+ - Agent executor `get_callback_handler` method to pass additional parameters:
27
+ - Added `environment` parameter from settings.ENV_MODE
28
+ - Added `tags` parameter with agent name for better observability tracking
29
+
30
+ ### Improved
31
+
32
+ - Langfuse observability prompt hash detection with fallback mechanism:
33
+ - Enhanced `push_prompt` method to use tags as fallback when commit_message is
34
+ empty
35
+ - Added robust `hasattr` checks for both `commit_message` and `tags`
36
+ attributes
37
+ - Improved logging to show old vs new hash values for better debugging
38
+
9
39
  ## [0.7.0]
10
40
 
11
41
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-agent-toolkit
3
- Version: 0.7.0
3
+ Version: 0.7.2
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
@@ -33,24 +33,24 @@ Requires-Dist: langchain-community~=0.3.24
33
33
  Requires-Dist: langchain-core~=0.3.60
34
34
  Requires-Dist: langgraph-checkpoint-postgres~=2.0.21
35
35
  Requires-Dist: langgraph-checkpoint-sqlite~=2.0.7
36
- Requires-Dist: langgraph-cli[inmem]~=0.2.10
36
+ Requires-Dist: langgraph-cli[inmem]<0.4.0,>=0.2.10
37
37
  Requires-Dist: langgraph-supervisor~=0.0.21
38
38
  Requires-Dist: langgraph~=0.4.5
39
39
  Requires-Dist: loguru~=0.7.3
40
40
  Requires-Dist: multidict>6.3.2
41
+ Requires-Dist: numpy<2.4.0,>=2.2.3; python_version >= '3.13'
41
42
  Requires-Dist: numpy~=1.26.4; python_version <= '3.12'
42
- Requires-Dist: numpy~=2.2.3; python_version >= '3.13'
43
43
  Requires-Dist: onnxruntime~=1.22.0
44
- Requires-Dist: pandas~=2.2.3
44
+ Requires-Dist: pandas<2.4.0,>=2.2.3
45
45
  Requires-Dist: psycopg[binary,pool]~=3.2.4
46
46
  Requires-Dist: pyarrow>=19.0.1
47
- Requires-Dist: pydantic-settings~=2.9.1
47
+ Requires-Dist: pydantic-settings<2.11.0,>=2.9.1
48
48
  Requires-Dist: pydantic~=2.11.1
49
49
  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.45.0
53
+ Requires-Dist: streamlit<1.47,>=1.45
54
54
  Requires-Dist: uvicorn~=0.34.0
55
55
  Requires-Dist: watchdog~=6.0.0
56
56
  Provides-Extra: all-backends
@@ -68,8 +68,8 @@ Requires-Dist: langchain-groq~=0.3.2; extra == 'all-llms'
68
68
  Requires-Dist: langchain-ollama~=0.3.2; extra == 'all-llms'
69
69
  Requires-Dist: langchain-openai~=0.3.16; extra == 'all-llms'
70
70
  Provides-Extra: all-observability
71
- Requires-Dist: langfuse~=2.60.3; extra == 'all-observability'
72
- Requires-Dist: langsmith~=0.3.31; extra == 'all-observability'
71
+ Requires-Dist: langfuse<3.1.0,>=2.60.3; extra == 'all-observability'
72
+ Requires-Dist: langsmith<0.5.0,>=0.3.31; extra == 'all-observability'
73
73
  Provides-Extra: anthropic
74
74
  Requires-Dist: langchain-anthropic~=0.3.12; extra == 'anthropic'
75
75
  Provides-Extra: aws
@@ -90,9 +90,9 @@ Provides-Extra: gunicorn-backend
90
90
  Requires-Dist: gunicorn~=23.0.0; extra == 'gunicorn-backend'
91
91
  Requires-Dist: uvicorn[standard]~=0.34.2; extra == 'gunicorn-backend'
92
92
  Provides-Extra: langfuse
93
- Requires-Dist: langfuse~=2.60.3; extra == 'langfuse'
93
+ Requires-Dist: langfuse<3.1.0,>=2.60.3; extra == 'langfuse'
94
94
  Provides-Extra: langsmith
95
- Requires-Dist: langsmith~=0.3.31; extra == 'langsmith'
95
+ Requires-Dist: langsmith<0.5.0,>=0.3.31; extra == 'langsmith'
96
96
  Provides-Extra: ollama
97
97
  Requires-Dist: langchain-ollama~=0.3.2; extra == 'ollama'
98
98
  Provides-Extra: openai
@@ -150,6 +150,9 @@ Whether you're building a simple chatbot or complex multi-agent system, this
150
150
  toolkit provides the infrastructure to develop, test, and deploy your
151
151
  LangGraph-based agents with confidence.
152
152
 
153
+ You can use [DeepWiki](https://deepwiki.com/kryvokhyzha/langgraph-agent-toolkit)
154
+ to learn more about this repository.
155
+
153
156
  ## 📑 Contents
154
157
 
155
158
  - [Introduction](#-introduction)
@@ -47,6 +47,9 @@ Whether you're building a simple chatbot or complex multi-agent system, this
47
47
  toolkit provides the infrastructure to develop, test, and deploy your
48
48
  LangGraph-based agents with confidence.
49
49
 
50
+ You can use [DeepWiki](https://deepwiki.com/kryvokhyzha/langgraph-agent-toolkit)
51
+ to learn more about this repository.
52
+
50
53
  ## 📑 Contents
51
54
 
52
55
  - [Introduction](#-introduction)
@@ -237,7 +237,12 @@ class AgentExecutor:
237
237
  if agent_config:
238
238
  configurable.update(agent_config)
239
239
 
240
- callback = agent.observability.get_callback_handler(session_id=thread_id, user_id=user_id)
240
+ callback = agent.observability.get_callback_handler(
241
+ session_id=thread_id,
242
+ user_id=user_id,
243
+ environment=settings.ENV_MODE,
244
+ tags=[agent.name],
245
+ )
241
246
 
242
247
  config = RunnableConfig(
243
248
  configurable=configurable,
@@ -67,11 +67,21 @@ class LangfuseObservability(BaseObservabilityPlatform):
67
67
  existing_prompt = langfuse.get_prompt(name=name)
68
68
 
69
69
  # Check if content has changed by comparing hashes
70
- if existing_prompt.commit_message and existing_prompt.commit_message == prompt_hash:
70
+ # First try commit_message, then fall back to tags
71
+ existing_hash = None
72
+ if hasattr(existing_prompt, "commit_message") and existing_prompt.commit_message:
73
+ existing_hash = existing_prompt.commit_message
74
+ elif hasattr(existing_prompt, "tags") and existing_prompt.tags and len(existing_prompt.tags) > 0:
75
+ # Use the first tag as the hash (assuming it contains the prompt hash)
76
+ existing_hash = existing_prompt.tags[0]
77
+
78
+ if existing_hash and existing_hash == prompt_hash:
71
79
  content_changed = False
72
- logger.debug(f"Prompt '{name}' content unchanged")
80
+ logger.debug(f"Prompt '{name}' content unchanged (hash: {existing_hash})")
73
81
  else:
74
- logger.debug(f"Prompt '{name}' content changed from previous version")
82
+ logger.debug(
83
+ f"Prompt '{name}' content changed from previous version (old: {existing_hash}, new: {prompt_hash})"
84
+ )
75
85
  except Exception:
76
86
  logger.debug(f"Existing prompt '{name}' not found, will create a new one")
77
87
 
@@ -95,6 +105,7 @@ class LangfuseObservability(BaseObservabilityPlatform):
95
105
  prompt=prompt_template,
96
106
  labels=labels,
97
107
  type=type_prompt,
108
+ tags=[prompt_hash], # for v2 version
98
109
  commit_message=prompt_hash, # Store hash in commit_message
99
110
  )
100
111
  if existing_prompt is None:
@@ -86,7 +86,7 @@ class Settings(BaseSettings):
86
86
 
87
87
  LANGFUSE_SECRET_KEY: SecretStr | None = None
88
88
  LANGFUSE_PUBLIC_KEY: SecretStr | None = None
89
- LANGFUSE_HOST: Annotated[str, BeforeValidator(check_str_is_http)] = "http://localhost:3000"
89
+ LANGFUSE_HOST: Annotated[str, BeforeValidator(check_str_is_http)] = "https://cloud.langfuse.com"
90
90
 
91
91
  # Database Configuration
92
92
  MEMORY_BACKEND: MemoryBackends = MemoryBackends.SQLITE
@@ -98,12 +98,13 @@ class Settings(BaseSettings):
98
98
  POSTGRES_HOST: str | None = None
99
99
  POSTGRES_PORT: int | None = None
100
100
  POSTGRES_DB: str | None = None
101
- POSTGRES_POOL_SIZE: int = Field(default=10, description="Maximum number of connections in the pool")
102
- POSTGRES_MIN_SIZE: int = Field(default=3, description="Minimum number of connections in the pool")
103
- POSTGRES_MAX_IDLE: int = Field(default=5, description="Maximum number of idle connections")
101
+ POSTGRES_POOL_SIZE: int = Field(default=200, description="Maximum number of connections in the pool")
102
+ POSTGRES_MIN_SIZE: int = Field(default=10, description="Minimum number of connections in the pool")
103
+ POSTGRES_MAX_IDLE: int = Field(default=300, description="Maximum number of idle connections")
104
104
 
105
105
  # Model configurations dictionary
106
106
  MODEL_CONFIGS: Dict[str, Dict[str, Any]] = Field(default_factory=dict)
107
+ MODEL_CONFIGS_PATH: str | None = None
107
108
 
108
109
  def _apply_langgraph_env_overrides(self) -> None:
109
110
  """Apply any LANGGRAPH_ prefixed environment variables to override settings."""
@@ -151,6 +152,7 @@ class Settings(BaseSettings):
151
152
  def _initialize_model_configs(self) -> None:
152
153
  """Initialize model configurations from environment variables."""
153
154
  model_configs_env = os.environ.get("MODEL_CONFIGS")
155
+ model_configs_path_env = os.environ.get("MODEL_CONFIGS_PATH")
154
156
  if model_configs_env:
155
157
  try:
156
158
  configs = json.loads(model_configs_env)
@@ -161,6 +163,19 @@ class Settings(BaseSettings):
161
163
  logger.warning("MODEL_CONFIGS environment variable is not a valid JSON object")
162
164
  except json.JSONDecodeError:
163
165
  logger.error("Failed to parse MODEL_CONFIGS environment variable as JSON")
166
+ elif model_configs_path_env:
167
+ try:
168
+ with open(model_configs_path_env, "r", encoding="utf-8") as f:
169
+ configs = json.load(f)
170
+ if isinstance(configs, dict):
171
+ self.MODEL_CONFIGS = configs
172
+ logger.info(f"Loaded {len(configs)} model configurations from {model_configs_path_env}")
173
+ else:
174
+ logger.warning("MODEL_CONFIGS_PATH file is not a valid JSON object")
175
+ except (FileNotFoundError, json.JSONDecodeError) as e:
176
+ logger.error(f"Failed to load model configurations from {model_configs_path_env}: {e}")
177
+ else:
178
+ logger.info("No MODEL_CONFIGS found in environment variables or file")
164
179
 
165
180
  def get_model_config(self, config_key: str) -> Optional[Dict[str, Any]]:
166
181
  """Get a model configuration by key.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "langgraph-agent-toolkit"
7
- version = "0.7.0"
7
+ version = "0.7.2"
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" }]
@@ -37,22 +37,22 @@ dependencies = [
37
37
  "langchain-core ~= 0.3.60",
38
38
  "langchain-community ~= 0.3.24",
39
39
  "langgraph ~= 0.4.5",
40
- "langgraph-cli[inmem] ~= 0.2.10",
40
+ "langgraph-cli[inmem] >= 0.2.10,< 0.4.0",
41
41
  "langgraph-checkpoint-sqlite ~= 2.0.7",
42
42
  "langgraph-checkpoint-postgres ~= 2.0.21",
43
43
  "langgraph-supervisor ~= 0.0.21",
44
44
  "numpy ~= 1.26.4; python_version <= '3.12'",
45
- "numpy ~= 2.2.3; python_version >= '3.13'",
45
+ "numpy >= 2.2.3,< 2.4.0; python_version >= '3.13'",
46
46
  "onnxruntime ~= 1.22.0",
47
- "pandas ~= 2.2.3",
47
+ "pandas >= 2.2.3,< 2.4.0",
48
48
  "psycopg[binary,pool] ~= 3.2.4",
49
49
  "pyarrow >= 19.0.1",
50
50
  "pydantic ~= 2.11.1",
51
- "pydantic-settings ~= 2.9.1",
51
+ "pydantic-settings >= 2.9.1,< 2.11.0",
52
52
  "pyowm ~= 3.3.0",
53
53
  "python-dotenv ~= 1.1.0",
54
54
  "setuptools >= 75.6.0",
55
- "streamlit ~= 1.45.0",
55
+ "streamlit >= 1.45,< 1.47",
56
56
  "watchdog ~= 6.0.0",
57
57
  "joblib >= 1.4.2",
58
58
  "uvicorn ~= 0.34.0",
@@ -81,7 +81,7 @@ client = [
81
81
  "httpx ~= 0.28.1",
82
82
  "pydantic ~= 2.11.1",
83
83
  "python-dotenv ~= 1.1.0",
84
- "streamlit ~= 1.45.0",
84
+ "streamlit >= 1.45,< 1.47",
85
85
  "watchdog ~= 6.0.0",
86
86
  ]
87
87
 
@@ -158,17 +158,17 @@ all-llms = [
158
158
 
159
159
  # Observability tools and platforms
160
160
  langfuse = [
161
- "langfuse ~= 2.60.3",
162
- ]
161
+ "langfuse >= 2.60.3,< 3.1.0",
162
+ ]
163
163
 
164
- langsmith = [
165
- "langsmith ~= 0.3.31",
166
- ]
164
+ langsmith = [
165
+ "langsmith >= 0.3.31,< 0.5.0",
166
+ ]
167
167
 
168
- all-observability = [
169
- "langfuse ~= 2.60.3",
170
- "langsmith ~= 0.3.31",
171
- ]
168
+ all-observability = [
169
+ "langfuse >= 2.60.3,< 3.1.0",
170
+ "langsmith >= 0.3.31,< 0.5.0",
171
+ ]
172
172
 
173
173
  [project.urls]
174
174
  documentation = "https://kryvokhyzha.github.io/langgraph-agent-toolkit"
@@ -0,0 +1,52 @@
1
+ import os
2
+
3
+ from dotenv import find_dotenv, load_dotenv
4
+ from langchain.chat_models.base import init_chat_model
5
+ from pydantic import BaseModel, Field
6
+
7
+
8
+ load_dotenv(find_dotenv(".local.env"), override=True)
9
+
10
+
11
+ class ResponseSchema(BaseModel):
12
+ response: str = Field(
13
+ description="The response on user query.",
14
+ )
15
+ alternative_response: str = Field(
16
+ description="The alternative response on user query.",
17
+ )
18
+
19
+
20
+ if __name__ == "__main__":
21
+ DEFAULT_CONFIG_PREFIX = "agent"
22
+ DEFAULT_CONFIGURABLE_FIELDS = ("temperature", "max_tokens", "top_p", "streaming")
23
+ DEFAULT_MODEL_PARAMETER_VALUES = dict(
24
+ temperature=0.0,
25
+ max_tokens=1024,
26
+ top_p=0.7,
27
+ streaming=False,
28
+ )
29
+
30
+ configurable_model = init_chat_model(
31
+ model=os.getenv("OPENAI_MODEL_NAME"),
32
+ model_provider="openai",
33
+ config_prefix=DEFAULT_CONFIG_PREFIX,
34
+ configurable_fields=DEFAULT_CONFIGURABLE_FIELDS,
35
+ openai_api_key=os.getenv("OPENAI_API_KEY"),
36
+ openai_api_base=os.getenv("OPENAI_API_BASE_URL"),
37
+ **DEFAULT_MODEL_PARAMETER_VALUES,
38
+ )
39
+
40
+ print(f"Configurable model type: {type(configurable_model)}")
41
+ print("=" * 25)
42
+
43
+ model_so = configurable_model.with_structured_output(ResponseSchema)
44
+
45
+ print(f"Model with SO type: {type(configurable_model)}")
46
+ print("=" * 25)
47
+
48
+ result = model_so.invoke("Who is the president of Brasil?", config={"temperature": 0.5})
49
+
50
+ print(f"Result type: {type(result)}")
51
+ print(f"Result: {result}")
52
+ print("=" * 25)
@@ -331,38 +331,41 @@ async def test_setup_agent_execution(agent_executor, mock_agent):
331
331
  message_content = "Hello, setup!"
332
332
  input_obj = MockInput(message=message_content)
333
333
 
334
- # Call the setup method directly
335
- agent, input_data, config, run_id = await agent_executor._setup_agent_execution(
336
- agent_id="test-agent",
337
- input=input_obj,
338
- thread_id="test-thread-123",
339
- user_id="test-user-456",
340
- model_name="test-model",
341
- agent_config={"temperature": 0.7},
342
- )
334
+ with patch("langgraph_agent_toolkit.agents.agent_executor.settings") as mock_settings:
335
+ mock_settings.ENV_MODE = "test"
336
+
337
+ # Call the setup method directly
338
+ agent, input_data, config, run_id = await agent_executor._setup_agent_execution(
339
+ agent_id="test-agent",
340
+ input=input_obj,
341
+ thread_id="test-thread-123",
342
+ user_id="test-user-456",
343
+ model_name="test-model",
344
+ agent_config={"temperature": 0.7},
345
+ )
343
346
 
344
- # Verify agent is correct
345
- assert agent is mock_agent
347
+ # Verify agent is correct
348
+ assert agent is mock_agent
346
349
 
347
- # Verify input is a HumanMessage with expected content
348
- assert isinstance(input_data, dict)
349
- assert "messages" in input_data
350
- assert isinstance(input_data["messages"][0], HumanMessage)
351
- assert input_data["messages"][0].content == message_content
350
+ # Verify input is a HumanMessage with expected content
351
+ assert isinstance(input_data, dict)
352
+ assert "messages" in input_data
353
+ assert isinstance(input_data["messages"][0], HumanMessage)
354
+ assert input_data["messages"][0].content == message_content
352
355
 
353
- # Verify config is correct - access as a dictionary, not an object
354
- assert config["configurable"]["thread_id"] == "test-thread-123"
355
- assert config["configurable"]["user_id"] == "test-user-456"
356
- assert config["configurable"]["model_name"] == "test-model"
357
- assert config["configurable"]["temperature"] == 0.7
356
+ # Verify config is correct - access as a dictionary, not an object
357
+ assert config["configurable"]["thread_id"] == "test-thread-123"
358
+ assert config["configurable"]["user_id"] == "test-user-456"
359
+ assert config["configurable"]["model_name"] == "test-model"
360
+ assert config["configurable"]["temperature"] == 0.7
358
361
 
359
- # Verify run_id is a UUID
360
- assert isinstance(run_id, UUID)
362
+ # Verify run_id is a UUID
363
+ assert isinstance(run_id, UUID)
361
364
 
362
- # Verify observability callback was requested with both session_id and user_id
363
- mock_agent.observability.get_callback_handler.assert_called_once_with(
364
- session_id="test-thread-123", user_id="test-user-456"
365
- )
365
+ # Verify observability callback was requested with both session_id and user_id
366
+ mock_agent.observability.get_callback_handler.assert_called_once_with(
367
+ session_id="test-thread-123", user_id="test-user-456", environment="test", tags=["test-agent"]
368
+ )
366
369
 
367
370
 
368
371
  @pytest.mark.asyncio
@@ -402,6 +402,7 @@ class TestObservabilityChatPromptTemplate:
402
402
  template.invoke(input=dict(test_var="test4"))
403
403
  assert mock_platform.pull_prompt.call_count == 2
404
404
 
405
+ @pytest.mark.asyncio
405
406
  async def test_async_invoke(self):
406
407
  """Test asynchronous invocation."""
407
408
  template = ObservabilityChatPromptTemplate.from_observability_platform(
@@ -575,6 +576,7 @@ class TestObservabilityChatPromptTemplate:
575
576
  assert "Follow-up answer" in messages2[4].content
576
577
  assert "Human prompt with human value" in messages2[5].content
577
578
 
579
+ @pytest.mark.asyncio
578
580
  async def test_async_message_placeholder(self):
579
581
  """Test asynchronous handling of MessagesPlaceholder."""
580
582
  # Use the same approach as in test_message_placeholder_handling