feat: Gumloop fork delta vs v0.2.0 (py3.10 bindings wheel, custom_classifier, publish CI) - #1
Merged
Merged
Conversation
…he lib extra - pyo3 abi3-py312 -> abi3-py310: one cp310-abi3 wheel serves CPython 3.10+ - dist renamed nemo-switchyard -> gumloop-nemo-switchyard (mirrors gumloop-celery) - upstream core deps (openai/anthropic/httpx/pydantic) move to the new 'lib' extra so embedding hosts don't inherit provider-SDK floors; the bindings surface (switchyard_rust.libsy) needs none of them, and its import chain defers the translation module that pulls openai types - the supported 3.10 surface is the bindings; the full package (lib extra) keeps upstream's 3.12 expectations Co-authored-by: Cursor <cursoragent@cursor.com>
Binds LlmClassifierConfig::Custom (CustomClassifierConfig + TargetSelector) as custom_classifier(judge_target, targets, *, default_target, config): schema-driven routing across two or more labeled targets; unusable verdicts and judge failures fall open to default_target. Filed upstream as NVIDIA-NeMo#365. Co-authored-by: Cursor <cursoragent@cursor.com>
maturin build in the manylinux_2_28 container. Pull requests build the wheel and run the binding tests on Python 3.10; gumloop-v* tags and manual dispatches additionally publish, authenticated keylessly via WIF (vars.GCP_WIF_PROVIDER impersonating agenthub-github-ci-cd). Republished tags skip wheels already in the simple index. Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Exactly our delta against upstream v0.2.0 (the
upstream-v0.2.0base branch is the untouched release tag — a PR againstmainmixes in upstream's own release-branch commits). Trimmed to what our functionality needs: 7 files, 3 commits.Commit 1 — build target + rename + packaging
abi3-py312->abi3-py310: onecp310-abi3wheel serves CPython 3.10+ (backend runs 3.10)gumloop-nemo-switchyard, version0.2.0+gumloop.0.1.1(mirrors gumloop-celery)openai/anthropic/httpx/pydantic) move to a newlibextra: the bindings surfaceswitchyard_rust.libsy(all the backend imports) needs none of them, and upstream's floors (anthropic>=0.99,pydantic>=2.13) conflict with backend pins.server/cli/allpulllibtransitivelyswitchyard_rust/__init__.py: the two translation exports resolve lazily (they import openai types), keeping the bindings importable with zero dependencies — verified on a bare 3.10 venvlibextra) keeps upstream's 3.12 expectations. We deliberately did not patch upstream's 3.12-isms inswitchyard/lib/**or its version-lookup call sites — none of that is on our import path (details in Proposal: lower the wheel's abi3 floor to cp310 NVIDIA-NeMo/Switchyard#366, where the full py3.10 floor is proposed upstream)Commit 2 — libsy custom N-target classifier binding
custom_classifier(judge_target, targets, *, default_target, config)+CustomClassifierConfig+ type stubs + 10 binding tests (pass on the 3.10 wheel). Judge failures and unusable verdicts fall open todefault_targetinside the library. Filed upstream as NVIDIA-NeMo#365; if merged, this commit drops out of the fork delta.Commit 3 — publish workflow
Tag-triggered (
gumloop-v*) maturin build in the manylinux_2_28 container + upload tous-west1-python.pkg.dev/agenthub-dev/gumloop, authenticated via theGCP_ARTIFACT_REGISTRY_CREDENTIALSsecret (ADC: SA key or authorized-user JSON), idempotent on republished tags. This is the only publish path for future versions.