Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 106 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -111,3 +111,109 @@ jobs:

- name: Run tests
run: make -C packages/ai-providers/server-ai-langchain test

server-ai-openai-linux:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]

steps:
- uses: actions/checkout@v4

- uses: ./.github/actions/ci
with:
workspace_path: packages/ai-providers/server-ai-openai
python_version: ${{ matrix.python-version }}

- uses: ./.github/actions/build
with:
workspace_path: packages/ai-providers/server-ai-openai

server-ai-openai-windows:
runs-on: windows-latest
defaults:
run:
shell: powershell

strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]

steps:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install poetry
uses: abatilo/actions-poetry@7b6d33e44b4f08d7021a1dee3c044e9c253d6439

- name: Configure poetry for local virtualenvs
run: poetry config virtualenvs.in-project true

- name: Install server-ai dependency first
working-directory: packages/sdk/server-ai
run: poetry install

- name: Install requirements
working-directory: packages/ai-providers/server-ai-openai
run: poetry install

- name: Run tests
run: make -C packages/ai-providers/server-ai-openai test

server-ai-vercel-linux:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]

steps:
- uses: actions/checkout@v4

- uses: ./.github/actions/ci
with:
workspace_path: packages/ai-providers/server-ai-vercel
python_version: ${{ matrix.python-version }}

- uses: ./.github/actions/build
with:
workspace_path: packages/ai-providers/server-ai-vercel

server-ai-vercel-windows:
runs-on: windows-latest
defaults:
run:
shell: powershell

strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]

steps:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install poetry
uses: abatilo/actions-poetry@7b6d33e44b4f08d7021a1dee3c044e9c253d6439

- name: Configure poetry for local virtualenvs
run: poetry config virtualenvs.in-project true

- name: Install server-ai dependency first
working-directory: packages/sdk/server-ai
run: poetry install

- name: Install requirements
working-directory: packages/ai-providers/server-ai-vercel
run: poetry install

- name: Run tests
run: make -C packages/ai-providers/server-ai-vercel test
114 changes: 114 additions & 0 deletions .github/workflows/release-please.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ on:
options:
- packages/sdk/server-ai
- packages/ai-providers/server-ai-langchain
- packages/ai-providers/server-ai-openai
- packages/ai-providers/server-ai-vercel
dry_run:
description: 'Is this a dry run. If so no package will be published.'
type: boolean
Expand All @@ -43,6 +45,10 @@ jobs:
package-server-ai-tag-name: ${{ steps.release.outputs['packages/sdk/server-ai--tag_name'] }}
package-server-ai-langchain-released: ${{ steps.release.outputs['packages/ai-providers/server-ai-langchain--release_created'] }}
package-server-ai-langchain-tag-name: ${{ steps.release.outputs['packages/ai-providers/server-ai-langchain--tag_name'] }}
package-server-ai-openai-released: ${{ steps.release.outputs['packages/ai-providers/server-ai-openai--release_created'] }}
package-server-ai-openai-tag-name: ${{ steps.release.outputs['packages/ai-providers/server-ai-openai--tag_name'] }}
package-server-ai-vercel-released: ${{ steps.release.outputs['packages/ai-providers/server-ai-vercel--release_created'] }}
package-server-ai-vercel-tag-name: ${{ steps.release.outputs['packages/ai-providers/server-ai-vercel--tag_name'] }}
steps:
- uses: googleapis/release-please-action@v4
id: release
Expand Down Expand Up @@ -193,3 +199,111 @@ jobs:
base64-subjects: "${{ needs.release-server-ai-langchain.outputs.package-hashes }}"
upload-assets: true
upload-tag-name: ${{ needs.release-please.outputs.package-server-ai-langchain-tag-name }}

release-server-ai-openai:
runs-on: ubuntu-latest
needs: ['release-please']
permissions:
id-token: write # Needed for OIDC to get release secrets from AWS.
if: ${{ needs.release-please.outputs.package-server-ai-openai-released == 'true' }}
outputs:
package-hashes: ${{ steps.build.outputs.package-hashes }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install poetry
uses: abatilo/actions-poetry@7b6d33e44b4f08d7021a1dee3c044e9c253d6439

- uses: ./.github/actions/ci
with:
workspace_path: packages/ai-providers/server-ai-openai

- uses: ./.github/actions/build
id: build
with:
workspace_path: packages/ai-providers/server-ai-openai

- uses: launchdarkly/gh-actions/actions/release-secrets@release-secrets-v1.2.0
name: 'Get PyPI token'
with:
aws_assume_role: ${{ vars.AWS_ROLE_ARN }}
ssm_parameter_pairs: '/production/common/releasing/pypi/token = PYPI_AUTH_TOKEN'

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
with:
password: ${{ env.PYPI_AUTH_TOKEN }}
packages-dir: packages/ai-providers/server-ai-openai/dist/

release-server-ai-openai-provenance:
needs: ['release-please', 'release-server-ai-openai']
if: ${{ needs.release-please.outputs.package-server-ai-openai-released == 'true' }}
permissions:
actions: read # Needed for detecting the GitHub Actions environment.
id-token: write # Needed for provenance signing.
contents: write # Needed for uploading assets to the release.
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.0.0
with:
base64-subjects: "${{ needs.release-server-ai-openai.outputs.package-hashes }}"
upload-assets: true
upload-tag-name: ${{ needs.release-please.outputs.package-server-ai-openai-tag-name }}

release-server-ai-vercel:
runs-on: ubuntu-latest
needs: ['release-please']
permissions:
id-token: write # Needed for OIDC to get release secrets from AWS.
if: ${{ needs.release-please.outputs.package-server-ai-vercel-released == 'true' }}
outputs:
package-hashes: ${{ steps.build.outputs.package-hashes }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Install poetry
uses: abatilo/actions-poetry@7b6d33e44b4f08d7021a1dee3c044e9c253d6439

- uses: ./.github/actions/ci
with:
workspace_path: packages/ai-providers/server-ai-vercel

- uses: ./.github/actions/build
id: build
with:
workspace_path: packages/ai-providers/server-ai-vercel

- uses: launchdarkly/gh-actions/actions/release-secrets@release-secrets-v1.2.0
name: 'Get PyPI token'
with:
aws_assume_role: ${{ vars.AWS_ROLE_ARN }}
ssm_parameter_pairs: '/production/common/releasing/pypi/token = PYPI_AUTH_TOKEN'

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
with:
password: ${{ env.PYPI_AUTH_TOKEN }}
packages-dir: packages/ai-providers/server-ai-vercel/dist/

release-server-ai-vercel-provenance:
needs: ['release-please', 'release-server-ai-vercel']
if: ${{ needs.release-please.outputs.package-server-ai-vercel-released == 'true' }}
permissions:
actions: read # Needed for detecting the GitHub Actions environment.
id-token: write # Needed for provenance signing.
contents: write # Needed for uploading assets to the release.
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.0.0
with:
base64-subjects: "${{ needs.release-server-ai-vercel.outputs.package-hashes }}"
upload-assets: true
upload-tag-name: ${{ needs.release-please.outputs.package-server-ai-vercel-tag-name }}
4 changes: 3 additions & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
{
"packages/sdk/server-ai": "0.11.0",
"packages/ai-providers/server-ai-langchain": "0.2.0"
"packages/ai-providers/server-ai-langchain": "0.2.0",
"packages/ai-providers/server-ai-openai": "0.1.0",
"packages/ai-providers/server-ai-vercel": "0.1.0"
}
42 changes: 42 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ BUILDDIR = $(SOURCEDIR)/build
# Package paths
SERVER_AI_PKG = packages/sdk/server-ai
LANGCHAIN_PKG = packages/ai-providers/server-ai-langchain
OPENAI_PKG = packages/ai-providers/server-ai-openai
VERCEL_PKG = packages/ai-providers/server-ai-vercel

.PHONY: help
help: #! Show this help message
Expand All @@ -25,6 +27,8 @@ help: #! Show this help message
install: #! Install all packages
$(MAKE) install-server-ai
$(MAKE) install-langchain
$(MAKE) install-openai
$(MAKE) install-vercel

.PHONY: install-server-ai
install-server-ai: #! Install server-ai package
Expand All @@ -34,6 +38,14 @@ install-server-ai: #! Install server-ai package
install-langchain: #! Install langchain provider package
$(MAKE) -C $(LANGCHAIN_PKG) install

.PHONY: install-openai
install-openai: #! Install openai provider package
$(MAKE) -C $(OPENAI_PKG) install

.PHONY: install-vercel
install-vercel: #! Install vercel provider package
$(MAKE) -C $(VERCEL_PKG) install

#
# Quality control checks
#
Expand All @@ -42,6 +54,8 @@ install-langchain: #! Install langchain provider package
test: #! Run unit tests for all packages
$(MAKE) test-server-ai
$(MAKE) test-langchain
$(MAKE) test-openai
$(MAKE) test-vercel

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

.PHONY: test-openai
test-openai: #! Run unit tests for openai provider package
$(MAKE) -C $(OPENAI_PKG) test

.PHONY: test-vercel
test-vercel: #! Run unit tests for vercel provider package
$(MAKE) -C $(VERCEL_PKG) test

.PHONY: lint
lint: #! Run type analysis and linting checks for all packages
$(MAKE) lint-server-ai
$(MAKE) lint-langchain
$(MAKE) lint-openai
$(MAKE) lint-vercel

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

.PHONY: lint-openai
lint-openai: #! Run type analysis and linting checks for openai provider package
$(MAKE) -C $(OPENAI_PKG) lint

.PHONY: lint-vercel
lint-vercel: #! Run type analysis and linting checks for vercel provider package
$(MAKE) -C $(VERCEL_PKG) lint

#
# Build targets
#
Expand All @@ -72,6 +104,8 @@ lint-langchain: #! Run type analysis and linting checks for langchain provider p
build: #! Build all packages
$(MAKE) build-server-ai
$(MAKE) build-langchain
$(MAKE) build-openai
$(MAKE) build-vercel

.PHONY: build-server-ai
build-server-ai: #! Build server-ai package
Expand All @@ -81,6 +115,14 @@ build-server-ai: #! Build server-ai package
build-langchain: #! Build langchain provider package
$(MAKE) -C $(LANGCHAIN_PKG) build

.PHONY: build-openai
build-openai: #! Build openai provider package
$(MAKE) -C $(OPENAI_PKG) build

.PHONY: build-vercel
build-vercel: #! Build vercel provider package
$(MAKE) -C $(VERCEL_PKG) build

#
# Documentation generation
#
Expand Down
30 changes: 30 additions & 0 deletions packages/ai-providers/server-ai-openai/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
PYTEST_FLAGS=-W error::SyntaxWarning

.PHONY: help
help: #! Show this help message
@echo 'Usage: make [target] ... '
@echo ''
@echo 'Targets:'
@grep -h -F '#!' $(MAKEFILE_LIST) | grep -v grep | sed 's/:.*#!/:/' | column -t -s":"

.PHONY: install
install: #! Install package dependencies
poetry install

.PHONY: test
test: #! Run unit tests
test: install
poetry run pytest $(PYTEST_FLAGS)

.PHONY: lint
lint: #! Run type analysis and linting checks
lint: install
poetry run mypy src/ldai_openai
poetry run isort --check --atomic src/ldai_openai
poetry run pycodestyle src/ldai_openai

.PHONY: build
build: #! Build distribution files
build: install
poetry build

Loading