From 7c142fbbf968782f994e0c718c570a50a37acd49 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Tue, 29 Sep 2026 19:00:11 +0000 Subject: [PATCH 1/2] =?UTF-8?q?##=20Typescript=20SDK=20Changes:=20*=20`ope?= =?UTF-8?q?nrouter.stt.createTranscription()`:=20=20=20*=20=20`request.stt?= =?UTF-8?q?Request`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20=20?= =?UTF-8?q?=20*=20=20`response`=20**Changed**=20*=20`openrouter.embeddings?= =?UTF-8?q?.generate()`:=20=20=20*=20=20`request.requestBody.provider`=20*?= =?UTF-8?q?*Changed**=20*=20`openrouter.endpoints.list()`:=20=20`response.?= =?UTF-8?q?data.endpoints[].providerName.enum(elevenLabs)`=20**Added**=20*?= =?UTF-8?q?=20`openrouter.stt.createTranscriptionMultipart()`:=20=20=20*?= =?UTF-8?q?=20=20`request.requestBody`=20**Changed**=20=20=20*=20=20`respo?= =?UTF-8?q?nse`=20**Changed**=20*=20`openrouter.batch.createBatches()`:=20?= =?UTF-8?q?=20=20*=20=20`request.batchSubmitBody.provider.only[].union(Pro?= =?UTF-8?q?viderName).enum(elevenLabs)`=20**Added**=20*=20`openrouter.byok?= =?UTF-8?q?.list()`:=20=20=20*=20=20`request.provider`=20**Changed**=20=20?= =?UTF-8?q?=20*=20=20`response.data[].provider.enum(elevenlabs)`=20**Added?= =?UTF-8?q?**=20*=20`openrouter.byok.create()`:=20=20=20*=20=20`request.cr?= =?UTF-8?q?eateByokKeyRequest.provider.enum(elevenlabs)`=20**Added**=20=20?= =?UTF-8?q?=20*=20=20`response.data.provider.enum(elevenlabs)`=20**Added**?= =?UTF-8?q?=20*=20`openrouter.byok.get()`:=20=20`response.data.provider.en?= =?UTF-8?q?um(elevenlabs)`=20**Added**=20*=20`openrouter.byok.update()`:?= =?UTF-8?q?=20=20`response.data.provider.enum(elevenlabs)`=20**Added**=20*?= =?UTF-8?q?=20`openrouter.chat.send()`:=20=20=20*=20=20`request.chatReques?= =?UTF-8?q?t.provider`=20**Changed**=20*=20`openrouter.generations.getGene?= =?UTF-8?q?ration()`:=20=20`response.data.providerResponses[].providerName?= =?UTF-8?q?.enum(elevenLabs)`=20**Added**=20*=20`openrouter.tts.createSpee?= =?UTF-8?q?ch()`:=20=20=20*=20=20`request.speechRequest.provider.options.e?= =?UTF-8?q?levenlabs`=20**Added**=20*=20`openrouter.endpoints.listZdrEndpo?= =?UTF-8?q?ints()`:=20=20`response.data[].providerName.enum(elevenLabs)`?= =?UTF-8?q?=20**Added**=20*=20`openrouter.alpha.decisions.create()`:=20=20?= =?UTF-8?q?=20*=20=20`request.decisionsRequest.provider`=20**Changed**=20*?= =?UTF-8?q?=20`openrouter.images.generate()`:=20=20=20*=20=20`request.imag?= =?UTF-8?q?eGenerationRequest.provider`=20**Changed**=20*=20`openrouter.pr?= =?UTF-8?q?esets.createPresetsChatCompletions()`:=20=20=20*=20=20`request.?= =?UTF-8?q?chatRequest.provider`=20**Changed**=20*=20`openrouter.presets.c?= =?UTF-8?q?reatePresetsMessages()`:=20=20=20*=20=20`request.messagesReques?= =?UTF-8?q?t.provider`=20**Changed**=20*=20`openrouter.presets.createPrese?= =?UTF-8?q?tsResponses()`:=20=20=20*=20=20`request.responsesRequest.provid?= =?UTF-8?q?er`=20**Changed**=20*=20`openrouter.rerank.rerank()`:=20=20=20*?= =?UTF-8?q?=20=20`request.requestBody.provider`=20**Changed**=20*=20`openr?= =?UTF-8?q?outer.responses.send()`:=20=20=20*=20=20`request.responsesReque?= =?UTF-8?q?st.provider`=20**Changed**=20*=20`openrouter.beta.responses.sen?= =?UTF-8?q?d()`:=20=20=20*=20=20`request.responsesRequest.provider`=20**Ch?= =?UTF-8?q?anged**=20*=20`openrouter.systemOne.create()`:=20=20=20*=20=20`?= =?UTF-8?q?request.decisionsRequest.provider`=20**Changed**=20*=20`openrou?= =?UTF-8?q?ter.videoGeneration.generate()`:=20=20=20*=20=20`request.videoG?= =?UTF-8?q?enerationRequest.provider.options.elevenlabs`=20**Added**?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .speakeasy/gen.lock | 180 ++++++++++-------- .speakeasy/gen.yaml | 2 +- .speakeasy/out.openapi.yaml | 141 +++++++++++++- .speakeasy/workflow.lock | 10 +- RELEASES.md | 12 +- docs/models/byokproviderslug.mdx | 2 +- ...gegenerationproviderpreferencesoptions.mdx | 1 + ...udiotranscriptionsmultipartrequestbody.mdx | 26 +-- docs/models/operations/provider.mdx | 2 +- docs/models/providername.mdx | 2 +- docs/models/provideroptions.mdx | 1 + docs/models/providerresponseprovidername.mdx | 2 +- docs/models/sttentity.mdx | 27 +++ docs/models/sttinlineinputaudio.mdx | 23 +++ docs/models/sttinputaudio.mdx | 23 ++- docs/models/sttrequest.mdx | 28 +-- docs/models/sttresponse.mdx | 2 + docs/models/sttsegment.mdx | 28 +-- docs/models/stturlinputaudio.mdx | 22 +++ docs/models/sttword.mdx | 17 +- docs/models/sttwordtype.mdx | 21 ++ docs/models/videogenerationrequestoptions.mdx | 1 + docs/sdks/stt/README.mdx | 4 +- jsr.json | 2 +- package.json | 12 +- src/funcs/sttCreateTranscription.ts | 2 +- src/funcs/sttCreateTranscriptionMultipart.ts | 74 ++++--- src/lib/config.ts | 4 +- src/models/byokproviderslug.ts | 1 + .../imagegenerationproviderpreferences.ts | 3 + src/models/index.ts | 3 + .../createaudiotranscriptionsmultipart.ts | 34 +++- src/models/operations/listbyokkeys.ts | 1 + src/models/providername.ts | 1 + src/models/provideroptions.ts | 3 + src/models/providerresponse.ts | 1 + src/models/sttentity.ts | 55 ++++++ src/models/sttinlineinputaudio.ts | 43 +++++ src/models/sttinputaudio.ts | 38 ++-- src/models/sttrequest.ts | 16 +- src/models/sttresponse.ts | 16 ++ src/models/sttsegment.ts | 11 ++ src/models/stturlinputaudio.ts | 43 +++++ src/models/sttword.ts | 40 +++- src/models/videogenerationrequest.ts | 3 + src/sdk/stt.ts | 4 +- 46 files changed, 768 insertions(+), 219 deletions(-) create mode 100644 docs/models/sttentity.mdx create mode 100644 docs/models/sttinlineinputaudio.mdx create mode 100644 docs/models/stturlinputaudio.mdx create mode 100644 docs/models/sttwordtype.mdx create mode 100644 src/models/sttentity.ts create mode 100644 src/models/sttinlineinputaudio.ts create mode 100644 src/models/stturlinputaudio.ts diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index c6fc31386..38b7c2a50 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,19 +1,19 @@ lockVersion: "" id: "" management: - docChecksum: 0ce69affde7b9e4d2cc00de21c9546c3 + docChecksum: a4ec22cacdcd10ca0a9440d83d267499 docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.4.4 - configChecksum: 018b7b3414335cc73dff3977adf2f217 + releaseVersion: 1.4.5 + configChecksum: ad81a38f97fdb9349d67eaeab01236c2 repoURL: https://github.com/OpenRouterTeam/typescript-sdk.git installationURL: https://github.com/OpenRouterTeam/typescript-sdk published: true persistentEdits: - generation_id: d334b412-5451-4895-b568-9ff096f592b7 - pristine_commit_hash: 8fb62318242a1da15601f4159577355aa2a455c1 - pristine_tree_hash: 31736555e1b2c2ccf536faa8d2b80749ffb1131d + generation_id: 6ad47fd3-3cef-4ffb-ad26-7a4bd3cb93dd + pristine_commit_hash: 0e86b3b99782b572a38ffb846f764bf69bdecd11 + pristine_tree_hash: 0baefa281563b93c2dc413d36b252896db41830a features: typescript: acceptHeaders: 2.81.2 @@ -2185,8 +2185,8 @@ trackedFiles: deleted: true docs/models/byokproviderslug.mdx: id: d719e6f9fe4e - last_write_checksum: sha1:8a891a793d66e6a08a8f9fe1240a2c815db0f3b3 - pristine_git_object: 2b078b15b1eb3333289ecbc827ab5a368572f6c5 + last_write_checksum: sha1:3d6661aa0e11d354efaee1b32ef73d8b147ae398 + pristine_git_object: 72acc52daac6794076c8acc1a7b2798d1e453cea docs/models/cachecontrol.md: id: 400a7240e8c2 last_write_checksum: sha1:0813cddf0350d7885b906084988a79ace1ddea15 @@ -5388,8 +5388,8 @@ trackedFiles: pristine_git_object: 066f0ccd9d3131443a40415a988a3ee61be96bc1 docs/models/imagegenerationproviderpreferencesoptions.mdx: id: e3693a97bac5 - last_write_checksum: sha1:96a1a8ced2949ff89ce17e97cb588305e63f65cd - pristine_git_object: 64006bd8d3d1f840a644db98756b48d0c4e42753 + last_write_checksum: sha1:7dd4554b27d787f66785f3433a41aa75fa20852d + pristine_git_object: df2b72166fb8bd27df100989c61a4d2091f7c04b docs/models/imagegenerationproviderpreferencesorder.mdx: id: b835062d70fa last_write_checksum: sha1:18e3332047c5ad17a5f95caea5161a23f6953200 @@ -8233,8 +8233,8 @@ trackedFiles: pristine_git_object: e08cabe8838f39f909b860ebc6d5870e25674b5f docs/models/operations/createaudiotranscriptionsmultipartrequestbody.mdx: id: fc22099a3f6b - last_write_checksum: sha1:01958668e2a190aefc8092069c8d54d2800f93b5 - pristine_git_object: 10149533a5252a27f65b5d5f12029e6c7a9e4a47 + last_write_checksum: sha1:18a5d57b69362211c6395a4e75eb7690a3634247 + pristine_git_object: 4f113ff872795d6bb4f459e246c9013c9d56cdf8 docs/models/operations/createaudiotranscriptionsrequest.md: id: 31a341d016bb last_write_checksum: sha1:d5048af13afe597d60f3731c62cc347041551ed9 @@ -10186,8 +10186,8 @@ trackedFiles: deleted: true docs/models/operations/provider.mdx: id: 45f471a16baa - last_write_checksum: sha1:2fdab33fa76c5e42794c1c67a7bff3478916ac03 - pristine_git_object: 8e33bbad1bad85cf9f0ac5ed2708fb12b0d9dddc + last_write_checksum: sha1:f47f69e42641107c4b9b281380b588cdfcd358d0 + pristine_git_object: 1ee9240f9afad3b9713b36811c0877e81ee9f408 docs/models/operations/provisioninternglobals.mdx: id: ba777a02d1a1 last_write_checksum: sha1:01a03ce09a42a822c0b380bce20508d1e01e63b7 @@ -11978,8 +11978,8 @@ trackedFiles: deleted: true docs/models/providername.mdx: id: 69a9efe649dc - last_write_checksum: sha1:d0ef3cb2da066c358bba934a68fc88bb0731bd4b - pristine_git_object: d716839e62122653b8491914be05ed8e42df2008 + last_write_checksum: sha1:a774aaf2e8cf93067c97165de67d05fab9eb0192 + pristine_git_object: 52468d9a40cc1b18ca1cd8440dba334ca53d9557 docs/models/provideroptions.md: id: "986859558e93" last_write_checksum: sha1:a70e9d925e5666078640593f5a9ce95644449cc1 @@ -11987,8 +11987,8 @@ trackedFiles: deleted: true docs/models/provideroptions.mdx: id: 57715f4036c5 - last_write_checksum: sha1:6a83b895adc958895492d9570334de2375a11e38 - pristine_git_object: 69d4a372ac2c0b790eca71157525852574d9176d + last_write_checksum: sha1:af05c0483a16328419274d22ec9e76af9b696d2c + pristine_git_object: 264d5e64c996adb97dc913ad47ac65bc67487974 docs/models/provideroverloadedresponseerrordata.mdx: id: e7ee469f118f last_write_checksum: sha1:32098dd89a3eca10f8b17d43ff6bcf1fa4da15d0 @@ -12029,8 +12029,8 @@ trackedFiles: deleted: true docs/models/providerresponseprovidername.mdx: id: b7038468a0e1 - last_write_checksum: sha1:99b8352e52e941ab0e98195265758853295b5a1f - pristine_git_object: d3bb67d2eb8275255cb37dc55a39170c08302af2 + last_write_checksum: sha1:449105b1c563e8d80d7846d6542e1583e0cc800d + pristine_git_object: ccfb5ae2db74bd110d7a22eddd63a162e9d0571e docs/models/providersort.mdx: id: d43e77bdfc1f last_write_checksum: sha1:42f6ec0a34d49f2398c7237ed53a6d46bacfc6e4 @@ -13161,6 +13161,14 @@ trackedFiles: id: ee2b5c56ea2b last_write_checksum: sha1:46a3c2fe6483e5fabac29e1c436ff9e75a276194 pristine_git_object: 4ae1860025f516fc3e398a4205d4de4af422a764 + docs/models/sttentity.mdx: + id: b5ddd87a7c8d + last_write_checksum: sha1:411d57b2d2920e4c9745d2bd74958db64dfa3858 + pristine_git_object: d29143f347ada287da47819be9af0650cfaccbf5 + docs/models/sttinlineinputaudio.mdx: + id: 81d328948ada + last_write_checksum: sha1:85c8ec4a49124c0be6386f02600897e2120a50e9 + pristine_git_object: 0071dd119d5934e72470adf554d55cc095ee0fb5 docs/models/sttinputaudio.md: id: 5b5b1e143206 last_write_checksum: sha1:ce86df7b6292fe7526a4680df5cc829dfaa42935 @@ -13168,8 +13176,8 @@ trackedFiles: deleted: true docs/models/sttinputaudio.mdx: id: 1029d346a772 - last_write_checksum: sha1:c6562518134d455840164bab7217212bbdbcab6a - pristine_git_object: 706b8702d18c77c1a7e989763539aff578d9eab3 + last_write_checksum: sha1:70b02876ca5e307b188b2f09f28b725c5c5df6fb + pristine_git_object: 744d52b0bcd30ce3d54ccfd1667e2848a513097d docs/models/sttrequest.md: id: 12007e1a8aff last_write_checksum: sha1:5525e1ab7235fa52d276b48fdd40db492bd05ea1 @@ -13177,8 +13185,8 @@ trackedFiles: deleted: true docs/models/sttrequest.mdx: id: 3db98eb65064 - last_write_checksum: sha1:e5d668dcc52fc64cd632abecbed671937e7767a6 - pristine_git_object: 1d2ac708fc2f4f1333711988c8817f2863c369c7 + last_write_checksum: sha1:38fdcad2f22c9ff566301a3b7ba8cd0a2ccf9d85 + pristine_git_object: 3fb5f156de35bb98a0a71c5bba53056a9b018174 docs/models/sttrequestprovider.md: id: 6c1330c9d45f last_write_checksum: sha1:6f6b7c1c0fb5efbb016f5e6a4bc34b4086e4a903 @@ -13199,16 +13207,20 @@ trackedFiles: deleted: true docs/models/sttresponse.mdx: id: b32fefefc5a1 - last_write_checksum: sha1:4de40962619312784cbb094066a1cb18cb301d90 - pristine_git_object: 1238e3be9bfacbbb34a8dd4e3897974d6220f32a + last_write_checksum: sha1:b051670ee13221e8859e3563da1ac463c58c6d60 + pristine_git_object: 2d839a42ec33915b4a855cdff2af41168cae2660 docs/models/sttsegment.mdx: id: dafc141a887e - last_write_checksum: sha1:b900e31607614a3f26029054623acc8575b690a4 - pristine_git_object: ca550fff4793491deb777a099bbaffbf33ca7961 + last_write_checksum: sha1:9538d65e5a0f9cc5699dba9b64226423bec30b9a + pristine_git_object: a921841bd73b27c6bf2a4d3c09e3519c40381e83 docs/models/stttimestampgranularity.mdx: id: 07ff4ca92af0 last_write_checksum: sha1:d33580c40ef765a902ff68a8daeb852dfc037cab pristine_git_object: e21f981f5c9947cb65b6f06c185901448f6c0355 + docs/models/stturlinputaudio.mdx: + id: 5fec31387008 + last_write_checksum: sha1:adc5a5c15854001ee6c72dc6c2e234dd868c99e5 + pristine_git_object: 19572f868e075ce2f57c5ca343a1e09d25c5accc docs/models/sttusage.md: id: fb5b46b82d83 last_write_checksum: sha1:54d203a4687ff52092d3b1997d1e4adad6977966 @@ -13220,8 +13232,12 @@ trackedFiles: pristine_git_object: 99ed839ab9ce881a087a70ea93436e3af3471738 docs/models/sttword.mdx: id: f08736cccd98 - last_write_checksum: sha1:227347e5cedd43ccc7e42da107de03db0209d5c0 - pristine_git_object: e3878a2c1d2ada67e4c172c3827f85aa433f80ac + last_write_checksum: sha1:179994afd284e9eb424b94b0001eb5f4112db857 + pristine_git_object: b257d9890e72b59b3dce8dcddd69c7394b912909 + docs/models/sttwordtype.mdx: + id: c0d83424d04a + last_write_checksum: sha1:8af79814bd5a4982600f25b2927a48f6af774ad2 + pristine_git_object: 71ed7d613bf4ceb306cbf5be7aef1cd016a75895 docs/models/subagentnestedtool.md: id: 64f36dbb6ae1 last_write_checksum: sha1:a0115ffc5e144eabe874bee90968a8856e9b28b5 @@ -14294,8 +14310,8 @@ trackedFiles: deleted: true docs/models/videogenerationrequestoptions.mdx: id: 3b7f4efdc2d9 - last_write_checksum: sha1:ee566937fce9bc8b07363e85b46334e8810c25c2 - pristine_git_object: a61870ae80f886ce7f3154cbcf0c7f552193922a + last_write_checksum: sha1:8d91656f62fb1adf944d993f0358be0fa5c16da8 + pristine_git_object: dfed3202d96fbe3d4a031615e2dc5aae64e26e96 docs/models/videogenerationrequestprovider.md: id: eef166771d33 last_write_checksum: sha1:aeb8022be1f0662c8f1e9213a81762fe3368c563 @@ -14832,8 +14848,8 @@ trackedFiles: deleted: true docs/sdks/stt/README.mdx: id: 190b0dc9a5d1 - last_write_checksum: sha1:b835cb30bf693fe45095b52a0ae93c0f65fabce4 - pristine_git_object: 5dbc5cf9ec9371f37d3470af2be60d2f1c815695 + last_write_checksum: sha1:53a75cb2c4991de75fe657f9452c417c97cc6ac1 + pristine_git_object: 5dfd88bc486eed0ad77c953c3ea82638c4376045 docs/sdks/systemone/README.mdx: id: 55c317c71f3d last_write_checksum: sha1:bc9bdc066212391be32e4418438b965694faa2c8 @@ -14895,12 +14911,12 @@ trackedFiles: pristine_git_object: 410efafd6a7f50d91ccb87131fedbe0c3d47e15a jsr.json: id: 7f6ab7767282 - last_write_checksum: sha1:baab28ac90aa1196e7d6b4cd9139981c6a8f28b8 - pristine_git_object: dee641cdec76d0db20e685821f890b4aeb1852a1 + last_write_checksum: sha1:32a28c81ca1fc051d131c2df3b03aed49d632d9d + pristine_git_object: 21113ae66bad30b61d8bba755a8a10ea59bd62cd package.json: id: 7030d0b2f71b - last_write_checksum: sha1:86c4869c7ce6bacac8a0bfd14dd7b72dd3aa2cdf - pristine_git_object: 2becfd568a89da8108457bed7e1930a916b871b7 + last_write_checksum: sha1:7d6242b9c25030913267cd6d055e9a2c1999cb7c + pristine_git_object: 5802cf47036fb4c84362386202e0b47b97347605 src/core.ts: id: f431fdbcd144 last_write_checksum: sha1:5aa66b0b6a5964f3eea7f3098c2eb3c0ee9c0131 @@ -15351,12 +15367,12 @@ trackedFiles: pristine_git_object: ee28b4b8436be56ef32d76d072e1681631d3d238 src/funcs/sttCreateTranscription.ts: id: 90b735003ac7 - last_write_checksum: sha1:ccb9793daeba6384df12e03f112c9a58861997d6 - pristine_git_object: 41d564b68234b01ff6929afba94ef5c7f91bb938 + last_write_checksum: sha1:99b1c14be574145b8a5825774922ccfd7b048db0 + pristine_git_object: 0c666cec81fc6e205a624ef832ca706e1d9d8a57 src/funcs/sttCreateTranscriptionMultipart.ts: id: ec09b43036c3 - last_write_checksum: sha1:a4ccbbbf93dc4b205afcae8e2fec5e769056a8ce - pristine_git_object: c0a7ee9d613521068a759c5c7de0ec298aa30723 + last_write_checksum: sha1:47db64b6baee5b21609109fc25f38df54a6d17b3 + pristine_git_object: 3df166bb5c81cc060ff5e79d6d9e8c02a7b82954 src/funcs/systemOneCreate.ts: id: 446a269bb013 last_write_checksum: sha1:371dfcdd07849de9b435b70f4a853d5296cb4101 @@ -15483,8 +15499,8 @@ trackedFiles: pristine_git_object: a187e58707bdb726ca2aff74941efe7493422d4e src/lib/config.ts: id: 320761608fb3 - last_write_checksum: sha1:72c456dbc09c8f22dc3cc0d5312f41a515acd94c - pristine_git_object: aa39e035f4b11430a872473df147c2a67e984450 + last_write_checksum: sha1:ec7d0ea736c8f9c0757eb4aded5a64df58726c3c + pristine_git_object: 982245ada786cf00fb392f889b025fef4649a52e src/lib/dlv.ts: id: b1988214835a last_write_checksum: sha1:eaac763b22717206a6199104e0403ed17a4e2711 @@ -16197,8 +16213,8 @@ trackedFiles: pristine_git_object: d5f3e94c87517ea178dd62f9388d9b873cb94603 src/models/byokproviderslug.ts: id: f8e7a5a4b0a2 - last_write_checksum: sha1:9919a973c8eb7c8c17bf99d7b5e8b18b196786c3 - pristine_git_object: 076bef0af4d9ce8846604973df3ac4be3b8a47e8 + last_write_checksum: sha1:ed049eefcc4157e9ce230342d5c3d9372b35761f + pristine_git_object: af2e97e84245d573066bd02c592525669da34f87 src/models/capabilitydescriptor.ts: id: 867d654ac8ab last_write_checksum: sha1:85657be17f920009d3e8ee58b548d9bf64995059 @@ -17105,8 +17121,8 @@ trackedFiles: pristine_git_object: 90f9f6f95c13c7e10612244efbca358a7377ed51 src/models/imagegenerationproviderpreferences.ts: id: 55445c92cf9f - last_write_checksum: sha1:3bd3610259619c06730a36411df06a6630f21231 - pristine_git_object: 8b720d6fc1d19bddf8604de4cec98f226fc85904 + last_write_checksum: sha1:17836f066d03f01807d74abfb7f28f02fbd40f55 + pristine_git_object: 5dfac29524e31005c0921742b270bac5d6cfc722 src/models/imagegenerationrequest.ts: id: ea1ffc0d2470 last_write_checksum: sha1:7836149b2dabcd85748e2f8c907f53dfc88ac8bf @@ -17189,8 +17205,8 @@ trackedFiles: pristine_git_object: 7abdfe096d3adff317db6837dc689c69db92e127 src/models/index.ts: id: f93644b0f37e - last_write_checksum: sha1:002f438a81a867b08717825c6a40db7197893b9d - pristine_git_object: 04f7fbc9149e8f6a37d8f5e11dffbd3c03e6de43 + last_write_checksum: sha1:2ae266385b689c45c47ae459207d258b106c0eb0 + pristine_git_object: 6a7a2dbb6a142fc2c4068a5dcd47ba4f0987dd43 src/models/inputaudio.ts: id: 9bdc14c7565f last_write_checksum: sha1:2f8dc4c1d6a9c2927d9eb186e0ecedf7b81838e6 @@ -17825,8 +17841,8 @@ trackedFiles: pristine_git_object: 680fccc1542fed95993d96651f175c345bb4c687 src/models/operations/createaudiotranscriptionsmultipart.ts: id: 29a4e7468387 - last_write_checksum: sha1:5fcce0bf552b59f0f4426b15596ee4666de56844 - pristine_git_object: 8dd0d87eb9e612d8ac2ddb759ccc48ddbc498978 + last_write_checksum: sha1:4ec0813df8e91ea8a16b415bf0f67434ddf0918f + pristine_git_object: b2e8c9cde2e8eb25edbe9baf2159b4a89ebd6136 src/models/operations/createauthkeyscode.ts: id: 1443f6afbf40 last_write_checksum: sha1:59be6a15c34f2855d2328c8ce15a70037a243d01 @@ -18125,8 +18141,8 @@ trackedFiles: pristine_git_object: 78a90943275900fffb84968900c040d743744806 src/models/operations/listbyokkeys.ts: id: 953de50b8d0e - last_write_checksum: sha1:3ed4be6133b4076fb35901544f93bc7fb1274290 - pristine_git_object: 9614d8a512a3727366470dfcee59bd248de63e63 + last_write_checksum: sha1:49de85405735417a584bd657168fd0f5054b58be + pristine_git_object: b91fc9b66eab6994127143afdfe247de940406dc src/models/operations/listcontainerfiles.ts: id: 833ac1772f55 last_write_checksum: sha1:11caa71967732d188bf4a8a556164fd781ef8e17 @@ -18665,12 +18681,12 @@ trackedFiles: pristine_git_object: fbcf0dbcd4bae7f5b06957e0a7c6a75db9b79570 src/models/providername.ts: id: 89e536fb023a - last_write_checksum: sha1:13d5ac2ce678029f8663d33b31f0e760bf102bd2 - pristine_git_object: 185ed64f12f77f390b42d5ba12de08481d093416 + last_write_checksum: sha1:48dc0c66955eb9654e425291745df46429c6e272 + pristine_git_object: a5aa971d6e60bdd1673f5ca518d8aa87716581af src/models/provideroptions.ts: id: 65c45f7034d2 - last_write_checksum: sha1:f172faa00eb247b0f2973a18b5fb82415bb480dc - pristine_git_object: 0f8373f4ad241473af67abba5060de49fe72c466 + last_write_checksum: sha1:8d76a85ec9e8809df88b06d525a7d028ae46b49d + pristine_git_object: 6f53600b617c771cf8ed36d064dbac6d242602c9 src/models/provideroverloadedresponseerrordata.ts: id: 379f1256314f last_write_checksum: sha1:625dd68dfb8a747ba2f86a1896710d566a78550e @@ -18681,8 +18697,8 @@ trackedFiles: pristine_git_object: 59f176460f7d485d697eb3edfa8ceec3dc7c0983 src/models/providerresponse.ts: id: 7427d17a27bc - last_write_checksum: sha1:f6fcb65bc8aa5161536c009a9622ac110b7f6245 - pristine_git_object: 1fa76d06095e6f8fa88c9f289e779c32d9b3db56 + last_write_checksum: sha1:365c70d39b7c1586b8f7b65385c86a8cb77cd5dc + pristine_git_object: 25e844006a750f27f6c77519e0ef41dbce36097f src/models/providersort.ts: id: 7d1e919d1ec3 last_write_checksum: sha1:4c871e5fc8af6042ca41d12c54ba8640706c0863 @@ -19023,34 +19039,46 @@ trackedFiles: id: 3b88c304514b last_write_checksum: sha1:c4f9e0dd9deb1f175853307a6f42d9f51293169a pristine_git_object: c0a93469bdcf62d6e39ab4d4811befc965aa460c + src/models/sttentity.ts: + id: 7178554c1194 + last_write_checksum: sha1:9232f4e645081546965bc6deffd80bbba9fd9f41 + pristine_git_object: 1dcbbeb8759e064b331acac10569ed596d0653a3 + src/models/sttinlineinputaudio.ts: + id: 58a47542cf73 + last_write_checksum: sha1:ebaec879c49916788ab5e13682d2151a4a86d981 + pristine_git_object: 19eb6a5c38014bd8c9f768696a9cc799d86fffef src/models/sttinputaudio.ts: id: 2251488e7c0b - last_write_checksum: sha1:bcf2fffa84b2ec26c4c64a117e51491e650e94c4 - pristine_git_object: 48c884de16729adba8d45fb09a6e3fd292925570 + last_write_checksum: sha1:b05359e38a144130d3c2f1396e03ed9c5f2f0f80 + pristine_git_object: 45c3067d49ca5dc5e9c4343baa67c9348e0fef11 src/models/sttrequest.ts: id: 3be8453c0517 - last_write_checksum: sha1:640d7dc09171c134d50038314db4c052f6731be3 - pristine_git_object: d91de95b0ad0ad7616e950984f29210ea7b317b6 + last_write_checksum: sha1:6ecd5f4a2b57c62620c9bd5407e5b7af4bb93144 + pristine_git_object: 7f1eb169bae27949fa2188e39aa960ef67fe8049 src/models/sttresponse.ts: id: 383a6e21047b - last_write_checksum: sha1:98c0c0fcaf08defc6ae67276035a8bef1859ae4d - pristine_git_object: 7584c62abae28c47b645c5f97f2f3eadfe328504 + last_write_checksum: sha1:f889b6c8ad8f625f5bad5eac0e13dae8b8666b44 + pristine_git_object: feb652f03edfd051e98fe85c7c84bebee3909894 src/models/sttsegment.ts: id: 610157864a1c - last_write_checksum: sha1:5d151433465107a2a0ae08c554907886392c0442 - pristine_git_object: 322b8b28a55ac7588c702f134757a04aeb880dfb + last_write_checksum: sha1:f3dd3cefb98bc7a65c9c899bf99f9d7a00322740 + pristine_git_object: b78c3bdbf850966368ebe7e6a06280ec71651e47 src/models/stttimestampgranularity.ts: id: 506bf5060d97 last_write_checksum: sha1:d7f575d280d0b3bc8e35ed5f2a55a4c38212ab24 pristine_git_object: b08b05137cfba7c7b9a0830bd72a6632b194ab14 + src/models/stturlinputaudio.ts: + id: d7757cc949dd + last_write_checksum: sha1:8e2d5981f2f8d5d9440b48bbffe909e6e9f73aad + pristine_git_object: 77fb13192f87534dd4098f36be606946493eb24c src/models/sttusage.ts: id: 6d43566c0d40 last_write_checksum: sha1:8754d3492cdde94b8fc2babd96d083eee39d4a6b pristine_git_object: 2b8edcdd24e9b9f75bf1ac78f79c387794ac839b src/models/sttword.ts: id: 748744003b2c - last_write_checksum: sha1:bc75f0f544d775c0d6eee135bd188fdee6645060 - pristine_git_object: 2ea0476e2cf868542a85c399b00219cbcc9a5120 + last_write_checksum: sha1:739420e58f95a85be57ffd8df877ada3601bcc31 + pristine_git_object: e7af01f3f2e2bf9612a0c857d875858788f9cff1 src/models/subagentnestedtool.ts: id: 9d5ec7df4bc2 last_write_checksum: sha1:7e49db4ac2b5ad26524d9d7b8c0b95216ee4b960 @@ -19297,8 +19325,8 @@ trackedFiles: pristine_git_object: fcb320875bf6acf4d359f04c3c475d8688da5a2d src/models/videogenerationrequest.ts: id: e72ea2e4c5b3 - last_write_checksum: sha1:465433a7322b4836472631c2d29333506a0f149c - pristine_git_object: 961402e694c938b6d257ab15fe04eeacefb28f31 + last_write_checksum: sha1:88f43577a6d3e75c9577ca16264c3a046b2807d2 + pristine_git_object: b17c821a22b2201d7d103b1326e386b41aa286dd src/models/videogenerationresponse.ts: id: 0a96c6ee9eea last_write_checksum: sha1:1128cee8ad6711bef9a82476dd8b09042ff29b73 @@ -19549,8 +19577,8 @@ trackedFiles: pristine_git_object: d5726986f92f5958854fe3804915fed0cdb9eee5 src/sdk/stt.ts: id: fd9e88c22d1f - last_write_checksum: sha1:baa74a0310eb8b465dea302495e744e3f3ea1ca5 - pristine_git_object: 7efe904b807115d3c691636b37a98fdf3b079878 + last_write_checksum: sha1:59ba5f5c87bc57bf52d0b46b81e194a3099b08fb + pristine_git_object: 0d9653a54123f8e3f0c296810bdedefd5687b81e src/sdk/systemone.ts: id: af359eaea7c4 last_write_checksum: sha1:6159ff585ccef54dab6c74d100869f46f1d38360 @@ -20596,7 +20624,7 @@ examples: application/json: {"error": {"code": 504, "message": "The operation was aborted due to timeout"}} speakeasy-default-create-audio-transcriptions-multipart: requestBody: - multipart/form-data: {"file": "x-file: example.file", "model": "Escalade"} + multipart/form-data: {"model": "Escalade"} responses: "200": application/json: {"text": "Hello, this is a test of OpenAI speech-to-text transcription."} @@ -23406,4 +23434,4 @@ examples: "504": application/json: {"error": {"code": 504, "message": "Vault request timed out"}} examplesVersion: 1.0.2 -releaseNotes: "## Typescript SDK Changes:\n* `openrouter.chat.send()`: \n * `request.chatRequest.plugins[].union(jev-router)` **Added**\n* `openrouter.presets.createPresetsChatCompletions()`: \n * `request.chatRequest.plugins[].union(jev-router)` **Added**\n* `openrouter.presets.createPresetsMessages()`: \n * `request.messagesRequest.plugins[].union(jev-router)` **Added**\n* `openrouter.presets.createPresetsResponses()`: \n * `request.responsesRequest.plugins[].union(jev-router)` **Added**\n* `openrouter.responses.send()`: \n * `request.responsesRequest.plugins[].union(jev-router)` **Added**\n* `openrouter.beta.responses.send()`: \n * `request.responsesRequest.plugins[].union(jev-router)` **Added**\n" +releaseNotes: "## Typescript SDK Changes:\n* `openrouter.stt.createTranscription()`: \n * `request.sttRequest` **Changed** (Breaking ⚠️)\n * `response` **Changed**\n* `openrouter.embeddings.generate()`: \n * `request.requestBody.provider` **Changed**\n* `openrouter.endpoints.list()`: `response.data.endpoints[].providerName.enum(elevenLabs)` **Added**\n* `openrouter.stt.createTranscriptionMultipart()`: \n * `request.requestBody` **Changed**\n * `response` **Changed**\n* `openrouter.batch.createBatches()`: \n * `request.batchSubmitBody.provider.only[].union(ProviderName).enum(elevenLabs)` **Added**\n* `openrouter.byok.list()`: \n * `request.provider` **Changed**\n * `response.data[].provider.enum(elevenlabs)` **Added**\n* `openrouter.byok.create()`: \n * `request.createByokKeyRequest.provider.enum(elevenlabs)` **Added**\n * `response.data.provider.enum(elevenlabs)` **Added**\n* `openrouter.byok.get()`: `response.data.provider.enum(elevenlabs)` **Added**\n* `openrouter.byok.update()`: `response.data.provider.enum(elevenlabs)` **Added**\n* `openrouter.chat.send()`: \n * `request.chatRequest.provider` **Changed**\n* `openrouter.generations.getGeneration()`: `response.data.providerResponses[].providerName.enum(elevenLabs)` **Added**\n* `openrouter.tts.createSpeech()`: \n * `request.speechRequest.provider.options.elevenlabs` **Added**\n* `openrouter.endpoints.listZdrEndpoints()`: `response.data[].providerName.enum(elevenLabs)` **Added**\n* `openrouter.alpha.decisions.create()`: \n * `request.decisionsRequest.provider` **Changed**\n* `openrouter.images.generate()`: \n * `request.imageGenerationRequest.provider` **Changed**\n* `openrouter.presets.createPresetsChatCompletions()`: \n * `request.chatRequest.provider` **Changed**\n* `openrouter.presets.createPresetsMessages()`: \n * `request.messagesRequest.provider` **Changed**\n* `openrouter.presets.createPresetsResponses()`: \n * `request.responsesRequest.provider` **Changed**\n* `openrouter.rerank.rerank()`: \n * `request.requestBody.provider` **Changed**\n* `openrouter.responses.send()`: \n * `request.responsesRequest.provider` **Changed**\n* `openrouter.beta.responses.send()`: \n * `request.responsesRequest.provider` **Changed**\n* `openrouter.systemOne.create()`: \n * `request.decisionsRequest.provider` **Changed**\n* `openrouter.videoGeneration.generate()`: \n * `request.videoGenerationRequest.provider.options.elevenlabs` **Added**\n" diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 8e4ddc7a2..afeb0e6b1 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -37,7 +37,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true typescript: - version: 1.4.4 + version: 1.4.5 acceptHeaderEnum: false additionalDependencies: dependencies: diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index 08aae35d6..e5e149ceb 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -6263,6 +6263,7 @@ components: - 'deepseek' - 'dekallm' - 'digitalocean' + - 'elevenlabs' - 'featherless' - 'fireworks' - 'fish-audio' @@ -17457,6 +17458,7 @@ components: - 'DeepSeek' - 'DekaLLM' - 'DigitalOcean' + - 'ElevenLabs' - 'Featherless' - 'Fireworks' - 'Fish Audio' @@ -24988,6 +24990,7 @@ components: - 'DeepSeek' - 'DekaLLM' - 'DigitalOcean' + - 'ElevenLabs' - 'Featherless' - 'Fireworks' - 'Fish Audio' @@ -25202,6 +25205,9 @@ components: digitalocean: additionalProperties: {} type: 'object' + elevenlabs: + additionalProperties: {} + type: 'object' enfer: additionalProperties: {} type: 'object' @@ -25766,6 +25772,7 @@ components: - 'DeepSeek' - 'DekaLLM' - 'DigitalOcean' + - 'ElevenLabs' - 'Featherless' - 'Fireworks' - 'Fish Audio' @@ -28534,8 +28541,38 @@ components: - 111 logprob: -0.5 token: 'Hello' - STTInputAudio: - description: 'Base64-encoded audio to transcribe' + STTEntity: + description: 'A detected entity, returned when the provider runs entity detection' + example: + end_char: 25 + start_char: 15 + text: 'John Smith' + type: 'name' + properties: + end_char: + description: 'Zero-based exclusive character offset of the entity end within the response-level text (not seconds)' + example: 25 + type: 'integer' + start_char: + description: 'Zero-based character offset of the entity start within the response-level text (not seconds)' + example: 15 + type: 'integer' + text: + description: 'Entity text as it appears in the transcript' + type: 'string' + type: + description: 'Provider entity type label' + example: 'name' + type: 'string' + required: + - 'text' + - 'type' + - 'start_char' + - 'end_char' + type: 'object' + STTInlineInputAudio: + additionalProperties: false + description: 'Inline base64 audio input for speech-to-text' example: data: 'UklGRiQA...' format: 'wav' @@ -28544,15 +28581,20 @@ components: description: 'Base64-encoded audio data (raw bytes, not a data URI)' type: 'string' format: - description: 'Audio format (e.g., wav, mp3, flac, m4a, ogg, webm, aac). Supported formats vary by provider.' + description: 'Audio format (e.g., wav, mp3, flac, m4a, ogg, webm, aac). Supported formats vary by provider. "pcm" means headerless signed 16-bit little-endian mono audio at 16 kHz.' pattern: '^[a-zA-Z0-9][a-zA-Z0-9+._-]{0,15}$' type: 'string' required: - 'data' - 'format' type: 'object' + STTInputAudio: + anyOf: + - $ref: '#/components/schemas/STTInlineInputAudio' + - $ref: '#/components/schemas/STTUrlInputAudio' + description: 'Audio to transcribe: inline base64 bytes, or a URL the provider downloads directly.' STTRequest: - description: 'Speech-to-text request input. Accepts a JSON body with input_audio containing base64-encoded audio.' + description: 'Speech-to-text request input. Accepts a JSON body with input_audio containing base64-encoded audio or a URL the provider downloads.' example: input_audio: data: 'UklGRiQA...' @@ -28560,8 +28602,23 @@ components: language: 'en' model: 'openai/whisper-large-v3' properties: + diarize: + description: 'Label each word with the speaker who said it. Speaker labels are returned on the words array (speaker, speaker_label), so response_format must be "verbose_json" (a "json" request is rejected with a 400) and word timestamps are included even when timestamp_granularities omits "word". Only supported by some providers; the request is rejected with a 400 when the selected model cannot diarize. Providers may charge extra.' + example: true + type: 'boolean' input_audio: $ref: '#/components/schemas/STTInputAudio' + keyterms: + description: 'Domain terms, names, or phrases to bias recognition toward. Only supported by some providers; the request is rejected with a 400 when the selected model cannot use keyterms. Providers may cap the number of terms or characters per term and may charge extra.' + example: + - 'OpenRouter' + - 'Scribe' + items: + maxLength: 100 + minLength: 1 + type: 'string' + maxItems: 1000 + type: 'array' language: description: 'ISO-639-1 language code (e.g., "en", "ja"). Auto-detected if omitted.' example: 'en' @@ -28633,10 +28690,20 @@ components: example: 9.2 format: 'double' type: 'number' + entities: + description: 'Detected entities with character offsets into text, present when the provider runs entity detection' + items: + $ref: '#/components/schemas/STTEntity' + type: 'array' language: description: 'Detected or forced language, present when response_format is verbose_json' example: 'english' type: 'string' + language_confidence: + description: 'Provider confidence in the detected language from 0 to 1, present when response_format is verbose_json and the provider scores language detection' + example: 0.98 + format: 'double' + type: 'number' segments: description: 'Timestamped transcript segments, present when response_format is verbose_json' items: @@ -28682,6 +28749,10 @@ components: description: 'Average log probability of the segment' format: 'double' type: 'number' + channel: + description: 'Zero-based audio channel index for the segment, present when the provider transcribes channels separately' + example: 0 + type: 'integer' compression_ratio: description: 'Compression ratio of the segment' format: 'double' @@ -28707,6 +28778,10 @@ components: description: 'Speaker index for the segment, present when the provider returns diarization data' example: 0 type: 'integer' + speaker_label: + description: 'Provider speaker label for the segment, present when the provider labels speakers with a string' + example: 'speaker_0' + type: 'string' start: description: 'Segment start time in seconds' example: 0 @@ -28739,6 +28814,25 @@ components: example: 'word' type: 'string' x-speakeasy-unknown-values: allow + STTUrlInputAudio: + additionalProperties: false + description: 'Audio input fetched by the provider from a URL' + example: + format: 'mp3' + url: 'https://example.com/meeting.mp3' + properties: + format: + description: 'Audio format of the file at the URL. Defaults to the extension of the URL path; required when the path has no extension.' + pattern: '^[a-zA-Z0-9][a-zA-Z0-9+._-]{0,15}$' + type: 'string' + url: + description: 'Publicly reachable http(s) URL of the audio file. The provider downloads it directly, so the inline upload size limit does not apply. Only supported by some providers.' + format: 'uri' + maxLength: 8000 + type: 'string' + required: + - 'url' + type: 'object' STTUsage: description: 'Aggregated usage statistics for the request' example: @@ -28780,6 +28874,10 @@ components: start: 0 word: 'Hello' properties: + channel: + description: 'Zero-based audio channel index for the word, present when the provider transcribes channels separately' + example: 0 + type: 'integer' confidence: description: 'Provider confidence for the word from 0 to 1, present when the provider returns per-word confidence' example: 0.98 @@ -28794,13 +28892,25 @@ components: description: 'Speaker index for the word, present when the provider returns diarization data' example: 0 type: 'integer' + speaker_label: + description: 'Provider speaker label for the word, present when the provider labels speakers with a string' + example: 'speaker_0' + type: 'string' start: description: 'Word start time in seconds' example: 0 format: 'double' type: 'number' + type: + description: 'Kind of entry; omitted or "word" for spoken words, "audio_event" for non-speech sounds the provider tags with timestamps' + enum: + - 'word' + - 'audio_event' + example: 'word' + type: 'string' + x-speakeasy-unknown-values: allow word: - description: 'The transcribed word' + description: 'The transcribed word, or the event tag such as "(laughter)" when type is audio_event' example: 'Hello' type: 'string' required: @@ -33219,7 +33329,7 @@ paths: - $ref: "#/components/parameters/AppCategories" /audio/transcriptions: post: - description: 'Transcribes audio into text. Accepts base64-encoded audio input as JSON or an OpenAI-style multipart/form-data file upload, and returns the transcribed text.' + description: 'Transcribes audio into text. Accepts base64-encoded audio input as JSON, an OpenAI-style multipart/form-data file upload, or a URL the provider downloads directly, and returns the transcribed text.' operationId: 'createAudioTranscriptions' requestBody: content: @@ -33239,16 +33349,27 @@ paths: model: 'openai/whisper-large-v3' schema: properties: + diarize: + description: 'Label each word with the speaker who said it (words[].speaker, words[].speaker_label). Requires response_format "verbose_json" (400 otherwise); word timestamps are included even when timestamp_granularities[] omits "word". Only supported by some providers; 400 when the selected model cannot diarize.' + type: 'boolean' file: - description: 'The audio file to transcribe. The format is derived from the filename extension or the file part content type. Max 25 MB; send larger files as base64 JSON via input_audio.' + description: 'The audio file to transcribe. The format is derived from the filename extension or the file part content type. Max 25 MB; send larger files as base64 JSON via input_audio, or by URL via source_url. Exactly one of file or source_url is required.' format: 'binary' type: 'string' + keyterms[]: + description: 'Domain terms, names, or phrases to bias recognition toward; repeat the part once per term (keyterms=... is also accepted). Only supported by some providers; 400 when the selected model cannot use keyterms.' + items: + type: 'string' + type: 'array' language: description: 'The language of the input audio (ISO-639-1).' type: 'string' model: description: 'The model to use for transcription.' type: 'string' + provider: + description: 'JSON-encoded provider preferences object, the same shape as the JSON body field: { "options": { "": { ... } } }. Only options for the matched provider are forwarded. Must decode to a JSON object.' + type: 'string' response_format: description: 'The response format. "json" (default) returns { text, usage }; "verbose_json" additionally returns task, language, duration, and segment-level timestamps (OpenAI-compatible providers only).' enum: @@ -33260,6 +33381,10 @@ paths: description: 'A unique identifier for grouping related requests (e.g., a conversation or agent workflow). Used for observability grouping in Broadcast and private logging; never sent to the provider. If provided in both the request body and the x-session-id header, the body value takes precedence.' maxLength: 256 type: 'string' + source_url: + description: 'Publicly reachable http(s) URL of the audio file, downloaded by the provider directly (no size limit on our side). The format is derived from the URL path extension. Only supported by some providers; exactly one of file or source_url is required.' + format: 'uri' + type: 'string' temperature: description: 'The sampling temperature.' type: 'number' @@ -33280,7 +33405,6 @@ paths: maxLength: 256 type: 'string' required: - - 'file' - 'model' type: 'object' required: true @@ -34478,6 +34602,7 @@ paths: - 'deepseek' - 'dekallm' - 'digitalocean' + - 'elevenlabs' - 'featherless' - 'fireworks' - 'fish-audio' diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 42895a141..117f9c7bf 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -2,8 +2,8 @@ speakeasyVersion: 1.787.0 sources: OpenRouter API: sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:d459fc4951ffb98908df89f512365c3d870336c241de6dc656fd165370ec4f7f - sourceBlobDigest: sha256:0e8332499fd551b4a824c97338a2ca2fcbdc3079ecaa8973b56dbf88c7ca393e + sourceRevisionDigest: sha256:281e05ea507301da4834afb2131cdaa7495e3dc17ee8e6e81c3c17c16cd1dbc7 + sourceBlobDigest: sha256:1fe7bac53e1b63f914ea5d923514de53b0144501e09ea9dab1eca8682ee5944e tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: openrouter: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:d459fc4951ffb98908df89f512365c3d870336c241de6dc656fd165370ec4f7f - sourceBlobDigest: sha256:0e8332499fd551b4a824c97338a2ca2fcbdc3079ecaa8973b56dbf88c7ca393e + sourceRevisionDigest: sha256:281e05ea507301da4834afb2131cdaa7495e3dc17ee8e6e81c3c17c16cd1dbc7 + sourceBlobDigest: sha256:1fe7bac53e1b63f914ea5d923514de53b0144501e09ea9dab1eca8682ee5944e codeSamplesNamespace: open-router-chat-completions-api-typescript-code-samples - codeSamplesRevisionDigest: sha256:5c8d65247a35cb56f35f268419864338bd516a74b0b53b2877902ec4567e2ded + codeSamplesRevisionDigest: sha256:96a9f528bd3c14efd07b74064fa530e299e8c0ddba34c8d79f881deb4635d0eb workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index 2c7ed982a..160e5397f 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -4196,4 +4196,14 @@ Based on: ### Generated - [typescript v1.4.4] . ### Releases -- [NPM v1.4.4] https://www.npmjs.com/package/@openrouter/sdk/v/1.4.4 - . \ No newline at end of file +- [NPM v1.4.4] https://www.npmjs.com/package/@openrouter/sdk/v/1.4.4 - . + +## 2026-09-29 18:57:48 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [typescript v1.4.5] . +### Releases +- [NPM v1.4.5] https://www.npmjs.com/package/@openrouter/sdk/v/1.4.5 - . \ No newline at end of file diff --git a/docs/models/byokproviderslug.mdx b/docs/models/byokproviderslug.mdx index 2b078b15b..72acc52da 100644 --- a/docs/models/byokproviderslug.mdx +++ b/docs/models/byokproviderslug.mdx @@ -17,5 +17,5 @@ let value: BYOKProviderSlug = "openai"; ## Values ```typescript -"ai21" | "aion-labs" | "akashml" | "alibaba" | "amazon-bedrock" | "amazon-bedrock/claude-on-aws" | "amazon-nova" | "ambient" | "anthropic" | "anthropic/2" | "arcee-ai" | "assemblyai" | "atlas-cloud" | "avian" | "azure" | "baidu" | "baseten" | "black-forest-labs" | "byteplus" | "cerebras" | "chutes" | "cirrascale" | "clarifai" | "claude-on-aws" | "cloudflare" | "cohere" | "coreweave" | "cosine" | "crusoe" | "darkbloom" | "databricks" | "decart" | "deepgram" | "deepinfra" | "deepseek" | "dekallm" | "digitalocean" | "featherless" | "fireworks" | "fish-audio" | "friendli" | "gmicloud" | "google-ai-studio" | "google-vertex" | "groq" | "heygen" | "inception" | "inceptron" | "inferact-vllm" | "inference-net" | "infermatic" | "inflection" | "io-net" | "ionstream" | "krea" | "liquid" | "makora" | "mancer" | "mara" | "meta" | "minimax" | "mistral" | "modal" | "modelrun" | "modular" | "moonshotai" | "morph" | "near-ai" | "nebius" | "nex-agi" | "nextbit" | "novita" | "nvidia" | "ollama" | "open-inference" | "openai" | "parasail" | "perceptron" | "perplexity" | "phala" | "poolside" | "primeintellect" | "quiver" | "recraft" | "reka" | "relace" | "respan" | "runway" | "sail-research" | "sakana" | "sakana-ai" | "sambanova" | "scaledown" | "seed" | "siliconflow" | "sourceful" | "stepfun" | "streamlake" | "switchpoint" | "tencent" | "tenstorrent" | "thinkingmachines" | "together" | "typesafe" | "unbiased" | "upstage" | "venice" | "voyageai" | "wafer" | "wandb" | "wandb-legacy" | "xai" | "xiaomi" | "z-ai" | Unrecognized +"ai21" | "aion-labs" | "akashml" | "alibaba" | "amazon-bedrock" | "amazon-bedrock/claude-on-aws" | "amazon-nova" | "ambient" | "anthropic" | "anthropic/2" | "arcee-ai" | "assemblyai" | "atlas-cloud" | "avian" | "azure" | "baidu" | "baseten" | "black-forest-labs" | "byteplus" | "cerebras" | "chutes" | "cirrascale" | "clarifai" | "claude-on-aws" | "cloudflare" | "cohere" | "coreweave" | "cosine" | "crusoe" | "darkbloom" | "databricks" | "decart" | "deepgram" | "deepinfra" | "deepseek" | "dekallm" | "digitalocean" | "elevenlabs" | "featherless" | "fireworks" | "fish-audio" | "friendli" | "gmicloud" | "google-ai-studio" | "google-vertex" | "groq" | "heygen" | "inception" | "inceptron" | "inferact-vllm" | "inference-net" | "infermatic" | "inflection" | "io-net" | "ionstream" | "krea" | "liquid" | "makora" | "mancer" | "mara" | "meta" | "minimax" | "mistral" | "modal" | "modelrun" | "modular" | "moonshotai" | "morph" | "near-ai" | "nebius" | "nex-agi" | "nextbit" | "novita" | "nvidia" | "ollama" | "open-inference" | "openai" | "parasail" | "perceptron" | "perplexity" | "phala" | "poolside" | "primeintellect" | "quiver" | "recraft" | "reka" | "relace" | "respan" | "runway" | "sail-research" | "sakana" | "sakana-ai" | "sambanova" | "scaledown" | "seed" | "siliconflow" | "sourceful" | "stepfun" | "streamlake" | "switchpoint" | "tencent" | "tenstorrent" | "thinkingmachines" | "together" | "typesafe" | "unbiased" | "upstage" | "venice" | "voyageai" | "wafer" | "wandb" | "wandb-legacy" | "xai" | "xiaomi" | "z-ai" | Unrecognized ``` \ No newline at end of file diff --git a/docs/models/imagegenerationproviderpreferencesoptions.mdx b/docs/models/imagegenerationproviderpreferencesoptions.mdx index 64006bd8d..df2b72166 100644 --- a/docs/models/imagegenerationproviderpreferencesoptions.mdx +++ b/docs/models/imagegenerationproviderpreferencesoptions.mdx @@ -59,6 +59,7 @@ let value: ImageGenerationProviderPreferencesOptions = {}; | `deepseek` | Record\ | :heavy_minus_sign: | N/A | | `dekallm` | Record\ | :heavy_minus_sign: | N/A | | `digitalocean` | Record\ | :heavy_minus_sign: | N/A | +| `elevenlabs` | Record\ | :heavy_minus_sign: | N/A | | `enfer` | Record\ | :heavy_minus_sign: | N/A | | `fakeProvider` | Record\ | :heavy_minus_sign: | N/A | | `featherless` | Record\ | :heavy_minus_sign: | N/A | diff --git a/docs/models/operations/createaudiotranscriptionsmultipartrequestbody.mdx b/docs/models/operations/createaudiotranscriptionsmultipartrequestbody.mdx index 10149533a..4f113ff87 100644 --- a/docs/models/operations/createaudiotranscriptionsmultipartrequestbody.mdx +++ b/docs/models/operations/createaudiotranscriptionsmultipartrequestbody.mdx @@ -12,14 +12,18 @@ import { CreateAudioTranscriptionsMultipartRequestBody } from "@openrouter/sdk/m ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `file` | [File](https://developer.mozilla.org/en-US/docs/Web/API/File) \| [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) \| [operations.CreateAudioTranscriptionsMultipartFile](../../models/operations/createaudiotranscriptionsmultipartfile.mdx) | :heavy_check_mark: | The audio file to transcribe. The format is derived from the filename extension or the file part content type. Max 25 MB; send larger files as base64 JSON via input_audio. | -| `language` | *string* | :heavy_minus_sign: | The language of the input audio (ISO-639-1). | -| `model` | *string* | :heavy_check_mark: | The model to use for transcription. | -| `responseFormat` | [operations.ResponseFormat](../../models/operations/responseformat.mdx) | :heavy_minus_sign: | The response format. "json" (default) returns \{ text, usage }; "verbose_json" additionally returns task, language, duration, and segment-level timestamps (OpenAI-compatible providers only). | -| `sessionId` | *string* | :heavy_minus_sign: | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). Used for observability grouping in Broadcast and private logging; never sent to the provider. If provided in both the request body and the x-session-id header, the body value takes precedence. | -| `temperature` | *number* | :heavy_minus_sign: | The sampling temperature. | -| `timestampGranularities` | [operations.TimestampGranularities](../../models/operations/timestampgranularities.mdx)[] | :heavy_minus_sign: | Timestamp detail levels to include when response_format is "verbose_json". "word" additionally returns word-level timestamps in the words array. | -| `trace` | *string* | :heavy_minus_sign: | JSON-encoded trace metadata object (trace_id, trace_name, span_name, generation_name, parent_span_id and custom keys) attached to the Broadcast trace. Must decode to a JSON object. | -| `user` | *string* | :heavy_minus_sign: | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `diarize` | *boolean* | :heavy_minus_sign: | Label each word with the speaker who said it (words[].speaker, words[].speaker_label). Requires response_format "verbose_json" (400 otherwise); word timestamps are included even when timestamp_granularities[] omits "word". Only supported by some providers; 400 when the selected model cannot diarize. | +| `file` | [File](https://developer.mozilla.org/en-US/docs/Web/API/File) \| [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) \| [operations.CreateAudioTranscriptionsMultipartFile](../../models/operations/createaudiotranscriptionsmultipartfile.mdx) | :heavy_minus_sign: | The audio file to transcribe. The format is derived from the filename extension or the file part content type. Max 25 MB; send larger files as base64 JSON via input_audio, or by URL via source_url. Exactly one of file or source_url is required. | +| `keyterms` | *string*[] | :heavy_minus_sign: | Domain terms, names, or phrases to bias recognition toward; repeat the part once per term (keyterms=... is also accepted). Only supported by some providers; 400 when the selected model cannot use keyterms. | +| `language` | *string* | :heavy_minus_sign: | The language of the input audio (ISO-639-1). | +| `model` | *string* | :heavy_check_mark: | The model to use for transcription. | +| `provider` | *string* | :heavy_minus_sign: | JSON-encoded provider preferences object, the same shape as the JSON body field: \{ "options": \{ "\": \{ ... } } }. Only options for the matched provider are forwarded. Must decode to a JSON object. | +| `responseFormat` | [operations.ResponseFormat](../../models/operations/responseformat.mdx) | :heavy_minus_sign: | The response format. "json" (default) returns \{ text, usage }; "verbose_json" additionally returns task, language, duration, and segment-level timestamps (OpenAI-compatible providers only). | +| `sessionId` | *string* | :heavy_minus_sign: | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). Used for observability grouping in Broadcast and private logging; never sent to the provider. If provided in both the request body and the x-session-id header, the body value takes precedence. | +| `sourceUrl` | *string* | :heavy_minus_sign: | Publicly reachable http(s) URL of the audio file, downloaded by the provider directly (no size limit on our side). The format is derived from the URL path extension. Only supported by some providers; exactly one of file or source_url is required. | +| `temperature` | *number* | :heavy_minus_sign: | The sampling temperature. | +| `timestampGranularities` | [operations.TimestampGranularities](../../models/operations/timestampgranularities.mdx)[] | :heavy_minus_sign: | Timestamp detail levels to include when response_format is "verbose_json". "word" additionally returns word-level timestamps in the words array. | +| `trace` | *string* | :heavy_minus_sign: | JSON-encoded trace metadata object (trace_id, trace_name, span_name, generation_name, parent_span_id and custom keys) attached to the Broadcast trace. Must decode to a JSON object. | +| `user` | *string* | :heavy_minus_sign: | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | \ No newline at end of file diff --git a/docs/models/operations/provider.mdx b/docs/models/operations/provider.mdx index 8e33bbad1..1ee9240f9 100644 --- a/docs/models/operations/provider.mdx +++ b/docs/models/operations/provider.mdx @@ -17,5 +17,5 @@ let value: Provider = "openai"; ## Values ```typescript -"ai21" | "aion-labs" | "akashml" | "alibaba" | "amazon-bedrock" | "amazon-bedrock/claude-on-aws" | "amazon-nova" | "ambient" | "anthropic" | "anthropic/2" | "arcee-ai" | "assemblyai" | "atlas-cloud" | "avian" | "azure" | "baidu" | "baseten" | "black-forest-labs" | "byteplus" | "cerebras" | "chutes" | "cirrascale" | "clarifai" | "claude-on-aws" | "cloudflare" | "cohere" | "coreweave" | "cosine" | "crusoe" | "darkbloom" | "databricks" | "decart" | "deepgram" | "deepinfra" | "deepseek" | "dekallm" | "digitalocean" | "featherless" | "fireworks" | "fish-audio" | "friendli" | "gmicloud" | "google-ai-studio" | "google-vertex" | "groq" | "heygen" | "inception" | "inceptron" | "inferact-vllm" | "inference-net" | "infermatic" | "inflection" | "io-net" | "ionstream" | "krea" | "liquid" | "makora" | "mancer" | "mara" | "meta" | "minimax" | "mistral" | "modal" | "modelrun" | "modular" | "moonshotai" | "morph" | "near-ai" | "nebius" | "nex-agi" | "nextbit" | "novita" | "nvidia" | "ollama" | "open-inference" | "openai" | "parasail" | "perceptron" | "perplexity" | "phala" | "poolside" | "primeintellect" | "quiver" | "recraft" | "reka" | "relace" | "respan" | "runway" | "sail-research" | "sakana" | "sakana-ai" | "sambanova" | "scaledown" | "seed" | "siliconflow" | "sourceful" | "stepfun" | "streamlake" | "switchpoint" | "tencent" | "tenstorrent" | "thinkingmachines" | "together" | "typesafe" | "unbiased" | "upstage" | "venice" | "voyageai" | "wafer" | "wandb" | "wandb-legacy" | "xai" | "xiaomi" | "z-ai" | Unrecognized +"ai21" | "aion-labs" | "akashml" | "alibaba" | "amazon-bedrock" | "amazon-bedrock/claude-on-aws" | "amazon-nova" | "ambient" | "anthropic" | "anthropic/2" | "arcee-ai" | "assemblyai" | "atlas-cloud" | "avian" | "azure" | "baidu" | "baseten" | "black-forest-labs" | "byteplus" | "cerebras" | "chutes" | "cirrascale" | "clarifai" | "claude-on-aws" | "cloudflare" | "cohere" | "coreweave" | "cosine" | "crusoe" | "darkbloom" | "databricks" | "decart" | "deepgram" | "deepinfra" | "deepseek" | "dekallm" | "digitalocean" | "elevenlabs" | "featherless" | "fireworks" | "fish-audio" | "friendli" | "gmicloud" | "google-ai-studio" | "google-vertex" | "groq" | "heygen" | "inception" | "inceptron" | "inferact-vllm" | "inference-net" | "infermatic" | "inflection" | "io-net" | "ionstream" | "krea" | "liquid" | "makora" | "mancer" | "mara" | "meta" | "minimax" | "mistral" | "modal" | "modelrun" | "modular" | "moonshotai" | "morph" | "near-ai" | "nebius" | "nex-agi" | "nextbit" | "novita" | "nvidia" | "ollama" | "open-inference" | "openai" | "parasail" | "perceptron" | "perplexity" | "phala" | "poolside" | "primeintellect" | "quiver" | "recraft" | "reka" | "relace" | "respan" | "runway" | "sail-research" | "sakana" | "sakana-ai" | "sambanova" | "scaledown" | "seed" | "siliconflow" | "sourceful" | "stepfun" | "streamlake" | "switchpoint" | "tencent" | "tenstorrent" | "thinkingmachines" | "together" | "typesafe" | "unbiased" | "upstage" | "venice" | "voyageai" | "wafer" | "wandb" | "wandb-legacy" | "xai" | "xiaomi" | "z-ai" | Unrecognized ``` \ No newline at end of file diff --git a/docs/models/providername.mdx b/docs/models/providername.mdx index d716839e6..52468d9a4 100644 --- a/docs/models/providername.mdx +++ b/docs/models/providername.mdx @@ -15,5 +15,5 @@ let value: ProviderName = "OpenAI"; ## Values ```typescript -"Modal" | "AkashML" | "AI21" | "AionLabs" | "Alibaba" | "Ambient" | "Baidu" | "Amazon Bedrock" | "Amazon Nova" | "Anthropic" | "Arcee AI" | "AssemblyAI" | "AtlasCloud" | "Avian" | "Azure" | "BaseTen" | "BytePlus" | "Black Forest Labs" | "Cerebras" | "Chutes" | "Cirrascale" | "Claude Platform on AWS" | "Clarifai" | "Cloudflare" | "Cohere" | "CoreWeave" | "Cosine" | "Crucible" | "Crusoe" | "Darkbloom" | "Databricks" | "Decart" | "Deepgram" | "DeepInfra" | "DeepSeek" | "DekaLLM" | "DigitalOcean" | "Featherless" | "Fireworks" | "Fish Audio" | "Friendli" | "GMICloud" | "Google" | "Google AI Studio" | "Groq" | "HeyGen" | "Inception" | "Inceptron" | "InferenceNet" | "Ionstream" | "Infermatic" | "Io Net" | "Inferact vLLM" | "Inflection" | "Liquid" | "Makora" | "Mara" | "Mancer 2" | "Meta" | "Minimax" | "ModelRun" | "Mistral" | "Modular" | "Moonshot AI" | "Morph" | "VoyageAI by MongoDB" | "TypeSafe" | "Near AI" | "Nebius" | "Nex AGI" | "NextBit" | "Novita" | "Nvidia" | "Ollama" | "OpenAI" | "OpenInference" | "Parasail" | "Poolside" | "PrimeIntellect" | "Perceptron" | "Perplexity" | "Phala" | "Recraft" | "Reka" | "Relace" | "Respan" | "Sail Research" | "Sakana AI" | "SambaNova" | "ScaleDown" | "Seed" | "SiliconFlow" | "Sourceful" | "StepFun" | "Stealth" | "StreamLake" | "Switchpoint" | "Tencent" | "Tenstorrent" | "Thinking Machines" | "Together" | "Unbiased" | "Upstage" | "Venice" | "Wafer" | "WandB" | "Quiver" | "Krea" | "Runway" | "Xiaomi" | "xAI" | "Z.AI" | "FakeProvider" | Unrecognized +"Modal" | "AkashML" | "AI21" | "AionLabs" | "Alibaba" | "Ambient" | "Baidu" | "Amazon Bedrock" | "Amazon Nova" | "Anthropic" | "Arcee AI" | "AssemblyAI" | "AtlasCloud" | "Avian" | "Azure" | "BaseTen" | "BytePlus" | "Black Forest Labs" | "Cerebras" | "Chutes" | "Cirrascale" | "Claude Platform on AWS" | "Clarifai" | "Cloudflare" | "Cohere" | "CoreWeave" | "Cosine" | "Crucible" | "Crusoe" | "Darkbloom" | "Databricks" | "Decart" | "Deepgram" | "DeepInfra" | "DeepSeek" | "DekaLLM" | "DigitalOcean" | "ElevenLabs" | "Featherless" | "Fireworks" | "Fish Audio" | "Friendli" | "GMICloud" | "Google" | "Google AI Studio" | "Groq" | "HeyGen" | "Inception" | "Inceptron" | "InferenceNet" | "Ionstream" | "Infermatic" | "Io Net" | "Inferact vLLM" | "Inflection" | "Liquid" | "Makora" | "Mara" | "Mancer 2" | "Meta" | "Minimax" | "ModelRun" | "Mistral" | "Modular" | "Moonshot AI" | "Morph" | "VoyageAI by MongoDB" | "TypeSafe" | "Near AI" | "Nebius" | "Nex AGI" | "NextBit" | "Novita" | "Nvidia" | "Ollama" | "OpenAI" | "OpenInference" | "Parasail" | "Poolside" | "PrimeIntellect" | "Perceptron" | "Perplexity" | "Phala" | "Recraft" | "Reka" | "Relace" | "Respan" | "Sail Research" | "Sakana AI" | "SambaNova" | "ScaleDown" | "Seed" | "SiliconFlow" | "Sourceful" | "StepFun" | "Stealth" | "StreamLake" | "Switchpoint" | "Tencent" | "Tenstorrent" | "Thinking Machines" | "Together" | "Unbiased" | "Upstage" | "Venice" | "Wafer" | "WandB" | "Quiver" | "Krea" | "Runway" | "Xiaomi" | "xAI" | "Z.AI" | "FakeProvider" | Unrecognized ``` \ No newline at end of file diff --git a/docs/models/provideroptions.mdx b/docs/models/provideroptions.mdx index 69d4a372a..264d5e64c 100644 --- a/docs/models/provideroptions.mdx +++ b/docs/models/provideroptions.mdx @@ -59,6 +59,7 @@ let value: ProviderOptions = {}; | `deepseek` | Record\ | :heavy_minus_sign: | N/A | | `dekallm` | Record\ | :heavy_minus_sign: | N/A | | `digitalocean` | Record\ | :heavy_minus_sign: | N/A | +| `elevenlabs` | Record\ | :heavy_minus_sign: | N/A | | `enfer` | Record\ | :heavy_minus_sign: | N/A | | `fakeProvider` | Record\ | :heavy_minus_sign: | N/A | | `featherless` | Record\ | :heavy_minus_sign: | N/A | diff --git a/docs/models/providerresponseprovidername.mdx b/docs/models/providerresponseprovidername.mdx index d3bb67d2e..ccfb5ae2d 100644 --- a/docs/models/providerresponseprovidername.mdx +++ b/docs/models/providerresponseprovidername.mdx @@ -17,5 +17,5 @@ let value: ProviderResponseProviderName = "OpenAI"; ## Values ```typescript -"AnyScale" | "Atoma" | "Cent-ML" | "CrofAI" | "Enfer" | "GoPomelo" | "HuggingFace" | "Hyperbolic" | "Hyperbolic 2" | "InoCloud" | "Kluster" | "Lambda" | "Lepton" | "Lynn 2" | "Lynn" | "Mancer" | "Modal" | "NCompass" | "Nineteen" | "OctoAI" | "Recursal" | "Reflection" | "Replicate" | "SambaNova 2" | "SF Compute" | "Targon" | "Together 2" | "Ubicloud" | "01.AI" | "AkashML" | "AI21" | "AionLabs" | "Alibaba" | "Ambient" | "Baidu" | "Amazon Bedrock" | "Amazon Nova" | "Anthropic" | "Arcee AI" | "AssemblyAI" | "AtlasCloud" | "Avian" | "Azure" | "BaseTen" | "BytePlus" | "Black Forest Labs" | "Cerebras" | "Chutes" | "Cirrascale" | "Claude Platform on AWS" | "Clarifai" | "Cloudflare" | "Cohere" | "CoreWeave" | "Cosine" | "Crucible" | "Crusoe" | "Darkbloom" | "Databricks" | "Decart" | "Deepgram" | "DeepInfra" | "DeepSeek" | "DekaLLM" | "DigitalOcean" | "Featherless" | "Fireworks" | "Fish Audio" | "Friendli" | "GMICloud" | "Google" | "Google AI Studio" | "Groq" | "HeyGen" | "Inception" | "Inceptron" | "InferenceNet" | "Ionstream" | "Infermatic" | "Io Net" | "Inferact vLLM" | "Inflection" | "Liquid" | "Makora" | "Mara" | "Mancer 2" | "Meta" | "Minimax" | "ModelRun" | "Mistral" | "Modular" | "Moonshot AI" | "Morph" | "VoyageAI by MongoDB" | "TypeSafe" | "Near AI" | "Nebius" | "Nex AGI" | "NextBit" | "Novita" | "Nvidia" | "Ollama" | "OpenAI" | "OpenInference" | "Parasail" | "Poolside" | "PrimeIntellect" | "Perceptron" | "Perplexity" | "Phala" | "Recraft" | "Reka" | "Relace" | "Respan" | "Sail Research" | "Sakana AI" | "SambaNova" | "ScaleDown" | "Seed" | "SiliconFlow" | "Sourceful" | "StepFun" | "Stealth" | "StreamLake" | "Switchpoint" | "Tencent" | "Tenstorrent" | "Thinking Machines" | "Together" | "Unbiased" | "Upstage" | "Venice" | "Wafer" | "WandB" | "Quiver" | "Krea" | "Runway" | "Xiaomi" | "xAI" | "Z.AI" | "FakeProvider" | Unrecognized +"AnyScale" | "Atoma" | "Cent-ML" | "CrofAI" | "Enfer" | "GoPomelo" | "HuggingFace" | "Hyperbolic" | "Hyperbolic 2" | "InoCloud" | "Kluster" | "Lambda" | "Lepton" | "Lynn 2" | "Lynn" | "Mancer" | "Modal" | "NCompass" | "Nineteen" | "OctoAI" | "Recursal" | "Reflection" | "Replicate" | "SambaNova 2" | "SF Compute" | "Targon" | "Together 2" | "Ubicloud" | "01.AI" | "AkashML" | "AI21" | "AionLabs" | "Alibaba" | "Ambient" | "Baidu" | "Amazon Bedrock" | "Amazon Nova" | "Anthropic" | "Arcee AI" | "AssemblyAI" | "AtlasCloud" | "Avian" | "Azure" | "BaseTen" | "BytePlus" | "Black Forest Labs" | "Cerebras" | "Chutes" | "Cirrascale" | "Claude Platform on AWS" | "Clarifai" | "Cloudflare" | "Cohere" | "CoreWeave" | "Cosine" | "Crucible" | "Crusoe" | "Darkbloom" | "Databricks" | "Decart" | "Deepgram" | "DeepInfra" | "DeepSeek" | "DekaLLM" | "DigitalOcean" | "ElevenLabs" | "Featherless" | "Fireworks" | "Fish Audio" | "Friendli" | "GMICloud" | "Google" | "Google AI Studio" | "Groq" | "HeyGen" | "Inception" | "Inceptron" | "InferenceNet" | "Ionstream" | "Infermatic" | "Io Net" | "Inferact vLLM" | "Inflection" | "Liquid" | "Makora" | "Mara" | "Mancer 2" | "Meta" | "Minimax" | "ModelRun" | "Mistral" | "Modular" | "Moonshot AI" | "Morph" | "VoyageAI by MongoDB" | "TypeSafe" | "Near AI" | "Nebius" | "Nex AGI" | "NextBit" | "Novita" | "Nvidia" | "Ollama" | "OpenAI" | "OpenInference" | "Parasail" | "Poolside" | "PrimeIntellect" | "Perceptron" | "Perplexity" | "Phala" | "Recraft" | "Reka" | "Relace" | "Respan" | "Sail Research" | "Sakana AI" | "SambaNova" | "ScaleDown" | "Seed" | "SiliconFlow" | "Sourceful" | "StepFun" | "Stealth" | "StreamLake" | "Switchpoint" | "Tencent" | "Tenstorrent" | "Thinking Machines" | "Together" | "Unbiased" | "Upstage" | "Venice" | "Wafer" | "WandB" | "Quiver" | "Krea" | "Runway" | "Xiaomi" | "xAI" | "Z.AI" | "FakeProvider" | Unrecognized ``` \ No newline at end of file diff --git a/docs/models/sttentity.mdx b/docs/models/sttentity.mdx new file mode 100644 index 000000000..d29143f34 --- /dev/null +++ b/docs/models/sttentity.mdx @@ -0,0 +1,27 @@ +--- +title: "STTEntity" +--- + +A detected entity, returned when the provider runs entity detection + +## Example Usage + +```typescript +import { STTEntity } from "@openrouter/sdk/models"; + +let value: STTEntity = { + endChar: 25, + startChar: 15, + text: "John Smith", + type: "name", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `endChar` | *number* | :heavy_check_mark: | Zero-based exclusive character offset of the entity end within the response-level text (not seconds) | 25 | +| `startChar` | *number* | :heavy_check_mark: | Zero-based character offset of the entity start within the response-level text (not seconds) | 15 | +| `text` | *string* | :heavy_check_mark: | Entity text as it appears in the transcript | | +| `type` | *string* | :heavy_check_mark: | Provider entity type label | name | \ No newline at end of file diff --git a/docs/models/sttinlineinputaudio.mdx b/docs/models/sttinlineinputaudio.mdx new file mode 100644 index 000000000..0071dd119 --- /dev/null +++ b/docs/models/sttinlineinputaudio.mdx @@ -0,0 +1,23 @@ +--- +title: "STTInlineInputAudio" +--- + +Inline base64 audio input for speech-to-text + +## Example Usage + +```typescript +import { STTInlineInputAudio } from "@openrouter/sdk/models"; + +let value: STTInlineInputAudio = { + data: "UklGRiQA...", + format: "wav", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `data` | *string* | :heavy_check_mark: | Base64-encoded audio data (raw bytes, not a data URI) | +| `format` | *string* | :heavy_check_mark: | Audio format (e.g., wav, mp3, flac, m4a, ogg, webm, aac). Supported formats vary by provider. "pcm" means headerless signed 16-bit little-endian mono audio at 16 kHz. | \ No newline at end of file diff --git a/docs/models/sttinputaudio.mdx b/docs/models/sttinputaudio.mdx index 706b8702d..744d52b0b 100644 --- a/docs/models/sttinputaudio.mdx +++ b/docs/models/sttinputaudio.mdx @@ -2,22 +2,25 @@ title: "STTInputAudio" --- -Base64-encoded audio to transcribe +Audio to transcribe: inline base64 bytes, or a URL the provider downloads directly. -## Example Usage -```typescript -import { STTInputAudio } from "@openrouter/sdk/models"; +## Supported Types + +### `models.STTInlineInputAudio` -let value: STTInputAudio = { +```typescript +const value: models.STTInlineInputAudio = { data: "UklGRiQA...", format: "wav", }; ``` -## Fields +### `models.STTUrlInputAudio` + +```typescript +const value: models.STTUrlInputAudio = { + url: "https://example.com/meeting.mp3", +}; +``` -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -| `data` | *string* | :heavy_check_mark: | Base64-encoded audio data (raw bytes, not a data URI) | -| `format` | *string* | :heavy_check_mark: | Audio format (e.g., wav, mp3, flac, m4a, ogg, webm, aac). Supported formats vary by provider. | \ No newline at end of file diff --git a/docs/models/sttrequest.mdx b/docs/models/sttrequest.mdx index 1d2ac708f..3fb5f156d 100644 --- a/docs/models/sttrequest.mdx +++ b/docs/models/sttrequest.mdx @@ -2,7 +2,7 @@ title: "STTRequest" --- -Speech-to-text request input. Accepts a JSON body with input_audio containing base64-encoded audio. +Speech-to-text request input. Accepts a JSON body with input_audio containing base64-encoded audio or a URL the provider downloads. ## Example Usage @@ -20,15 +20,17 @@ let value: STTRequest = { ## Fields -| Field | Type | Required | Description | Example | -| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `inputAudio` | [models.STTInputAudio](../models/sttinputaudio.mdx) | :heavy_check_mark: | Base64-encoded audio to transcribe | \{
"data": "UklGRiQA...",
"format": "wav"
} | -| `language` | *string* | :heavy_minus_sign: | ISO-639-1 language code (e.g., "en", "ja"). Auto-detected if omitted. | en | -| `model` | *string* | :heavy_check_mark: | STT model identifier | openai/whisper-large-v3 | -| `provider` | [models.STTRequestProvider](../models/sttrequestprovider.mdx) | :heavy_minus_sign: | Provider-specific passthrough configuration | | -| `responseFormat` | [models.STTRequestResponseFormat](../models/sttrequestresponseformat.mdx) | :heavy_minus_sign: | Output format. "json" (default) returns \{ text, usage }. "verbose_json" additionally returns task, language, duration, and segment-level timestamps; only supported by OpenAI-compatible providers. | json | -| `sessionId` | *string* | :heavy_minus_sign: | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). Used for observability grouping in Broadcast and private logging; never sent to the provider. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | session-1234 | -| `temperature` | *number* | :heavy_minus_sign: | Sampling temperature for transcription | 0 | -| `timestampGranularities` | [models.STTTimestampGranularity](../models/stttimestampgranularity.mdx)[] | :heavy_minus_sign: | Timestamp detail levels to include when response_format is "verbose_json". "segment" returns segment-level timestamps; "word" additionally returns word-level timestamps in the words array. Ignored unless response_format is "verbose_json". | [
"segment"
] | -| `trace` | [models.TraceConfig](../models/traceconfig.mdx) | :heavy_minus_sign: | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} | -| `user` | *string* | :heavy_minus_sign: | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `diarize` | *boolean* | :heavy_minus_sign: | Label each word with the speaker who said it. Speaker labels are returned on the words array (speaker, speaker_label), so response_format must be "verbose_json" (a "json" request is rejected with a 400) and word timestamps are included even when timestamp_granularities omits "word". Only supported by some providers; the request is rejected with a 400 when the selected model cannot diarize. Providers may charge extra. | true | +| `inputAudio` | *models.STTInputAudio* | :heavy_check_mark: | Audio to transcribe: inline base64 bytes, or a URL the provider downloads directly. | | +| `keyterms` | *string*[] | :heavy_minus_sign: | Domain terms, names, or phrases to bias recognition toward. Only supported by some providers; the request is rejected with a 400 when the selected model cannot use keyterms. Providers may cap the number of terms or characters per term and may charge extra. | [
"OpenRouter",
"Scribe"
] | +| `language` | *string* | :heavy_minus_sign: | ISO-639-1 language code (e.g., "en", "ja"). Auto-detected if omitted. | en | +| `model` | *string* | :heavy_check_mark: | STT model identifier | openai/whisper-large-v3 | +| `provider` | [models.STTRequestProvider](../models/sttrequestprovider.mdx) | :heavy_minus_sign: | Provider-specific passthrough configuration | | +| `responseFormat` | [models.STTRequestResponseFormat](../models/sttrequestresponseformat.mdx) | :heavy_minus_sign: | Output format. "json" (default) returns \{ text, usage }. "verbose_json" additionally returns task, language, duration, and segment-level timestamps; only supported by OpenAI-compatible providers. | json | +| `sessionId` | *string* | :heavy_minus_sign: | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). Used for observability grouping in Broadcast and private logging; never sent to the provider. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | session-1234 | +| `temperature` | *number* | :heavy_minus_sign: | Sampling temperature for transcription | 0 | +| `timestampGranularities` | [models.STTTimestampGranularity](../models/stttimestampgranularity.mdx)[] | :heavy_minus_sign: | Timestamp detail levels to include when response_format is "verbose_json". "segment" returns segment-level timestamps; "word" additionally returns word-level timestamps in the words array. Ignored unless response_format is "verbose_json". | [
"segment"
] | +| `trace` | [models.TraceConfig](../models/traceconfig.mdx) | :heavy_minus_sign: | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} | +| `user` | *string* | :heavy_minus_sign: | A unique identifier representing your end-user. Forwarded to Broadcast and private logging as the end-user id; never sent to the provider. | user-1234 | \ No newline at end of file diff --git a/docs/models/sttresponse.mdx b/docs/models/sttresponse.mdx index 1238e3be9..2d839a42e 100644 --- a/docs/models/sttresponse.mdx +++ b/docs/models/sttresponse.mdx @@ -20,7 +20,9 @@ let value: STTResponse = { | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | | `confidence` | *number* | :heavy_minus_sign: | Provider confidence for the whole transcript from 0 to 1, present when response_format is verbose_json and the provider scores the full transcript | 0.94 | | `duration` | *number* | :heavy_minus_sign: | Duration of the input audio in seconds, present when response_format is verbose_json | 9.2 | +| `entities` | [models.STTEntity](../models/sttentity.mdx)[] | :heavy_minus_sign: | Detected entities with character offsets into text, present when the provider runs entity detection | | | `language` | *string* | :heavy_minus_sign: | Detected or forced language, present when response_format is verbose_json | english | +| `languageConfidence` | *number* | :heavy_minus_sign: | Provider confidence in the detected language from 0 to 1, present when response_format is verbose_json and the provider scores language detection | 0.98 | | `segments` | [models.STTSegment](../models/sttsegment.mdx)[] | :heavy_minus_sign: | Timestamped transcript segments, present when response_format is verbose_json | | | `task` | *string* | :heavy_minus_sign: | The task performed, present when response_format is verbose_json | transcribe | | `text` | *string* | :heavy_check_mark: | The transcribed text | Hello, this is a test of OpenAI speech-to-text transcription. The weather is sunny today and the temperature is around 72 degrees. | diff --git a/docs/models/sttsegment.mdx b/docs/models/sttsegment.mdx index ca550fff4..a921841bd 100644 --- a/docs/models/sttsegment.mdx +++ b/docs/models/sttsegment.mdx @@ -19,16 +19,18 @@ let value: STTSegment = { ## Fields -| Field | Type | Required | Description | Example | -| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | -| `avgLogprob` | *number* | :heavy_minus_sign: | Average log probability of the segment | | -| `compressionRatio` | *number* | :heavy_minus_sign: | Compression ratio of the segment | | -| `end` | *number* | :heavy_check_mark: | Segment end time in seconds | 3.2 | -| `id` | *number* | :heavy_check_mark: | Segment index within the transcript | 0 | -| `noSpeechProb` | *number* | :heavy_minus_sign: | Probability the segment contains no speech | | -| `seek` | *number* | :heavy_minus_sign: | Seek offset of the segment | 0 | -| `speaker` | *number* | :heavy_minus_sign: | Speaker index for the segment, present when the provider returns diarization data | 0 | -| `start` | *number* | :heavy_check_mark: | Segment start time in seconds | 0 | -| `temperature` | *number* | :heavy_minus_sign: | Temperature used for the segment | | -| `text` | *string* | :heavy_check_mark: | Transcribed text of the segment | Hello there. | -| `tokens` | *number*[] | :heavy_minus_sign: | Token IDs of the segment | | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | +| `avgLogprob` | *number* | :heavy_minus_sign: | Average log probability of the segment | | +| `channel` | *number* | :heavy_minus_sign: | Zero-based audio channel index for the segment, present when the provider transcribes channels separately | 0 | +| `compressionRatio` | *number* | :heavy_minus_sign: | Compression ratio of the segment | | +| `end` | *number* | :heavy_check_mark: | Segment end time in seconds | 3.2 | +| `id` | *number* | :heavy_check_mark: | Segment index within the transcript | 0 | +| `noSpeechProb` | *number* | :heavy_minus_sign: | Probability the segment contains no speech | | +| `seek` | *number* | :heavy_minus_sign: | Seek offset of the segment | 0 | +| `speaker` | *number* | :heavy_minus_sign: | Speaker index for the segment, present when the provider returns diarization data | 0 | +| `speakerLabel` | *string* | :heavy_minus_sign: | Provider speaker label for the segment, present when the provider labels speakers with a string | speaker_0 | +| `start` | *number* | :heavy_check_mark: | Segment start time in seconds | 0 | +| `temperature` | *number* | :heavy_minus_sign: | Temperature used for the segment | | +| `text` | *string* | :heavy_check_mark: | Transcribed text of the segment | Hello there. | +| `tokens` | *number*[] | :heavy_minus_sign: | Token IDs of the segment | | \ No newline at end of file diff --git a/docs/models/stturlinputaudio.mdx b/docs/models/stturlinputaudio.mdx new file mode 100644 index 000000000..19572f868 --- /dev/null +++ b/docs/models/stturlinputaudio.mdx @@ -0,0 +1,22 @@ +--- +title: "STTUrlInputAudio" +--- + +Audio input fetched by the provider from a URL + +## Example Usage + +```typescript +import { STTUrlInputAudio } from "@openrouter/sdk/models"; + +let value: STTUrlInputAudio = { + url: "https://example.com/meeting.mp3", +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `format` | *string* | :heavy_minus_sign: | Audio format of the file at the URL. Defaults to the extension of the URL path; required when the path has no extension. | +| `url` | *string* | :heavy_check_mark: | Publicly reachable http(s) URL of the audio file. The provider downloads it directly, so the inline upload size limit does not apply. Only supported by some providers. | \ No newline at end of file diff --git a/docs/models/sttword.mdx b/docs/models/sttword.mdx index e3878a2c1..b257d9890 100644 --- a/docs/models/sttword.mdx +++ b/docs/models/sttword.mdx @@ -18,10 +18,13 @@ let value: STTWord = { ## Fields -| Field | Type | Required | Description | Example | -| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | -| `confidence` | *number* | :heavy_minus_sign: | Provider confidence for the word from 0 to 1, present when the provider returns per-word confidence | 0.98 | -| `end` | *number* | :heavy_check_mark: | Word end time in seconds | 0.4 | -| `speaker` | *number* | :heavy_minus_sign: | Speaker index for the word, present when the provider returns diarization data | 0 | -| `start` | *number* | :heavy_check_mark: | Word start time in seconds | 0 | -| `word` | *string* | :heavy_check_mark: | The transcribed word | Hello | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `channel` | *number* | :heavy_minus_sign: | Zero-based audio channel index for the word, present when the provider transcribes channels separately | 0 | +| `confidence` | *number* | :heavy_minus_sign: | Provider confidence for the word from 0 to 1, present when the provider returns per-word confidence | 0.98 | +| `end` | *number* | :heavy_check_mark: | Word end time in seconds | 0.4 | +| `speaker` | *number* | :heavy_minus_sign: | Speaker index for the word, present when the provider returns diarization data | 0 | +| `speakerLabel` | *string* | :heavy_minus_sign: | Provider speaker label for the word, present when the provider labels speakers with a string | speaker_0 | +| `start` | *number* | :heavy_check_mark: | Word start time in seconds | 0 | +| `type` | [models.STTWordType](../models/sttwordtype.mdx) | :heavy_minus_sign: | Kind of entry; omitted or "word" for spoken words, "audio_event" for non-speech sounds the provider tags with timestamps | word | +| `word` | *string* | :heavy_check_mark: | The transcribed word, or the event tag such as "(laughter)" when type is audio_event | Hello | \ No newline at end of file diff --git a/docs/models/sttwordtype.mdx b/docs/models/sttwordtype.mdx new file mode 100644 index 000000000..71ed7d613 --- /dev/null +++ b/docs/models/sttwordtype.mdx @@ -0,0 +1,21 @@ +--- +title: "STTWordType" +--- + +Kind of entry; omitted or "word" for spoken words, "audio_event" for non-speech sounds the provider tags with timestamps + +## Example Usage + +```typescript +import { STTWordType } from "@openrouter/sdk/models"; + +let value: STTWordType = "word"; + +// Open enum: unrecognized values are captured as Unrecognized +``` + +## Values + +```typescript +"word" | "audio_event" | Unrecognized +``` \ No newline at end of file diff --git a/docs/models/videogenerationrequestoptions.mdx b/docs/models/videogenerationrequestoptions.mdx index a61870ae8..dfed3202d 100644 --- a/docs/models/videogenerationrequestoptions.mdx +++ b/docs/models/videogenerationrequestoptions.mdx @@ -59,6 +59,7 @@ let value: VideoGenerationRequestOptions = {}; | `deepseek` | Record\ | :heavy_minus_sign: | N/A | | `dekallm` | Record\ | :heavy_minus_sign: | N/A | | `digitalocean` | Record\ | :heavy_minus_sign: | N/A | +| `elevenlabs` | Record\ | :heavy_minus_sign: | N/A | | `enfer` | Record\ | :heavy_minus_sign: | N/A | | `fakeProvider` | Record\ | :heavy_minus_sign: | N/A | | `featherless` | Record\ | :heavy_minus_sign: | N/A | diff --git a/docs/sdks/stt/README.mdx b/docs/sdks/stt/README.mdx index 5dbc5cf9e..5dfd88bc4 100644 --- a/docs/sdks/stt/README.mdx +++ b/docs/sdks/stt/README.mdx @@ -14,7 +14,7 @@ Speech-to-text endpoints ## createTranscription -Transcribes audio into text. Accepts base64-encoded audio input as JSON or an OpenAI-style multipart/form-data file upload, and returns the transcribed text. +Transcribes audio into text. Accepts base64-encoded audio input as JSON, an OpenAI-style multipart/form-data file upload, or a URL the provider downloads directly, and returns the transcribed text. ### Example Usage @@ -119,7 +119,7 @@ run(); ## createTranscriptionMultipart -Transcribes audio into text. Accepts base64-encoded audio input as JSON or an OpenAI-style multipart/form-data file upload, and returns the transcribed text. +Transcribes audio into text. Accepts base64-encoded audio input as JSON, an OpenAI-style multipart/form-data file upload, or a URL the provider downloads directly, and returns the transcribed text. ### Example Usage diff --git a/jsr.json b/jsr.json index dee641cde..21113ae66 100644 --- a/jsr.json +++ b/jsr.json @@ -2,7 +2,7 @@ { "name": "@openrouter/sdk", - "version": "1.4.4", + "version": "1.4.5", "exports": { ".": "./src/index.ts", "./models/errors": "./src/models/errors/index.ts", diff --git a/package.json b/package.json index 2becfd568..5802cf470 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@openrouter/sdk", - "version": "1.4.4", + "version": "1.4.5", "author": "OpenRouter", "description": "The OpenRouter TypeScript SDK is a type-safe toolkit for building AI applications with access to 400+ language models through a unified API.", "keywords": [ @@ -21,8 +21,8 @@ "license": "Apache-2.0", "packageManager": "pnpm@10.22.0", "publishConfig": { - "access": "public", - "provenance": true + "provenance": true, + "access": "public" }, "type": "module", "main": "./esm/index.js", @@ -73,15 +73,15 @@ "lint": "eslint --cache --max-warnings=0 src", "build": "tsc && node scripts/unbarrel-imports.js", "prepublishOnly": "npm run build", - "typecheck:transit": "exit 0", + "compile": "tsc && node scripts/unbarrel-imports.js", "postinstall": "node scripts/check-types.js || true", "prepare": "npm run build", "test": "vitest --run --project unit", "test:transit": "exit 0", "test:watch": "vitest --watch --project unit", - "compile": "tsc && node scripts/unbarrel-imports.js", "test:e2e": "vitest --run --project e2e", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit", + "typecheck:transit": "exit 0" }, "peerDependencies": { diff --git a/src/funcs/sttCreateTranscription.ts b/src/funcs/sttCreateTranscription.ts index 41d564b68..0c666cec8 100644 --- a/src/funcs/sttCreateTranscription.ts +++ b/src/funcs/sttCreateTranscription.ts @@ -32,7 +32,7 @@ import { Result } from "../types/fp.js"; * Create transcription * * @remarks - * Transcribes audio into text. Accepts base64-encoded audio input as JSON or an OpenAI-style multipart/form-data file upload, and returns the transcribed text. + * Transcribes audio into text. Accepts base64-encoded audio input as JSON, an OpenAI-style multipart/form-data file upload, or a URL the provider downloads directly, and returns the transcribed text. */ export function sttCreateTranscription( client: OpenRouterCore, diff --git a/src/funcs/sttCreateTranscriptionMultipart.ts b/src/funcs/sttCreateTranscriptionMultipart.ts index c0a7ee9d6..3df166bb5 100644 --- a/src/funcs/sttCreateTranscriptionMultipart.ts +++ b/src/funcs/sttCreateTranscriptionMultipart.ts @@ -39,7 +39,7 @@ import { isReadableStream } from "../types/streams.js"; * Create transcription * * @remarks - * Transcribes audio into text. Accepts base64-encoded audio input as JSON or an OpenAI-style multipart/form-data file upload, and returns the transcribed text. + * Transcribes audio into text. Accepts base64-encoded audio input as JSON, an OpenAI-style multipart/form-data file upload, or a URL the provider downloads directly, and returns the transcribed text. */ export function sttCreateTranscriptionMultipart( client: OpenRouterCore, @@ -125,45 +125,59 @@ async function $do( const payload = parsed.value; const body = new FormData(); - if (isBlobLike(payload.RequestBody.file)) { - const file = payload.RequestBody.file; - const blob = await normalizeBlob(file); - const name = "name" in file ? (file.name as string) : undefined; - appendForm(body, "file", blob, name); - } else if (isReadableStream(payload.RequestBody.file.content)) { - const buffer = await readableStreamToArrayBuffer( - payload.RequestBody.file.content, - ); - const contentType = - getContentTypeFromFileName(payload.RequestBody.file.fileName) - || "application/octet-stream"; - appendForm( - body, - "file", - bytesToBlob(buffer, contentType), - payload.RequestBody.file.fileName, - ); - } else { - const contentType = - getContentTypeFromFileName(payload.RequestBody.file.fileName) - || "application/octet-stream"; - appendForm( - body, - "file", - bytesToBlob(payload.RequestBody.file.content, contentType), - payload.RequestBody.file.fileName, - ); - } appendForm(body, "model", payload.RequestBody.model); + if (payload.RequestBody.diarize !== undefined) { + appendForm(body, "diarize", payload.RequestBody.diarize); + } + if (payload.RequestBody.file !== undefined) { + if (isBlobLike(payload.RequestBody.file)) { + const file = payload.RequestBody.file; + const blob = await normalizeBlob(file); + const name = "name" in file ? (file.name as string) : undefined; + appendForm(body, "file", blob, name); + } else if (isReadableStream(payload.RequestBody.file.content)) { + const buffer = await readableStreamToArrayBuffer( + payload.RequestBody.file.content, + ); + const contentType = + getContentTypeFromFileName(payload.RequestBody.file.fileName) + || "application/octet-stream"; + appendForm( + body, + "file", + bytesToBlob(buffer, contentType), + payload.RequestBody.file.fileName, + ); + } else { + const contentType = + getContentTypeFromFileName(payload.RequestBody.file.fileName) + || "application/octet-stream"; + appendForm( + body, + "file", + bytesToBlob(payload.RequestBody.file.content, contentType), + payload.RequestBody.file.fileName, + ); + } + } + if (payload.RequestBody["keyterms[]"] !== undefined) { + appendForm(body, "keyterms[]", payload.RequestBody["keyterms[]"]); + } if (payload.RequestBody.language !== undefined) { appendForm(body, "language", payload.RequestBody.language); } + if (payload.RequestBody.provider !== undefined) { + appendForm(body, "provider", payload.RequestBody.provider); + } if (payload.RequestBody.response_format !== undefined) { appendForm(body, "response_format", payload.RequestBody.response_format); } if (payload.RequestBody.session_id !== undefined) { appendForm(body, "session_id", payload.RequestBody.session_id); } + if (payload.RequestBody.source_url !== undefined) { + appendForm(body, "source_url", payload.RequestBody.source_url); + } if (payload.RequestBody.temperature !== undefined) { appendForm(body, "temperature", payload.RequestBody.temperature); } diff --git a/src/lib/config.ts b/src/lib/config.ts index a981229d9..04d393f14 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -79,7 +79,7 @@ export function serverURLFromOptions(options: SDKOptions): URL | null { export const SDK_METADATA = { language: "typescript", openapiDocVersion: "1.0.0", - sdkVersion: "1.4.4", + sdkVersion: "1.4.5", genVersion: "2.914.0", - userAgent: "speakeasy-sdk/typescript 1.4.4 2.914.0 1.0.0 @openrouter/sdk", + userAgent: "speakeasy-sdk/typescript 1.4.5 2.914.0 1.0.0 @openrouter/sdk", } as const; diff --git a/src/models/byokproviderslug.ts b/src/models/byokproviderslug.ts index 076bef0af..af2e97e84 100644 --- a/src/models/byokproviderslug.ts +++ b/src/models/byokproviderslug.ts @@ -48,6 +48,7 @@ export const BYOKProviderSlug = { Deepseek: "deepseek", Dekallm: "dekallm", Digitalocean: "digitalocean", + Elevenlabs: "elevenlabs", Featherless: "featherless", Fireworks: "fireworks", FishAudio: "fish-audio", diff --git a/src/models/imagegenerationproviderpreferences.ts b/src/models/imagegenerationproviderpreferences.ts index 8b720d6fc..5dfac2952 100644 --- a/src/models/imagegenerationproviderpreferences.ts +++ b/src/models/imagegenerationproviderpreferences.ts @@ -64,6 +64,7 @@ export type ImageGenerationProviderPreferencesOptions = { deepseek?: { [k: string]: any } | undefined; dekallm?: { [k: string]: any } | undefined; digitalocean?: { [k: string]: any } | undefined; + elevenlabs?: { [k: string]: any } | undefined; enfer?: { [k: string]: any } | undefined; fakeProvider?: { [k: string]: any } | undefined; featherless?: { [k: string]: any } | undefined; @@ -293,6 +294,7 @@ export type ImageGenerationProviderPreferencesOptions$Outbound = { deepseek?: { [k: string]: any } | undefined; dekallm?: { [k: string]: any } | undefined; digitalocean?: { [k: string]: any } | undefined; + elevenlabs?: { [k: string]: any } | undefined; enfer?: { [k: string]: any } | undefined; "fake-provider"?: { [k: string]: any } | undefined; featherless?: { [k: string]: any } | undefined; @@ -446,6 +448,7 @@ export const ImageGenerationProviderPreferencesOptions$outboundSchema: deepseek: z.record(z.string(), z.any()).optional(), dekallm: z.record(z.string(), z.any()).optional(), digitalocean: z.record(z.string(), z.any()).optional(), + elevenlabs: z.record(z.string(), z.any()).optional(), enfer: z.record(z.string(), z.any()).optional(), fakeProvider: z.record(z.string(), z.any()).optional(), featherless: z.record(z.string(), z.any()).optional(), diff --git a/src/models/index.ts b/src/models/index.ts index 04f7fbc91..6a7a2dbb6 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -701,11 +701,14 @@ export * from "./streameventsresponseoutputitemadded.js"; export * from "./streameventsresponseoutputitemdone.js"; export * from "./streamlogprob.js"; export * from "./streamlogprobtoplogprob.js"; +export * from "./sttentity.js"; +export * from "./sttinlineinputaudio.js"; export * from "./sttinputaudio.js"; export * from "./sttrequest.js"; export * from "./sttresponse.js"; export * from "./sttsegment.js"; export * from "./stttimestampgranularity.js"; +export * from "./stturlinputaudio.js"; export * from "./sttusage.js"; export * from "./sttword.js"; export * from "./subagentnestedtool.js"; diff --git a/src/models/operations/createaudiotranscriptionsmultipart.ts b/src/models/operations/createaudiotranscriptionsmultipart.ts index 8dd0d87eb..b2e8c9cde 100644 --- a/src/models/operations/createaudiotranscriptionsmultipart.ts +++ b/src/models/operations/createaudiotranscriptionsmultipart.ts @@ -56,9 +56,17 @@ export type TimestampGranularities = OpenEnum; export type CreateAudioTranscriptionsMultipartRequestBody = { /** - * The audio file to transcribe. The format is derived from the filename extension or the file part content type. Max 25 MB; send larger files as base64 JSON via input_audio. + * Label each word with the speaker who said it (words[].speaker, words[].speaker_label). Requires response_format "verbose_json" (400 otherwise); word timestamps are included even when timestamp_granularities[] omits "word". Only supported by some providers; 400 when the selected model cannot diarize. */ - file: CreateAudioTranscriptionsMultipartFile | Blob; + diarize?: boolean | undefined; + /** + * The audio file to transcribe. The format is derived from the filename extension or the file part content type. Max 25 MB; send larger files as base64 JSON via input_audio, or by URL via source_url. Exactly one of file or source_url is required. + */ + file?: CreateAudioTranscriptionsMultipartFile | Blob | undefined; + /** + * Domain terms, names, or phrases to bias recognition toward; repeat the part once per term (keyterms=... is also accepted). Only supported by some providers; 400 when the selected model cannot use keyterms. + */ + keyterms?: Array | undefined; /** * The language of the input audio (ISO-639-1). */ @@ -67,6 +75,10 @@ export type CreateAudioTranscriptionsMultipartRequestBody = { * The model to use for transcription. */ model: string; + /** + * JSON-encoded provider preferences object, the same shape as the JSON body field: { "options": { "": { ... } } }. Only options for the matched provider are forwarded. Must decode to a JSON object. + */ + provider?: string | undefined; /** * The response format. "json" (default) returns { text, usage }; "verbose_json" additionally returns task, language, duration, and segment-level timestamps (OpenAI-compatible providers only). */ @@ -75,6 +87,10 @@ export type CreateAudioTranscriptionsMultipartRequestBody = { * A unique identifier for grouping related requests (e.g., a conversation or agent workflow). Used for observability grouping in Broadcast and private logging; never sent to the provider. If provided in both the request body and the x-session-id header, the body value takes precedence. */ sessionId?: string | undefined; + /** + * Publicly reachable http(s) URL of the audio file, downloaded by the provider directly (no size limit on our side). The format is derived from the URL path extension. Only supported by some providers; exactly one of file or source_url is required. + */ + sourceUrl?: string | undefined; /** * The sampling temperature. */ @@ -159,11 +175,15 @@ export const TimestampGranularities$outboundSchema: z.ZodType< /** @internal */ export type CreateAudioTranscriptionsMultipartRequestBody$Outbound = { - file: CreateAudioTranscriptionsMultipartFile$Outbound | Blob; + diarize?: boolean | undefined; + file?: CreateAudioTranscriptionsMultipartFile$Outbound | Blob | undefined; + "keyterms[]"?: Array | undefined; language?: string | undefined; model: string; + provider?: string | undefined; response_format?: string | undefined; session_id?: string | undefined; + source_url?: string | undefined; temperature?: number | undefined; "timestamp_granularities[]"?: Array | undefined; trace?: string | undefined; @@ -176,12 +196,16 @@ export const CreateAudioTranscriptionsMultipartRequestBody$outboundSchema: CreateAudioTranscriptionsMultipartRequestBody$Outbound, CreateAudioTranscriptionsMultipartRequestBody > = z.object({ + diarize: z.boolean().optional(), file: z.lazy(() => CreateAudioTranscriptionsMultipartFile$outboundSchema) - .or(blobLikeSchema), + .or(blobLikeSchema).optional(), + keyterms: z.array(z.string()).optional(), language: z.string().optional(), model: z.string(), + provider: z.string().optional(), responseFormat: ResponseFormat$outboundSchema.optional(), sessionId: z.string().optional(), + sourceUrl: z.string().optional(), temperature: z.number().optional(), timestampGranularities: z.array(TimestampGranularities$outboundSchema) .optional(), @@ -189,8 +213,10 @@ export const CreateAudioTranscriptionsMultipartRequestBody$outboundSchema: user: z.string().optional(), }).transform((v) => { return remap$(v, { + keyterms: "keyterms[]", responseFormat: "response_format", sessionId: "session_id", + sourceUrl: "source_url", timestampGranularities: "timestamp_granularities[]", }); }); diff --git a/src/models/operations/listbyokkeys.ts b/src/models/operations/listbyokkeys.ts index 9614d8a51..b91fc9b66 100644 --- a/src/models/operations/listbyokkeys.ts +++ b/src/models/operations/listbyokkeys.ts @@ -75,6 +75,7 @@ export const Provider = { Deepseek: "deepseek", Dekallm: "dekallm", Digitalocean: "digitalocean", + Elevenlabs: "elevenlabs", Featherless: "featherless", Fireworks: "fireworks", FishAudio: "fish-audio", diff --git a/src/models/providername.ts b/src/models/providername.ts index 185ed64f1..a5aa971d6 100644 --- a/src/models/providername.ts +++ b/src/models/providername.ts @@ -45,6 +45,7 @@ export const ProviderName = { DeepSeek: "DeepSeek", DekaLLM: "DekaLLM", DigitalOcean: "DigitalOcean", + ElevenLabs: "ElevenLabs", Featherless: "Featherless", Fireworks: "Fireworks", FishAudio: "Fish Audio", diff --git a/src/models/provideroptions.ts b/src/models/provideroptions.ts index 0f8373f4a..6f53600b6 100644 --- a/src/models/provideroptions.ts +++ b/src/models/provideroptions.ts @@ -53,6 +53,7 @@ export type ProviderOptions = { deepseek?: { [k: string]: any } | undefined; dekallm?: { [k: string]: any } | undefined; digitalocean?: { [k: string]: any } | undefined; + elevenlabs?: { [k: string]: any } | undefined; enfer?: { [k: string]: any } | undefined; fakeProvider?: { [k: string]: any } | undefined; featherless?: { [k: string]: any } | undefined; @@ -202,6 +203,7 @@ export type ProviderOptions$Outbound = { deepseek?: { [k: string]: any } | undefined; dekallm?: { [k: string]: any } | undefined; digitalocean?: { [k: string]: any } | undefined; + elevenlabs?: { [k: string]: any } | undefined; enfer?: { [k: string]: any } | undefined; "fake-provider"?: { [k: string]: any } | undefined; featherless?: { [k: string]: any } | undefined; @@ -354,6 +356,7 @@ export const ProviderOptions$outboundSchema: z.ZodType< deepseek: z.record(z.string(), z.any()).optional(), dekallm: z.record(z.string(), z.any()).optional(), digitalocean: z.record(z.string(), z.any()).optional(), + elevenlabs: z.record(z.string(), z.any()).optional(), enfer: z.record(z.string(), z.any()).optional(), fakeProvider: z.record(z.string(), z.any()).optional(), featherless: z.record(z.string(), z.any()).optional(), diff --git a/src/models/providerresponse.ts b/src/models/providerresponse.ts index 1fa76d060..25e844006 100644 --- a/src/models/providerresponse.ts +++ b/src/models/providerresponse.ts @@ -80,6 +80,7 @@ export const ProviderResponseProviderName = { DeepSeek: "DeepSeek", DekaLLM: "DekaLLM", DigitalOcean: "DigitalOcean", + ElevenLabs: "ElevenLabs", Featherless: "Featherless", Fireworks: "Fireworks", FishAudio: "Fish Audio", diff --git a/src/models/sttentity.ts b/src/models/sttentity.ts new file mode 100644 index 000000000..1dcbbeb87 --- /dev/null +++ b/src/models/sttentity.ts @@ -0,0 +1,55 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + * @generated-id: 7178554c1194 + */ + +import * as z from "zod/v4"; +import { remap as remap$ } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { Result as SafeParseResult } from "../types/fp.js"; +import { SDKValidationError } from "./errors/sdkvalidationerror.js"; + +/** + * A detected entity, returned when the provider runs entity detection + */ +export type STTEntity = { + /** + * Zero-based exclusive character offset of the entity end within the response-level text (not seconds) + */ + endChar: number; + /** + * Zero-based character offset of the entity start within the response-level text (not seconds) + */ + startChar: number; + /** + * Entity text as it appears in the transcript + */ + text: string; + /** + * Provider entity type label + */ + type: string; +}; + +/** @internal */ +export const STTEntity$inboundSchema: z.ZodType = z.object({ + end_char: z.int(), + start_char: z.int(), + text: z.string(), + type: z.string(), +}).transform((v) => { + return remap$(v, { + "end_char": "endChar", + "start_char": "startChar", + }); +}); + +export function sttEntityFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => STTEntity$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'STTEntity' from JSON`, + ); +} diff --git a/src/models/sttinlineinputaudio.ts b/src/models/sttinlineinputaudio.ts new file mode 100644 index 000000000..19eb6a5c3 --- /dev/null +++ b/src/models/sttinlineinputaudio.ts @@ -0,0 +1,43 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + * @generated-id: 58a47542cf73 + */ + +import * as z from "zod/v4"; + +/** + * Inline base64 audio input for speech-to-text + */ +export type STTInlineInputAudio = { + /** + * Base64-encoded audio data (raw bytes, not a data URI) + */ + data: string; + /** + * Audio format (e.g., wav, mp3, flac, m4a, ogg, webm, aac). Supported formats vary by provider. "pcm" means headerless signed 16-bit little-endian mono audio at 16 kHz. + */ + format: string; +}; + +/** @internal */ +export type STTInlineInputAudio$Outbound = { + data: string; + format: string; +}; + +/** @internal */ +export const STTInlineInputAudio$outboundSchema: z.ZodType< + STTInlineInputAudio$Outbound, + STTInlineInputAudio +> = z.object({ + data: z.string(), + format: z.string(), +}); + +export function sttInlineInputAudioToJSON( + sttInlineInputAudio: STTInlineInputAudio, +): string { + return JSON.stringify( + STTInlineInputAudio$outboundSchema.parse(sttInlineInputAudio), + ); +} diff --git a/src/models/sttinputaudio.ts b/src/models/sttinputaudio.ts index 48c884de1..45c3067d4 100644 --- a/src/models/sttinputaudio.ts +++ b/src/models/sttinputaudio.ts @@ -4,35 +4,35 @@ */ import * as z from "zod/v4"; +import { + STTInlineInputAudio, + STTInlineInputAudio$Outbound, + STTInlineInputAudio$outboundSchema, +} from "./sttinlineinputaudio.js"; +import { + STTUrlInputAudio, + STTUrlInputAudio$Outbound, + STTUrlInputAudio$outboundSchema, +} from "./stturlinputaudio.js"; /** - * Base64-encoded audio to transcribe + * Audio to transcribe: inline base64 bytes, or a URL the provider downloads directly. */ -export type STTInputAudio = { - /** - * Base64-encoded audio data (raw bytes, not a data URI) - */ - data: string; - /** - * Audio format (e.g., wav, mp3, flac, m4a, ogg, webm, aac). Supported formats vary by provider. - */ - format: string; -}; +export type STTInputAudio = STTInlineInputAudio | STTUrlInputAudio; /** @internal */ -export type STTInputAudio$Outbound = { - data: string; - format: string; -}; +export type STTInputAudio$Outbound = + | STTInlineInputAudio$Outbound + | STTUrlInputAudio$Outbound; /** @internal */ export const STTInputAudio$outboundSchema: z.ZodType< STTInputAudio$Outbound, STTInputAudio -> = z.object({ - data: z.string(), - format: z.string(), -}); +> = z.union([ + STTInlineInputAudio$outboundSchema, + STTUrlInputAudio$outboundSchema, +]); export function sttInputAudioToJSON(sttInputAudio: STTInputAudio): string { return JSON.stringify(STTInputAudio$outboundSchema.parse(sttInputAudio)); diff --git a/src/models/sttrequest.ts b/src/models/sttrequest.ts index d91de95b0..7f1eb169b 100644 --- a/src/models/sttrequest.ts +++ b/src/models/sttrequest.ts @@ -52,13 +52,21 @@ export type STTRequestResponseFormat = OpenEnum< >; /** - * Speech-to-text request input. Accepts a JSON body with input_audio containing base64-encoded audio. + * Speech-to-text request input. Accepts a JSON body with input_audio containing base64-encoded audio or a URL the provider downloads. */ export type STTRequest = { /** - * Base64-encoded audio to transcribe + * Label each word with the speaker who said it. Speaker labels are returned on the words array (speaker, speaker_label), so response_format must be "verbose_json" (a "json" request is rejected with a 400) and word timestamps are included even when timestamp_granularities omits "word". Only supported by some providers; the request is rejected with a 400 when the selected model cannot diarize. Providers may charge extra. + */ + diarize?: boolean | undefined; + /** + * Audio to transcribe: inline base64 bytes, or a URL the provider downloads directly. */ inputAudio: STTInputAudio; + /** + * Domain terms, names, or phrases to bias recognition toward. Only supported by some providers; the request is rejected with a 400 when the selected model cannot use keyterms. Providers may cap the number of terms or characters per term and may charge extra. + */ + keyterms?: Array | undefined; /** * ISO-639-1 language code (e.g., "en", "ja"). Auto-detected if omitted. */ @@ -126,7 +134,9 @@ export const STTRequestResponseFormat$outboundSchema: z.ZodType< /** @internal */ export type STTRequest$Outbound = { + diarize?: boolean | undefined; input_audio: STTInputAudio$Outbound; + keyterms?: Array | undefined; language?: string | undefined; model: string; provider?: STTRequestProvider$Outbound | undefined; @@ -143,7 +153,9 @@ export const STTRequest$outboundSchema: z.ZodType< STTRequest$Outbound, STTRequest > = z.object({ + diarize: z.boolean().optional(), inputAudio: STTInputAudio$outboundSchema, + keyterms: z.array(z.string()).optional(), language: z.string().optional(), model: z.string(), provider: z.lazy(() => STTRequestProvider$outboundSchema).optional(), diff --git a/src/models/sttresponse.ts b/src/models/sttresponse.ts index 7584c62ab..feb652f03 100644 --- a/src/models/sttresponse.ts +++ b/src/models/sttresponse.ts @@ -4,9 +4,11 @@ */ import * as z from "zod/v4"; +import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +import { STTEntity, STTEntity$inboundSchema } from "./sttentity.js"; import { STTSegment, STTSegment$inboundSchema } from "./sttsegment.js"; import { STTUsage, STTUsage$inboundSchema } from "./sttusage.js"; import { STTWord, STTWord$inboundSchema } from "./sttword.js"; @@ -23,10 +25,18 @@ export type STTResponse = { * Duration of the input audio in seconds, present when response_format is verbose_json */ duration?: number | undefined; + /** + * Detected entities with character offsets into text, present when the provider runs entity detection + */ + entities?: Array | undefined; /** * Detected or forced language, present when response_format is verbose_json */ language?: string | undefined; + /** + * Provider confidence in the detected language from 0 to 1, present when response_format is verbose_json and the provider scores language detection + */ + languageConfidence?: number | undefined; /** * Timestamped transcript segments, present when response_format is verbose_json */ @@ -54,12 +64,18 @@ export const STTResponse$inboundSchema: z.ZodType = z .object({ confidence: z.number().optional(), duration: z.number().optional(), + entities: z.array(STTEntity$inboundSchema).optional(), language: z.string().optional(), + language_confidence: z.number().optional(), segments: z.array(STTSegment$inboundSchema).optional(), task: z.string().optional(), text: z.string(), usage: STTUsage$inboundSchema.optional(), words: z.array(STTWord$inboundSchema).optional(), + }).transform((v) => { + return remap$(v, { + "language_confidence": "languageConfidence", + }); }); export function sttResponseFromJSON( diff --git a/src/models/sttsegment.ts b/src/models/sttsegment.ts index 322b8b28a..b78c3bdbf 100644 --- a/src/models/sttsegment.ts +++ b/src/models/sttsegment.ts @@ -17,6 +17,10 @@ export type STTSegment = { * Average log probability of the segment */ avgLogprob?: number | undefined; + /** + * Zero-based audio channel index for the segment, present when the provider transcribes channels separately + */ + channel?: number | undefined; /** * Compression ratio of the segment */ @@ -41,6 +45,10 @@ export type STTSegment = { * Speaker index for the segment, present when the provider returns diarization data */ speaker?: number | undefined; + /** + * Provider speaker label for the segment, present when the provider labels speakers with a string + */ + speakerLabel?: string | undefined; /** * Segment start time in seconds */ @@ -63,12 +71,14 @@ export type STTSegment = { export const STTSegment$inboundSchema: z.ZodType = z .object({ avg_logprob: z.number().optional(), + channel: z.int().optional(), compression_ratio: z.number().optional(), end: z.number(), id: z.int(), no_speech_prob: z.number().optional(), seek: z.int().optional(), speaker: z.int().optional(), + speaker_label: z.string().optional(), start: z.number(), temperature: z.number().optional(), text: z.string(), @@ -78,6 +88,7 @@ export const STTSegment$inboundSchema: z.ZodType = z "avg_logprob": "avgLogprob", "compression_ratio": "compressionRatio", "no_speech_prob": "noSpeechProb", + "speaker_label": "speakerLabel", }); }); diff --git a/src/models/stturlinputaudio.ts b/src/models/stturlinputaudio.ts new file mode 100644 index 000000000..77fb13192 --- /dev/null +++ b/src/models/stturlinputaudio.ts @@ -0,0 +1,43 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + * @generated-id: d7757cc949dd + */ + +import * as z from "zod/v4"; + +/** + * Audio input fetched by the provider from a URL + */ +export type STTUrlInputAudio = { + /** + * Audio format of the file at the URL. Defaults to the extension of the URL path; required when the path has no extension. + */ + format?: string | undefined; + /** + * Publicly reachable http(s) URL of the audio file. The provider downloads it directly, so the inline upload size limit does not apply. Only supported by some providers. + */ + url: string; +}; + +/** @internal */ +export type STTUrlInputAudio$Outbound = { + format?: string | undefined; + url: string; +}; + +/** @internal */ +export const STTUrlInputAudio$outboundSchema: z.ZodType< + STTUrlInputAudio$Outbound, + STTUrlInputAudio +> = z.object({ + format: z.string().optional(), + url: z.string(), +}); + +export function sttUrlInputAudioToJSON( + sttUrlInputAudio: STTUrlInputAudio, +): string { + return JSON.stringify( + STTUrlInputAudio$outboundSchema.parse(sttUrlInputAudio), + ); +} diff --git a/src/models/sttword.ts b/src/models/sttword.ts index 2ea0476e2..e7af01f3f 100644 --- a/src/models/sttword.ts +++ b/src/models/sttword.ts @@ -4,14 +4,33 @@ */ import * as z from "zod/v4"; +import { remap as remap$ } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; +import * as openEnums from "../types/enums.js"; +import { OpenEnum } from "../types/enums.js"; import { Result as SafeParseResult } from "../types/fp.js"; import { SDKValidationError } from "./errors/sdkvalidationerror.js"; +/** + * Kind of entry; omitted or "word" for spoken words, "audio_event" for non-speech sounds the provider tags with timestamps + */ +export const STTWordType = { + Word: "word", + AudioEvent: "audio_event", +} as const; +/** + * Kind of entry; omitted or "word" for spoken words, "audio_event" for non-speech sounds the provider tags with timestamps + */ +export type STTWordType = OpenEnum; + /** * A timestamped word, returned when the provider includes word-level timestamps */ export type STTWord = { + /** + * Zero-based audio channel index for the word, present when the provider transcribes channels separately + */ + channel?: number | undefined; /** * Provider confidence for the word from 0 to 1, present when the provider returns per-word confidence */ @@ -24,23 +43,42 @@ export type STTWord = { * Speaker index for the word, present when the provider returns diarization data */ speaker?: number | undefined; + /** + * Provider speaker label for the word, present when the provider labels speakers with a string + */ + speakerLabel?: string | undefined; /** * Word start time in seconds */ start: number; /** - * The transcribed word + * Kind of entry; omitted or "word" for spoken words, "audio_event" for non-speech sounds the provider tags with timestamps + */ + type?: STTWordType | undefined; + /** + * The transcribed word, or the event tag such as "(laughter)" when type is audio_event */ word: string; }; +/** @internal */ +export const STTWordType$inboundSchema: z.ZodType = + openEnums.inboundSchema(STTWordType); + /** @internal */ export const STTWord$inboundSchema: z.ZodType = z.object({ + channel: z.int().optional(), confidence: z.number().optional(), end: z.number(), speaker: z.int().optional(), + speaker_label: z.string().optional(), start: z.number(), + type: STTWordType$inboundSchema.optional(), word: z.string(), +}).transform((v) => { + return remap$(v, { + "speaker_label": "speakerLabel", + }); }); export function sttWordFromJSON( diff --git a/src/models/videogenerationrequest.ts b/src/models/videogenerationrequest.ts index 961402e69..b17c821a2 100644 --- a/src/models/videogenerationrequest.ts +++ b/src/models/videogenerationrequest.ts @@ -91,6 +91,7 @@ export type VideoGenerationRequestOptions = { deepseek?: { [k: string]: any } | undefined; dekallm?: { [k: string]: any } | undefined; digitalocean?: { [k: string]: any } | undefined; + elevenlabs?: { [k: string]: any } | undefined; enfer?: { [k: string]: any } | undefined; fakeProvider?: { [k: string]: any } | undefined; featherless?: { [k: string]: any } | undefined; @@ -345,6 +346,7 @@ export type VideoGenerationRequestOptions$Outbound = { deepseek?: { [k: string]: any } | undefined; dekallm?: { [k: string]: any } | undefined; digitalocean?: { [k: string]: any } | undefined; + elevenlabs?: { [k: string]: any } | undefined; enfer?: { [k: string]: any } | undefined; "fake-provider"?: { [k: string]: any } | undefined; featherless?: { [k: string]: any } | undefined; @@ -497,6 +499,7 @@ export const VideoGenerationRequestOptions$outboundSchema: z.ZodType< deepseek: z.record(z.string(), z.any()).optional(), dekallm: z.record(z.string(), z.any()).optional(), digitalocean: z.record(z.string(), z.any()).optional(), + elevenlabs: z.record(z.string(), z.any()).optional(), enfer: z.record(z.string(), z.any()).optional(), fakeProvider: z.record(z.string(), z.any()).optional(), featherless: z.record(z.string(), z.any()).optional(), diff --git a/src/sdk/stt.ts b/src/sdk/stt.ts index 7efe904b8..0d9653a54 100644 --- a/src/sdk/stt.ts +++ b/src/sdk/stt.ts @@ -15,7 +15,7 @@ export class STT extends ClientSDK { * Create transcription * * @remarks - * Transcribes audio into text. Accepts base64-encoded audio input as JSON or an OpenAI-style multipart/form-data file upload, and returns the transcribed text. + * Transcribes audio into text. Accepts base64-encoded audio input as JSON, an OpenAI-style multipart/form-data file upload, or a URL the provider downloads directly, and returns the transcribed text. */ async createTranscription( request: operations.CreateAudioTranscriptionsRequest, @@ -32,7 +32,7 @@ export class STT extends ClientSDK { * Create transcription * * @remarks - * Transcribes audio into text. Accepts base64-encoded audio input as JSON or an OpenAI-style multipart/form-data file upload, and returns the transcribed text. + * Transcribes audio into text. Accepts base64-encoded audio input as JSON, an OpenAI-style multipart/form-data file upload, or a URL the provider downloads directly, and returns the transcribed text. */ async createTranscriptionMultipart( request: operations.CreateAudioTranscriptionsMultipartRequest, From 424e79b886f01548028ce9988851ac1b277ac4f0 Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Tue, 29 Sep 2026 19:00:19 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow