Skip to content

feat(regen): add nova-3 multilingual Listen V1 support - #131

Merged
GregHolmes merged 9 commits into
mainfrom
gh/sdk-gen-2026-10-23
Oct 23, 2026
Merged

GregHolmes merged 9 commits into
mainfrom
gh/sdk-gen-2026-10-23

Conversation

@GregHolmes

@GregHolmes GregHolmes commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • Regenerated the Java SDK from the 2026-10-23 API specs.
  • Adds generated Listen V1 Configure frames, multilingual language hints, and typed language metadata.
  • Preserves backward compatibility for third-party implementations of Listen V1 builder stages after adding languageHint(...).
  • Delivers an unhandled Configure rejection through onError as ListenV1ConfigureFailureException, which carries the typed request ID, code, and description.
  • Adds MockWebServer coverage for all sync/async URL/file language-hint paths, Configure dispatch, and language metadata deserialization.
  • Updates the README and live Listen examples for typed Configure callbacks and multilingual hints; each README fence is independently compilable.
  • Reapplied all existing manual compatibility, WebSocket, hashCode, union-default, and model-catalog patches; Fern does not yet cover any of them.
  • Retained the Listen V2 CloseStream terminal-close safeguard and documented it for future regenerations.
  • Deleted all transient .bak files.

Migration

  • Changed: Listen V1 Configure responses are now typed. A ConfigureFailure frame arrives through onConfigureFailure(...), or as ListenV1ConfigureFailureException through generic onError(...) when no typed handler is registered. A ConfigureSuccess frame arrives through onConfigureSuccess(...) and no longer fires onError. Server Error frames still arrive through onErrorMessage(...) / ListenV1ErrorException.
  • Read multilingual output through typed getLanguages() and getLanguagesHinted() getters instead of additionalProperties.

Validation

  • ./gradlew spotlessCheck test compileExamples
  • ./gradlew unitTest --tests com.deepgram.ReadmeSnippetsCompileTest
  • Staging smoke: REST URL/file, WebSocket language hints, Configure success, typed Configure failure, and generic failure fallback

No manual patches were dropped. Release Please will perform the next version bump.

@GregHolmes GregHolmes changed the title chore: sdk regeneration 2026-10-23 feat(regen): add Listen V1 multilingual support Oct 23, 2026
@GregHolmes GregHolmes changed the title feat(regen): add Listen V1 multilingual support feat(regen): add nova-3 multilingual Listen V1 support Oct 23, 2026
…ct options

Add a Nova-3 multilingual section to the README (pre-recorded and streaming)
that says hints bias detection and do not restrict it, and give the
`V1ConnectOptions.languageHint(...)` default methods the same Javadoc the
REST builders already carry.

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

Approving the content. Hold the merge until production serves the Nova-3 Mega model and deepgram-docs #1288 merges.

What this PR does. Regenerates the SDK from docs #1288 (3063c73): languageHint(...) on the Listen V1 REST and WebSocket builders, Optional getLanguages() / getLanguagesHinted() / word getLanguage(), and typed onConfigureSuccess / onConfigureFailure with a ListenV1ConfigureFailureException fallback on onError.

What I checked.

  • Does production accept language_hint today? No: 400 INVALID_QUERY_PARAMETER "Query included a language_hint that this model does not support: en, es." (prod model 2026-01-27.9107). Staging (2026-10-16.x) returns 200 with languages_hinted: ["en","es"]. That is the merge gate; re-run one REST request with language_hint=en&language_hint=es against production before merging.
  • Does this build work against staging? Yes: REST URL + file, list and scalar hints, streaming hints on interim and final results, typed ConfigureSuccess; on nova-2 with no typed handler, onError received ListenV1ConfigureFailureException whose failure code is CONFIGURE_KEYTERMS_NOT_SUPPORTED.
  • Gate in Docker (eclipse-temurin:17-jdk, ./gradlew spotlessCheck compileJava compileExamples unitTest): exit 0.
  • Additive only, all new response fields Optional, repeated-key serialization tested on REST and WS, no_delay escape hatch tested, all frozen patches present, no .bak files.

Fixed on this branch. The README now has a Nova-3 multilingual section (REST + streaming, hints bias rather than restrict) and the V1ConnectOptions.languageHint(...) default methods carry the same Javadoc as the REST builders. The description's Migration section now states the 0.11.x → 0.12.0 Configure routing change explicitly, since this repo squashes with the PR body and release-please reads it.

Follow-up, not a block (pre-existing): a refused WebSocket upgrade reaches the caller as a generic RuntimeException("WebSocket connection failed with HTTP 400 ..."), not a DeepgramHttpException, so the body and dg-request-id are lost, and reconnect keeps retrying after the 400. Also, ./gradlew javadoc fails on core/ReconnectingWebSocketListener.java:588 (<= in a Javadoc comment) on main as well; CI does not run javadoc.

Nits (abstract languagesHinted on the response _FinalStage; REST List<String> vs WS ListenV1LanguageHint union; ListenV1Error.getCode "Deprecated" without @Deprecated; no test for utterance languages, words[].language, or an unknown failure code) are optional.

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

Re-approving at 92d4ece. The only change since the earlier approval is the README fix: the "Nova-3 multilingual language hints" fence from 430afce overrode a _visitUnknown method that MediaTranscribeResponse.Visitor does not declare and used ws without declaring it, so ReadmeSnippetsCompileTest failed in CI. At 92d4ece that test passes (Docker, eclipse-temurin:17-jdk) and all CI checks are green.

Merge hold unchanged: production still returns 400 INVALID_QUERY_PARAMETER for model=nova-3&language=multi&language_hint=en&language_hint=es (request 01a168bf-c25d-7bf2-9bcc-d9edd92f91fd), and deepgram-docs #1288 is still labeled Do Not Merge. Merge once the production probe returns 200 with languages_hinted populated and #1288 lands.

Note: #132 edits an adjacent AGENTS.md bullet and conflicts with this branch; land #132 first and rebase this one.

@GregHolmes
GregHolmes merged commit 148a29a into main Oct 23, 2026
9 checks passed
GregHolmes added a commit that referenced this pull request Oct 23, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.11.2](v0.11.1...v0.11.2)
(2026-10-23)


### Features

* **Listen V1 (Nova-3 multilingual):** Add `languageHint(...)` for
prerecorded and streaming requests with `language("multi")`; typed
results expose detected `getLanguages()` and normalized
`getLanguagesHinted()` values. Live reconfiguration now emits
`onConfigureSuccess(...)` or `onConfigureFailure(...)`; generic
`onError(...)` receives `ListenV1ConfigureFailureException` when no
typed failure handler is registered.
([#131](#131))
([148a29a](148a29a))

---
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: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Greg Holmes <greg.holmes@deepgram.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.

2 participants