From 73a5388e798ed861013918fd76c98bbbf3a014a7 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Sun, 20 Sep 2026 04:46:41 +0000 Subject: [PATCH 1/3] ## Typescript SDK Changes: * `openrouter.systemOne.create()`: **Added** --- .speakeasy/gen.lock | 90 +++++-- .speakeasy/gen.yaml | 2 +- .speakeasy/out.openapi.yaml | 11 +- .speakeasy/workflow.lock | 10 +- RELEASES.md | 12 +- .../operations/createsystemoneglobals.mdx | 19 ++ .../operations/createsystemonerequest.mdx | 26 ++ docs/sdks/systemone/README.mdx | 170 ++++++++++++ jsr.json | 2 +- package.json | 14 +- src/funcs/systemOneCreate.ts | 242 ++++++++++++++++++ src/lib/config.ts | 4 +- src/models/operations/createsystemone.ts | 85 ++++++ src/models/operations/index.ts | 1 + src/sdk/sdk.ts | 6 + src/sdk/systemone.ts | 29 +++ 16 files changed, 686 insertions(+), 37 deletions(-) create mode 100644 docs/models/operations/createsystemoneglobals.mdx create mode 100644 docs/models/operations/createsystemonerequest.mdx create mode 100644 docs/sdks/systemone/README.mdx create mode 100644 src/funcs/systemOneCreate.ts create mode 100644 src/models/operations/createsystemone.ts create mode 100644 src/sdk/systemone.ts diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 3a27b6c32..52c8e151a 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,19 +1,19 @@ lockVersion: "" id: "" management: - docChecksum: 2a0db5478432d0ae3c6c404e1a8df654 + docChecksum: 02b4c06ec2d52324408d051bd1168781 docVersion: 1.0.0 speakeasyVersion: 1.787.0 generationVersion: 2.914.0 - releaseVersion: 1.3.7 - configChecksum: 2c146ec2b9f4f8ceaab02caddffce2a4 + releaseVersion: 1.3.8 + configChecksum: e7d73e099a3f00a2b6a28aba29165bf3 repoURL: https://github.com/OpenRouterTeam/typescript-sdk.git installationURL: https://github.com/OpenRouterTeam/typescript-sdk published: true persistentEdits: - generation_id: f872b08a-0cd4-490a-89f8-f7ce86abe31a - pristine_commit_hash: 0fa91667ac56411438d4c89f2e96abb5f5e40568 - pristine_tree_hash: 5ef6b97b4c4b477c54679de3f1f7b790ae011aef + generation_id: 2f195164-ed59-4a37-99e5-bf853e71c5c7 + pristine_commit_hash: be866010dc5972ed501e239d2b6e6ac7e5b527b0 + pristine_tree_hash: d8367ee92538fa9973b18117f9d3673bdd02af78 features: typescript: acceptHeaders: 2.81.2 @@ -7775,6 +7775,14 @@ trackedFiles: id: 2d76b1e8e8b7 last_write_checksum: sha1:0cd53c1569a60f47eb1d4cd7392d34d54ef16fa5 pristine_git_object: 2199321b31cfce31bf1ee7a7aa106f359e49120a + docs/models/operations/createsystemoneglobals.mdx: + id: 984ed7850b98 + last_write_checksum: sha1:27052d1b6c33f4a154546b80c50b1c05e8ca712f + pristine_git_object: 50ad8be8e54484ad67402683ca3a6dcb90563455 + docs/models/operations/createsystemonerequest.mdx: + id: b366ea72f04b + last_write_checksum: sha1:a0fd9ef1035d64ef5a37a74cc418c583ac95e5a3 + pristine_git_object: d5b6c52bc93c20c7fc887370e12d17b86155f0af docs/models/operations/createttsglobals.md: id: d77253ce42ea last_write_checksum: sha1:9516108a1caa4256a40d277dd24f9d3be5f92a2d @@ -13717,6 +13725,10 @@ trackedFiles: id: 190b0dc9a5d1 last_write_checksum: sha1:b835cb30bf693fe45095b52a0ae93c0f65fabce4 pristine_git_object: 5dbc5cf9ec9371f37d3470af2be60d2f1c815695 + docs/sdks/systemone/README.mdx: + id: 55c317c71f3d + last_write_checksum: sha1:bc9bdc066212391be32e4418438b965694faa2c8 + pristine_git_object: b537f54a24ec9db99114c4e3c87aad4394218e5f docs/sdks/tts/README.md: id: 0c425074d09f last_write_checksum: sha1:019ae6737c83daac03ebbe7d56c49b0d3ad11262 @@ -13770,12 +13782,12 @@ trackedFiles: pristine_git_object: 410efafd6a7f50d91ccb87131fedbe0c3d47e15a jsr.json: id: 7f6ab7767282 - last_write_checksum: sha1:743b1e4539e309eee48126d7fcbd5ea655727b5f - pristine_git_object: e3372dc4b537db14c011f1ab756ab37b342dba62 + last_write_checksum: sha1:d6f8a7ef49bc1b7a5bb8a927882c66b271e7c8eb + pristine_git_object: be3e0babc6a39b526683ecc11e6407f18963292e package.json: id: 7030d0b2f71b - last_write_checksum: sha1:a80684464694855cc69fcc9c6c4e81267157f1b5 - pristine_git_object: 3fbf5c9e1acb2ce102c98990ad52da4564bdcaef + last_write_checksum: sha1:d74eaf28ee1efc7a498f0046d0beabce53f40cb3 + pristine_git_object: 4cf3a1777ced6eac316f37c97a3bd222637b286c src/core.ts: id: f431fdbcd144 last_write_checksum: sha1:5aa66b0b6a5964f3eea7f3098c2eb3c0ee9c0131 @@ -14164,6 +14176,10 @@ trackedFiles: id: ec09b43036c3 last_write_checksum: sha1:a4ccbbbf93dc4b205afcae8e2fec5e769056a8ce pristine_git_object: c0a7ee9d613521068a759c5c7de0ec298aa30723 + src/funcs/systemOneCreate.ts: + id: 446a269bb013 + last_write_checksum: sha1:371dfcdd07849de9b435b70f4a853d5296cb4101 + pristine_git_object: 7ff9ffc17f233b69e4b603894acf1ef5a443b0d1 src/funcs/ttsCreateSpeech.ts: id: ed304f5d6ad8 last_write_checksum: sha1:9036bff1fc295e995ac27b32a022b378b548b3bd @@ -14282,8 +14298,8 @@ trackedFiles: pristine_git_object: a187e58707bdb726ca2aff74941efe7493422d4e src/lib/config.ts: id: 320761608fb3 - last_write_checksum: sha1:fd11a36b280af275a71abd346a80a0b648c3b592 - pristine_git_object: a005a25f16d860375833b94762fd8204c3250740 + last_write_checksum: sha1:9fade4cf1bca63a2b085ab8abaa6dc19b5fecd82 + pristine_git_object: 8aec2c30548ca1528f9a8dda377c1e34f751315a src/lib/dlv.ts: id: b1988214835a last_write_checksum: sha1:eaac763b22717206a6199104e0403ed17a4e2711 @@ -16350,6 +16366,10 @@ trackedFiles: id: ebd7800a291d last_write_checksum: sha1:0fbbd383b5a354b70f758c06ba85d2001802e189 pristine_git_object: 38b8d8511d4503a767e6483091e00d06047cb276 + src/models/operations/createsystemone.ts: + id: ac12b9bcab42 + last_write_checksum: sha1:6bd652a9c0c725768dd1f5386a417ecbff1ca304 + pristine_git_object: 8577f62cf4d311802bfaa54f3d251c5b4894d9b3 src/models/operations/createvideos.ts: id: 06dc92996e18 last_write_checksum: sha1:debbfb49bdfed99a57248da4ed95dc06be8c1e43 @@ -16520,8 +16540,8 @@ trackedFiles: pristine_git_object: a052ed42bd123e79be1f05dc823c808f8c32b383 src/models/operations/index.ts: id: 0d9ffaf774d2 - last_write_checksum: sha1:ae345b4b04b8059f56f1b33dea4739f5a7b2a0a5 - pristine_git_object: 1309cce46cb496de3d21f05b77bf4349cc9e2558 + last_write_checksum: sha1:b52bbe7ff22d625b02bf92fbcf5aa834df8768b0 + pristine_git_object: 811736c154678b258d041233c1e70c50ae70cc0c src/models/operations/list.ts: id: ce11386ad30f last_write_checksum: sha1:357fb735d77e377eba5fec5742d7a4dca6747f47 @@ -17812,12 +17832,16 @@ trackedFiles: pristine_git_object: 8e9b4047e476a17451b5feb7e9d4a32eec7f61f8 src/sdk/sdk.ts: id: 784571af2f69 - last_write_checksum: sha1:fc11c771bddc7539fe381439004ae7de407d112b - pristine_git_object: dee18dfe000e6d40dc50a884a4ec91650971d3d4 + last_write_checksum: sha1:45eb0c06159c711db01045e7c5f9d798a3ad9a7c + pristine_git_object: d15ef3c72127a043a25e40474d479b750d44d523 src/sdk/stt.ts: id: fd9e88c22d1f last_write_checksum: sha1:baa74a0310eb8b465dea302495e744e3f3ea1ca5 pristine_git_object: 7efe904b807115d3c691636b37a98fdf3b079878 + src/sdk/systemone.ts: + id: af359eaea7c4 + last_write_checksum: sha1:6159ff585ccef54dab6c74d100869f46f1d38360 + pristine_git_object: 7e2b7285263de15e0803472e1411eea57057f5b5 src/sdk/tts.ts: id: b3236e8fa217 last_write_checksum: sha1:ebe45b666f4809ceb2406e6fd6f307f9455076b3 @@ -21082,4 +21106,38 @@ examples: application/json: {"error": {"code": 524, "message": "Request timed out. Please try again later."}} "529": application/json: {"error": {"code": 529, "message": "Provider returned error"}} + createSystemone: + speakeasy-default-create-systemone: + requestBody: + application/json: {"model": "Taurus", "questions": {}, "state": {"key": "Utah", "key1": "Alaska", "key2": "Ohio"}} + responses: + "200": + application/json: {"answers": {"key": {"score": 9690, "type": "score"}}, "model": "Model Y", "usage": {"input_tokens": 514823, "output_tokens": 883118}} + "400": + application/json: {"error": {"code": 400, "message": "Invalid request parameters"}} + "401": + application/json: {"error": {"code": 401, "message": "Missing Authentication header"}} + "402": + application/json: {"error": {"code": 402, "message": "Insufficient credits. Add more using https://openrouter.ai/credits"}} + "403": + application/json: {"error": {"code": 403, "message": "Only management keys can perform this operation"}} + "404": + application/json: {"error": {"code": 404, "message": "Resource not found"}} + "413": + application/json: {"error": {"code": 413, "message": "Request payload too large"}} + "429": + application/json: {"error": {"code": 429, "message": "Rate limit exceeded"}} + "500": + application/json: {"error": {"code": 500, "message": "Internal Server Error"}} + "502": + application/json: {"error": {"code": 502, "message": "Provider returned error"}} + "503": + application/json: {"error": {"code": 503, "message": "Service temporarily unavailable"}} + "524": + application/json: {"error": {"code": 524, "message": "Request timed out. Please try again later."}} + "529": + application/json: {"error": {"code": 529, "message": "Provider returned error"}} examplesVersion: 1.0.2 +releaseNotes: | + ## Typescript SDK Changes: + * `openrouter.systemOne.create()`: **Added** diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 5046ecd41..569c87482 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -37,7 +37,7 @@ generation: documentation: mintlify preApplyUnionDiscriminators: true typescript: - version: 1.3.7 + version: 1.3.8 acceptHeaderEnum: false additionalDependencies: dependencies: diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml index 41d1b10c6..d877656cb 100644 --- a/.speakeasy/out.openapi.yaml +++ b/.speakeasy/out.openapi.yaml @@ -43313,7 +43313,7 @@ paths: - $ref: "#/components/parameters/AppCategories" /systemone: post: - description: 'TypeSafe SDK compatible alias for `POST /api/alpha/decisions`. Accepts the same request body and returns the same response. Bare TypeSafe model IDs such as `jev-1.13` and `jev-latest` are mapped onto the `typesafe/` namespace.' + description: 'Sends state and typed questions to a System One model such as Jev and returns its answers. Compatible with the TypeSafe SDKs. Bare System One model IDs such as `jev-1.13` and `jev-latest` are mapped onto the `typesafe/` namespace.' operationId: 'createSystemone' requestBody: content: @@ -43506,10 +43506,10 @@ paths: schema: $ref: '#/components/schemas/ProviderOverloadedResponse' description: 'Provider Overloaded - Provider is temporarily overloaded' - summary: 'Submit a System One request (TypeSafe SDK compatible alias)' + summary: 'Submit a System One request' tags: - - 'alpha.decisions' - x-speakeasy-ignore: true + - 'SystemOne' + x-speakeasy-name-override: 'create' parameters: - $ref: "#/components/parameters/AppIdentifier" - $ref: "#/components/parameters/AppDisplayName" @@ -46481,6 +46481,9 @@ tags: - description: 'Speech-to-text endpoints' name: 'STT' x-displayName: 'Transcriptions' + - description: 'System One endpoints for models such as Jev, compatible with the TypeSafe SDKs. See https://openrouter.ai/docs/guides/community/typesafe-sdk.' + name: 'SystemOne' + x-displayName: 'System One' - description: 'Text-to-speech endpoints' name: 'TTS' x-displayName: 'Speech' diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 8d833e085..25558463b 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:61814618fd7b34af9aaf27dc0eca5d35b47a7d1b0279ba38493dd526a9509dc5 - sourceBlobDigest: sha256:ca4c9cf7aa68e15b51a1a808c528d15d7e90649d2d9006e7fe64a585d7b05fbf + sourceRevisionDigest: sha256:217cc17d35c02b1b2bb855a52836ea401e778d519baec6679c86e18d07311a76 + sourceBlobDigest: sha256:7228242345cf800709206502b1f6b6103752a46578e8f553d67bc6e373995327 tags: - latest - 1.0.0 @@ -11,10 +11,10 @@ targets: openrouter: source: OpenRouter API sourceNamespace: open-router-chat-completions-api - sourceRevisionDigest: sha256:61814618fd7b34af9aaf27dc0eca5d35b47a7d1b0279ba38493dd526a9509dc5 - sourceBlobDigest: sha256:ca4c9cf7aa68e15b51a1a808c528d15d7e90649d2d9006e7fe64a585d7b05fbf + sourceRevisionDigest: sha256:217cc17d35c02b1b2bb855a52836ea401e778d519baec6679c86e18d07311a76 + sourceBlobDigest: sha256:7228242345cf800709206502b1f6b6103752a46578e8f553d67bc6e373995327 codeSamplesNamespace: open-router-chat-completions-api-typescript-code-samples - codeSamplesRevisionDigest: sha256:6908a14f33339808df89c7a84b697a912466b367a0c85f863fc4a49cfe7d0478 + codeSamplesRevisionDigest: sha256:df5447f18e01ce0c745bf36442e17e092031f31fdf1a3c9d8de2fa52eac174c9 workflow: workflowVersion: 1.0.0 speakeasyVersion: 1.787.0 diff --git a/RELEASES.md b/RELEASES.md index 468bc23ac..ca21e3db6 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -3866,4 +3866,14 @@ Based on: ### Generated - [typescript v1.3.7] . ### Releases -- [NPM v1.3.7] https://www.npmjs.com/package/@openrouter/sdk/v/1.3.7 - . \ No newline at end of file +- [NPM v1.3.7] https://www.npmjs.com/package/@openrouter/sdk/v/1.3.7 - . + +## 2026-09-20 04:44:17 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [typescript v1.3.8] . +### Releases +- [NPM v1.3.8] https://www.npmjs.com/package/@openrouter/sdk/v/1.3.8 - . \ No newline at end of file diff --git a/docs/models/operations/createsystemoneglobals.mdx b/docs/models/operations/createsystemoneglobals.mdx new file mode 100644 index 000000000..50ad8be8e --- /dev/null +++ b/docs/models/operations/createsystemoneglobals.mdx @@ -0,0 +1,19 @@ +--- +title: "CreateSystemoneGlobals" +--- + +## Example Usage + +```typescript +import { CreateSystemoneGlobals } from "@openrouter/sdk/models/operations"; + +let value: CreateSystemoneGlobals = {}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `httpReferer` | *string* | :heavy_minus_sign: | The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
| +| `appTitle` | *string* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| +| `appCategories` | *string* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| \ No newline at end of file diff --git a/docs/models/operations/createsystemonerequest.mdx b/docs/models/operations/createsystemonerequest.mdx new file mode 100644 index 000000000..d5b6c52bc --- /dev/null +++ b/docs/models/operations/createsystemonerequest.mdx @@ -0,0 +1,26 @@ +--- +title: "CreateSystemoneRequest" +--- + +## Example Usage + +```typescript +import { CreateSystemoneRequest } from "@openrouter/sdk/models/operations"; + +let value: CreateSystemoneRequest = { + decisionsRequest: { + model: "Escalade", + questions: {}, + state: {}, + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `httpReferer` | *string* | :heavy_minus_sign: | The app identifier should be your app's URL and is used as the primary identifier for rankings.
This is used to track API usage per application.
| +| `appTitle` | *string* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| +| `appCategories` | *string* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| +| `decisionsRequest` | [models.DecisionsRequest](../../models/decisionsrequest.mdx) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/sdks/systemone/README.mdx b/docs/sdks/systemone/README.mdx new file mode 100644 index 000000000..b537f54a2 --- /dev/null +++ b/docs/sdks/systemone/README.mdx @@ -0,0 +1,170 @@ +--- +title: "SystemOne" +description: "System One endpoints for models such as Jev, compatible with the TypeSafe SDKs. See https://openrouter.ai/docs/guides/community/typesafe-sdk." +--- + +## Overview + +System One endpoints for models such as Jev, compatible with the TypeSafe SDKs. See https://openrouter.ai/docs/guides/community/typesafe-sdk. + +### Available Operations + +* [create](#create) - Submit a System One request + +## create + +Sends state and typed questions to a System One model such as Jev and returns its answers. Compatible with the TypeSafe SDKs. Bare System One model IDs such as `jev-1.13` and `jev-latest` are mapped onto the `typesafe/` namespace. + +### Example Usage + +```typescript +import { OpenRouter } from "@openrouter/sdk"; + +const openRouter = new OpenRouter({ + httpReferer: "", + appTitle: "", + appCategories: "", + apiKey: process.env["OPENROUTER_API_KEY"] ?? "", +}); + +async function run() { + const result = await openRouter.systemOne.create({ + decisionsRequest: { + model: "typesafe/jev-1.13", + questions: { + "is_bug": { + criteria: { + false: "The customer is asking a question or requesting a feature.", + true: "The customer describes broken or unexpected product behavior.", + }, + instructions: "Is the customer reporting a software defect?", + type: "noul", + }, + "team": { + criteria: { + "account": "Login, permissions, or profile issues.", + "frontend": "Rendering, layout, or browser compatibility issues.", + "payments": "Checkout, billing, or payment processing issues.", + }, + instructions: "Which team should own this ticket?", + type: "choice", + }, + "urgency": { + criteria: [ + "Can wait for the next release", + "Should be fixed this week", + "Blocking revenue right now", + ], + instructions: "How urgent is this ticket?", + type: "score", + }, + }, + state: { + "customer_tier": "enterprise", + "ticket": "My checkout page shows a blank screen after I click Pay. I have tried two browsers.", + }, + }, + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { OpenRouterCore } from "@openrouter/sdk/core.js"; +import { systemOneCreate } from "@openrouter/sdk/funcs/systemOneCreate.js"; + +// Use `OpenRouterCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const openRouter = new OpenRouterCore({ + httpReferer: "", + appTitle: "", + appCategories: "", + apiKey: process.env["OPENROUTER_API_KEY"] ?? "", +}); + +async function run() { + const res = await systemOneCreate(openRouter, { + decisionsRequest: { + model: "typesafe/jev-1.13", + questions: { + "is_bug": { + criteria: { + false: "The customer is asking a question or requesting a feature.", + true: "The customer describes broken or unexpected product behavior.", + }, + instructions: "Is the customer reporting a software defect?", + type: "noul", + }, + "team": { + criteria: { + "account": "Login, permissions, or profile issues.", + "frontend": "Rendering, layout, or browser compatibility issues.", + "payments": "Checkout, billing, or payment processing issues.", + }, + instructions: "Which team should own this ticket?", + type: "choice", + }, + "urgency": { + criteria: [ + "Can wait for the next release", + "Should be fixed this week", + "Blocking revenue right now", + ], + instructions: "How urgent is this ticket?", + type: "score", + }, + }, + state: { + "customer_tier": "enterprise", + "ticket": "My checkout page shows a blank screen after I click Pay. I have tried two browsers.", + }, + }, + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("systemOneCreate failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.CreateSystemoneRequest](../../models/operations/createsystemonerequest.mdx) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.mdx) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[models.DecisionsResponse](../../models/decisionsresponse.mdx)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| errors.BadRequestResponseError | 400 | application/json | +| errors.UnauthorizedResponseError | 401 | application/json | +| errors.PaymentRequiredResponseError | 402 | application/json | +| errors.ForbiddenResponseError | 403 | application/json | +| errors.NotFoundResponseError | 404 | application/json | +| errors.PayloadTooLargeResponseError | 413 | application/json | +| errors.TooManyRequestsResponseError | 429 | application/json | +| errors.InternalServerResponseError | 500 | application/json | +| errors.BadGatewayResponseError | 502 | application/json | +| errors.ServiceUnavailableResponseError | 503 | application/json | +| errors.EdgeNetworkTimeoutResponseError | 524 | application/json | +| errors.ProviderOverloadedResponseError | 529 | application/json | +| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/jsr.json b/jsr.json index e3372dc4b..be3e0babc 100644 --- a/jsr.json +++ b/jsr.json @@ -2,7 +2,7 @@ { "name": "@openrouter/sdk", - "version": "1.3.7", + "version": "1.3.8", "exports": { ".": "./src/index.ts", "./models/errors": "./src/models/errors/index.ts", diff --git a/package.json b/package.json index 1b5742afb..d5c362659 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@openrouter/sdk", - "version": "1.3.7", + "version": "1.3.8", "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": [ @@ -73,15 +73,15 @@ "lint": "eslint --cache --max-warnings=0 src", "build": "tsc", "prepublishOnly": "npm run build", + "compile": "tsc", + "postinstall": "node scripts/check-types.js || true", "test": "vitest --run --project unit", - "test:transit": "exit 0", + "test:e2e": "vitest --run --project e2e", "test:watch": "vitest --watch --project unit", + "prepare": "npm run build", + "test:transit": "exit 0", "typecheck": "tsc --noEmit", - "typecheck:transit": "exit 0", - "postinstall": "node scripts/check-types.js || true", - "test:e2e": "vitest --run --project e2e", - "compile": "tsc", - "prepare": "npm run build" + "typecheck:transit": "exit 0" }, "peerDependencies": {}, "devDependencies": { diff --git a/src/funcs/systemOneCreate.ts b/src/funcs/systemOneCreate.ts new file mode 100644 index 000000000..7ff9ffc17 --- /dev/null +++ b/src/funcs/systemOneCreate.ts @@ -0,0 +1,242 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + * @generated-id: 446a269bb013 + */ + +import { OpenRouterCore } from "../core.js"; +import { encodeJSON, encodeSimple } from "../lib/encodings.js"; +import { matchStatusCode } from "../lib/http.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import * as errors from "../models/errors/index.js"; +import { OpenRouterError } from "../models/errors/openroutererror.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Submit a System One request + * + * @remarks + * Sends state and typed questions to a System One model such as Jev and returns its answers. Compatible with the TypeSafe SDKs. Bare System One model IDs such as `jev-1.13` and `jev-latest` are mapped onto the `typesafe/` namespace. + */ +export function systemOneCreate( + client: OpenRouterCore, + request: operations.CreateSystemoneRequest, + options?: RequestOptions, +): APIPromise< + Result< + models.DecisionsResponse, + | errors.BadRequestResponseError + | errors.UnauthorizedResponseError + | errors.PaymentRequiredResponseError + | errors.ForbiddenResponseError + | errors.NotFoundResponseError + | errors.PayloadTooLargeResponseError + | errors.TooManyRequestsResponseError + | errors.InternalServerResponseError + | errors.BadGatewayResponseError + | errors.ServiceUnavailableResponseError + | errors.EdgeNetworkTimeoutResponseError + | errors.ProviderOverloadedResponseError + | OpenRouterError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: OpenRouterCore, + request: operations.CreateSystemoneRequest, + options?: RequestOptions, +): Promise< + [ + Result< + models.DecisionsResponse, + | errors.BadRequestResponseError + | errors.UnauthorizedResponseError + | errors.PaymentRequiredResponseError + | errors.ForbiddenResponseError + | errors.NotFoundResponseError + | errors.PayloadTooLargeResponseError + | errors.TooManyRequestsResponseError + | errors.InternalServerResponseError + | errors.BadGatewayResponseError + | errors.ServiceUnavailableResponseError + | errors.EdgeNetworkTimeoutResponseError + | errors.ProviderOverloadedResponseError + | OpenRouterError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => operations.CreateSystemoneRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = encodeJSON("body", payload.DecisionsRequest, { explode: true }); + + const path = pathToFunc("/systemone")(); + + const headers = new Headers(compactMap({ + "Content-Type": "application/json", + Accept: "application/json", + "HTTP-Referer": encodeSimple( + "HTTP-Referer", + payload["HTTP-Referer"] ?? client._options.httpReferer, + { explode: false, charEncoding: "none" }, + ), + "X-OpenRouter-Categories": encodeSimple( + "X-OpenRouter-Categories", + payload.appCategories ?? client._options.appCategories, + { explode: false, charEncoding: "none" }, + ), + "X-OpenRouter-Title": encodeSimple( + "X-OpenRouter-Title", + payload.appTitle ?? client._options.appTitle, + { explode: false, charEncoding: "none" }, + ), + })); + + const secConfig = await extractSecurity(client._options.apiKey); + const securityInput = secConfig == null ? {} : { apiKey: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "createSystemone", + oAuth2Scopes: null, + + resolvedSecurity: requestSecurity, + + securitySource: client._options.apiKey, + retryConfig: options?.retries + || client._options.retryConfig + || { + strategy: "backoff", + backoff: { + initialInterval: 500, + maxInterval: 60000, + exponent: 1.5, + maxElapsedTime: 3600000, + }, + retryConnectionErrors: true, + } + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["5XX"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "POST", + baseURL: options?.serverURL, + path: path, + headers: headers, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + isErrorStatusCode: (statusCode: number) => + matchStatusCode({ status: statusCode } as Response, ["4XX", "5XX"]), + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result] = await M.match< + models.DecisionsResponse, + | errors.BadRequestResponseError + | errors.UnauthorizedResponseError + | errors.PaymentRequiredResponseError + | errors.ForbiddenResponseError + | errors.NotFoundResponseError + | errors.PayloadTooLargeResponseError + | errors.TooManyRequestsResponseError + | errors.InternalServerResponseError + | errors.BadGatewayResponseError + | errors.ServiceUnavailableResponseError + | errors.EdgeNetworkTimeoutResponseError + | errors.ProviderOverloadedResponseError + | OpenRouterError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, models.DecisionsResponse$inboundSchema), + M.jsonErr(400, errors.BadRequestResponseError$inboundSchema), + M.jsonErr(401, errors.UnauthorizedResponseError$inboundSchema), + M.jsonErr(402, errors.PaymentRequiredResponseError$inboundSchema), + M.jsonErr(403, errors.ForbiddenResponseError$inboundSchema), + M.jsonErr(404, errors.NotFoundResponseError$inboundSchema), + M.jsonErr(413, errors.PayloadTooLargeResponseError$inboundSchema), + M.jsonErr(429, errors.TooManyRequestsResponseError$inboundSchema), + M.jsonErr(500, errors.InternalServerResponseError$inboundSchema), + M.jsonErr(502, errors.BadGatewayResponseError$inboundSchema), + M.jsonErr(503, errors.ServiceUnavailableResponseError$inboundSchema), + M.jsonErr(524, errors.EdgeNetworkTimeoutResponseError$inboundSchema), + M.jsonErr(529, errors.ProviderOverloadedResponseError$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req, { extraFields: responseFields }); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/src/lib/config.ts b/src/lib/config.ts index 3aef16de4..304ed1e51 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.3.7", + sdkVersion: "1.3.8", genVersion: "2.914.0", - userAgent: "speakeasy-sdk/typescript 1.3.7 2.914.0 1.0.0 @openrouter/sdk", + userAgent: "speakeasy-sdk/typescript 1.3.8 2.914.0 1.0.0 @openrouter/sdk", } as const; diff --git a/src/models/operations/createsystemone.ts b/src/models/operations/createsystemone.ts new file mode 100644 index 000000000..8577f62cf --- /dev/null +++ b/src/models/operations/createsystemone.ts @@ -0,0 +1,85 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + * @generated-id: ac12b9bcab42 + */ + +import * as z from "zod/v4"; +import { remap as remap$ } from "../../lib/primitives.js"; +import * as models from "../index.js"; + +export type CreateSystemoneGlobals = { + /** + * The app identifier should be your app's URL and is used as the primary identifier for rankings. + * + * @remarks + * This is used to track API usage per application. + */ + httpReferer?: string | undefined; + /** + * The app display name allows you to customize how your app appears in OpenRouter's dashboard. + * + * @remarks + */ + appTitle?: string | undefined; + /** + * Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings. + * + * @remarks + */ + appCategories?: string | undefined; +}; + +export type CreateSystemoneRequest = { + /** + * The app identifier should be your app's URL and is used as the primary identifier for rankings. + * + * @remarks + * This is used to track API usage per application. + */ + httpReferer?: string | undefined; + /** + * The app display name allows you to customize how your app appears in OpenRouter's dashboard. + * + * @remarks + */ + appTitle?: string | undefined; + /** + * Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings. + * + * @remarks + */ + appCategories?: string | undefined; + decisionsRequest: models.DecisionsRequest; +}; + +/** @internal */ +export type CreateSystemoneRequest$Outbound = { + "HTTP-Referer"?: string | undefined; + appTitle?: string | undefined; + appCategories?: string | undefined; + DecisionsRequest: models.DecisionsRequest$Outbound; +}; + +/** @internal */ +export const CreateSystemoneRequest$outboundSchema: z.ZodType< + CreateSystemoneRequest$Outbound, + CreateSystemoneRequest +> = z.object({ + httpReferer: z.string().optional(), + appTitle: z.string().optional(), + appCategories: z.string().optional(), + decisionsRequest: models.DecisionsRequest$outboundSchema, +}).transform((v) => { + return remap$(v, { + httpReferer: "HTTP-Referer", + decisionsRequest: "DecisionsRequest", + }); +}); + +export function createSystemoneRequestToJSON( + createSystemoneRequest: CreateSystemoneRequest, +): string { + return JSON.stringify( + CreateSystemoneRequest$outboundSchema.parse(createSystemoneRequest), + ); +} diff --git a/src/models/operations/index.ts b/src/models/operations/index.ts index 1309cce46..811736c15 100644 --- a/src/models/operations/index.ts +++ b/src/models/operations/index.ts @@ -31,6 +31,7 @@ export * from "./creatererank.js"; export * from "./createresponses.js"; export * from "./createscimgroupmapping.js"; export * from "./createscimsyncjob.js"; +export * from "./createsystemone.js"; export * from "./createvideos.js"; export * from "./createworkspace.js"; export * from "./deletebyokkey.js"; diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts index dee18dfe0..d15ef3c72 100644 --- a/src/sdk/sdk.ts +++ b/src/sdk/sdk.ts @@ -32,6 +32,7 @@ import { Rerank } from "./rerank.js"; import { Responses } from "./responses.js"; import { Scim } from "./scim.js"; import { STT } from "./stt.js"; +import { SystemOne } from "./systemone.js"; import { TTS } from "./tts.js"; import { Vault } from "./vault.js"; import { VideoGeneration } from "./videogeneration.js"; @@ -195,6 +196,11 @@ export class OpenRouter extends ClientSDK { return (this._scim ??= new Scim(this._options)); } + private _systemOne?: SystemOne; + get systemOne(): SystemOne { + return (this._systemOne ??= new SystemOne(this._options)); + } + private _vault?: Vault; get vault(): Vault { return (this._vault ??= new Vault(this._options)); diff --git a/src/sdk/systemone.ts b/src/sdk/systemone.ts new file mode 100644 index 000000000..7e2b72852 --- /dev/null +++ b/src/sdk/systemone.ts @@ -0,0 +1,29 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + * @generated-id: af359eaea7c4 + */ + +import { systemOneCreate } from "../funcs/systemOneCreate.js"; +import { ClientSDK, RequestOptions } from "../lib/sdks.js"; +import * as models from "../models/index.js"; +import * as operations from "../models/operations/index.js"; +import { unwrapAsync } from "../types/fp.js"; + +export class SystemOne extends ClientSDK { + /** + * Submit a System One request + * + * @remarks + * Sends state and typed questions to a System One model such as Jev and returns its answers. Compatible with the TypeSafe SDKs. Bare System One model IDs such as `jev-1.13` and `jev-latest` are mapped onto the `typesafe/` namespace. + */ + async create( + request: operations.CreateSystemoneRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(systemOneCreate( + this, + request, + options, + )); + } +} From 4a146b4462ad216506336771d56ac3a73b0f0193 Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Sun, 20 Sep 2026 04:46:50 +0000 Subject: [PATCH 2/3] empty commit to trigger [run-tests] workflow From 61a886f6f53b5ce34a16bb7c5c727aaac947716d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 20 Sep 2026 04:47:07 +0000 Subject: [PATCH 3/3] Chore: regenerate docs navigation Auto-generated-by: update-generated-files-action; https://github.com/OpenRouterTeam/typescript-sdk/actions/runs/35490001976 --- docs/docs.json | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docs.json b/docs/docs.json index a1846f7e5..2f08b62f3 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -38,6 +38,7 @@ "sdks/responses/README", "sdks/scim/README", "sdks/stt/README", + "sdks/systemone/README", "sdks/tts/README", "sdks/vault/README", "sdks/videogeneration/README",