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.
Files changed (155) hide show
  1. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/CHANGELOG.md +16 -0
  2. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/PKG-INFO +6 -1
  3. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/README.md +4 -0
  4. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/react/agent.py +1 -1
  5. langgraph_agent_toolkit-0.5.0/langgraph_agent_toolkit/agents/components/utils.py +40 -0
  6. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/models/factory.py +8 -5
  7. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/base.py +5 -5
  8. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/empty.py +3 -3
  9. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/langfuse.py +54 -11
  10. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/langsmith.py +6 -2
  11. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/helper/constants.py +4 -1
  12. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/streamlit_app.py +17 -12
  13. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/pyproject.toml +2 -1
  14. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/01-invoke-proxy.py +11 -3
  15. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/02-test-local-pm.py +10 -2
  16. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/03-test-langfuse-pm.py +10 -2
  17. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/04-test-langsmith-pm.py +9 -2
  18. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/05-test-prompt-types.py +10 -2
  19. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/06-test-custom-chat-prompt-template.py +11 -4
  20. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/07-test-get-chat-history.py +11 -6
  21. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/08-test-update-chat-history.py +11 -6
  22. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/python/09-test-clear-chat-history.py +11 -6
  23. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/core/test_observability.py +140 -117
  24. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/uv.lock +96 -1
  25. langgraph_agent_toolkit-0.4.4/langgraph_agent_toolkit/agents/components/utils.py +0 -50
  26. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.coveragerc +0 -0
  27. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.dockerignore +0 -0
  28. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.env.example +0 -0
  29. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  30. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  31. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  32. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/RELEASE_TEMPLATE/release-template.md +0 -0
  33. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/codecov.yml +0 -0
  34. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/dependabot.yml +0 -0
  35. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/scripts/tag_from_pyproject.sh +0 -0
  36. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/workflows/deploy.yml +0 -0
  37. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/workflows/release.yml +0 -0
  38. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/workflows/sphinx.yml +0 -0
  39. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.github/workflows/test.yml +0 -0
  40. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.gitignore +0 -0
  41. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.pre-commit-config.yaml +0 -0
  42. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/.project-root +0 -0
  43. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/CONTRIBUTING.md +0 -0
  44. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/LICENSE +0 -0
  45. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/Makefile +0 -0
  46. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/clickhouse/.clickhouse.env.example +0 -0
  47. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/langfuse/.langfuse.env.example +0 -0
  48. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/litellm/.litellm.env.example +0 -0
  49. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/litellm/config.example.yaml +0 -0
  50. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/minio/.minio.env.example +0 -0
  51. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/postgres/.postgres.env.example +0 -0
  52. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/configs/redis/.redis.env.example +0 -0
  53. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docker/app/Dockerfile +0 -0
  54. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docker/service/Dockerfile +0 -0
  55. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docker-compose.yaml +0 -0
  56. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/.gitignore +0 -0
  57. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/Makefile +0 -0
  58. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/_static/custom.css +0 -0
  59. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/_templates/class.rst +0 -0
  60. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/_templates/layout.html +0 -0
  61. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/_templates/module.rst +0 -0
  62. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/conf.py +0 -0
  63. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/contributing.rst +0 -0
  64. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/environment_setup.rst +0 -0
  65. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/index.rst +0 -0
  66. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/installation.rst +0 -0
  67. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/make.bat +0 -0
  68. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/media/agent_architecture.excalidraw +0 -0
  69. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/media/agent_architecture.png +0 -0
  70. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/media/agent_diagram.png +0 -0
  71. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/media/logo.svg +0 -0
  72. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/docs/usage.rst +0 -0
  73. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph.json +0 -0
  74. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/__init__.py +0 -0
  75. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/__init__.py +0 -0
  76. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/agent.py +0 -0
  77. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/agent_executor.py +0 -0
  78. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/__init__.py +0 -0
  79. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/__init__.py +0 -0
  80. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/agent.py +0 -0
  81. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/task.py +0 -0
  82. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/utils.py +0 -0
  83. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/chatbot/__init__.py +0 -0
  84. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/chatbot/agent.py +0 -0
  85. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/command_agent/__init__.py +0 -0
  86. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/command_agent/agent.py +0 -0
  87. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/__init__.py +0 -0
  88. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/agent.py +0 -0
  89. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/knowledge_base_agent/__init__.py +0 -0
  90. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/knowledge_base_agent/agent.py +0 -0
  91. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/react/__init__.py +0 -0
  92. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/react_so/__init__.py +0 -0
  93. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/react_so/agent.py +0 -0
  94. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/__init__.py +0 -0
  95. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/agent.py +0 -0
  96. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/components/__init__.py +0 -0
  97. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/components/creators/__init__.py +0 -0
  98. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/components/creators/create_react_agent.py +0 -0
  99. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/agents/components/tools.py +0 -0
  100. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/client/__init__.py +0 -0
  101. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/client/client.py +0 -0
  102. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/__init__.py +0 -0
  103. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/memory/__init__.py +0 -0
  104. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/memory/base.py +0 -0
  105. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/memory/factory.py +0 -0
  106. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/memory/postgres.py +0 -0
  107. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/memory/sqlite.py +0 -0
  108. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/memory/types.py +0 -0
  109. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/models/__init__.py +0 -0
  110. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/models/chat_openai.py +0 -0
  111. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/models/fake.py +0 -0
  112. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/__init__.py +0 -0
  113. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/factory.py +0 -0
  114. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/observability/types.py +0 -0
  115. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/prompts/__init__.py +0 -0
  116. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/prompts/chat_prompt_template.py +0 -0
  117. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/core/settings.py +0 -0
  118. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/helper/__init__.py +0 -0
  119. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/helper/logging.py +0 -0
  120. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/helper/types.py +0 -0
  121. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/helper/utils.py +0 -0
  122. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/run_agent.py +0 -0
  123. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/run_client.py +0 -0
  124. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/run_service.py +0 -0
  125. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/schema/__init__.py +0 -0
  126. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/schema/models.py +0 -0
  127. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/schema/schema.py +0 -0
  128. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/schema/task_data.py +0 -0
  129. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/__init__.py +0 -0
  130. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/exception_handlers.py +0 -0
  131. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/factory.py +0 -0
  132. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/handler.py +0 -0
  133. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/middleware.py +0 -0
  134. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/routes.py +0 -0
  135. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/types.py +0 -0
  136. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/langgraph_agent_toolkit/service/utils.py +0 -0
  137. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/scripts/postgres-init/create_databases.sql +0 -0
  138. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/agents/test_agent_executor.py +0 -0
  139. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/agents/test_service_streaming.py +0 -0
  140. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/app/conftest.py +0 -0
  141. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/app/test_streamlit_app.py +0 -0
  142. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/client/conftest.py +0 -0
  143. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/client/test_client.py +0 -0
  144. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/conftest.py +0 -0
  145. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/core/test_llm.py +0 -0
  146. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/core/test_memory.py +0 -0
  147. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/core/test_prompts.py +0 -0
  148. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/core/test_settings.py +0 -0
  149. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/integration/test_docker_e2e.py +0 -0
  150. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/service/conftest.py +0 -0
  151. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/service/test_auth.py +0 -0
  152. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/service/test_factory.py +0 -0
  153. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/service/test_service.py +0 -0
  154. {langgraph_agent_toolkit-0.4.4 → langgraph_agent_toolkit-0.5.0}/tests/service/test_service_e2e.py +0 -0
  155. {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.4.4
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
 
@@ -36,7 +36,7 @@ observability.push_prompt(
36
36
  content="messages",
37
37
  ),
38
38
  ],
39
- create_new_version=False,
39
+ force_create_new_version=False,
40
40
  )
41
41
 
42
42
  prompt = ObservabilityChatPromptTemplate.from_observability_platform(
@@ -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[dict[str, Any]] = None,
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. If not provided, the default values will be used.
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 or DEFAULT_CONFIG_PREFIX
112
- _model_parameter_values = model_parameter_values or DEFAULT_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
- create_new_version: bool = True,
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 create_new_version:
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 create_new_version is False")
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
- create_new_version: bool = True,
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 create_new_version:
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
- create_new_version: bool = True,
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
- create_new_version: If True, overwrite existing prompt with new version
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, create_new_version)
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
- create_new_version: bool = True,
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
- if not create_new_version:
49
- try:
50
- existing_prompt = langfuse.get_prompt(name=name)
51
- logger.debug(f"Using existing prompt '{name}' as create_new_version is False")
52
- except Exception:
53
- logger.debug(f"Existing prompt '{name}' not found, will create a new one")
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
- if existing_prompt:
59
- langfuse_prompt = existing_prompt
60
- else:
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
- create_new_version: bool = True,
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, create_new_version, client, client_pull_method="pull_prompt", client_delete_method="delete_prompt"
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 = 6 + 1 # N messages + 1 system message
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
- welcome_message = None
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.4.4"
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",
@@ -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")
@@ -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
- load_dotenv(find_dotenv())
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
- load_dotenv(find_dotenv())
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
- load_dotenv(find_dotenv())
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 sys
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 sys
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