diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock
index f1e0c90c..a4e5baea 100644
--- a/.speakeasy/gen.lock
+++ b/.speakeasy/gen.lock
@@ -1,19 +1,19 @@
lockVersion: 2.0.0
id: c48cf606-fb42-4a45-9c23-8f0555307828
management:
- docChecksum: a8933bcde648907382ef0ce09e2a7c2f
+ docChecksum: 75d2176b967cf7c8ef51265001f82905
docVersion: 1.0.0
speakeasyVersion: 1.803.2
generationVersion: 2.950.13
- releaseVersion: 1.3.107
- configChecksum: 535cc49f91d6296774b46803641ee82e
+ releaseVersion: 1.3.108
+ configChecksum: 1255ea613c81e43e0b647f6f3164540c
repoURL: https://github.com/OpenRouterTeam/python-sdk.git
installationURL: https://github.com/OpenRouterTeam/python-sdk.git
published: true
persistentEdits:
- generation_id: 20f410ec-e380-4136-b499-fb0ca5e63162
- pristine_commit_hash: 744c6ff658fb43a36dce4713fb02707355f844f1
- pristine_tree_hash: b9394b510a5a41fe583e310b16f1284104131808
+ generation_id: 26908807-a572-4057-bc56-1421dd809c29
+ pristine_commit_hash: e6864bd23f73281a2bb40fea50855f4c944170ef
+ pristine_tree_hash: 3ff7066030dd4c6387079cd59f874a957d2898a7
features:
python:
acceptHeaders: 3.0.0
@@ -2884,12 +2884,12 @@ trackedFiles:
pristine_git_object: f8ee5fe37dd3f38add083239af2ad81d55b72609
docs/components/decisionsboxquestion.mdx:
id: 9f587817bba9
- last_write_checksum: sha1:e9c77bb8afd91aa5e3b5d0c7e2af78b3c6d7e87b
- pristine_git_object: f87bc2cf12a3100cd0e7a1d0c9da9e42c96fbb1c
+ last_write_checksum: sha1:e5d57f9c8b0e692d7bdd5f1141a73edf9bc35224
+ pristine_git_object: ecad8f532521a3009c603cdfae4f4803b34c3533
docs/components/decisionsboxquestioninstructions.mdx:
id: 0bcad7c550b9
- last_write_checksum: sha1:4e5d7bafce0a322a279b3c00d11c02429ef37fee
- pristine_git_object: 378399c6c5316c2e35d1519476b74a155080ad01
+ last_write_checksum: sha1:92b7b3aba8ddafba28f82620c2c0e74de6181975
+ pristine_git_object: 6f831ed7438d3d707332df08f5a459862274683f
docs/components/decisionsboxquestiontype.mdx:
id: d298c864bb79
last_write_checksum: sha1:cdbcc2a7397404f51a7a9cbf25f2029db19bd2fd
@@ -2952,8 +2952,8 @@ trackedFiles:
pristine_git_object: 66d2e59cbdc4c920b5be4970c130b11a737d53cd
docs/components/decisionsrequest.mdx:
id: "910490840961"
- last_write_checksum: sha1:796b6a29e54a45596ab89e446b7354edca0f7c3f
- pristine_git_object: 66c77147a8e3e171803119890707e8a6c82c1874
+ last_write_checksum: sha1:b28a14b1e588f2ad987f21cf4fc966554e4622fc
+ pristine_git_object: c0deb3a1bbf5d2d4347993ccf40cbcb38e85a734
docs/components/decisionsresponse.mdx:
id: 5c77b727e5dc
last_write_checksum: sha1:018dc1dfbaefe2589a3f89b0baf65e9946ec29e7
@@ -10644,8 +10644,8 @@ trackedFiles:
pristine_git_object: d7053e23a20783c645d8db2835a7e62683352290
docs/sdks/decisions/README.mdx:
id: a52a116ee1f3
- last_write_checksum: sha1:7422788326ce9e4e80f4beb1050d8c98eda4c94a
- pristine_git_object: 100ec2f4aa6f4ebbddae19683f9f117170157d44
+ last_write_checksum: sha1:c1188a34e4a1b99f0874805dd94b2cd9fe718133
+ pristine_git_object: 50e4e3a83477e3cafbb38ee7d5865185baf4e459
docs/sdks/embeddings/README.mdx:
id: cd71581df291
last_write_checksum: sha1:67640eac4a149bf213063aae2252b66ead195452
@@ -10728,8 +10728,8 @@ trackedFiles:
pristine_git_object: 5ed45eda77a20a236f1e6dfe4ab39fde2579e320
docs/sdks/systemone/README.mdx:
id: 55c317c71f3d
- last_write_checksum: sha1:270257aacce3efd612ac3a52233335221ea833cb
- pristine_git_object: 97af3d6149b3c54521433ea3363e2c74002977f1
+ last_write_checksum: sha1:b2c7fa64183a73b951c0c05ca68156bee092c2b4
+ pristine_git_object: 14711da31a9bc1102656ad4c6bce65ed96c1378c
docs/sdks/tools/README.mdx:
id: 32d2a83beeba
last_write_checksum: sha1:841daaf792e80b73be4f93c572bc835d0cea5af7
@@ -10756,8 +10756,8 @@ trackedFiles:
pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544
pyproject.toml:
id: 5d07e7d72637
- last_write_checksum: sha1:6fd39ef03c3c2b2cfd84134d7fa68d34956d9900
- pristine_git_object: 41d21188deaca9a5820c1656f327f02dbbb7f633
+ last_write_checksum: sha1:0edb95a4d7484f44c760060b52daf70b43430da5
+ pristine_git_object: a11b23d547dce611245ed7e44e3e69c1ac3b3aaf
scripts/prepare_readme.py:
id: e0c5957a6035
last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54
@@ -10784,8 +10784,8 @@ trackedFiles:
pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137
src/openrouter/_version.py:
id: d8d15ad6c586
- last_write_checksum: sha1:672e2d2e3f823ba1f1cfe62178e36edfc3039895
- pristine_git_object: 92dfe45d661d44093e8758fc084a5e289fc612c7
+ last_write_checksum: sha1:ab5828d0603ad2ebe37cb0de54f1f8d2d814344b
+ pristine_git_object: 80b53b81819816feb1a8cb6211cdd9ce366b13bb
src/openrouter/alpha.py:
id: 306c4d93308d
last_write_checksum: sha1:80cc0f39649445431cc2247ed0e0765438467766
@@ -12044,8 +12044,8 @@ trackedFiles:
pristine_git_object: 033cb3533e3fc0f1dfdd5ec25ac9fc50f811a0df
src/openrouter/components/decisionsboxquestion.py:
id: 1fa3ffdda918
- last_write_checksum: sha1:ada2c9d8a20f8e0177aa00639c18922766171ad0
- pristine_git_object: d667828ec2477ea91730faeab47c38d88f1d4ed4
+ last_write_checksum: sha1:d9aefc06d036cd5b86a6d9ca1c1c88f3ee4da35e
+ pristine_git_object: 8d80b13c353c834938d892c90a349860e9b3babc
src/openrouter/components/decisionschoiceanswer.py:
id: 53a9e8cdf870
last_write_checksum: sha1:16380c24282a8d275d96bed268bf5d6410b56f43
@@ -12068,8 +12068,8 @@ trackedFiles:
pristine_git_object: d6b2551a31bc9c7d8e2ed96913c097dc127c8311
src/openrouter/components/decisionsrequest.py:
id: 5df43fede21b
- last_write_checksum: sha1:46b8167bf44beea9de6909897d22f2d6249f7855
- pristine_git_object: 1a44020b9512f2bcbc275bc0cd73cbbb7f90de40
+ last_write_checksum: sha1:93d08cdb310264d400123ee9924f27b4502a6f30
+ pristine_git_object: c3f32b631b40f5eca0a0b3c71c2fd543058cf52a
src/openrouter/components/decisionsresponse.py:
id: b91b81c2cf95
last_write_checksum: sha1:66617d3c417a5de7674773ffda05044d373f1580
@@ -14400,8 +14400,8 @@ trackedFiles:
pristine_git_object: 0532cef994643793368c4484b8af0d247be2692e
src/openrouter/decisions.py:
id: 811fe0f48b6e
- last_write_checksum: sha1:85ca5402449084675009afe9296f902221357377
- pristine_git_object: 6ab33a4b9921c8ead43b8efda7af042e346fcd42
+ last_write_checksum: sha1:594ed5008eb5723d7bd48a880c0c1b96496bc32e
+ pristine_git_object: e88ffd29986fd89819b728eecc17e028877da883
src/openrouter/embeddings.py:
id: 0374ace39067
last_write_checksum: sha1:3c45cacab1080f90f0a01e4923fd3bc5c8e9c281
@@ -15208,8 +15208,8 @@ trackedFiles:
pristine_git_object: 9787a43efe6fbf7233ffcc14a340a29663e61a01
src/openrouter/systemone.py:
id: 7e0a0e237bb1
- last_write_checksum: sha1:aa94b96b038c5c44bb9867260b3adfc587e131c5
- pristine_git_object: 04719c694c972bd3c36b3870832badc7eca71cc8
+ last_write_checksum: sha1:550af693684424feec5e4f8e044f8243b74daeb0
+ pristine_git_object: 50a3d74c55123938b2a6f6f788759637d578f58a
src/openrouter/tools.py:
id: acb8a24e2c5b
last_write_checksum: sha1:7a06c5fa2d5b142bf137818db076c01e3c177e18
diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml
index 678e067a..1068aabe 100644
--- a/.speakeasy/gen.yaml
+++ b/.speakeasy/gen.yaml
@@ -37,7 +37,7 @@ generation:
documentation: mintlify
preApplyUnionDiscriminators: true
python:
- version: 1.3.107
+ version: 1.3.108
additionalDependencies:
dev:
pytest: '>=8.3'
diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml
index 195970b8..6e5ba1d8 100644
--- a/.speakeasy/out.openapi.yaml
+++ b/.speakeasy/out.openapi.yaml
@@ -11059,6 +11059,7 @@ components:
- 'box'
type: 'object'
DecisionsBoxQuestion:
+ description: 'Finds one target in an image in `state` and answers with one bounding box (`top`, `bottom`, `left`, `right` as fractions of the image). Served by TypeSafe Jev endpoints only; every other provider rejects a box question with `400` before anything is sent upstream.'
properties:
instructions:
anyOf:
@@ -11067,7 +11068,7 @@ components:
type: 'object'
- items: {}
type: 'array'
- description: 'A plain string, or a JSON object or array of structured guidance.'
+ description: 'A description of the target to find, naming the image in `state` it is in; not a command, and no `criteria`.'
type:
enum:
- 'box'
@@ -11207,7 +11208,7 @@ components:
assets:
additionalProperties:
$ref: '#/components/schemas/DecisionsImageAsset'
- description: 'Images keyed by reference string, as in TypeSafe''s API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once. Jev reads a reference as a whole string value or inside longer text. Other Decisions models read a whole-string reference wherever they read an `image_url` part and reject a reference inside longer text.'
+ description: 'Images keyed by reference string, as in TypeSafe''s API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once, or the request fails with `400` naming the unused key. TypeSafe Jev endpoints receive `assets` as written and read a reference as a whole string value or inside longer text. Every other provider has each whole-string reference resolved to an `image_url` part before the request is sent, so it is accepted only where that provider reads `image_url` parts (top-level `state` items), and a reference inside longer text fails with `400`. `image_url` parts and `assets` can be mixed in one request.'
type: 'object'
model:
type: 'string'
@@ -36764,7 +36765,7 @@ paths:
- $ref: "#/components/parameters/AppCategories"
/api/alpha/decisions:
post:
- description: 'Submits a Decisions request to the Decisions router'
+ description: 'Asks a Decisions model typed questions (`noul`, `choice`, `score`, `box`) about the content in `state` and returns one typed answer per question with its probabilities. Images, audio and video go in `state` as `image_url`, `input_audio` and `video_url` parts; PNG and JPEG images can instead go once in `assets` and be referenced by key. Which question types, media parts and asset references an endpoint accepts depends on the provider; a request an endpoint cannot serve fails with `400` before anything is sent upstream. See the [Multimodal Decisions guide](/docs/guides/community/multimodal-decisions) for the per-provider table. Alpha: the shape may change.'
operationId: 'createApiAlphaDecisions'
requestBody:
content:
diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock
index ac0fe42a..1b6df5c7 100644
--- a/.speakeasy/workflow.lock
+++ b/.speakeasy/workflow.lock
@@ -2,8 +2,8 @@ speakeasyVersion: 1.803.2
sources:
OpenRouter API:
sourceNamespace: open-router-chat-completions-api
- sourceRevisionDigest: sha256:f393788df75404da673ee77363cc800f039e6baa79f92daf67725ed0d4de3347
- sourceBlobDigest: sha256:a5d21635dad5ed9fbd31e4b931a61535abc54fd4d804b58fcc671f5733963b5d
+ sourceRevisionDigest: sha256:e31e32973cbe7f00bfb41ae6f350d08e98f033c47156ff72d5708a44a5e7a59f
+ sourceBlobDigest: sha256:374afbb38e1b6cf3ea1ec32581585b39442976d6afb38ecbf2c465e64dd4f6c0
tags:
- latest
- 1.0.0
@@ -11,10 +11,10 @@ targets:
open-router:
source: OpenRouter API
sourceNamespace: open-router-chat-completions-api
- sourceRevisionDigest: sha256:f393788df75404da673ee77363cc800f039e6baa79f92daf67725ed0d4de3347
- sourceBlobDigest: sha256:a5d21635dad5ed9fbd31e4b931a61535abc54fd4d804b58fcc671f5733963b5d
+ sourceRevisionDigest: sha256:e31e32973cbe7f00bfb41ae6f350d08e98f033c47156ff72d5708a44a5e7a59f
+ sourceBlobDigest: sha256:374afbb38e1b6cf3ea1ec32581585b39442976d6afb38ecbf2c465e64dd4f6c0
codeSamplesNamespace: open-router-python-code-samples
- codeSamplesRevisionDigest: sha256:718f57f56d4b9bda735d469c14e4c9f628c005ef3277ec69b7c07c17485711ff
+ codeSamplesRevisionDigest: sha256:3fa5cbfae98cb5646204c42dd5b6a1aeb812070636d85d36d8f6cde63b5f9cf4
workflow:
workflowVersion: 1.0.0
speakeasyVersion: 1.803.2
diff --git a/RELEASES.md b/RELEASES.md
index 2c9cfdc1..0783049c 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -3839,4 +3839,14 @@ Based on:
### Generated
- [python v1.3.107] .
### Releases
-- [PyPI v1.3.107] https://pypi.org/project/openrouter/1.3.107 - .
\ No newline at end of file
+- [PyPI v1.3.107] https://pypi.org/project/openrouter/1.3.107 - .
+
+## 2026-11-03 17:23:56
+### Changes
+Based on:
+- OpenAPI Doc
+- Speakeasy CLI 1.803.2 (2.950.13) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v1.3.108] .
+### Releases
+- [PyPI v1.3.108] https://pypi.org/project/openrouter/1.3.108 - .
\ No newline at end of file
diff --git a/docs/components/decisionsboxquestion.mdx b/docs/components/decisionsboxquestion.mdx
index f87bc2cf..ecad8f53 100644
--- a/docs/components/decisionsboxquestion.mdx
+++ b/docs/components/decisionsboxquestion.mdx
@@ -2,9 +2,12 @@
title: "DecisionsBoxQuestion"
---
+Finds one target in an image in `state` and answers with one bounding box (`top`, `bottom`, `left`, `right` as fractions of the image). Served by TypeSafe Jev endpoints only; every other provider rejects a box question with `400` before anything is sent upstream.
+
+
## Fields
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
-| `instructions` | [components.DecisionsBoxQuestionInstructions](../components/decisionsboxquestioninstructions.mdx) | ✔️ | A plain string, or a JSON object or array of structured guidance. |
-| `type` | [components.DecisionsBoxQuestionType](../components/decisionsboxquestiontype.mdx) | ✔️ | N/A |
\ No newline at end of file
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `instructions` | [components.DecisionsBoxQuestionInstructions](../components/decisionsboxquestioninstructions.mdx) | ✔️ | A description of the target to find, naming the image in `state` it is in; not a command, and no `criteria`. |
+| `type` | [components.DecisionsBoxQuestionType](../components/decisionsboxquestiontype.mdx) | ✔️ | N/A |
\ No newline at end of file
diff --git a/docs/components/decisionsboxquestioninstructions.mdx b/docs/components/decisionsboxquestioninstructions.mdx
index 378399c6..6f831ed7 100644
--- a/docs/components/decisionsboxquestioninstructions.mdx
+++ b/docs/components/decisionsboxquestioninstructions.mdx
@@ -2,7 +2,7 @@
title: "DecisionsBoxQuestionInstructions"
---
-A plain string, or a JSON object or array of structured guidance.
+A description of the target to find, naming the image in `state` it is in; not a command, and no `criteria`.
## Supported Types
diff --git a/docs/components/decisionsrequest.mdx b/docs/components/decisionsrequest.mdx
index 66c77147..c0deb3a1 100644
--- a/docs/components/decisionsrequest.mdx
+++ b/docs/components/decisionsrequest.mdx
@@ -4,13 +4,13 @@ title: "DecisionsRequest"
## Fields
-| Field | Type | Required | Description | Example |
-| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `assets` | Dict[str, [components.DecisionsImageAsset](../components/decisionsimageasset.mdx)] | ➖ | Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once. Jev reads a reference as a whole string value or inside longer text. Other Decisions models read a whole-string reference wherever they read an `image_url` part and reject a reference inside longer text. | |
-| `model` | *str* | ✔️ | N/A | |
-| `provider` | [OptionalNullable[components.ProviderPreferences]](../components/providerpreferences.mdx) | ➖ | N/A | \{
"allow_fallbacks": true
} |
-| `questions` | Dict[str, [components.Questions](../components/questions.mdx)] | ✔️ | N/A | |
-| `session_id` | *Optional[str]* | ➖ | 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 |
-| `state` | [components.State](../components/state.mdx) | ✔️ | The content to evaluate: a plain string, or a JSON object or array of related context. | |
-| `trace` | [Optional[components.TraceConfig]](../components/traceconfig.mdx) | ➖ | 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` | *Optional[str]* | ➖ | N/A | |
\ No newline at end of file
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `assets` | Dict[str, [components.DecisionsImageAsset](../components/decisionsimageasset.mdx)] | ➖ | Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once, or the request fails with `400` naming the unused key. TypeSafe Jev endpoints receive `assets` as written and read a reference as a whole string value or inside longer text. Every other provider has each whole-string reference resolved to an `image_url` part before the request is sent, so it is accepted only where that provider reads `image_url` parts (top-level `state` items), and a reference inside longer text fails with `400`. `image_url` parts and `assets` can be mixed in one request. | |
+| `model` | *str* | ✔️ | N/A | |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../components/providerpreferences.mdx) | ➖ | N/A | \{
"allow_fallbacks": true
} |
+| `questions` | Dict[str, [components.Questions](../components/questions.mdx)] | ✔️ | N/A | |
+| `session_id` | *Optional[str]* | ➖ | 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 |
+| `state` | [components.State](../components/state.mdx) | ✔️ | The content to evaluate: a plain string, or a JSON object or array of related context. | |
+| `trace` | [Optional[components.TraceConfig]](../components/traceconfig.mdx) | ➖ | 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` | *Optional[str]* | ➖ | N/A | |
\ No newline at end of file
diff --git a/docs/sdks/decisions/README.mdx b/docs/sdks/decisions/README.mdx
index 100ec2f4..50e4e3a8 100644
--- a/docs/sdks/decisions/README.mdx
+++ b/docs/sdks/decisions/README.mdx
@@ -13,7 +13,7 @@ Alpha feature endpoints for Decisions requests
## create
-Submits a Decisions request to the Decisions router
+Asks a Decisions model typed questions (`noul`, `choice`, `score`, `box`) about the content in `state` and returns one typed answer per question with its probabilities. Images, audio and video go in `state` as `image_url`, `input_audio` and `video_url` parts; PNG and JPEG images can instead go once in `assets` and be referenced by key. Which question types, media parts and asset references an endpoint accepts depends on the provider; a request an endpoint cannot serve fails with `400` before anything is sent upstream. See the [Multimodal Decisions guide](/docs/guides/community/multimodal-decisions) for the per-provider table. Alpha: the shape may change.
### Example Usage
@@ -68,21 +68,21 @@ with OpenRouter(
### Parameters
-| Parameter | Type | Required | Description | Example |
-| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `model` | *str* | ✔️ | N/A | |
-| `questions` | Dict[str, [components.Questions](../../components/questions.mdx)] | ✔️ | N/A | |
-| `state` | [components.State](../../components/state.mdx) | ✔️ | The content to evaluate: a plain string, or a JSON object or array of related context. | |
-| `http_referer` | *Optional[str]* | ➖ | 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.
| |
-| `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
-| `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `assets` | Dict[str, [components.DecisionsImageAsset](../../components/decisionsimageasset.mdx)] | ➖ | Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once. Jev reads a reference as a whole string value or inside longer text. Other Decisions models read a whole-string reference wherever they read an `image_url` part and reject a reference inside longer text. | |
-| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.mdx) | ➖ | N/A | \{
"allow_fallbacks": true
} |
-| `session_id` | *Optional[str]* | ➖ | 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 |
-| `trace` | [Optional[components.TraceConfig]](../../components/traceconfig.mdx) | ➖ | 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` | *Optional[str]* | ➖ | N/A | |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | |
-| `server_url` | *Optional[str]* | ➖ | An optional server URL to use. | http://localhost:8080 |
+| Parameter | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `model` | *str* | ✔️ | N/A | |
+| `questions` | Dict[str, [components.Questions](../../components/questions.mdx)] | ✔️ | N/A | |
+| `state` | [components.State](../../components/state.mdx) | ✔️ | The content to evaluate: a plain string, or a JSON object or array of related context. | |
+| `http_referer` | *Optional[str]* | ➖ | 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.
| |
+| `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `assets` | Dict[str, [components.DecisionsImageAsset](../../components/decisionsimageasset.mdx)] | ➖ | Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once, or the request fails with `400` naming the unused key. TypeSafe Jev endpoints receive `assets` as written and read a reference as a whole string value or inside longer text. Every other provider has each whole-string reference resolved to an `image_url` part before the request is sent, so it is accepted only where that provider reads `image_url` parts (top-level `state` items), and a reference inside longer text fails with `400`. `image_url` parts and `assets` can be mixed in one request. | |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.mdx) | ➖ | N/A | \{
"allow_fallbacks": true
} |
+| `session_id` | *Optional[str]* | ➖ | 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 |
+| `trace` | [Optional[components.TraceConfig]](../../components/traceconfig.mdx) | ➖ | 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` | *Optional[str]* | ➖ | N/A | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | |
+| `server_url` | *Optional[str]* | ➖ | An optional server URL to use. | http://localhost:8080 |
### Response
diff --git a/docs/sdks/systemone/README.mdx b/docs/sdks/systemone/README.mdx
index 97af3d61..14711da3 100644
--- a/docs/sdks/systemone/README.mdx
+++ b/docs/sdks/systemone/README.mdx
@@ -68,20 +68,20 @@ with OpenRouter(
### Parameters
-| Parameter | Type | Required | Description | Example |
-| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `model` | *str* | ✔️ | N/A | |
-| `questions` | Dict[str, [components.Questions](../../components/questions.mdx)] | ✔️ | N/A | |
-| `state` | [components.State](../../components/state.mdx) | ✔️ | The content to evaluate: a plain string, or a JSON object or array of related context. | |
-| `http_referer` | *Optional[str]* | ➖ | 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.
| |
-| `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
-| `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `assets` | Dict[str, [components.DecisionsImageAsset](../../components/decisionsimageasset.mdx)] | ➖ | Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once. Jev reads a reference as a whole string value or inside longer text. Other Decisions models read a whole-string reference wherever they read an `image_url` part and reject a reference inside longer text. | |
-| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.mdx) | ➖ | N/A | \{
"allow_fallbacks": true
} |
-| `session_id` | *Optional[str]* | ➖ | 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 |
-| `trace` | [Optional[components.TraceConfig]](../../components/traceconfig.mdx) | ➖ | 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` | *Optional[str]* | ➖ | N/A | |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | |
+| Parameter | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `model` | *str* | ✔️ | N/A | |
+| `questions` | Dict[str, [components.Questions](../../components/questions.mdx)] | ✔️ | N/A | |
+| `state` | [components.State](../../components/state.mdx) | ✔️ | The content to evaluate: a plain string, or a JSON object or array of related context. | |
+| `http_referer` | *Optional[str]* | ➖ | 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.
| |
+| `x_open_router_title` | *Optional[str]* | ➖ | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | ➖ | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `assets` | Dict[str, [components.DecisionsImageAsset](../../components/decisionsimageasset.mdx)] | ➖ | Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once, or the request fails with `400` naming the unused key. TypeSafe Jev endpoints receive `assets` as written and read a reference as a whole string value or inside longer text. Every other provider has each whole-string reference resolved to an `image_url` part before the request is sent, so it is accepted only where that provider reads `image_url` parts (top-level `state` items), and a reference inside longer text fails with `400`. `image_url` parts and `assets` can be mixed in one request. | |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.mdx) | ➖ | N/A | \{
"allow_fallbacks": true
} |
+| `session_id` | *Optional[str]* | ➖ | 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 |
+| `trace` | [Optional[components.TraceConfig]](../../components/traceconfig.mdx) | ➖ | 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` | *Optional[str]* | ➖ | N/A | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | ➖ | Configuration to override the default retry behavior of the client. | |
### Response
diff --git a/pyproject.toml b/pyproject.toml
index 41d21188..a11b23d5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "openrouter"
-version = "1.3.107"
+version = "1.3.108"
description = "Official Python Client SDK for OpenRouter."
authors = [{ name = "OpenRouter" },]
readme = "README-PYPI.md"
diff --git a/src/openrouter/_version.py b/src/openrouter/_version.py
index 92dfe45d..80b53b81 100644
--- a/src/openrouter/_version.py
+++ b/src/openrouter/_version.py
@@ -3,10 +3,10 @@
import importlib.metadata
__title__: str = "openrouter"
-__version__: str = "1.3.107"
+__version__: str = "1.3.108"
__openapi_doc_version__: str = "1.0.0"
__gen_version__: str = "2.950.13"
-__user_agent__: str = "speakeasy-sdk/python 1.3.107 2.950.13 1.0.0 openrouter"
+__user_agent__: str = "speakeasy-sdk/python 1.3.108 2.950.13 1.0.0 openrouter"
try:
if __package__ is not None:
diff --git a/src/openrouter/components/decisionsboxquestion.py b/src/openrouter/components/decisionsboxquestion.py
index d667828e..8d80b13c 100644
--- a/src/openrouter/components/decisionsboxquestion.py
+++ b/src/openrouter/components/decisionsboxquestion.py
@@ -9,26 +9,30 @@
DecisionsBoxQuestionInstructionsTypedDict = TypeAliasType(
"DecisionsBoxQuestionInstructionsTypedDict", Union[str, Dict[str, Any], List[Any]]
)
-r"""A plain string, or a JSON object or array of structured guidance."""
+r"""A description of the target to find, naming the image in `state` it is in; not a command, and no `criteria`."""
DecisionsBoxQuestionInstructions = TypeAliasType(
"DecisionsBoxQuestionInstructions", Union[str, Dict[str, Any], List[Any]]
)
-r"""A plain string, or a JSON object or array of structured guidance."""
+r"""A description of the target to find, naming the image in `state` it is in; not a command, and no `criteria`."""
DecisionsBoxQuestionType = Literal["box",]
class DecisionsBoxQuestionTypedDict(TypedDict):
+ r"""Finds one target in an image in `state` and answers with one bounding box (`top`, `bottom`, `left`, `right` as fractions of the image). Served by TypeSafe Jev endpoints only; every other provider rejects a box question with `400` before anything is sent upstream."""
+
instructions: DecisionsBoxQuestionInstructionsTypedDict
- r"""A plain string, or a JSON object or array of structured guidance."""
+ r"""A description of the target to find, naming the image in `state` it is in; not a command, and no `criteria`."""
type: DecisionsBoxQuestionType
class DecisionsBoxQuestion(BaseModel):
+ r"""Finds one target in an image in `state` and answers with one bounding box (`top`, `bottom`, `left`, `right` as fractions of the image). Served by TypeSafe Jev endpoints only; every other provider rejects a box question with `400` before anything is sent upstream."""
+
instructions: DecisionsBoxQuestionInstructions
- r"""A plain string, or a JSON object or array of structured guidance."""
+ r"""A description of the target to find, naming the image in `state` it is in; not a command, and no `criteria`."""
type: DecisionsBoxQuestionType
diff --git a/src/openrouter/components/decisionsrequest.py b/src/openrouter/components/decisionsrequest.py
index 1a44020b..c3f32b63 100644
--- a/src/openrouter/components/decisionsrequest.py
+++ b/src/openrouter/components/decisionsrequest.py
@@ -65,7 +65,7 @@ class DecisionsRequestTypedDict(TypedDict):
state: StateTypedDict
r"""The content to evaluate: a plain string, or a JSON object or array of related context."""
assets: NotRequired[Dict[str, DecisionsImageAssetTypedDict]]
- r"""Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once. Jev reads a reference as a whole string value or inside longer text. Other Decisions models read a whole-string reference wherever they read an `image_url` part and reject a reference inside longer text."""
+ r"""Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once, or the request fails with `400` naming the unused key. TypeSafe Jev endpoints receive `assets` as written and read a reference as a whole string value or inside longer text. Every other provider has each whole-string reference resolved to an `image_url` part before the request is sent, so it is accepted only where that provider reads `image_url` parts (top-level `state` items), and a reference inside longer text fails with `400`. `image_url` parts and `assets` can be mixed in one request."""
provider: NotRequired[Nullable[ProviderPreferencesTypedDict]]
session_id: NotRequired[str]
r"""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."""
@@ -83,7 +83,7 @@ class DecisionsRequest(BaseModel):
r"""The content to evaluate: a plain string, or a JSON object or array of related context."""
assets: Optional[Dict[str, DecisionsImageAsset]] = None
- r"""Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once. Jev reads a reference as a whole string value or inside longer text. Other Decisions models read a whole-string reference wherever they read an `image_url` part and reject a reference inside longer text."""
+ r"""Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once, or the request fails with `400` naming the unused key. TypeSafe Jev endpoints receive `assets` as written and read a reference as a whole string value or inside longer text. Every other provider has each whole-string reference resolved to an `image_url` part before the request is sent, so it is accepted only where that provider reads `image_url` parts (top-level `state` items), and a reference inside longer text fails with `400`. `image_url` parts and `assets` can be mixed in one request."""
provider: OptionalNullable[ProviderPreferences] = UNSET
diff --git a/src/openrouter/decisions.py b/src/openrouter/decisions.py
index 6ab33a4b..e88ffd29 100644
--- a/src/openrouter/decisions.py
+++ b/src/openrouter/decisions.py
@@ -47,7 +47,7 @@ def create(
) -> components.DecisionsResponse:
r"""Submit a Decisions request
- Submits a Decisions request to the Decisions router
+ Asks a Decisions model typed questions (`noul`, `choice`, `score`, `box`) about the content in `state` and returns one typed answer per question with its probabilities. Images, audio and video go in `state` as `image_url`, `input_audio` and `video_url` parts; PNG and JPEG images can instead go once in `assets` and be referenced by key. Which question types, media parts and asset references an endpoint accepts depends on the provider; a request an endpoint cannot serve fails with `400` before anything is sent upstream. See the [Multimodal Decisions guide](/docs/guides/community/multimodal-decisions) for the per-provider table. Alpha: the shape may change.
:param model:
:param questions:
@@ -59,7 +59,7 @@ def create(
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
- :param assets: Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once. Jev reads a reference as a whole string value or inside longer text. Other Decisions models read a whole-string reference wherever they read an `image_url` part and reject a reference inside longer text.
+ :param assets: Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once, or the request fails with `400` naming the unused key. TypeSafe Jev endpoints receive `assets` as written and read a reference as a whole string value or inside longer text. Every other provider has each whole-string reference resolved to an `image_url` part before the request is sent, so it is accepted only where that provider reads `image_url` parts (top-level `state` items), and a reference inside longer text fails with `400`. `image_url` parts and `assets` can be mixed in one request.
:param provider:
:param session_id: 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.
:param trace: 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.
@@ -270,7 +270,7 @@ async def create_async(
) -> components.DecisionsResponse:
r"""Submit a Decisions request
- Submits a Decisions request to the Decisions router
+ Asks a Decisions model typed questions (`noul`, `choice`, `score`, `box`) about the content in `state` and returns one typed answer per question with its probabilities. Images, audio and video go in `state` as `image_url`, `input_audio` and `video_url` parts; PNG and JPEG images can instead go once in `assets` and be referenced by key. Which question types, media parts and asset references an endpoint accepts depends on the provider; a request an endpoint cannot serve fails with `400` before anything is sent upstream. See the [Multimodal Decisions guide](/docs/guides/community/multimodal-decisions) for the per-provider table. Alpha: the shape may change.
:param model:
:param questions:
@@ -282,7 +282,7 @@ async def create_async(
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
- :param assets: Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once. Jev reads a reference as a whole string value or inside longer text. Other Decisions models read a whole-string reference wherever they read an `image_url` part and reject a reference inside longer text.
+ :param assets: Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once, or the request fails with `400` naming the unused key. TypeSafe Jev endpoints receive `assets` as written and read a reference as a whole string value or inside longer text. Every other provider has each whole-string reference resolved to an `image_url` part before the request is sent, so it is accepted only where that provider reads `image_url` parts (top-level `state` items), and a reference inside longer text fails with `400`. `image_url` parts and `assets` can be mixed in one request.
:param provider:
:param session_id: 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.
:param trace: 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.
diff --git a/src/openrouter/systemone.py b/src/openrouter/systemone.py
index 04719c69..50a3d74c 100644
--- a/src/openrouter/systemone.py
+++ b/src/openrouter/systemone.py
@@ -59,7 +59,7 @@ def create(
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
- :param assets: Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once. Jev reads a reference as a whole string value or inside longer text. Other Decisions models read a whole-string reference wherever they read an `image_url` part and reject a reference inside longer text.
+ :param assets: Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once, or the request fails with `400` naming the unused key. TypeSafe Jev endpoints receive `assets` as written and read a reference as a whole string value or inside longer text. Every other provider has each whole-string reference resolved to an `image_url` part before the request is sent, so it is accepted only where that provider reads `image_url` parts (top-level `state` items), and a reference inside longer text fails with `400`. `image_url` parts and `assets` can be mixed in one request.
:param provider:
:param session_id: 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.
:param trace: 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.
@@ -282,7 +282,7 @@ async def create_async(
:param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
- :param assets: Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once. Jev reads a reference as a whole string value or inside longer text. Other Decisions models read a whole-string reference wherever they read an `image_url` part and reject a reference inside longer text.
+ :param assets: Images keyed by reference string, as in TypeSafe's API. Write a reference wherever the image belongs in `state`, `instructions`, or `criteria`; every asset must be referenced at least once, or the request fails with `400` naming the unused key. TypeSafe Jev endpoints receive `assets` as written and read a reference as a whole string value or inside longer text. Every other provider has each whole-string reference resolved to an `image_url` part before the request is sent, so it is accepted only where that provider reads `image_url` parts (top-level `state` items), and a reference inside longer text fails with `400`. `image_url` parts and `assets` can be mixed in one request.
:param provider:
:param session_id: 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.
:param trace: 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.
diff --git a/uv.lock b/uv.lock
index 17d78d1d..08dc54c7 100644
--- a/uv.lock
+++ b/uv.lock
@@ -231,7 +231,7 @@ wheels = [
[[package]]
name = "openrouter"
-version = "1.3.107"
+version = "1.3.108"
source = { editable = "." }
dependencies = [
{ name = "httpcore" },