langgraph-agent-toolkit 0.1.2__tar.gz → 0.2.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 (135) hide show
  1. langgraph_agent_toolkit-0.2.0/.coveragerc +6 -0
  2. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.env.example +35 -8
  3. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.github/PULL_REQUEST_TEMPLATE.md +2 -0
  4. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/CHANGELOG.md +11 -0
  5. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/PKG-INFO +26 -6
  6. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/README.md +25 -5
  7. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/configs/litellm/config.example.yaml +13 -1
  8. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/agent_executor.py +21 -10
  9. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/agent.py +7 -1
  10. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/chatbot/agent.py +7 -3
  11. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/agent.py +19 -3
  12. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/react/agent.py +7 -1
  13. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/react_so/agent.py +7 -1
  14. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/agent.py +7 -1
  15. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/client/client.py +45 -20
  16. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/memory/postgres.py +2 -1
  17. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/models/factory.py +37 -38
  18. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/settings.py +34 -42
  19. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/helper/constants.py +3 -1
  20. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/schema/__init__.py +0 -2
  21. langgraph_agent_toolkit-0.2.0/langgraph_agent_toolkit/schema/models.py +13 -0
  22. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/schema/schema.py +13 -14
  23. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/service/routes.py +2 -5
  24. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/service/utils.py +3 -2
  25. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/streamlit_app.py +0 -4
  26. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/pyproject.toml +1 -1
  27. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/agents/test_agent_executor.py +9 -9
  28. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/app/conftest.py +0 -3
  29. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/app/test_streamlit_app.py +11 -6
  30. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/client/test_client.py +10 -9
  31. langgraph_agent_toolkit-0.2.0/tests/core/test_llm.py +48 -0
  32. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/core/test_settings.py +53 -59
  33. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/integration/test_docker_e2e.py +2 -1
  34. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/service/test_service.py +7 -15
  35. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/uv.lock +1 -1
  36. langgraph_agent_toolkit-0.1.2/.coveragerc +0 -5
  37. langgraph_agent_toolkit-0.1.2/langgraph_agent_toolkit/schema/models.py +0 -25
  38. langgraph_agent_toolkit-0.1.2/tests/core/test_llm.py +0 -56
  39. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.dockerignore +0 -0
  40. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  41. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  42. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.github/RELEASE_TEMPLATE/release-template.md +0 -0
  43. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.github/codecov.yml +0 -0
  44. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.github/dependabot.yml +0 -0
  45. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.github/scripts/tag_from_pyproject.sh +0 -0
  46. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.github/workflows/deploy.yml +0 -0
  47. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.github/workflows/release.yml +0 -0
  48. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.github/workflows/test.yml +0 -0
  49. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.gitignore +0 -0
  50. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.pre-commit-config.yaml +0 -0
  51. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/.project-root +0 -0
  52. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/CONTRIBUTING.md +0 -0
  53. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/LICENSE +0 -0
  54. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/Makefile +0 -0
  55. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/configs/clickhouse/.clickhouse.env.example +0 -0
  56. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/configs/litellm/.litellm.env.example +0 -0
  57. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/configs/minio/.minio.env.example +0 -0
  58. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/configs/postgres/.postgres.env.example +0 -0
  59. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/configs/redis/.redis.env.example +0 -0
  60. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/docker/app/Dockerfile +0 -0
  61. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/docker/service/Dockerfile +0 -0
  62. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/docker-compose.yaml +0 -0
  63. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/docs/media/agent_architecture.excalidraw +0 -0
  64. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/docs/media/agent_architecture.png +0 -0
  65. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/docs/media/agent_diagram.png +0 -0
  66. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph.json +0 -0
  67. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/__init__.py +0 -0
  68. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/__init__.py +0 -0
  69. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/agent.py +0 -0
  70. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/__init__.py +0 -0
  71. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/__init__.py +0 -0
  72. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/task.py +0 -0
  73. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/utils.py +0 -0
  74. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/chatbot/__init__.py +0 -0
  75. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/command_agent/__init__.py +0 -0
  76. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/command_agent/agent.py +0 -0
  77. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/__init__.py +0 -0
  78. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/react/__init__.py +0 -0
  79. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/react_so/__init__.py +0 -0
  80. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/__init__.py +0 -0
  81. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/components/__init__.py +0 -0
  82. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/components/creators/__init__.py +0 -0
  83. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/components/creators/create_react_agent.py +0 -0
  84. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/components/tools.py +0 -0
  85. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/agents/components/utils.py +0 -0
  86. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/client/__init__.py +0 -0
  87. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/__init__.py +0 -0
  88. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/memory/__init__.py +0 -0
  89. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/memory/base.py +0 -0
  90. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/memory/factory.py +0 -0
  91. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/memory/sqlite.py +0 -0
  92. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/memory/types.py +0 -0
  93. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/models/__init__.py +0 -0
  94. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/models/chat_openai.py +0 -0
  95. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/models/fake.py +0 -0
  96. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/observability/__init__.py +0 -0
  97. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/observability/base.py +0 -0
  98. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/observability/empty.py +0 -0
  99. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/observability/factory.py +0 -0
  100. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/observability/langfuse.py +0 -0
  101. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/observability/langsmith.py +0 -0
  102. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/observability/types.py +0 -0
  103. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/prompts/__init__.py +0 -0
  104. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/core/prompts/chat_prompt_template.py +0 -0
  105. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/helper/__init__.py +0 -0
  106. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/helper/logging.py +0 -0
  107. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/helper/types.py +0 -0
  108. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/helper/utils.py +0 -0
  109. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/run_agent.py +0 -0
  110. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/run_client.py +0 -0
  111. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/run_service.py +0 -0
  112. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/schema/task_data.py +0 -0
  113. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/service/__init__.py +0 -0
  114. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/service/exception_handlers.py +0 -0
  115. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/service/factory.py +0 -0
  116. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/service/handler.py +0 -0
  117. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/service/middleware.py +0 -0
  118. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/langgraph_agent_toolkit/service/types.py +0 -0
  119. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/scripts/postgres-init/create_databases.sql +0 -0
  120. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/scripts/python/01-invoke-proxy.py +0 -0
  121. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/scripts/python/02-test-local-pm.py +0 -0
  122. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/scripts/python/03-test-langfuse-pm.py +0 -0
  123. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/scripts/python/04-test-langsmith-pm.py +0 -0
  124. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/scripts/python/05-test-prompt-types.py +0 -0
  125. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/scripts/python/06-test-custom-chat-prompt-template.py +0 -0
  126. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/client/conftest.py +0 -0
  127. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/conftest.py +0 -0
  128. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/core/test_memory.py +0 -0
  129. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/core/test_observability.py +0 -0
  130. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/core/test_prompts.py +0 -0
  131. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/service/conftest.py +0 -0
  132. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/service/test_auth.py +0 -0
  133. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/service/test_factory.py +0 -0
  134. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/service/test_service_e2e.py +0 -0
  135. {langgraph_agent_toolkit-0.1.2 → langgraph_agent_toolkit-0.2.0}/tests/service/test_utils.py +0 -0
@@ -0,0 +1,6 @@
1
+ [run]
2
+ omit =
3
+ examples/*
4
+ scripts/*
5
+ tests/*
6
+ langgraph_agent_toolkit/agents/blueprints/*
@@ -47,11 +47,38 @@ POSTGRES_MAX_IDLE=5
47
47
  # Use a fake model for testing
48
48
  USE_FAKE_MODEL=false
49
49
 
50
- # Set a default model
51
- DEFAULT_MODEL_TYPE="openai-compatible"
52
-
53
- # If MODEL is set to "openai-compatible", set the following
54
- # This is just a flexible solution. If you need multiple model options, you still need to add it to models.py
55
- MODEL_NAME=
56
- MODEL_API_KEY=
57
- MODEL_BASE_URL=http://litellm:4000/v1
50
+ # OpenAI Settings
51
+ OPENAI_API_KEY=
52
+ OPENAI_API_BASE_URL=
53
+ OPENAI_API_VERSION=
54
+ OPENAI_MODEL_NAME=
55
+
56
+ # Azure OpenAI Settings
57
+ AZURE_OPENAI_API_KEY=
58
+ AZURE_OPENAI_ENDPOINT=
59
+ AZURE_OPENAI_API_VERSION=
60
+ AZURE_OPENAI_MODEL_NAME=
61
+ AZURE_OPENAI_DEPLOYMENT_NAME=
62
+
63
+ # Anthropic Settings
64
+ ANTHROPIC_API_KEY=
65
+ ANTHROPIC_MODEL_NAME=
66
+
67
+ # Google VertexAI Settings
68
+ GOOGLE_VERTEXAI_MODEL_NAME=
69
+ GOOGLE_VERTEXAI_API_KEY=
70
+
71
+ # Google GenAI Settings
72
+ GOOGLE_GENAI_MODEL_NAME=
73
+ GOOGLE_GENAI_API_KEY=
74
+
75
+ # Bedrock Settings
76
+ AWS_BEDROCK_MODEL_NAME=
77
+
78
+ # DeepSeek Settings
79
+ DEEPSEEK_MODEL_NAME=
80
+ DEEPSEEK_API_KEY=
81
+
82
+ # Ollama Settings
83
+ OLLAMA_MODEL_NAME=
84
+ OLLAMA_BASE_URL=
@@ -1,3 +1,5 @@
1
+ # PR Description
2
+
1
3
  ## Summary
2
4
 
3
5
  <!-- Provide a concise summary "Why are the changes needed"?
@@ -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.2.0]
10
+
11
+ ### Fixed
12
+
13
+ - Refactored code structure for better maintainability
14
+ - Refactored Model factory
15
+
16
+ ### Removed
17
+
18
+ - Removed AllModels and added environment variables for different providers
19
+
9
20
  ## [0.1.2]
10
21
 
11
22
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-agent-toolkit
3
- Version: 0.1.2
3
+ Version: 0.2.0
4
4
  Summary: Full toolkit for running an AI agent service built with LangGraph, FastAPI and Streamlit
5
5
  Project-URL: repository, https://github.com/kryvokhyzha/langgraph-agent-toolkit
6
6
  Project-URL: PyPI, https://pypi.org/project/langgraph-agent-toolkit
@@ -133,7 +133,8 @@ Features include:
133
133
 
134
134
  ## 🏗️ Architecture
135
135
 
136
- <img src="docs/media/agent_architecture.png" width="800">
136
+ <!-- <img src="docs/media/agent_architecture.png" width="800"> -->
137
+ <img src="https://github.com/kryvokhyzha/langgraph-agent-toolkit/blob/main/docs/media/agent_architecture.png?raw=true" width="800">
137
138
 
138
139
  ## ✨ Key Features
139
140
 
@@ -183,10 +184,29 @@ Features include:
183
184
  **🔑 LLM API Configuration**
184
185
 
185
186
  ```env
186
- # LiteLLM configuration
187
- MODEL_NAME="gpt4o" # LiteLLM model name
188
- MODEL_BASE_URL=http://litellm:4000/v1 # LiteLLM endpoint
189
- MODEL_API_KEY=sk-any-string # LiteLLM master key
187
+ # OpenAI Settings
188
+ OPENAI_API_KEY=sk-xxxxxxxxxxxxx
189
+ OPENAI_API_BASE_URL=http://litellm:4000/v1 # Can be OpenAI API or LiteLLM proxy
190
+ OPENAI_API_VERSION=2025-01-01
191
+ OPENAI_MODEL_NAME=gpt-4o-mini
192
+
193
+ # Azure OpenAI Settings (Optional)
194
+ AZURE_OPENAI_API_KEY=
195
+ AZURE_OPENAI_ENDPOINT=
196
+ AZURE_OPENAI_API_VERSION=
197
+ AZURE_OPENAI_MODEL_NAME=
198
+ AZURE_OPENAI_DEPLOYMENT_NAME=
199
+
200
+ # Anthropic Settings (Optional)
201
+ ANTHROPIC_API_KEY=
202
+ ANTHROPIC_MODEL_NAME=
203
+
204
+ # Other provider settings are also available:
205
+ # - Google VertexAI
206
+ # - Google GenAI
207
+ # - AWS Bedrock
208
+ # - DeepSeek
209
+ # - Ollama
190
210
  ```
191
211
 
192
212
  **🗄️ Database Configuration**
@@ -62,7 +62,8 @@ Features include:
62
62
 
63
63
  ## 🏗️ Architecture
64
64
 
65
- <img src="docs/media/agent_architecture.png" width="800">
65
+ <!-- <img src="docs/media/agent_architecture.png" width="800"> -->
66
+ <img src="https://github.com/kryvokhyzha/langgraph-agent-toolkit/blob/main/docs/media/agent_architecture.png?raw=true" width="800">
66
67
 
67
68
  ## ✨ Key Features
68
69
 
@@ -112,10 +113,29 @@ Features include:
112
113
  **🔑 LLM API Configuration**
113
114
 
114
115
  ```env
115
- # LiteLLM configuration
116
- MODEL_NAME="gpt4o" # LiteLLM model name
117
- MODEL_BASE_URL=http://litellm:4000/v1 # LiteLLM endpoint
118
- MODEL_API_KEY=sk-any-string # LiteLLM master key
116
+ # OpenAI Settings
117
+ OPENAI_API_KEY=sk-xxxxxxxxxxxxx
118
+ OPENAI_API_BASE_URL=http://litellm:4000/v1 # Can be OpenAI API or LiteLLM proxy
119
+ OPENAI_API_VERSION=2025-01-01
120
+ OPENAI_MODEL_NAME=gpt-4o-mini
121
+
122
+ # Azure OpenAI Settings (Optional)
123
+ AZURE_OPENAI_API_KEY=
124
+ AZURE_OPENAI_ENDPOINT=
125
+ AZURE_OPENAI_API_VERSION=
126
+ AZURE_OPENAI_MODEL_NAME=
127
+ AZURE_OPENAI_DEPLOYMENT_NAME=
128
+
129
+ # Anthropic Settings (Optional)
130
+ ANTHROPIC_API_KEY=
131
+ ANTHROPIC_MODEL_NAME=
132
+
133
+ # Other provider settings are also available:
134
+ # - Google VertexAI
135
+ # - Google GenAI
136
+ # - AWS Bedrock
137
+ # - DeepSeek
138
+ # - Ollama
119
139
  ```
120
140
 
121
141
  **🗄️ Database Configuration**
@@ -1,5 +1,7 @@
1
- # https://docs.litellm.ai/docs/proxy/configs
1
+ # Proxy doc: https://docs.litellm.ai/docs/proxy/configs
2
+ # Caching doc: https://docs.litellm.ai/docs/proxy/config_settings
2
3
 
4
+ # list of supported models on the server, with model-specific configs
3
5
  model_list:
4
6
  - model_name: gpt-4o-mini
5
7
  litellm_params:
@@ -16,6 +18,7 @@ model_list:
16
18
  model_info:
17
19
  supported_environments: ["development", "production", "staging"]
18
20
 
21
+ # list of credentials to be used by the models
19
22
  credential_list:
20
23
  - credential_name: default_azure_credential
21
24
  credential_values:
@@ -25,12 +28,14 @@ credential_list:
25
28
  credential_info:
26
29
  description: "Production credentials for EU region"
27
30
 
31
+ # litellm Module settings
28
32
  litellm_settings:
29
33
  drop_params: True
30
34
  num_retries: 2 # retry call 3 times on each model_name (e.g. zephyr-beta)
31
35
  request_timeout: 40 # raise Timeout error if call takes longer than 10s. Sets litellm.request_timeout
32
36
  allowed_fails: 3 # cooldown model if it fails > 1 call in a minute.
33
37
 
38
+ # litellm Router settings
34
39
  router_settings: # router_settings are optional
35
40
  routing_strategy: latency-based-routing # Literal["simple-shuffle", "least-busy", "usage-based-routing","latency-based-routing"], default="simple-shuffle"
36
41
  model_group_alias: { "gpt-4": "gpt-3.5-turbo" } # all requests with `gpt-4` will be routed to models with `gpt-3.5-turbo`
@@ -40,8 +45,15 @@ router_settings: # router_settings are optional
40
45
  redis_password: os.environ/REDIS_AUTH
41
46
  redis_port: 1992
42
47
 
48
+ # Server settings
43
49
  general_settings:
44
50
  master_key: os.environ/LITELLM_MASTER_KEY
45
51
  database_connection_pool_limit: 1000
52
+ database_connection_timeout: 60
46
53
  store_model_in_db: True
47
54
  store_prompts_in_spend_logs: True
55
+ # environment_variables:
56
+ # # settings for using redis caching
57
+ # REDIS_HOST: redis-16337.c322.us-east-1-2.ec2.cloud.redislabs.com
58
+ # REDIS_PORT: "16337"
59
+ # REDIS_PASSWORD:
@@ -172,7 +172,8 @@ class AgentExecutor:
172
172
  message: str,
173
173
  thread_id: Optional[str] = None,
174
174
  user_id: Optional[str] = None,
175
- model: Optional[str] = None,
175
+ model_name: Optional[str] = None,
176
+ model_provider: Optional[str] = None,
176
177
  agent_config: Optional[Dict[str, Any]] = None,
177
178
  recursion_limit: Optional[int] = None,
178
179
  ) -> Tuple[Agent, Any, Any, UUID]:
@@ -183,7 +184,8 @@ class AgentExecutor:
183
184
  message: User message to send to the agent
184
185
  thread_id: Optional thread ID for conversation history
185
186
  user_id: Optional user ID for the agent
186
- model: Optional model name to override the default
187
+ model_name: Optional model name to override the default
188
+ model_provider: Optional model provider to override the default
187
189
  agent_config: Optional additional configuration for the agent
188
190
  recursion_limit: Optional recursion limit for the agent
189
191
 
@@ -208,8 +210,11 @@ class AgentExecutor:
208
210
  "user_id": user_id,
209
211
  }
210
212
 
211
- if model:
212
- configurable["model"] = model
213
+ if model_name:
214
+ configurable["model_name"] = model_name
215
+
216
+ if model_provider:
217
+ configurable["model_provider"] = model_provider
213
218
 
214
219
  if agent_config:
215
220
  configurable.update(agent_config)
@@ -243,7 +248,8 @@ class AgentExecutor:
243
248
  message: str,
244
249
  thread_id: Optional[str] = None,
245
250
  user_id: Optional[str] = None,
246
- model: Optional[str] = None,
251
+ model_name: Optional[str] = None,
252
+ model_provider: Optional[str] = None,
247
253
  agent_config: Optional[Dict[str, Any]] = None,
248
254
  recursion_limit: Optional[int] = None,
249
255
  ) -> ChatMessage:
@@ -254,7 +260,8 @@ class AgentExecutor:
254
260
  message: User message to send to the agent
255
261
  thread_id: Optional thread ID for conversation history
256
262
  user_id: Optional user ID for the agent
257
- model: Optional model name to override the default
263
+ model_name: Optional model name to override the default
264
+ model_provider: Optional model provider to override the default
258
265
  agent_config: Optional additional configuration for the agent
259
266
  recursion_limit: Optional recursion limit for the agent
260
267
 
@@ -267,7 +274,8 @@ class AgentExecutor:
267
274
  message=message,
268
275
  thread_id=thread_id,
269
276
  user_id=user_id,
270
- model=model,
277
+ model_name=model_name,
278
+ model_provider=model_provider,
271
279
  agent_config=agent_config,
272
280
  recursion_limit=recursion_limit,
273
281
  )
@@ -300,7 +308,8 @@ class AgentExecutor:
300
308
  message: str,
301
309
  thread_id: Optional[str] = None,
302
310
  user_id: Optional[str] = None,
303
- model: Optional[str] = None,
311
+ model_name: Optional[str] = None,
312
+ model_provider: Optional[str] = None,
304
313
  stream_tokens: bool = True,
305
314
  agent_config: Optional[Dict[str, Any]] = None,
306
315
  recursion_limit: Optional[int] = None,
@@ -312,7 +321,8 @@ class AgentExecutor:
312
321
  message: User message to send to the agent
313
322
  thread_id: Optional thread ID for conversation history
314
323
  user_id: Optional user ID for the agent
315
- model: Optional model name to override the default
324
+ model_name: Optional model name to override the default
325
+ model_provider: Optional model provider to override the default
316
326
  stream_tokens: Whether to stream individual tokens
317
327
  agent_config: Optional additional configuration for the agent
318
328
  recursion_limit: Optional recursion limit for the agent
@@ -326,7 +336,8 @@ class AgentExecutor:
326
336
  message=message,
327
337
  thread_id=thread_id,
328
338
  user_id=user_id,
329
- model=model,
339
+ model_name=model_name,
340
+ model_provider=model_provider,
330
341
  agent_config=agent_config,
331
342
  recursion_limit=recursion_limit,
332
343
  )
@@ -11,6 +11,7 @@ from langgraph_agent_toolkit.agents.agent import Agent
11
11
  from langgraph_agent_toolkit.agents.blueprints.bg_task_agent.task import Task
12
12
  from langgraph_agent_toolkit.core import settings
13
13
  from langgraph_agent_toolkit.core.models.factory import ModelFactory
14
+ from langgraph_agent_toolkit.schema.models import ModelProvider
14
15
 
15
16
 
16
17
  class AgentState(MessagesState, total=False):
@@ -29,7 +30,12 @@ def wrap_model(model: BaseChatModel) -> RunnableSerializable[AgentState, AIMessa
29
30
 
30
31
 
31
32
  async def acall_model(state: AgentState, config: RunnableConfig) -> AgentState:
32
- m = ModelFactory.create(config["configurable"].get("model", settings.DEFAULT_MODEL_TYPE))
33
+ m = ModelFactory.create(
34
+ mmodel_provider=config["configurable"].get("model_provider", ModelProvider.OPENAI),
35
+ model_name=config["configurable"].get("model_name", settings.OPENAI_MODEL_NAME),
36
+ openai_api_base=settings.OPENAI_API_BASE_URL,
37
+ openai_api_key=settings.OPENAI_API_KEY,
38
+ )
33
39
  model_runnable = wrap_model(m)
34
40
  response = await model_runnable.ainvoke(state, config)
35
41
 
@@ -1,12 +1,11 @@
1
1
  from langchain_core.messages import BaseMessage
2
2
  from langchain_core.runnables import RunnableConfig
3
- from langgraph.checkpoint.memory import MemorySaver
4
3
  from langgraph.func import entrypoint
5
- from langgraph.graph import add_messages
6
4
 
7
5
  from langgraph_agent_toolkit.agents.agent import Agent
8
6
  from langgraph_agent_toolkit.core import settings
9
7
  from langgraph_agent_toolkit.core.models.factory import ModelFactory
8
+ from langgraph_agent_toolkit.schema.models import ModelProvider
10
9
 
11
10
 
12
11
  @entrypoint(
@@ -22,7 +21,12 @@ async def chatbot(
22
21
  if previous:
23
22
  messages = previous["messages"] + messages
24
23
 
25
- model = ModelFactory.create(config["configurable"].get("model", settings.DEFAULT_MODEL_TYPE))
24
+ model = ModelFactory.create(
25
+ model_provider=config["configurable"].get("model_provider", ModelProvider.OPENAI),
26
+ model_name=config["configurable"].get("model_name", settings.OPENAI_MODEL_NAME),
27
+ openai_api_base=settings.OPENAI_API_BASE_URL,
28
+ openai_api_key=settings.OPENAI_API_KEY,
29
+ )
26
30
  response = await model.ainvoke(messages)
27
31
  return entrypoint.final(value={"messages": [response]}, save={"messages": messages + [response]})
28
32
 
@@ -14,6 +14,7 @@ from pydantic import BaseModel, Field
14
14
  from langgraph_agent_toolkit.agents.agent import Agent
15
15
  from langgraph_agent_toolkit.core import settings
16
16
  from langgraph_agent_toolkit.core.models.factory import ModelFactory
17
+ from langgraph_agent_toolkit.schema.models import ModelProvider
17
18
 
18
19
 
19
20
  class AgentState(MessagesState, total=False):
@@ -44,7 +45,12 @@ Don't tell the user what their sign is, you are just demonstrating your knowledg
44
45
 
45
46
  async def background(state: AgentState, config: RunnableConfig) -> AgentState:
46
47
  """Demonstrate doing work before the interrupt."""
47
- m = ModelFactory.create(config["configurable"].get("model", settings.DEFAULT_MODEL_TYPE))
48
+ m = ModelFactory.create(
49
+ model_provider=config["configurable"].get("model_provider", ModelProvider.OPENAI),
50
+ model_name=config["configurable"].get("model_name", settings.OPENAI_MODEL_NAME),
51
+ openai_api_base=settings.OPENAI_API_BASE_URL,
52
+ openai_api_key=settings.OPENAI_API_KEY,
53
+ )
48
54
  model_runnable = wrap_model(m, background_prompt.format())
49
55
  response = await model_runnable.ainvoke(state, config)
50
56
 
@@ -74,7 +80,12 @@ async def determine_birthdate(state: AgentState, config: RunnableConfig) -> Agen
74
80
 
75
81
  If no birthdate is found, it will perform an interrupt before proceeding.
76
82
  """
77
- m = ModelFactory.create(config["configurable"].get("model", settings.DEFAULT_MODEL_TYPE))
83
+ m = ModelFactory.create(
84
+ model_provider=config["configurable"].get("model_provider", ModelProvider.OPENAI),
85
+ model_name=config["configurable"].get("model_name", settings.OPENAI_MODEL_NAME),
86
+ openai_api_base=settings.OPENAI_API_BASE_URL,
87
+ openai_api_key=settings.OPENAI_API_KEY,
88
+ )
78
89
  model_runnable = wrap_model(
79
90
  m.with_structured_output(BirthdateExtraction),
80
91
  birthdate_extraction_prompt.format(),
@@ -117,7 +128,12 @@ async def determine_sign(state: AgentState, config: RunnableConfig) -> AgentStat
117
128
  if not state.get("birthdate"):
118
129
  raise ValueError("No birthdate found in state")
119
130
 
120
- m = ModelFactory.create(config["configurable"].get("model", settings.DEFAULT_MODEL_TYPE))
131
+ m = ModelFactory.create(
132
+ model_provider=config["configurable"].get("model_provider", ModelProvider.OPENAI),
133
+ model_name=config["configurable"].get("model_name", settings.OPENAI_MODEL_NAME),
134
+ openai_api_base=settings.OPENAI_API_BASE_URL,
135
+ openai_api_key=settings.OPENAI_API_KEY,
136
+ )
121
137
  model_runnable = wrap_model(m, sign_prompt.format(birthdate=state["birthdate"].strftime("%Y-%m-%d")))
122
138
  response = await model_runnable.ainvoke(state, config)
123
139
 
@@ -10,6 +10,7 @@ from langgraph_agent_toolkit.core.observability.factory import ObservabilityFact
10
10
  from langgraph_agent_toolkit.core.observability.types import ChatMessageDict, MessageRole, ObservabilityBackend
11
11
  from langgraph_agent_toolkit.core.prompts.chat_prompt_template import ObservabilityChatPromptTemplate
12
12
  from langgraph_agent_toolkit.core.settings import settings
13
+ from langgraph_agent_toolkit.schema.models import ModelProvider
13
14
 
14
15
 
15
16
  PROMPT_NAME = "react-assistant"
@@ -50,7 +51,12 @@ react_agent = Agent(
50
51
  name="react-agent",
51
52
  description="A react agent.",
52
53
  graph=create_react_agent(
53
- model=ModelFactory.create(settings.DEFAULT_MODEL_TYPE),
54
+ model=ModelFactory.create(
55
+ model_provider=ModelProvider.OPENAI,
56
+ model_name=settings.OPENAI_MODEL_NAME,
57
+ openai_api_base=settings.OPENAI_API_BASE_URL,
58
+ openai_api_key=settings.OPENAI_API_KEY,
59
+ ),
54
60
  tools=[add, multiply, DuckDuckGoSearchResults()],
55
61
  prompt=prompt,
56
62
  pre_model_hook=pre_model_hook_standard,
@@ -8,6 +8,7 @@ from langgraph_agent_toolkit.agents.components.tools import add, multiply
8
8
  from langgraph_agent_toolkit.agents.components.utils import AgentStateWithRemainingSteps, pre_model_hook_standard
9
9
  from langgraph_agent_toolkit.core import settings
10
10
  from langgraph_agent_toolkit.core.models.factory import ModelFactory
11
+ from langgraph_agent_toolkit.schema.models import ModelProvider
11
12
 
12
13
 
13
14
  class ResponseSchema(BaseModel):
@@ -23,7 +24,12 @@ react_agent_so = Agent(
23
24
  name="react-agent-so",
24
25
  description="A react agent with structured output.",
25
26
  graph=create_react_agent(
26
- model=ModelFactory.create(settings.DEFAULT_MODEL_TYPE),
27
+ model=ModelFactory.create(
28
+ model_provider=ModelProvider.OPENAI,
29
+ model_name=settings.OPENAI_MODEL_NAME,
30
+ openai_api_base=settings.OPENAI_API_BASE_URL,
31
+ openai_api_key=settings.OPENAI_API_KEY,
32
+ ),
27
33
  tools=[add, multiply, DuckDuckGoSearchResults()],
28
34
  prompt=(
29
35
  "You are a team support agent that can perform calculations and search the web. "
@@ -7,9 +7,15 @@ from langgraph_agent_toolkit.agents.agent import Agent
7
7
  from langgraph_agent_toolkit.agents.components.tools import add, multiply
8
8
  from langgraph_agent_toolkit.core import settings
9
9
  from langgraph_agent_toolkit.core.models.factory import ModelFactory
10
+ from langgraph_agent_toolkit.schema.models import ModelProvider
10
11
 
11
12
 
12
- model = ModelFactory.create(settings.DEFAULT_MODEL_TYPE)
13
+ model = ModelFactory.create(
14
+ model_provider=ModelProvider.OPENAI,
15
+ model_name=settings.OPENAI_MODEL_NAME,
16
+ openai_api_base=settings.OPENAI_API_BASE_URL,
17
+ openai_api_key=settings.OPENAI_API_KEY,
18
+ )
13
19
 
14
20
  math_agent = create_react_agent(
15
21
  model=model,
@@ -87,7 +87,8 @@ class AgentClient:
87
87
  async def ainvoke(
88
88
  self,
89
89
  message: str,
90
- model: str | None = None,
90
+ model_name: str | None = None,
91
+ model_provider: str | None = None,
91
92
  thread_id: str | None = None,
92
93
  user_id: str | None = None,
93
94
  agent_config: dict[str, Any] | None = None,
@@ -96,7 +97,8 @@ class AgentClient:
96
97
 
97
98
  Args:
98
99
  message (str): The message to send to the agent
99
- model (str, optional): LLM model to use for the agent
100
+ model_name (str, optional): LLM model to use for the agent
101
+ model_provider (str, optional): LLM model provider to use for the agent
100
102
  thread_id (str, optional): Thread ID for continuing a conversation
101
103
  user_id (str, optional): User ID for identifying the user
102
104
  agent_config (dict[str, Any], optional): Additional configuration to pass through to the agent
@@ -111,8 +113,10 @@ class AgentClient:
111
113
  request = UserInput(message=message)
112
114
  if thread_id:
113
115
  request.thread_id = thread_id
114
- if model:
115
- request.model = model
116
+ if model_name:
117
+ request.model_name = model_name
118
+ if model_provider:
119
+ request.model_provider = model_provider
116
120
  if agent_config:
117
121
  request.agent_config = agent_config
118
122
  if user_id:
@@ -135,7 +139,8 @@ class AgentClient:
135
139
  def invoke(
136
140
  self,
137
141
  message: str,
138
- model: str | None = None,
142
+ model_name: str | None = None,
143
+ model_provider: str | None = None,
139
144
  thread_id: str | None = None,
140
145
  user_id: str | None = None,
141
146
  agent_config: dict[str, Any] | None = None,
@@ -144,7 +149,8 @@ class AgentClient:
144
149
 
145
150
  Args:
146
151
  message (str): The message to send to the agent
147
- model (str, optional): LLM model to use for the agent
152
+ model_name (str, optional): LLM model to use for the agent
153
+ model_provider (str, optional): LLM model provider to use for the agent
148
154
  thread_id (str, optional): Thread ID for continuing a conversation
149
155
  user_id (str, optional): User ID for identifying the user
150
156
  agent_config (dict[str, Any], optional): Additional configuration to pass through to the agent
@@ -159,8 +165,10 @@ class AgentClient:
159
165
  request = UserInput(message=message)
160
166
  if thread_id:
161
167
  request.thread_id = thread_id
162
- if model:
163
- request.model = model
168
+ if model_name:
169
+ request.model_name = model_name
170
+ if model_provider:
171
+ request.model_provider = model_provider
164
172
  if agent_config:
165
173
  request.agent_config = agent_config
166
174
  if user_id:
@@ -207,7 +215,8 @@ class AgentClient:
207
215
  def stream(
208
216
  self,
209
217
  message: str,
210
- model: str | None = None,
218
+ model_name: str | None = None,
219
+ model_provider: str | None = None,
211
220
  thread_id: str | None = None,
212
221
  user_id: str | None = None,
213
222
  agent_config: dict[str, Any] | None = None,
@@ -221,7 +230,8 @@ class AgentClient:
221
230
 
222
231
  Args:
223
232
  message (str): The message to send to the agent
224
- model (str, optional): LLM model to use for the agent
233
+ model_name (str, optional): LLM model to use for the agent
234
+ model_provider (str, optional): LLM model provider to use for the agent
225
235
  thread_id (str, optional): Thread ID for continuing a conversation
226
236
  user_id (str, optional): User ID for identifying the user
227
237
  agent_config (dict[str, Any], optional): Additional configuration to pass through to the agent
@@ -238,8 +248,10 @@ class AgentClient:
238
248
  request = StreamInput(message=message, stream_tokens=stream_tokens)
239
249
  if thread_id:
240
250
  request.thread_id = thread_id
241
- if model:
242
- request.model = model
251
+ if model_name:
252
+ request.model_name = model_name
253
+ if model_provider:
254
+ request.model_provider = model_provider
243
255
  if agent_config:
244
256
  request.agent_config = agent_config
245
257
  if user_id:
@@ -266,7 +278,8 @@ class AgentClient:
266
278
  async def astream(
267
279
  self,
268
280
  message: str,
269
- model: str | None = None,
281
+ model_name: str | None = None,
282
+ model_provider: str | None = None,
270
283
  thread_id: str | None = None,
271
284
  user_id: str | None = None,
272
285
  agent_config: dict[str, Any] | None = None,
@@ -280,7 +293,8 @@ class AgentClient:
280
293
 
281
294
  Args:
282
295
  message (str): The message to send to the agent
283
- model (str, optional): LLM model to use for the agent
296
+ model_name (str, optional): LLM model to use for the agent
297
+ model_provider (str, optional): LLM model provider to use for the agent
284
298
  thread_id (str, optional): Thread ID for continuing a conversation
285
299
  user_id (str, optional): User ID for identifying the user
286
300
  agent_config (dict[str, Any], optional): Additional configuration to pass through to the agent
@@ -297,8 +311,10 @@ class AgentClient:
297
311
  request = StreamInput(message=message, stream_tokens=stream_tokens)
298
312
  if thread_id:
299
313
  request.thread_id = thread_id
300
- if model:
301
- request.model = model
314
+ if model_name:
315
+ request.model_name = model_name
316
+ if model_provider:
317
+ request.model_provider = model_provider
302
318
  if agent_config:
303
319
  request.agent_config = agent_config
304
320
  if user_id:
@@ -324,13 +340,22 @@ class AgentClient:
324
340
  raise AgentClientError(f"Error: {e}")
325
341
 
326
342
  async def acreate_feedback(
327
- self, run_id: str, key: str, score: float, kwargs: dict[str, Any] = {}, user_id: str | None = None
343
+ self,
344
+ run_id: str,
345
+ key: str,
346
+ score: float,
347
+ kwargs: dict[str, Any] = {},
348
+ user_id: str | None = None,
328
349
  ) -> None:
329
350
  """Create a feedback record for a run.
330
351
 
331
- This is a simple wrapper for the LangSmith create_feedback API, so the
332
- credentials can be stored and managed in the service rather than the client.
333
- See: https://api.smith.langchain.com/redoc#tag/feedback/operation/create_feedback_api_v1_feedback_post
352
+ Args:
353
+ run_id (str): The ID of the run to provide feedback for
354
+ key (str): The key for the feedback
355
+ score (float): The score for the feedback
356
+ kwargs (dict[str, Any], optional): Additional metadata for the feedback
357
+ user_id (str, optional): User ID for identifying the user
358
+
334
359
  """
335
360
  request = Feedback(run_id=run_id, key=key, score=score, user_id=user_id, kwargs=kwargs)
336
361
  async with httpx.AsyncClient() as client:
@@ -36,7 +36,8 @@ class PostgresMemoryBackend(BaseMemoryBackend):
36
36
  )
37
37
  return True
38
38
 
39
- def get_connection_string(self) -> str:
39
+ @staticmethod
40
+ def get_connection_string() -> str:
40
41
  """Build and return the PostgreSQL connection string from settings."""
41
42
  return (
42
43
  f"postgresql://{settings.POSTGRES_USER}:"