Contributing¶
Three kinds of contribution land regularly.
1. Fix a wrong cell in the matrix¶
Run aioc probe against the relevant server, attach the JSON report
to your PR, and update the column in
docs/compatibility-matrix.md. Be sure
to note the server version in the PR.
2. Add a new endpoint to the catalog¶
Edit
src/am_i_openai_compatible/endpoints.py.
Each entry is a frozen dataclass with:
path— the URL path. Use{model}if it should be sniffed from/v1/models.method—GET/POST/DELETE.group— a grouping for reporting. Reuse an existing one if you can; new groups should appear in the docs.kind—core,ext, orours. See Spec — Overview.body— the minimal valid request body for Phase B, orNonefor GET endpoints.expects— the shape validator: a tuple of dotted keys that must be present in the JSON response, or one of the sentinel strings ("audio","image","sse").notes— one-liner that ends up in the docs.
Then update the appropriate spec page under docs/spec/.
3. Document a deviation¶
If you find an OSS server doing something the catalog doesn't
mention, add it to the relevant
implementations page or
docs/spec/extensions.md. Be specific about:
- the server and version,
- the request that triggers it,
- what the spec says (or doesn't),
- what the server actually does.
Coding standards¶
- Python 3.10+. Type hints encouraged but not religious.
rufffor lint; CI runsruff checkandruff format --check.- Tests under
tests/. The prober itself is tested withrespx— no live network calls in CI.
Building docs locally¶
The site lives under docs/. The build command CI runs is mkdocs
build --strict — broken links fail the build.
Releasing¶
Versioning follows semver. Tag v0.x.y on main; the docs
workflow pushes a fresh build to GitHub Pages. There is no PyPI
release right now — consumers install via
pip install git+https://github.com/heiervang-technologies/am-i-openai-compatible.git@v0.x.y,
and the GitHub Action's aioc-version input resolves the same way.
Release checklist¶
The version drift surfaced by the v0.3.1 tag (the bump was missed
on pyproject.toml, so installs reported the old number) is the
reason this checklist exists. Follow it for every tag.
git checkout main && git pull origin main— start from a clean tip.- Decide the version bump. Pre-1.0 the convention is: additive
features → minor (
0.x.0); bug fixes only → patch (0.x.y). The HT-compat-1.0 → 1.1 spec bump in PR #13 was the kind of "this changes how clients write code" change that warrants a minor. - Bump
pyproject.toml'sversion = "..."line. (Since__init__.pyreads__version__fromimportlib.metadata, you only have to update this one file.) - In
CHANGELOG.md, move the[Unreleased]content to a new[X.Y.Z] — YYYY-MM-DDsection. Leave[Unreleased]in place as an empty header for the next round. - Commit:
git commit -am "release: vX.Y.Z". - Tag:
git tag vX.Y.Z. - Push both at once:
git push origin main vX.Y.Z. - Verify
aioc --versionreports the new number from a fresh install:pip install git+https://github.com/heiervang-technologies/am-i-openai-compatible.git@vX.Y.Z(in a throwaway venv). - Bump the
@vX.Y.Zinstall-pin examples to the new tag inREADME.md,docs/getting-started.md, andaction.yml'saioc-versioninput description. The pin examples are user-facing docs; leaving them at the previous tag means new users miss the bug fixes in the just-cut release. (For patch releases, this is optional but recommended; for minor releases, do it.)
The tests/test_metadata.py invariants will catch the most common
drift — __version__ disagreeing with pyproject.toml or with
importlib.metadata — but they can't catch a release that was
tagged without the bump. That's what step 8 is for.