openai provider updates#2
Merged
Merged
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… 17 services) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…in-scope) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…med, live proof blocked on key Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…sources, 11 services) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ried, 13 renamed, 39 retired) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e_names.json Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…d (99 ops, 26 resources), validations pass Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… evidence, gated tiers, cutover plan Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…blish, docs) and service coverage Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ize, residual-variant lowering
- pre_normalize.mjs injects OpenAI-Organization/OpenAI-Project optional header
params on all 100 ops (200 params); guards against 3.1 array-type nullables
- bin/normalize.{mjs,sh} synced from k8s reference; provider-utils normalize
flattens 569 allOf, renames 300 oneOf/anyOf, resolving nullable idioms
- lower_residual_variants.mjs lowers the 1 irreducible union left at a column
site (conversations items.environment) to a json_extract blob column; roots
left polymorphic fail the run
- column-producing sites verified free of polymorphism; deep nested variants
intentionally retained as json_extract territory
- mapping is byte-identical pre/post normalize (schemas change, not paths/verbs)
- README stage 3 documented; deterministic and re-runnable from a fresh split
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- generate-provider.mjs synced to current toolchain (supports --service-config, --naive-req-body-translate, --skip-files); generate-provider.sh reduced to a thin passthrough so the wrapper cannot drop flags; npm script points at .mjs - generated provider-dev/openapi/src/openai (11 services, 26 resources) with: bearer auth (OPENAI_API_KEY), fixed server https://api.openai.com/v1, derived-cursor pagination (after <- $.last_id), naive request body columns - verified offline in stackql v0.10.542: SHOW SERVICES/RESOURCES/METHODS and DESCRIBE resolve for all 11 services; async-job archetype correct (jobs create/list/get + cancel/pause/resume EXEC, native columns model/training_file); the lowered conversations.items.environment union projects as a json column Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rmalize (no post_process needed) - strip all k8s references and sibling name-drops from CLAUDE.md, README, NOTES, clean_specs.mjs, pre_normalize.mjs, bin/generate-docs.sh; artifacts stand alone - post_process not needed for openai: all 99 methods are application/json (no media-type rewrite), and update-POST + body-carrying EXEC methods all bind via the naive translator (verified in generated output) - the one build-input adjustment, assistants-family deprecation, moves into pre_normalize driven by the endpoint inventory deprecated column: stamps deprecated:true on the 18 family ops the vendor left unflagged (23 total), flowing through generate into the provider (verified 23/23 in generated assistants.yaml) and docs - full pipeline re-run deterministic: only assistants.yaml changed, other 10 services regenerated byte-identical; all 11 services resolve offline Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…lides with cursor pagination) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…fecycles, gated completions - tests/smoke_test.py: resolution + cost-free reads + vector store lifecycle (create/get/update/delete) via pystackql; auth is the provider's declared bearer/OPENAI_API_KEY (no credential on the command line) - local registry injected as platform-quoted JSON (survives Windows cmd and POSIX sh); public via 'registry pull openai' - gated --with-completions makes a direct OpenAI API call (inference is out of provider scope) with the 'explain how stackql works' prompt - error handling: executeStmt surfaces API errors (SELECT swallows to empty), and an empty models read is treated as an auth/connectivity failure - validated offline: resolution passes with no key (live steps BLOCKED); with a dummy key the smoke SQL parses/plans/routes to api.openai.com and fails only at 401, surfaced as FAIL - README stage 5 updated; tests/requirements.txt added Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…wait pattern) - create then poll the list until the store is listable (--timeout default 120s, --poll-interval default 3s), returning as soon as found and reporting elapsed - on timeout, surface diagnostics: store count (a count of the default page size hints at pagination not traversing) and a sample of names (a blank name hints at the INSERT not binding name) - README stage 5 updated with the new flags and poll behaviour Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The gated completions demo is an optional, out-of-scope direct API call; an account quota/billing state (HTTP 429 insufficient_quota) is not a provider or code defect, so it is reported as SKIP rather than failing the run. Other HTTP errors remain FAIL. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The provider-data header templates were still the generic REPLACEME defaults, including a malformed <a href="REPLACEME> with no closing quote - injected verbatim into the generated landing page, breaking MDX (unterminated attribute). Authored headerContent1/2.txt for openai (identity, OPENAI_API_KEY auth, correct api-keys URL with a closed href) and regenerated the docs; REPLACEME is gone from website/docs and the landing page is valid. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…h anthropic) - package.json -> Docusaurus 3.10.1 (+faster, +ideal-image, +theme-mermaid); vendor-config script clones stackql/docusaurus-config into .shared-config on prestart/prebuild (gitignored) - provider.js supplies providerName/providerTitle (openai/OpenAI) - docusaurus.config.js uses createConfig from the vendored shared config, with openai-specific editUrl (stackql/stackql-provider-openai, website/ subdir) and the registry-branded local logos - sidebars.js -> shared mainSidebar pattern (All Providers + autogenerated services) - src aligned with the shared theme: add SchemaTable, StackqlDeployDropdown, DocBreadcrumbs, css/global.css; drop the legacy standalone src/pages (docs are served at root by the shared config) - static: fix CNAME (was snowflake-provider), add root favicons + site.webmanifest + logo.svg the shared head expects; netlify.toml for openai-provider.stackql.io - clean install + build verified green on 3.10.1 (only the cosmetic spec-description /docs link warnings remain, onBrokenLinks: warn) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s; flip editUrl to stackql-registry - sanitize_docs.mjs prefixes every relative /docs/... link (91 across 13 service docs) with https://platform.openai.com. OpenAI moved docs to developers.openai.com with non-deterministically renamed paths (retrieve-contents->retrieve, fine-tuning->model-optimization), but platform.openai.com 301-redirects every old /docs path (verified 25/26 distinct; 26th is a live page behind an anti-bot 403), so the host prefix is the only deterministic fix and stays correct via their redirects - build now emits zero broken-link warnings - editUrl flipped to github.com/stackql-registry/stackql-provider-openai/edit/main/website/ - README stage 7 documents the shared-config pattern and the sanitize step Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ly README website/README.md was a full 282-line provider-generation guide (download spec, split, mappings, generate, test, publish) duplicating and conflicting with the root README. Replaced with a short Docusaurus-site README (install/dev/build/ deploy) that documents the shared-config vendoring and points to the root README as the canonical provider-generation pipeline doc. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… GHA This provider is a single-microsite repo, so it deploys via GitHub Pages (the existing prod/test-web-deploy GHA workflows), not Netlify (which is only used when multiple microsites share a repo). Removed website/netlify.toml, rewrote the website README deployment section for GitHub Pages, and corrected the NOTES.md website-state line. The GHA build runs yarn build, which vendors .shared-config, then publishes website/build via actions/deploy-pages. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…p creates, keep file_id INSERT any-sdk marshalBody handles only JSON/XML (no multipart/form-data or octet-stream), so a format:binary request field (file upload) cannot be sent regardless of verb. Per the EXEC-minimisation rule (EXEC only for genuine lifecycle ops): - CreateSkill, CreateSkillVersion: required binary files, no file_id path, not lifecycle -> skipped (multipart-binary-body). skills/versions become metadata surfaces (list/get/delete + skills default-version update), no create. - CreateContainerFile: optional binary file plus a non-binary file_id -> stays INSERT via file_id; pre_normalize strips the dead binary column. - pre_normalize adds a general rule: strip format:binary request properties (and drop from required) - never marshalable. Totals: 100 ops -> 97 mapped / 3 skipped (was 99/1); insert 19 -> 17. Verified in stackql: skills/versions have no create, containers.files INSERT exposes only file_id. Docs regenerated + sanitized; NOTES section 9 records the finding. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The minor upgrade left theme-mermaid, module-type-aliases and types at 3.10.1; Docusaurus requires a uniform version across its packages (build failed with 'Invalid name=docusaurus-theme-mermaid version number=3.10.1'). Bumped the three stragglers to 3.10.2. Build verified green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…raise 2 any-sdk work orders Q1 - pushdown: - top pushdown enabled (paramName: limit, maxValue: 100): SELECT ... LIMIT n now sends ?limit=n. applyPushdownTop has no dialect gate, so a custom paramName works (correcting the earlier NOTES 8 claim). - limit dropped from generated example WHERE clauses; params table annotates it as SQL-LIMIT driven (pre_normalize). - orderBy stays blocked: applyPushdownOrderBy hard-requires odata and renders '<col> <dir>', but OpenAI's order takes a bare asc/desc. Raised any-sdk-order-pushdown-issue.md requesting a general directive (direction_only). filter deliberately parked (vendor DSLs). Q2 - casing: not achievable without an any-sdk change. nativeCasing is live at the method level (proven: the mangled ToSnake alias open_ai-_organization resolves), but casing.ToSnake never treats '-' as a separator, so hyphenated headers get a mangled alias or none. Raised any-sdk-casing-hyphen-issue.md. Shipped: headers declared wire-valid lowercase kebab (case-insensitive per RFC 7230) with request.nativeCasing: kebab (forward-compatible), docs use the quoted form. Docs: sanitize_docs now also fixes SQL examples that did not parse - the generator emitted bare 'order' (reserved word) and hyphenated headers. 21 limit predicates dropped, 187 identifiers quoted across 26 files. Verified: the sanitized example parses and reaches the API. Docs build green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…itize SQL fixups Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…operations
The request.nativeCasing stamp delivered no benefit (any-sdk's ToSnake cannot alias
hyphenated headers, so no snake alias is ever produced) and actively regressed the
async control surface: getRequestBodySchema treats a present request block as
implying a body, so a metadata-only 'request: {nativeCasing: kebab}' on a body-less
POST made EXEC fail with 'no request body for operation = cancelFineTuningJob'.
Verified: EXEC jobs.cancel / batches.cancel reach the API with the block removed.
Scoping headers keep their wire-valid lowercase kebab names and are addressed
quoted. Also drops references to the upstream work-order files (removed in 9df3106).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Follows the openai_admin pattern: teach the flagship queries on the home page rather than only listing services. Sections match the CLAUDE.md doc leads - fine-tuning history and checkpoint inventory, the async create/poll/cancel shape, batch status and error triage, vector store audits, file estate by purpose/age, and the assistants inventory with its deprecation posture - plus a 'Reading the surface' preamble (deep blocks are json_extract columns; LIMIT is pushed to the wire) and the openai_admin sibling pointer. All 15 examples were executed against the generated provider and reach the API (dummy key -> 401), so every column, json_extract path, aggregate and EXEC is real, not assumed. Docs build green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.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.
Description
Checklist
Please make sure that the following criteria are met:
Additional Notes
Add any additional information or context that might help the reviewers.