Skip to content

refactor(api): share embedding response decoding - #3699

Merged
apcha-oai merged 1 commit into
mainfrom
apcha/castiron-python-embedding-decoder
Aug 20, 2026
Merged

refactor(api): share embedding response decoding#3699
apcha-oai merged 1 commit into
mainfrom
apcha/castiron-python-embedding-decoder

Conversation

@apcha-oai

Copy link
Copy Markdown
Contributor
  • I understand that this repository is auto-generated and my pull request may not be merged

Changes being requested

Move the duplicated embeddings response decoder into the SDK-owned
lib/_parsing/_embeddings.py module. Both resource methods use the existing
post_parser hook. The decoder logic is unchanged: omitted encoding requests
base64 and decodes it in place; explicit formats pass through; empty data keeps
the existing ValueError; NumPy and stdlib decoding keep their existing errors.

Public signatures, exports, request fields and order, sync/async behavior, and
raw/streaming response wrappers are unchanged. No compiler, schema, dependency,
or generation-metadata changes are included.

Additional context & links

New handwritten coverage is in tests/lib/test_embeddings.py:

  • test_decode_preserves_response_and_non_string_vectors checks in-place
    decoding, both omitted-value sentinels, and untouched non-string vectors.
  • test_explicit_format_is_untouched,
    test_missing_data_keeps_existing_error, and
    test_invalid_data_preserves_decoder_errors cover passthrough and failures.
  • test_sync_create_uses_decoder and test_async_create_uses_decoder cover
    normal, raw, and streaming responses with both decoder implementations.

Validation:

  • Command: python -m pytest -q -n 4 tests/api_resources/test_embeddings.py tests/lib/test_embeddings.py
    passed 77 tests under Pydantic v2 and 77 under Pydantic v1.
  • ./scripts/format and ./scripts/lint passed, including Ruff, Pyright, mypy,
    and import checks. Unrelated formatter-only reporter edits are excluded.
  • ./scripts/build passed; the wheel and source distribution both contain the
    new private helper.
  • The public custom-code report verifies 41 mixed files, only the embeddings
    customization changed, and 40 other customizations unchanged. The embeddings
    patch shrinks from +73/-22 to +27/-21. .castiron.stats.yml is unchanged.

Command to reproduce the report from this branch:

$ python3 scripts/castiron/custom_code_report.py report \
    --base 8edd9ae411f9d0a5385447a4697c9f7042868213 \
    --head 38cf9c9ccb2c4e007ada4672424733845e0c29e9 \
    --fetch --require-head-hash --public \
    --out /tmp/castiron-embedding-decoder

@apcha-oai apcha-oai added the custom-code-burndown Behavior-preserving cleanup of custom code in generated SDK files label Aug 20, 2026
@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

Castiron custom code

✅ No new custom-code files detected.

41 mixed files remain; 1 existing customization changed.

Compared 8edd9ae411f938cf9c9ccb2c. Generated baselines verified.

File Result Current custom patch
src/openai/resources/embeddings.py Existing customization changed +27 / −21
40 existing customizations unchanged
  • api.md
  • scripts/castiron/README.md
  • scripts/castiron/custom_code_report.py
  • scripts/castiron/test_custom_code_report.py
  • src/openai/init.py
  • src/openai/_client.py
  • src/openai/resources/audio/transcriptions.py
  • src/openai/resources/audio/translations.py
  • src/openai/resources/beta/beta.py
  • src/openai/resources/beta/responses/responses.py
  • src/openai/resources/beta/threads/runs/runs.py
  • src/openai/resources/beta/threads/threads.py
  • src/openai/resources/chat/completions/completions.py
  • src/openai/resources/files.py
  • src/openai/resources/realtime/realtime.py
  • src/openai/resources/responses/responses.py
  • src/openai/resources/uploads/uploads.py
  • src/openai/resources/vector_stores/file_batches.py
  • src/openai/resources/vector_stores/files.py
  • src/openai/resources/videos.py
  • src/openai/resources/webhooks/init.py
  • src/openai/resources/webhooks/webhooks.py
  • src/openai/types/init.py
  • src/openai/types/chat/init.py
  • src/openai/types/chat/chat_completion_message_tool_call.py
  • src/openai/types/fine_tuning/fine_tuning_job_integration.py
  • src/openai/types/responses/init.py
  • src/openai/types/responses/response.py
  • src/openai/types/responses/response_function_web_search.py
  • src/openai/types/responses/response_function_web_search_param.py
  • src/openai/types/responses/tool.py
  • src/openai/types/responses/tool_param.py
  • src/openai/types/webhooks/init.py
  • src/openai/types/websocket_connection_options.py
  • tests/api_resources/fine_tuning/jobs/test_checkpoints.py
  • tests/api_resources/fine_tuning/test_jobs.py
  • tests/api_resources/test_videos.py
  • tests/api_resources/test_webhooks.py
  • tests/api_resources/vector_stores/test_file_batches.py
  • tests/api_resources/vector_stores/test_files.py

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 32425315692 --repo openai/openai-python \
  --name castiron-custom-code-32425315692-1 --dir /tmp/castiron-custom-code-32425315692-1
git apply --stat /tmp/castiron-custom-code-32425315692-1/custom-code.patch
cat /tmp/castiron-custom-code-32425315692-1/custom-code.patch

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

git fetch --no-tags origin 8edd9ae411f9d0a5385447a4697c9f7042868213 38cf9c9ccb2c4e007ada4672424733845e0c29e9
python3 scripts/castiron/custom_code_report.py report \
  --base 8edd9ae411f9d0a5385447a4697c9f7042868213 \
  --head 38cf9c9ccb2c4e007ada4672424733845e0c29e9 --fetch --require-head-hash --public \
  --out /tmp/castiron-custom-code-38cf9c9ccb2c
cat /tmp/castiron-custom-code-38cf9c9ccb2c/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

@apcha-oai
apcha-oai marked this pull request as ready for review August 20, 2026 22:40
@apcha-oai
apcha-oai requested a review from a team as a code owner August 20, 2026 22:40
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Aug 20, 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-08-20T22:41:18.166565Z 38cf9c9 Draft marked ready
🔒 Security Review Completed 2026-08-20T22:41:57.709516Z 38cf9c9 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.

@openai-sdks

openai-sdks Bot commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

OkTest Summary

237/237 SDK tests passed in 9.384s for Python SDK PR #3699.

Test results — 42 files
Test Result Time
tests/chat-completions-complex-body.test.ts ✅ Passed 136ms
tests/chat-completions-create.test.ts ✅ Passed 172ms
tests/chat-completions-stream.test.ts ✅ Passed 97ms
tests/files-content-binary.test.ts ✅ Passed 134ms
tests/files-create-multipart.test.ts ✅ Passed 221ms
tests/files-list-pagination.test.ts ✅ Passed 113ms
tests/initialize-config.test.ts ✅ Passed 113ms
tests/instance-isolation.test.ts ✅ Passed 143ms
tests/models-list.test.ts ✅ Passed 184ms
tests/responses-background-lifecycle.test.ts ✅ Passed 159ms
tests/responses-body-method-errors.test.ts ✅ Passed 291ms
tests/responses-cancel-timeout.test.ts ✅ Passed 183ms
tests/responses-cancel.test.ts ✅ Passed 214ms
tests/responses-compact-retries.test.ts ✅ Passed 286ms
tests/responses-compact.test.ts ✅ Passed 166ms
tests/responses-create-advanced-stream.test.ts ✅ Passed 114ms
tests/responses-create-advanced.test.ts ✅ Passed 160ms
tests/responses-create-disconnect.test.ts ✅ Passed 1.146s
tests/responses-create-errors.test.ts ✅ Passed 169ms
tests/responses-create-malformed-api-responses.test.ts ✅ Passed 113ms
tests/responses-create-retries.test.ts ✅ Passed 393ms
tests/responses-create-stream-failures.test.ts ✅ Passed 102ms
tests/responses-create-stream-timeout.test.ts ✅ Passed 224ms
tests/responses-create-stream-wire.test.ts ✅ Passed 2.976s
tests/responses-create-stream.test.ts ✅ Passed 74ms
tests/responses-create-terminal-states.test.ts ✅ Passed 238ms
tests/responses-create-timeout.test.ts ✅ Passed 191ms
tests/responses-create.test.ts ✅ Passed 175ms
tests/responses-delete.test.ts ✅ Passed 278ms
tests/responses-input-items-errors.test.ts ✅ Passed 310ms
tests/responses-input-items-list.test.ts ✅ Passed 280ms
tests/responses-input-items-options.test.ts ✅ Passed 283ms
tests/responses-input-tokens-count-timeout.test.ts ✅ Passed 194ms
tests/responses-input-tokens-count.test.ts ✅ Passed 202ms
tests/responses-malformed-inputs.test.ts ✅ Passed 2.308s
tests/responses-not-found-errors.test.ts ✅ Passed 236ms
tests/responses-parse.test.ts ✅ Passed 284ms
tests/responses-retrieve-retries.test.ts ✅ Passed 183ms
tests/responses-retrieve.test.ts ✅ Passed 199ms
tests/responses-stored-method-errors.test.ts ✅ Passed 468ms
tests/retry-behavior.test.ts ✅ Passed 3.05s
tests/sdk-error-shape.test.ts ✅ Passed 238ms

View OkTest run #32425289369

SDK merge (e214cfbb41f9) · head (38cf9c9ccb2c) · base (8edd9ae411f9) · OkTest (2b1bdfd25e98)

@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.

Independently reviewed the full diff and regression coverage. The shared embedding-response decoder preserves sync/async semantics, explicit encoding behavior, NumPy/stdlib decoding, validation errors, and response identity while moving SDK-owned logic out of generated resources.

@apcha-oai
apcha-oai added this pull request to the merge queue Aug 20, 2026
Merged via the queue into main with commit 50de9af Aug 20, 2026
23 checks passed
@apcha-oai
apcha-oai deleted the apcha/castiron-python-embedding-decoder branch August 20, 2026 22:53
@openai-sdks openai-sdks Bot mentioned this pull request Aug 20, 2026
leiandy pushed a commit to leiandy/openai-python that referenced this pull request Aug 26, 2026
Automated Release PR
---


##
[3.4.0](openai/openai-python@v3.3.1...v3.4.0)
(2026-08-25)


### Features

* **api:** Add obfuscation field to ChatCompletionChunk
([openai#3690](openai#3690))
([c7d8e1d](openai@c7d8e1d))
* **api:** add project residency configuration and cost quantity units
([openai#3726](openai#3726))
([bc4f8ef](openai@bc4f8ef))


### Bug Fixes

* **api:** encode Realtime call offers and session configuration
([openai#3736](openai#3736))
([555ac48](openai@555ac48))
* apply consistent origin checks to WebSocket redirects
([openai#3693](openai#3693))
([1b324d0](openai@1b324d0))
* **azure:** encode deployment names consistently
([openai#3683](openai#3683))
([689538d](openai@689538d))
* **azure:** keep provider validation errors value-free
([openai#3691](openai#3691))
([72529c0](openai@72529c0))
* **azure:** resolve one authentication mode
([openai#3689](openai#3689))
([e3d0681](openai@e3d0681))
* compute custom-code summaries from trusted workflow code
([openai#3692](openai#3692))
([2b5868d](openai@2b5868d))
* create upload example fixtures in private directories
([openai#3686](openai#3686))
([f36e6f7](openai@f36e6f7))
* decode SSE incrementally without limiting event size
([openai#3687](openai#3687))
([2598d53](openai@2598d53))
* keep Python SDK diagnostics metadata-only
([openai#3685](openai#3685))
([600aa8d](openai@600aa8d))
* Preserve Azure authentication boundaries across transports
([openai#3684](openai#3684))
([06ef57c](openai@06ef57c))
* preserve the configured TLS hostname
([openai#3694](openai#3694))
([aa5fbc4](openai@aa5fbc4))
* preserve WebSocket send queue byte accounting during flush
([openai#3688](openai#3688))
([96f966d](openai@96f966d))


### Chores

* **api:** Clarify image background docs and preview support
([openai#3703](openai#3703))
([bedb9a7](openai@bedb9a7))
* **api:** document supported image generation models
([openai#3695](openai#3695))
([8edd9ae](openai@8edd9ae))
* **api:** move chat validation tests out of generated code
([openai#3698](openai#3698))
([9d3ba20](openai@9d3ba20))
* **api:** move webhook tests out of generated code
([openai#3700](openai#3700))
([04ecb3c](openai@04ecb3c))
* **api:** remove redundant generated formatting
([openai#3696](openai#3696))
([5ac1e03](openai@5ac1e03))
* **api:** remove redundant generated test edits
([openai#3697](openai#3697))
([351ef84](openai@351ef84))
* **api:** Update SDK generation metadata only
([openai#3716](openai#3716))
([e43b422](openai@e43b422))
* set a ceiling for Python SDK customization
([openai#3714](openai#3714))
([04d5d79](openai@04d5d79))


### Documentation

* **api:** restore generated ChatKit API index
([openai#3705](openai#3705))
([4534106](openai@4534106))
* standardize Python SDK vulnerability disclosure policy
([openai#3642](openai#3642))
([1fc0a21](openai@1fc0a21))


### Refactors

* **api:** isolate audio response format selection
([openai#3701](openai#3701))
([ece4324](openai@ece4324))
* **api:** isolate vector-store polling helpers
([openai#3713](openai#3713))
([a002ef3](openai@a002ef3))
* **api:** move file processing polling into SDK-owned helpers
([openai#3712](openai#3712))
([5f20c51](openai@5f20c51))
* **api:** share embedding response decoding
([openai#3699](openai#3699))
([50de9af](openai@50de9af))
* **api:** share webhook signature verification
([openai#3704](openai#3704))
([e14ac34](openai@e14ac34))

---
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

custom-code-burndown Behavior-preserving cleanup of custom code in generated SDK files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants