langgraph-agent-toolkit 0.1.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 (132) hide show
  1. langgraph_agent_toolkit-0.1.0/.coveragerc +5 -0
  2. langgraph_agent_toolkit-0.1.0/.dockerignore +166 -0
  3. langgraph_agent_toolkit-0.1.0/.env.example +57 -0
  4. langgraph_agent_toolkit-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +48 -0
  5. langgraph_agent_toolkit-0.1.0/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  6. langgraph_agent_toolkit-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +47 -0
  7. langgraph_agent_toolkit-0.1.0/.github/RELEASE_TEMPLATE/release-template.md +38 -0
  8. langgraph_agent_toolkit-0.1.0/.github/codecov.yml +13 -0
  9. langgraph_agent_toolkit-0.1.0/.github/dependabot.yml +24 -0
  10. langgraph_agent_toolkit-0.1.0/.github/release/tag_from_pyproject.sh +9 -0
  11. langgraph_agent_toolkit-0.1.0/.github/workflows/deploy.yml +56 -0
  12. langgraph_agent_toolkit-0.1.0/.github/workflows/release.yml +38 -0
  13. langgraph_agent_toolkit-0.1.0/.github/workflows/test.yml +147 -0
  14. langgraph_agent_toolkit-0.1.0/.gitignore +195 -0
  15. langgraph_agent_toolkit-0.1.0/.pre-commit-config.yaml +55 -0
  16. langgraph_agent_toolkit-0.1.0/.project-root +2 -0
  17. langgraph_agent_toolkit-0.1.0/CHANGELOG.md +32 -0
  18. langgraph_agent_toolkit-0.1.0/CONTRIBUTING.md +157 -0
  19. langgraph_agent_toolkit-0.1.0/LICENSE +21 -0
  20. langgraph_agent_toolkit-0.1.0/Makefile +41 -0
  21. langgraph_agent_toolkit-0.1.0/PKG-INFO +424 -0
  22. langgraph_agent_toolkit-0.1.0/README.md +352 -0
  23. langgraph_agent_toolkit-0.1.0/configs/clickhouse/.clickhouse.env.example +3 -0
  24. langgraph_agent_toolkit-0.1.0/configs/litellm/.litellm.env.example +3 -0
  25. langgraph_agent_toolkit-0.1.0/configs/litellm/config.example.yaml +43 -0
  26. langgraph_agent_toolkit-0.1.0/configs/minio/.minio.env.example +2 -0
  27. langgraph_agent_toolkit-0.1.0/configs/postgres/.postgres.env.example +3 -0
  28. langgraph_agent_toolkit-0.1.0/configs/redis/.redis.env.example +1 -0
  29. langgraph_agent_toolkit-0.1.0/docker/app/Dockerfile +16 -0
  30. langgraph_agent_toolkit-0.1.0/docker/service/Dockerfile +15 -0
  31. langgraph_agent_toolkit-0.1.0/docker-compose.yaml +349 -0
  32. langgraph_agent_toolkit-0.1.0/docs/media/agent_architecture.excalidraw +1771 -0
  33. langgraph_agent_toolkit-0.1.0/docs/media/agent_architecture.png +0 -0
  34. langgraph_agent_toolkit-0.1.0/docs/media/agent_diagram.png +0 -0
  35. langgraph_agent_toolkit-0.1.0/langgraph.json +8 -0
  36. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/__init__.py +7 -0
  37. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/__init__.py +0 -0
  38. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/agent.py +14 -0
  39. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/agent_executor.py +415 -0
  40. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/__init__.py +0 -0
  41. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/__init__.py +0 -0
  42. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/agent.py +69 -0
  43. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/task.py +52 -0
  44. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/bg_task_agent/utils.py +17 -0
  45. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/chatbot/__init__.py +0 -0
  46. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/chatbot/agent.py +34 -0
  47. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/command_agent/__init__.py +0 -0
  48. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/command_agent/agent.py +54 -0
  49. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/__init__.py +0 -0
  50. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/interrupt_agent/agent.py +140 -0
  51. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/react/__init__.py +0 -0
  52. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/react/agent.py +67 -0
  53. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/react_so/__init__.py +0 -0
  54. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/react_so/agent.py +39 -0
  55. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/__init__.py +0 -0
  56. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/blueprints/supervisor_agent/agent.py +44 -0
  57. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/components/__init__.py +0 -0
  58. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/components/creators/__init__.py +4 -0
  59. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/components/creators/create_react_agent.py +459 -0
  60. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/components/tools.py +13 -0
  61. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/agents/components/utils.py +42 -0
  62. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/client/__init__.py +4 -0
  63. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/client/client.py +344 -0
  64. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/__init__.py +5 -0
  65. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/memory/__init__.py +0 -0
  66. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/memory/base.py +33 -0
  67. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/memory/factory.py +30 -0
  68. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/memory/postgres.py +76 -0
  69. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/memory/sqlite.py +21 -0
  70. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/memory/types.py +6 -0
  71. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/models/__init__.py +5 -0
  72. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/models/chat_openai.py +21 -0
  73. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/models/factory.py +118 -0
  74. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/models/fake.py +25 -0
  75. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/observability/__init__.py +10 -0
  76. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/observability/base.py +331 -0
  77. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/observability/empty.py +67 -0
  78. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/observability/factory.py +43 -0
  79. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/observability/langfuse.py +118 -0
  80. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/observability/langsmith.py +131 -0
  81. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/observability/types.py +34 -0
  82. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/prompts/__init__.py +0 -0
  83. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/prompts/chat_prompt_template.py +528 -0
  84. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/core/settings.py +164 -0
  85. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/helper/__init__.py +0 -0
  86. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/helper/constants.py +10 -0
  87. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/helper/logging.py +111 -0
  88. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/helper/types.py +7 -0
  89. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/helper/utils.py +80 -0
  90. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/run_agent.py +68 -0
  91. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/run_client.py +55 -0
  92. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/run_service.py +19 -0
  93. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/schema/__init__.py +28 -0
  94. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/schema/models.py +25 -0
  95. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/schema/schema.py +210 -0
  96. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/schema/task_data.py +72 -0
  97. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/service/__init__.py +0 -0
  98. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/service/exception_handlers.py +46 -0
  99. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/service/factory.py +213 -0
  100. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/service/handler.py +122 -0
  101. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/service/middleware.py +18 -0
  102. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/service/routes.py +169 -0
  103. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/service/types.py +8 -0
  104. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/service/utils.py +136 -0
  105. langgraph_agent_toolkit-0.1.0/langgraph_agent_toolkit/streamlit_app.py +368 -0
  106. langgraph_agent_toolkit-0.1.0/pyproject.toml +178 -0
  107. langgraph_agent_toolkit-0.1.0/scripts/postgres-init/create_databases.sql +32 -0
  108. langgraph_agent_toolkit-0.1.0/scripts/python/01-invoke-proxy.py +26 -0
  109. langgraph_agent_toolkit-0.1.0/scripts/python/02-test-local-pm.py +49 -0
  110. langgraph_agent_toolkit-0.1.0/scripts/python/03-test-langfuse-pm.py +47 -0
  111. langgraph_agent_toolkit-0.1.0/scripts/python/04-test-langsmith-pm.py +47 -0
  112. langgraph_agent_toolkit-0.1.0/scripts/python/05-test-prompt-types.py +109 -0
  113. langgraph_agent_toolkit-0.1.0/scripts/python/06-test-custom-chat-prompt-template.py +295 -0
  114. langgraph_agent_toolkit-0.1.0/tests/agents/test_agent_executor.py +389 -0
  115. langgraph_agent_toolkit-0.1.0/tests/app/conftest.py +25 -0
  116. langgraph_agent_toolkit-0.1.0/tests/app/test_streamlit_app.py +161 -0
  117. langgraph_agent_toolkit-0.1.0/tests/client/conftest.py +11 -0
  118. langgraph_agent_toolkit-0.1.0/tests/client/test_client.py +331 -0
  119. langgraph_agent_toolkit-0.1.0/tests/conftest.py +42 -0
  120. langgraph_agent_toolkit-0.1.0/tests/core/test_llm.py +56 -0
  121. langgraph_agent_toolkit-0.1.0/tests/core/test_memory.py +166 -0
  122. langgraph_agent_toolkit-0.1.0/tests/core/test_observability.py +692 -0
  123. langgraph_agent_toolkit-0.1.0/tests/core/test_prompts.py +675 -0
  124. langgraph_agent_toolkit-0.1.0/tests/core/test_settings.py +235 -0
  125. langgraph_agent_toolkit-0.1.0/tests/integration/test_docker_e2e.py +43 -0
  126. langgraph_agent_toolkit-0.1.0/tests/service/conftest.py +160 -0
  127. langgraph_agent_toolkit-0.1.0/tests/service/test_auth.py +80 -0
  128. langgraph_agent_toolkit-0.1.0/tests/service/test_factory.py +252 -0
  129. langgraph_agent_toolkit-0.1.0/tests/service/test_service.py +623 -0
  130. langgraph_agent_toolkit-0.1.0/tests/service/test_service_e2e.py +170 -0
  131. langgraph_agent_toolkit-0.1.0/tests/service/test_utils.py +44 -0
  132. langgraph_agent_toolkit-0.1.0/uv.lock +3447 -0
@@ -0,0 +1,5 @@
1
+ [run]
2
+ omit =
3
+ examples/*
4
+ tests/*
5
+ langgraph_agent_toolkit/agents/blueprints/*
@@ -0,0 +1,166 @@
1
+ # VSCode
2
+ .vscode
3
+ .DS_Store
4
+
5
+ # Byte-compiled / optimized / DLL files
6
+ __pycache__/
7
+ *.py[cod]
8
+ *$py.class
9
+ *.pyc
10
+ *.pyo
11
+ *.pyd
12
+
13
+ # C extensions
14
+ *.so
15
+
16
+ # Distribution / packaging
17
+ .Python
18
+ build/
19
+ develop-eggs/
20
+ dist/
21
+ downloads/
22
+ eggs/
23
+ .eggs/
24
+ lib/
25
+ lib64/
26
+ parts/
27
+ sdist/
28
+ var/
29
+ wheels/
30
+ share/python-wheels/
31
+ *.egg-info/
32
+ .installed.cfg
33
+ *.egg
34
+ MANIFEST
35
+
36
+ # PyInstaller
37
+ # Usually these files are written by a python script from a template
38
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
39
+ *.manifest
40
+ *.spec
41
+
42
+ # Installer logs
43
+ pip-log.txt
44
+ pip-delete-this-directory.txt
45
+
46
+ # Unit test / coverage reports
47
+ htmlcov/
48
+ .tox/
49
+ .nox/
50
+ .coverage
51
+ .coverage.*
52
+ .cache
53
+ nosetests.xml
54
+ coverage.xml
55
+ *.cover
56
+ *.py,cover
57
+ .hypothesis/
58
+ .pytest_cache/
59
+ cover/
60
+
61
+ # Translations
62
+ *.mo
63
+ *.pot
64
+
65
+ # Django stuff:
66
+ *.log
67
+ local_settings.py
68
+ db.sqlite3
69
+ db.sqlite3-journal
70
+
71
+ # Flask stuff:
72
+ instance/
73
+ .webassets-cache
74
+
75
+ # Scrapy stuff:
76
+ .scrapy
77
+
78
+ # Sphinx documentation
79
+ docs/_build/
80
+ docs/build/
81
+ docs/source/generated
82
+
83
+ # PyBuilder
84
+ .pybuilder/
85
+ target/
86
+
87
+ # Jupyter Notebook
88
+ .ipynb_checkpoints
89
+
90
+ # IPython
91
+ profile_default/
92
+ ipython_config.py
93
+
94
+ # pdm
95
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
96
+ #pdm.lock
97
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
98
+ # in version control.
99
+ # https://pdm.fming.dev/latest/usage/project/#working-with-version-control
100
+ .pdm.toml
101
+ .pdm-python
102
+ .pdm-build/
103
+
104
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
105
+ __pypackages__/
106
+
107
+ # Celery stuff
108
+ celerybeat-schedule
109
+ celerybeat.pid
110
+
111
+ # SageMath parsed files
112
+ *.sage.py
113
+
114
+ # Environments
115
+ .env
116
+ .python-version
117
+ .venv
118
+ env/
119
+ venv/
120
+ ENV/
121
+ env.bak/
122
+ venv.bak/
123
+
124
+ # Spyder project settings
125
+ .spyderproject
126
+ .spyproject
127
+
128
+ # Rope project settings
129
+ .ropeproject
130
+
131
+ # mkdocs documentation
132
+ /site
133
+
134
+ # mypy
135
+ .mypy_cache/
136
+ .dmypy.json
137
+ dmypy.json
138
+
139
+ # ruff
140
+ .ruff_cache/
141
+
142
+ # Pyre type checker
143
+ .pyre/
144
+
145
+ # pytype static type analyzer
146
+ .pytype/
147
+
148
+ # Cython debug symbols
149
+ cython_debug/
150
+
151
+ # PyCharm
152
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
153
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
154
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
155
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
156
+ .idea
157
+
158
+ # other
159
+ .git
160
+ .gitignore
161
+ env
162
+ venv
163
+ *.db
164
+
165
+ # langgraph
166
+ .langgraph_api
@@ -0,0 +1,57 @@
1
+ # Web server configuration
2
+ HOST=0.0.0.0
3
+ PORT=8080
4
+
5
+ # Application mode. If the value is "dev", it will enable uvicorn reload
6
+ ENV_MODE=development
7
+
8
+ # Authentication secret, HTTP bearer token header is required if set
9
+ AUTH_SECRET=
10
+
11
+ # Observability backend
12
+ # OBSERVABILITY_BACKEND=langfuse
13
+
14
+ # Langfuse configuration
15
+ # LANGFUSE_SECRET_KEY=
16
+ # LANGFUSE_PUBLIC_KEY=
17
+ # LANGFUSE_HOST=http://langfuse-web:3000
18
+
19
+ # Langsmith configuration
20
+ # LANGSMITH_TRACING=true
21
+ # LANGSMITH_API_KEY=
22
+ # LANGSMITH_PROJECT=default
23
+ # LANGSMITH_ENDPOINT=https://api.smith.langchain.com
24
+
25
+ # Database type.
26
+ # If the value is "postgres", then it will require Postgresql related environment variables.
27
+ # If the value is "sqlite", then you can configure optional file path via SQLITE_DB_PATH
28
+ MEMORY_BACKEND=postgres
29
+
30
+ # If DATABASE_TYPE=sqlite (Optional)
31
+ SQLITE_DB_PATH=
32
+
33
+ # If DATABASE_TYPE=postgres
34
+ POSTGRES_USER=
35
+ POSTGRES_PASSWORD=
36
+ POSTGRES_HOST=
37
+ POSTGRES_PORT=
38
+ POSTGRES_DB=agents
39
+ # Connection pool settings (optional)
40
+ POSTGRES_POOL_SIZE=10
41
+ POSTGRES_MIN_SIZE=3
42
+ POSTGRES_MAX_IDLE=5
43
+
44
+ # Agent URL: used in Streamlit app - if not set, defaults to http://{HOST}:{PORT}
45
+ # AGENT_URL=http://0.0.0.0:8080
46
+
47
+ # Use a fake model for testing
48
+ USE_FAKE_MODEL=false
49
+
50
+ # Set a default model
51
+ DEFAULT_MODEL="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
+ COMPATIBLE_MODEL=
56
+ COMPATIBLE_API_KEY=
57
+ COMPATIBLE_BASE_URL=http://litellm:4000/v1
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: ""
5
+ labels: "kind/bug, priority/p2"
6
+ assignees: ""
7
+ ---
8
+
9
+ ## Issue Description
10
+
11
+ A clear and concise description of what the bug is.
12
+
13
+ ### Expected Behavior
14
+
15
+ A clear and concise description of what you expected to happen.
16
+
17
+ ### Steps to reproduce
18
+
19
+ Steps to reproduce the behavior:
20
+
21
+ - Step 1
22
+ - Step 2
23
+
24
+ ### Reproducible Example
25
+
26
+ Provide a reproducible example.
27
+
28
+ ```python
29
+ # Your code here
30
+ ```
31
+
32
+ ### Specifications
33
+
34
+ - Platform:
35
+ - Python Version:
36
+ - Package Version:
37
+ - `package1_name==x.y.z`
38
+ - `package2_name==x.y.z`
39
+
40
+ **Dockerfile (Optional):**
41
+
42
+ ```dockerfile
43
+ # Your Dockerfile here
44
+ ```
45
+
46
+ ## Possible Solution (Optional)
47
+
48
+ A clear and concise description of the solution you've considered.
@@ -0,0 +1,19 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: ""
5
+ labels: "kind/feature"
6
+ assignees: ""
7
+ ---
8
+
9
+ **Is your feature request related to a problem? Please describe.** A clear and
10
+ concise description of what the problem is. Ex. I'm always frustrated when [...]
11
+
12
+ **Describe the solution you'd like** A clear and concise description of what you
13
+ want to happen.
14
+
15
+ **Describe alternatives you've considered** A clear and concise description of
16
+ any alternative solutions or features you've considered.
17
+
18
+ **Additional context** Add any other context or screenshots about the feature
19
+ request here.
@@ -0,0 +1,47 @@
1
+ ## Summary
2
+
3
+ <!-- Provide a concise summary "Why are the changes needed"?
4
+ Include any relevant links, such as Jira tickets, Slack discussions,
5
+ or design documents. -->
6
+
7
+ ## Changes Made
8
+
9
+ <!-- Describe the specific changes that have been made in this pull
10
+ request. Provide details on the approach taken to address the problem
11
+ and any notable implementation details. -->
12
+
13
+ ## Checklist
14
+
15
+ - [ ] I have added comments to code in hard-to-understand areas
16
+ - [ ] I have made corresponding changes to the documentation
17
+ - [ ] My changes generate no new warnings
18
+ - [ ] I have added tests that prove my fix is effective or that my feature works
19
+ - [ ] Any dependent changes have been merged and published in downstream modules
20
+
21
+ <!-- Optional Sections -->
22
+ <details>
23
+ <summary><strong>Expand for optional sections</strong></summary>
24
+
25
+ ## Screenshots
26
+
27
+ <!-- If the changes are visual, including screenshots or GIFs can
28
+ help reviewers understand them more easily. -->
29
+
30
+ ## Related issues
31
+
32
+ <!-- A link to any related issues or bugs that the pull request
33
+ addresses, connecting the code's context with the problem it
34
+ solves. -->
35
+
36
+ ## Testing instructions
37
+
38
+ <!-- Instructions on how to test the changes made in the pull
39
+ request, helping reviewers validate the code. -->
40
+
41
+ ## Special notes for your reviewer
42
+
43
+ <!-- If there are any specific instructions or considerations you
44
+ want to highlight for the reviewer, include them in this section. -->
45
+
46
+ </details>
47
+ <!-- End of Optional Sections -->
@@ -0,0 +1,38 @@
1
+ # Release Notes Template
2
+
3
+ Look through the github diff between the previous release to see what's changed.
4
+ The commit titles should give an outline of what's happened.
5
+
6
+ ### Upgrade Steps
7
+
8
+ - List out, as concretely as possible, any steps users have to take when they
9
+ upgrade beyond just dumping the dependency.
10
+ - Write pseudocode that highlights what code should change and how.
11
+ - Call out if users are recommended to upgrade because of known problems with
12
+ older releases.
13
+ - Preferably, there's nothing here.
14
+
15
+ ### Breaking Changes
16
+
17
+ - A complete list of breaking changes (preferably there are none, unless this is
18
+ a major version).
19
+
20
+ ### New Features
21
+
22
+ - Describe the new feature and when/why to use it. Add some pictures! Call out
23
+ any caveats/warnings? Is it a beta feature?
24
+
25
+ ### Bug Fixes
26
+
27
+ - Call out any existing feature/functionality that now works as intended or
28
+ expected.
29
+
30
+ ### Improvements
31
+
32
+ - Improvements/enhancements to a workflow, performance, logging, error
33
+ messaging, or user experience
34
+
35
+ ### Other Changes
36
+
37
+ - Other miscellaneous changes that don't fit into any of the above categories.
38
+ Try to leave this empty - ideally, all changes fit into the categories above
@@ -0,0 +1,13 @@
1
+ coverage:
2
+ status:
3
+ # Fail PRs that reduce total coverage by more than 2%
4
+ project:
5
+ default:
6
+ target: auto
7
+ threshold: 2%
8
+ # Treat patch coverage as informational only
9
+ patch:
10
+ default:
11
+ informational: true
12
+ comment:
13
+ hide_project_coverage: false
@@ -0,0 +1,24 @@
1
+ version: 2
2
+
3
+ updates:
4
+ - package-ecosystem: "github-actions"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+ open-pull-requests-limit: 10
9
+ labels:
10
+ - "dependencies"
11
+ - "github-actions"
12
+
13
+ - package-ecosystem: "pip"
14
+ directory: "/"
15
+ schedule:
16
+ interval: "weekly"
17
+ groups:
18
+ python-packages:
19
+ patterns:
20
+ - "*"
21
+ open-pull-requests-limit: 10
22
+ labels:
23
+ - "dependencies"
24
+ - "python"
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ VERSION=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])")
5
+ TAG="v$VERSION"
6
+
7
+ echo "Tagging current commit with: $TAG"
8
+ git tag $TAG
9
+ git push origin $TAG
@@ -0,0 +1,56 @@
1
+ name: Deploy to Azure
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ workflow_dispatch:
8
+
9
+ jobs:
10
+ test:
11
+ # Don't try to run deployment in forks and repo copies
12
+ if: github.repository == 'JoshuaC215/agent-service-toolkit'
13
+ uses: ./.github/workflows/test.yml
14
+
15
+ build:
16
+ runs-on: ubuntu-latest
17
+ needs: [test]
18
+
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+
22
+ - name: Set up Docker Buildx
23
+ uses: docker/setup-buildx-action@v3
24
+
25
+ - name: Log in to container registry
26
+ uses: docker/login-action@v3
27
+ with:
28
+ registry: https://index.docker.io/v1/
29
+ username: ${{ secrets.DOCKER_USERNAME }}
30
+ password: ${{ secrets.DOCKER_TOKEN }}
31
+
32
+ - name: Build and push agent-service container image to registry
33
+ uses: docker/build-push-action@v6
34
+ with:
35
+ context: .
36
+ push: true
37
+ tags:
38
+ index.docker.io/${{ secrets.DOCKER_USERNAME
39
+ }}/agent-service-toolkit.service:${{ github.sha }}
40
+ file: docker/service/Dockerfile
41
+
42
+ deploy:
43
+ runs-on: ubuntu-latest
44
+ needs: build
45
+
46
+ steps:
47
+ - name: Deploy to Azure Web App
48
+ id: deploy-to-webapp
49
+ uses: azure/webapps-deploy@v3
50
+ with:
51
+ app-name: "agent-service"
52
+ slot-name: "production"
53
+ publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
54
+ images:
55
+ "index.docker.io/${{ secrets.DOCKER_USERNAME
56
+ }}/agent-service-toolkit.service:${{ github.sha }}"
@@ -0,0 +1,38 @@
1
+ name: Release
2
+
3
+ on:
4
+ release:
5
+ types: [created]
6
+
7
+ jobs:
8
+ deploy:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ with:
13
+ fetch-depth: 0
14
+
15
+ - name: Install uv
16
+ uses: astral-sh/setup-uv@v5
17
+ with:
18
+ version: "0.6.12"
19
+ enable-cache: true
20
+
21
+ - name: Set up Python
22
+ uses: actions/setup-python@v5
23
+ with:
24
+ python-version-file: "pyproject.toml"
25
+
26
+ - name: Install build dependencies
27
+ run: |
28
+ uv sync --all-extras --dev
29
+ uv pip install build twine
30
+
31
+ - name: Build and publish
32
+ env:
33
+ TWINE_USERNAME: __token__
34
+ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
35
+ run: |
36
+ uv run python -m build
37
+ uv run twine check dist/*
38
+ uv run twine upload dist/*
@@ -0,0 +1,147 @@
1
+ name: Build and test
2
+
3
+ on:
4
+ push:
5
+ branches: ["main"]
6
+ pull_request:
7
+ branches: ["main"]
8
+ workflow_call:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ test-python:
15
+ runs-on: ubuntu-latest
16
+ strategy:
17
+ matrix:
18
+ python-version: ["3.11", "3.12", "3.13"]
19
+
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - name: Set up Python ${{ matrix.python-version }}
23
+ uses: actions/setup-python@v5
24
+ with:
25
+ python-version: ${{ matrix.python-version }}
26
+ - name: Install uv
27
+ uses: astral-sh/setup-uv@v5
28
+ with:
29
+ version: "0.6.12"
30
+ - name: Install dependencies with uv
31
+ run: |
32
+ uv sync --all-extras --frozen
33
+ env:
34
+ UV_SYSTEM_PYTHON: 1
35
+ - name: Lint and format with ruff
36
+ run: |
37
+ uv run ruff --config pyproject.toml format --check
38
+ uv run ruff --config pyproject.toml check --output-format github
39
+
40
+ - name: Test with pytest
41
+ run: |
42
+ uv run pytest --cov=langgraph_agent_toolkit/ --cov-report=xml
43
+ env:
44
+ COMPATIBLE_MODEL: ${{ secrets.COMPATIBLE_MODEL }}
45
+ COMPATIBLE_API_KEY: ${{ secrets.COMPATIBLE_API_KEY }}
46
+ COMPATIBLE_BASE_URL: ${{ secrets.COMPATIBLE_BASE_URL }}
47
+
48
+ - name: Upload coverage reports to Codecov
49
+ uses: codecov/codecov-action@v5
50
+ with:
51
+ token: ${{ secrets.CODECOV_TOKEN }}
52
+ fail_ci_if_error: false
53
+
54
+ test-docker:
55
+ runs-on: ubuntu-latest
56
+
57
+ services:
58
+ dind:
59
+ image: docker:dind
60
+ ports:
61
+ - 2375:2375
62
+ options: >-
63
+ --privileged --health-cmd "docker info" --health-interval 10s
64
+ --health-timeout 5s --health-retries 5
65
+
66
+ steps:
67
+ - uses: actions/checkout@v4
68
+
69
+ - name: Set up Docker Buildx
70
+ uses: docker/setup-buildx-action@v3
71
+ with:
72
+ driver-opts: network=host
73
+
74
+ - name: Build service image
75
+ uses: docker/build-push-action@v6
76
+ with:
77
+ context: .
78
+ push: false
79
+ load: true
80
+ tags: agent-service-toolkit.service:${{ github.sha }}
81
+ file: docker/service/Dockerfile
82
+
83
+ - name: Build app image
84
+ uses: docker/build-push-action@v6
85
+ with:
86
+ context: .
87
+ push: false
88
+ load: true
89
+ tags: agent-service-toolkit.app:${{ github.sha }}
90
+ file: docker/app/Dockerfile
91
+
92
+ - name: Start service container
93
+ run:
94
+ docker run -d --name service-container --network host -e
95
+ USE_FAKE_MODEL=true -e PORT=80 agent-service-toolkit.service:${{
96
+ github.sha }}
97
+
98
+ - name: Confirm service starts correctly
99
+ run: |
100
+ timeout 30 bash -c '
101
+ while ! curl -s http://0.0.0.0/health; do
102
+ echo "Waiting for service to be ready..."
103
+ docker logs service-container
104
+ sleep 2
105
+ done
106
+ '
107
+
108
+ - name: Run app container
109
+ run:
110
+ docker run -d --name app-container --network host -e
111
+ AGENT_URL=http://0.0.0.0 agent-service-toolkit.app:${{ github.sha }}
112
+
113
+ - name: Confirm app starts correctly
114
+ run: |
115
+ timeout 30 bash -c '
116
+ while ! curl -s http://localhost:8501/healthz; do
117
+ echo "Waiting for app to be ready..."
118
+ docker logs app-container
119
+ sleep 2
120
+ done
121
+ '
122
+
123
+ - name: Set up Python
124
+ uses: actions/setup-python@v5
125
+ with:
126
+ python-version-file: "pyproject.toml"
127
+ - name: Install uv
128
+ uses: astral-sh/setup-uv@v5
129
+ with:
130
+ version: "0.6.12"
131
+ - name: Install ONLY CLIENT dependencies with uv
132
+ run: |
133
+ uv sync --frozen --only-group client --only-group dev
134
+ env:
135
+ UV_SYSTEM_PYTHON: 1
136
+ - name: Run integration tests
137
+ run: |
138
+ uv run pytest tests/integration -v --run-docker
139
+ env:
140
+ AGENT_URL: http://0.0.0.0
141
+ USE_FAKE_MODEL: true
142
+
143
+ - name: Clean up containers
144
+ if: always()
145
+ run: |
146
+ docker stop service-container app-container || true
147
+ docker rm service-container app-container || true