Skip to content

Commit 01c87a5

Browse files
committed
feat: Add OpenAI and Vercel provider packages
1 parent bfee6c9 commit 01c87a5

File tree

22 files changed

+2325
-1
lines changed

22 files changed

+2325
-1
lines changed

.github/workflows/ci.yml

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,109 @@ jobs:
111111

112112
- name: Run tests
113113
run: make -C packages/ai-providers/server-ai-langchain test
114+
115+
server-ai-openai-linux:
116+
runs-on: ubuntu-latest
117+
strategy:
118+
matrix:
119+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
120+
121+
steps:
122+
- uses: actions/checkout@v4
123+
124+
- uses: ./.github/actions/ci
125+
with:
126+
workspace_path: packages/ai-providers/server-ai-openai
127+
python_version: ${{ matrix.python-version }}
128+
129+
- uses: ./.github/actions/build
130+
with:
131+
workspace_path: packages/ai-providers/server-ai-openai
132+
133+
server-ai-openai-windows:
134+
runs-on: windows-latest
135+
defaults:
136+
run:
137+
shell: powershell
138+
139+
strategy:
140+
matrix:
141+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
142+
143+
steps:
144+
- uses: actions/checkout@v4
145+
146+
- name: Set up Python ${{ matrix.python-version }}
147+
uses: actions/setup-python@v5
148+
with:
149+
python-version: ${{ matrix.python-version }}
150+
151+
- name: Install poetry
152+
uses: abatilo/actions-poetry@7b6d33e44b4f08d7021a1dee3c044e9c253d6439
153+
154+
- name: Configure poetry for local virtualenvs
155+
run: poetry config virtualenvs.in-project true
156+
157+
- name: Install server-ai dependency first
158+
working-directory: packages/sdk/server-ai
159+
run: poetry install
160+
161+
- name: Install requirements
162+
working-directory: packages/ai-providers/server-ai-openai
163+
run: poetry install
164+
165+
- name: Run tests
166+
run: make -C packages/ai-providers/server-ai-openai test
167+
168+
server-ai-vercel-linux:
169+
runs-on: ubuntu-latest
170+
strategy:
171+
matrix:
172+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
173+
174+
steps:
175+
- uses: actions/checkout@v4
176+
177+
- uses: ./.github/actions/ci
178+
with:
179+
workspace_path: packages/ai-providers/server-ai-vercel
180+
python_version: ${{ matrix.python-version }}
181+
182+
- uses: ./.github/actions/build
183+
with:
184+
workspace_path: packages/ai-providers/server-ai-vercel
185+
186+
server-ai-vercel-windows:
187+
runs-on: windows-latest
188+
defaults:
189+
run:
190+
shell: powershell
191+
192+
strategy:
193+
matrix:
194+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
195+
196+
steps:
197+
- uses: actions/checkout@v4
198+
199+
- name: Set up Python ${{ matrix.python-version }}
200+
uses: actions/setup-python@v5
201+
with:
202+
python-version: ${{ matrix.python-version }}
203+
204+
- name: Install poetry
205+
uses: abatilo/actions-poetry@7b6d33e44b4f08d7021a1dee3c044e9c253d6439
206+
207+
- name: Configure poetry for local virtualenvs
208+
run: poetry config virtualenvs.in-project true
209+
210+
- name: Install server-ai dependency first
211+
working-directory: packages/sdk/server-ai
212+
run: poetry install
213+
214+
- name: Install requirements
215+
working-directory: packages/ai-providers/server-ai-vercel
216+
run: poetry install
217+
218+
- name: Run tests
219+
run: make -C packages/ai-providers/server-ai-vercel test

.github/workflows/release-please.yml

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ on:
2626
options:
2727
- packages/sdk/server-ai
2828
- packages/ai-providers/server-ai-langchain
29+
- packages/ai-providers/server-ai-openai
30+
- packages/ai-providers/server-ai-vercel
2931
dry_run:
3032
description: 'Is this a dry run. If so no package will be published.'
3133
type: boolean
@@ -43,6 +45,10 @@ jobs:
4345
package-server-ai-tag-name: ${{ steps.release.outputs['packages/sdk/server-ai--tag_name'] }}
4446
package-server-ai-langchain-released: ${{ steps.release.outputs['packages/ai-providers/server-ai-langchain--release_created'] }}
4547
package-server-ai-langchain-tag-name: ${{ steps.release.outputs['packages/ai-providers/server-ai-langchain--tag_name'] }}
48+
package-server-ai-openai-released: ${{ steps.release.outputs['packages/ai-providers/server-ai-openai--release_created'] }}
49+
package-server-ai-openai-tag-name: ${{ steps.release.outputs['packages/ai-providers/server-ai-openai--tag_name'] }}
50+
package-server-ai-vercel-released: ${{ steps.release.outputs['packages/ai-providers/server-ai-vercel--release_created'] }}
51+
package-server-ai-vercel-tag-name: ${{ steps.release.outputs['packages/ai-providers/server-ai-vercel--tag_name'] }}
4652
steps:
4753
- uses: googleapis/release-please-action@v4
4854
id: release
@@ -193,3 +199,111 @@ jobs:
193199
base64-subjects: "${{ needs.release-server-ai-langchain.outputs.package-hashes }}"
194200
upload-assets: true
195201
upload-tag-name: ${{ needs.release-please.outputs.package-server-ai-langchain-tag-name }}
202+
203+
release-server-ai-openai:
204+
runs-on: ubuntu-latest
205+
needs: ['release-please']
206+
permissions:
207+
id-token: write # Needed for OIDC to get release secrets from AWS.
208+
if: ${{ needs.release-please.outputs.package-server-ai-openai-released == 'true' }}
209+
outputs:
210+
package-hashes: ${{ steps.build.outputs.package-hashes }}
211+
steps:
212+
- uses: actions/checkout@v4
213+
with:
214+
fetch-depth: 0
215+
216+
- uses: actions/setup-python@v5
217+
with:
218+
python-version: '3.11'
219+
220+
- name: Install poetry
221+
uses: abatilo/actions-poetry@7b6d33e44b4f08d7021a1dee3c044e9c253d6439
222+
223+
- uses: ./.github/actions/ci
224+
with:
225+
workspace_path: packages/ai-providers/server-ai-openai
226+
227+
- uses: ./.github/actions/build
228+
id: build
229+
with:
230+
workspace_path: packages/ai-providers/server-ai-openai
231+
232+
- uses: launchdarkly/gh-actions/actions/[email protected]
233+
name: 'Get PyPI token'
234+
with:
235+
aws_assume_role: ${{ vars.AWS_ROLE_ARN }}
236+
ssm_parameter_pairs: '/production/common/releasing/pypi/token = PYPI_AUTH_TOKEN'
237+
238+
- name: Publish to PyPI
239+
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
240+
with:
241+
password: ${{ env.PYPI_AUTH_TOKEN }}
242+
packages-dir: packages/ai-providers/server-ai-openai/dist/
243+
244+
release-server-ai-openai-provenance:
245+
needs: ['release-please', 'release-server-ai-openai']
246+
if: ${{ needs.release-please.outputs.package-server-ai-openai-released == 'true' }}
247+
permissions:
248+
actions: read # Needed for detecting the GitHub Actions environment.
249+
id-token: write # Needed for provenance signing.
250+
contents: write # Needed for uploading assets to the release.
251+
uses: slsa-framework/slsa-github-generator/.github/workflows/[email protected]
252+
with:
253+
base64-subjects: "${{ needs.release-server-ai-openai.outputs.package-hashes }}"
254+
upload-assets: true
255+
upload-tag-name: ${{ needs.release-please.outputs.package-server-ai-openai-tag-name }}
256+
257+
release-server-ai-vercel:
258+
runs-on: ubuntu-latest
259+
needs: ['release-please']
260+
permissions:
261+
id-token: write # Needed for OIDC to get release secrets from AWS.
262+
if: ${{ needs.release-please.outputs.package-server-ai-vercel-released == 'true' }}
263+
outputs:
264+
package-hashes: ${{ steps.build.outputs.package-hashes }}
265+
steps:
266+
- uses: actions/checkout@v4
267+
with:
268+
fetch-depth: 0
269+
270+
- uses: actions/setup-python@v5
271+
with:
272+
python-version: '3.11'
273+
274+
- name: Install poetry
275+
uses: abatilo/actions-poetry@7b6d33e44b4f08d7021a1dee3c044e9c253d6439
276+
277+
- uses: ./.github/actions/ci
278+
with:
279+
workspace_path: packages/ai-providers/server-ai-vercel
280+
281+
- uses: ./.github/actions/build
282+
id: build
283+
with:
284+
workspace_path: packages/ai-providers/server-ai-vercel
285+
286+
- uses: launchdarkly/gh-actions/actions/[email protected]
287+
name: 'Get PyPI token'
288+
with:
289+
aws_assume_role: ${{ vars.AWS_ROLE_ARN }}
290+
ssm_parameter_pairs: '/production/common/releasing/pypi/token = PYPI_AUTH_TOKEN'
291+
292+
- name: Publish to PyPI
293+
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
294+
with:
295+
password: ${{ env.PYPI_AUTH_TOKEN }}
296+
packages-dir: packages/ai-providers/server-ai-vercel/dist/
297+
298+
release-server-ai-vercel-provenance:
299+
needs: ['release-please', 'release-server-ai-vercel']
300+
if: ${{ needs.release-please.outputs.package-server-ai-vercel-released == 'true' }}
301+
permissions:
302+
actions: read # Needed for detecting the GitHub Actions environment.
303+
id-token: write # Needed for provenance signing.
304+
contents: write # Needed for uploading assets to the release.
305+
uses: slsa-framework/slsa-github-generator/.github/workflows/[email protected]
306+
with:
307+
base64-subjects: "${{ needs.release-server-ai-vercel.outputs.package-hashes }}"
308+
upload-assets: true
309+
upload-tag-name: ${{ needs.release-please.outputs.package-server-ai-vercel-tag-name }}

.release-please-manifest.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
{
22
"packages/sdk/server-ai": "0.11.0",
3-
"packages/ai-providers/server-ai-langchain": "0.2.0"
3+
"packages/ai-providers/server-ai-langchain": "0.2.0",
4+
"packages/ai-providers/server-ai-openai": "0.1.0",
5+
"packages/ai-providers/server-ai-vercel": "0.1.0"
46
}

Makefile

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ BUILDDIR = $(SOURCEDIR)/build
99
# Package paths
1010
SERVER_AI_PKG = packages/sdk/server-ai
1111
LANGCHAIN_PKG = packages/ai-providers/server-ai-langchain
12+
OPENAI_PKG = packages/ai-providers/server-ai-openai
13+
VERCEL_PKG = packages/ai-providers/server-ai-vercel
1214

1315
.PHONY: help
1416
help: #! Show this help message
@@ -25,6 +27,8 @@ help: #! Show this help message
2527
install: #! Install all packages
2628
$(MAKE) install-server-ai
2729
$(MAKE) install-langchain
30+
$(MAKE) install-openai
31+
$(MAKE) install-vercel
2832

2933
.PHONY: install-server-ai
3034
install-server-ai: #! Install server-ai package
@@ -34,6 +38,14 @@ install-server-ai: #! Install server-ai package
3438
install-langchain: #! Install langchain provider package
3539
$(MAKE) -C $(LANGCHAIN_PKG) install
3640

41+
.PHONY: install-openai
42+
install-openai: #! Install openai provider package
43+
$(MAKE) -C $(OPENAI_PKG) install
44+
45+
.PHONY: install-vercel
46+
install-vercel: #! Install vercel provider package
47+
$(MAKE) -C $(VERCEL_PKG) install
48+
3749
#
3850
# Quality control checks
3951
#
@@ -42,6 +54,8 @@ install-langchain: #! Install langchain provider package
4254
test: #! Run unit tests for all packages
4355
$(MAKE) test-server-ai
4456
$(MAKE) test-langchain
57+
$(MAKE) test-openai
58+
$(MAKE) test-vercel
4559

4660
.PHONY: test-server-ai
4761
test-server-ai: #! Run unit tests for server-ai package
@@ -51,10 +65,20 @@ test-server-ai: #! Run unit tests for server-ai package
5165
test-langchain: #! Run unit tests for langchain provider package
5266
$(MAKE) -C $(LANGCHAIN_PKG) test
5367

68+
.PHONY: test-openai
69+
test-openai: #! Run unit tests for openai provider package
70+
$(MAKE) -C $(OPENAI_PKG) test
71+
72+
.PHONY: test-vercel
73+
test-vercel: #! Run unit tests for vercel provider package
74+
$(MAKE) -C $(VERCEL_PKG) test
75+
5476
.PHONY: lint
5577
lint: #! Run type analysis and linting checks for all packages
5678
$(MAKE) lint-server-ai
5779
$(MAKE) lint-langchain
80+
$(MAKE) lint-openai
81+
$(MAKE) lint-vercel
5882

5983
.PHONY: lint-server-ai
6084
lint-server-ai: #! Run type analysis and linting checks for server-ai package
@@ -64,6 +88,14 @@ lint-server-ai: #! Run type analysis and linting checks for server-ai package
6488
lint-langchain: #! Run type analysis and linting checks for langchain provider package
6589
$(MAKE) -C $(LANGCHAIN_PKG) lint
6690

91+
.PHONY: lint-openai
92+
lint-openai: #! Run type analysis and linting checks for openai provider package
93+
$(MAKE) -C $(OPENAI_PKG) lint
94+
95+
.PHONY: lint-vercel
96+
lint-vercel: #! Run type analysis and linting checks for vercel provider package
97+
$(MAKE) -C $(VERCEL_PKG) lint
98+
6799
#
68100
# Build targets
69101
#
@@ -72,6 +104,8 @@ lint-langchain: #! Run type analysis and linting checks for langchain provider p
72104
build: #! Build all packages
73105
$(MAKE) build-server-ai
74106
$(MAKE) build-langchain
107+
$(MAKE) build-openai
108+
$(MAKE) build-vercel
75109

76110
.PHONY: build-server-ai
77111
build-server-ai: #! Build server-ai package
@@ -81,6 +115,14 @@ build-server-ai: #! Build server-ai package
81115
build-langchain: #! Build langchain provider package
82116
$(MAKE) -C $(LANGCHAIN_PKG) build
83117

118+
.PHONY: build-openai
119+
build-openai: #! Build openai provider package
120+
$(MAKE) -C $(OPENAI_PKG) build
121+
122+
.PHONY: build-vercel
123+
build-vercel: #! Build vercel provider package
124+
$(MAKE) -C $(VERCEL_PKG) build
125+
84126
#
85127
# Documentation generation
86128
#
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
PYTEST_FLAGS=-W error::SyntaxWarning
2+
3+
.PHONY: help
4+
help: #! Show this help message
5+
@echo 'Usage: make [target] ... '
6+
@echo ''
7+
@echo 'Targets:'
8+
@grep -h -F '#!' $(MAKEFILE_LIST) | grep -v grep | sed 's/:.*#!/:/' | column -t -s":"
9+
10+
.PHONY: install
11+
install: #! Install package dependencies
12+
poetry install
13+
14+
.PHONY: test
15+
test: #! Run unit tests
16+
test: install
17+
poetry run pytest $(PYTEST_FLAGS)
18+
19+
.PHONY: lint
20+
lint: #! Run type analysis and linting checks
21+
lint: install
22+
poetry run mypy src/ldai_openai
23+
poetry run isort --check --atomic src/ldai_openai
24+
poetry run pycodestyle src/ldai_openai
25+
26+
.PHONY: build
27+
build: #! Build distribution files
28+
build: install
29+
poetry build
30+

0 commit comments

Comments
 (0)