Skip to content

feat(api): add GCP external storage providers - #1125

Merged
dpiet-oai merged 1 commit into
mainfrom
castiron/promotions/pr-200
Oct 1, 2026
Merged

dpiet-oai merged 1 commit into
mainfrom
castiron/promotions/pr-200

Conversation

@dpiet-oai

@dpiet-oai dpiet-oai commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds typed Google Cloud Storage providers for organization external storage.

Changes

  • Configure GCP external storage using workload identity federation parameters.
  • Handle GCP providers with Handler.builder().onGcp(...) for storage configuration, creation, and registration audit events.
  • Preserve deprecated visitor interfaces, routing GCP values to their unknown fallback.

Compatibility

Existing visitors do not gain a required visitGcp method. Existing handlers use their onDefault callback for GCP, or the existing payload-free error when no fallback is registered. The GCP request includes workload identity fields; region and audience remain response-only.

Validation

  • Eight focused model tests passed.
  • Old Java/Kotlin visitor binaries and old Java handler binaries passed against the proposed SDK on Java 8.
  • All three provider unions passed typed GCP dispatch, fallback, validation, and JSON round trips for deserialized and builder-created values.
  • Public CI passed on 7373328: full tests, API compatibility, Jackson compatibility, Java 8/25 runtime checks, build, lint, and generation baseline/budget checks. The test job passed on retry after Maven Central returned HTTP 429 during dependency downloads.

@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Castiron custom code

✅ No new custom-code files detected.

93 mixed files remain; 0 existing customizations changed.

Compared 36841eaa0534 → 7373328385ee. Generated baselines verified.

93 existing customizations unchanged
  • openai-java-core/src/main/kotlin/com/openai/models/audio/AudioResponseFormat.kt
  • openai-java-core/src/main/kotlin/com/openai/models/beta/agents/vaults/credentials/CredentialAuth.kt
  • openai-java-core/src/main/kotlin/com/openai/models/beta/agents/vaults/credentials/CredentialAuthCreateParam.kt
  • openai-java-core/src/main/kotlin/com/openai/models/beta/agents/vaults/credentials/CredentialAuthRotateParam.kt
  • openai-java-core/src/main/kotlin/com/openai/models/beta/responses/BetaResponse.kt
  • openai-java-core/src/main/kotlin/com/openai/models/beta/responses/BetaResponseStreamEvent.kt
  • openai-java-core/src/main/kotlin/com/openai/models/beta/responses/BetaResponsesServerEvent.kt
  • openai-java-core/src/main/kotlin/com/openai/models/chat/completions/ChatCompletionCreateParams.kt
  • openai-java-core/src/main/kotlin/com/openai/models/chat/completions/ChatCompletionMessageFunctionToolCall.kt
  • openai-java-core/src/main/kotlin/com/openai/models/chat/completions/ChatCompletionToolMessageParam.kt
  • openai-java-core/src/main/kotlin/com/openai/models/embeddings/Embedding.kt
  • openai-java-core/src/main/kotlin/com/openai/models/embeddings/EmbeddingCreateParams.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/Response.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseCreateParams.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseFunctionToolCall.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseFunctionWebSearch.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseInputItem.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseStreamEvent.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponseTextConfig.kt
  • openai-java-core/src/main/kotlin/com/openai/models/responses/ResponsesServerEvent.kt
  • openai-java-core/src/main/kotlin/com/openai/models/videos/Video.kt
  • openai-java-core/src/main/kotlin/com/openai/models/webhooks/UnwrapWebhookEvent.kt
  • openai-java-core/src/main/kotlin/com/openai/models/webhooks/WebhookEndpointWithSecret.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/BetaServiceAsync.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/BetaServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/ImageServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/ResponseServiceAsync.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/ResponseServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/SkillServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/VideoServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/WebhookServiceAsync.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/WebhookServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/audio/TranscriptionServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/audio/TranslationServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/beta/agents/SessionServiceAsync.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/beta/agents/SessionServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/chat/ChatCompletionServiceAsync.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/finetuning/checkpoints/PermissionServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/async/skills/VersionServiceAsyncImpl.kt
  • openai-java-core/src/main/kotlin/com/openai/services/blocking/BetaService.kt

53 more in the full report.

A changed generated baseline means this report cannot reliably identify which handwritten lines changed.

Inspect the custom-code diff

Download the exact patch produced by this run (requires repository access):

gh run download 36883931777 --repo openai/openai-java \
  --name castiron-custom-code-36883931777-1 --dir /tmp/castiron-custom-code-36883931777-1
git apply --stat /tmp/castiron-custom-code-36883931777-1/custom-code.patch
cat /tmp/castiron-custom-code-36883931777-1/custom-code.patch

Or reproduce it from an SDK checkout containing the vendored reporter:

git fetch --no-tags origin 36841eaa0534a932ef2f9674fb2299c7d75e8913 7373328385ee36a5729151fcf262e4fc7e8e2770
python3 scripts/castiron/custom_code_report.py report \
  --base 36841eaa0534a932ef2f9674fb2299c7d75e8913 \
  --head 7373328385ee36a5729151fcf262e4fc7e8e2770 --fetch --require-head-hash --public \
  --out /tmp/castiron-custom-code-7373328385ee
cat /tmp/castiron-custom-code-7373328385ee/custom-code.patch

This is the current full custom patch for mixed files, not an attribution of only the handwritten lines changed by this PR.

Full report and patch

@markstuart-oai markstuart-oai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed d685b9e. GCP request/response fields match the schema, and all three provider unions carry the new type through serialization, validation and typed handlers. The deprecated Visitor method set is preserved; GCP follows the existing unknown/default path, including values created with builders. No blocking findings.

Hosted tests, API compatibility, Jackson compatibility, Java 8/25 runtime checks, lint, build and Castiron checks passed on this head. Review was source-only; I did not run local tests or the author’s separate binary-compatibility probes.

Castiron-Internal-PR: openai/openai-java-internal#200
Castiron-Source-SHA: ec00f549b6b740fc4267d4afe8aecd76c6fcd71f
Castiron-Public-Base-SHA: 36841ea
@dpiet-oai
dpiet-oai force-pushed the castiron/promotions/pr-200 branch from d685b9e to 7373328 Compare October 1, 2026 15:00
@dpiet-oai
dpiet-oai marked this pull request as ready for review October 1, 2026 15:02
@dpiet-oai
dpiet-oai requested a review from a team as a code owner October 1, 2026 15:02
@openai-sdks

openai-sdks Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

OkTest Summary

✅ 236/236 SDK tests passed in 17.776s for Java SDK PR #1125.

Test results — 42 files
Test Result Time
tests/chat-completions-complex-body.test.ts ✅ Passed 212ms
tests/chat-completions-create.test.ts ✅ Passed 735ms
tests/chat-completions-stream.test.ts ✅ Passed 616ms
tests/files-content-binary.test.ts ✅ Passed 246ms
tests/files-create-multipart.test.ts ✅ Passed 430ms
tests/files-list-pagination.test.ts ✅ Passed 331ms
tests/initialize-config.test.ts ✅ Passed 150ms
tests/instance-isolation.test.ts ✅ Passed 149ms
tests/models-list.test.ts ✅ Passed 256ms
tests/responses-background-lifecycle.test.ts ✅ Passed 169ms
tests/responses-body-method-errors.test.ts ✅ Passed 489ms
tests/responses-cancel-timeout.test.ts ✅ Passed 262ms
tests/responses-cancel.test.ts ✅ Passed 253ms
tests/responses-compact-retries.test.ts ✅ Passed 261ms
tests/responses-compact.test.ts ✅ Passed 259ms
tests/responses-create-advanced-stream.test.ts ✅ Passed 760ms
tests/responses-create-advanced.test.ts ✅ Passed 1.561s
tests/responses-create-disconnect.test.ts ✅ Passed 1.183s
tests/responses-create-errors.test.ts ✅ Passed 374ms
tests/responses-create-malformed-api-responses.test.ts ✅ Passed 243ms
tests/responses-create-retries.test.ts ✅ Passed 274ms
tests/responses-create-stream-failures.test.ts ✅ Passed 964ms
tests/responses-create-stream-timeout.test.ts ✅ Passed 308ms
tests/responses-create-stream-wire.test.ts ✅ Passed 7.617s
tests/responses-create-stream.test.ts ✅ Passed 224ms
tests/responses-create-terminal-states.test.ts ✅ Passed 422ms
tests/responses-create-timeout.test.ts ✅ Passed 186ms
tests/responses-create.test.ts ✅ Passed 211ms
tests/responses-delete.test.ts ✅ Passed 239ms
tests/responses-input-items-errors.test.ts ✅ Passed 495ms
tests/responses-input-items-list.test.ts ✅ Passed 346ms
tests/responses-input-items-options.test.ts ✅ Passed 211ms
tests/responses-input-tokens-count-timeout.test.ts ✅ Passed 224ms
tests/responses-input-tokens-count.test.ts ✅ Passed 297ms
tests/responses-malformed-inputs.test.ts ✅ Passed 5.734s
tests/responses-not-found-errors.test.ts ✅ Passed 499ms
tests/responses-parse.test.ts ✅ Passed 721ms
tests/responses-retrieve-retries.test.ts ✅ Passed 384ms
tests/responses-retrieve.test.ts ✅ Passed 214ms
tests/responses-stored-method-errors.test.ts ✅ Passed 1.017s
tests/retry-behavior.test.ts ✅ Passed 3.589s
tests/sdk-error-shape.test.ts ✅ Passed 495ms

View OkTest run #36881156179

SDK merge (f85d73ff28eb) · head (7373328385ee) · base (36841eaa0534) · OkTest (e7cf6535e0ca)

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-01T15:05:24.217923Z 7373328 Draft marked ready
🔒 Security Review ✅ Completed 2026-10-01T15:05:15.163748Z 7373328 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@dpiet-oai
dpiet-oai added this pull request to the merge queue Oct 1, 2026

@jbeckwith-oai jbeckwith-oai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 7373328. No actionable findings.

Checked all 7 changed files and the surrounding schema, Jackson, validation, and provider-dispatch paths. GCP request fields match the schema; audience and region remain response-only. All three unions support typed GCP dispatch, serialization, and validation while preserving the legacy Visitor method set and routing GCP through its unknown fallback. Handler defaults remain payload-free when unregistered. The 5 changed Kotlin source/test blobs are identical to the previously reviewed d685b9e revision.

Hosted tests, API/Jackson compatibility, Java 8/25 runtime checks, build, lint, and Castiron checks pass on this head. This was a source review; I did not rerun local SDK tests or the author's binary-compatibility probes.

Merged via the queue into main with commit 5d7af58 Oct 1, 2026
25 of 27 checks passed
@openai-sdks openai-sdks Bot mentioned this pull request Oct 1, 2026
sylvesterkaczmarek pushed a commit to sylvesterkaczmarek/openai-java that referenced this pull request Oct 5, 2026
Automated Release PR
---


##
[4.74.0](openai/openai-java@v4.73.0...v4.74.0)
(2026-10-01)


### Features

* **agents:** [1/n] Add typed final answers to beta Agents streams
([openai#1128](openai#1128))
([b0b7b22](openai@b0b7b22))
* **api:** add GCP external storage providers
([openai#1125](openai#1125))
([5d7af58](openai@5d7af58))
* collect final output from beta Agents streams
([openai#1124](openai#1124))
([328958a](openai@328958a))


### Bug Fixes

* **api:** allow original image detail in Chat Completions
([openai#1126](openai#1126))
([4ae27f8](openai@4ae27f8))
* **api:** correct the eval run cancellation endpoint
([openai#1122](openai#1122))
([ab795dd](openai@ab795dd))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: openai-sdks[bot] <284451331+openai-sdks[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants