mirror of
https://github.com/wassname/openrouter-python-sdk-retry-errors.git
synced 2026-08-02 12:50:48 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dac146853b | ||
|
|
3fb1cee1b1 | ||
|
|
146cec3c08 | ||
|
|
14a62e3451 |
+30
-20
@@ -1,7 +1,7 @@
|
||||
lockVersion: 2.0.0
|
||||
id: c48cf606-fb42-4a45-9c23-8f0555307828
|
||||
management:
|
||||
docChecksum: 8a12eb05f6d29e6d4369ce71067b4c27
|
||||
docChecksum: b391df2d82163351d8df7c152db16d55
|
||||
docVersion: 1.0.0
|
||||
speakeasyVersion: 1.680.0
|
||||
generationVersion: 2.788.4
|
||||
@@ -11,9 +11,9 @@ management:
|
||||
installationURL: https://github.com/OpenRouterTeam/python-sdk.git
|
||||
published: true
|
||||
persistentEdits:
|
||||
generation_id: b1a3cf99-d693-434e-8d7e-e5a1d85ee33d
|
||||
pristine_commit_hash: cd611d4017874cd968979a48e9159baafc137c1b
|
||||
pristine_tree_hash: 7b768060a0f6d7e54a10dda44219006db5253019
|
||||
generation_id: 5b413f59-637c-4b8e-af52-4ce67ebe1508
|
||||
pristine_commit_hash: 39a84a2b48a1853daeb784df3ce2c6bb1cbb4b3a
|
||||
pristine_tree_hash: 2127b8a2fdbdd0e70f0a7ed87d1d4b25ca2e82ed
|
||||
features:
|
||||
python:
|
||||
acceptHeaders: 3.0.0
|
||||
@@ -874,8 +874,8 @@ trackedFiles:
|
||||
pristine_git_object: 13ae40be5e3c883f88789c3b5b74a3b2da4c85c2
|
||||
docs/components/chatresult.md:
|
||||
id: 212b0f66efd0
|
||||
last_write_checksum: sha1:0a94cfb0c88a0dbf0f0abc5d83ac6fc6c48051b4
|
||||
pristine_git_object: cc04eadd2f48efd93533a3ddae52ad39e91f5dee
|
||||
last_write_checksum: sha1:f40df693ad2d2d8e156aacb218af394f675bfb89
|
||||
pristine_git_object: 41f82f9576591d048a504f29ca19b148ccca02bc
|
||||
docs/components/chatresultobject.md:
|
||||
id: 668504931d18
|
||||
last_write_checksum: sha1:6d550246aa007a5be94a9788ae4cfdfb75006980
|
||||
@@ -898,8 +898,8 @@ trackedFiles:
|
||||
pristine_git_object: 690d74b67239bf7f423039652aea3741c831137e
|
||||
docs/components/chatstreamchunk.md:
|
||||
id: 404d264ea22c
|
||||
last_write_checksum: sha1:1353c09378850a9810c39cf3198f0fd5e049f610
|
||||
pristine_git_object: 3c64aec72fb2eb9f0cf6eae975dd9c8bb183c6e6
|
||||
last_write_checksum: sha1:096b20b3777fd22cbe9c3ffb26c0d6bf51feedbe
|
||||
pristine_git_object: 5cce75d63c13268740aa9fdb46f5273f77cd1c25
|
||||
docs/components/chatstreamchunkobject.md:
|
||||
id: 5393918d9606
|
||||
last_write_checksum: sha1:0765d94b3d01c811155dce29c20c2ae4bd4abd0e
|
||||
@@ -998,8 +998,8 @@ trackedFiles:
|
||||
pristine_git_object: 7eb1791a9153498d5ffffc6b67d3668df59000c2
|
||||
docs/components/chatusage.md:
|
||||
id: 72cd0c41ec64
|
||||
last_write_checksum: sha1:9a6a709e2ea8f36c1f55afc3ae364917ab787e5e
|
||||
pristine_git_object: 536fc52c1d3dec20dc3dd38e65714da08779e4d3
|
||||
last_write_checksum: sha1:97805cc7bc61ef57d2279033d8c0b6859cd6e09f
|
||||
pristine_git_object: 206128fbeaf4799b95c46d20265c1143f83a7898
|
||||
docs/components/chatusermessage.md:
|
||||
id: 4ab205b0030b
|
||||
last_write_checksum: sha1:4c87fbc12f54bb5b58526949e3f8ea9c161f8cdf
|
||||
@@ -3920,6 +3920,10 @@ trackedFiles:
|
||||
id: beee40001fda
|
||||
last_write_checksum: sha1:45b7b8881a6560a468153662d61b99605a492edf
|
||||
pristine_git_object: 2e0839d06f821dd97780dc22f202dedf23e4efe1
|
||||
docs/components/servertoolusedetails.md:
|
||||
id: b14e315828c5
|
||||
last_write_checksum: sha1:2e4e747062c990a502a208c1c90382305e428fe7
|
||||
pristine_git_object: fb12e181963bb9eada3294d7a605b076f695ab58
|
||||
docs/components/serviceunavailableresponseerrordata.md:
|
||||
id: 6d65ecfd7ad3
|
||||
last_write_checksum: sha1:c0e9357b45a58f3da2d3520b502cec7dae5f3446
|
||||
@@ -4900,6 +4904,10 @@ trackedFiles:
|
||||
id: 01cceb61d42f
|
||||
last_write_checksum: sha1:7e1d73bd30584d55f4b116737c15d7c73cdf6a3a
|
||||
pristine_git_object: 522f4978a3c4e1d1c0d197b541fc57e745b7d4e7
|
||||
docs/operations/costdetails.md:
|
||||
id: 777b240173de
|
||||
last_write_checksum: sha1:b2748fc0cf305791446f5f217947d82bd74a8350
|
||||
pristine_git_object: 58a1aa8485130f8b49c633dfef0439b83a5f239c
|
||||
docs/operations/createaudiospeechglobals.md:
|
||||
id: c67d64f11ad7
|
||||
last_write_checksum: sha1:a0026b1caf2268dd4a79177fa2bb630eca1498b4
|
||||
@@ -4974,8 +4982,8 @@ trackedFiles:
|
||||
pristine_git_object: 1ff75cb8fa59d2b7b756ea07e9f5849995b62435
|
||||
docs/operations/createembeddingsusage.md:
|
||||
id: 2dc99973f6c7
|
||||
last_write_checksum: sha1:b01ba733f5d1369b21a54b9f3bfb0e4059504b6f
|
||||
pristine_git_object: 007fb235eef4ebb9b3dda14352e9a252004de4c2
|
||||
last_write_checksum: sha1:292de8b3a80697b56a961d2eb7f97d54dd29c4ae
|
||||
pristine_git_object: 639fb7e305ff27786b6ea858b425e36aaaf20252
|
||||
docs/operations/createguardrailglobals.md:
|
||||
id: 34f5b2a17330
|
||||
last_write_checksum: sha1:a43fb357b9c08974befd14a79da7623e72bc3245
|
||||
@@ -6102,8 +6110,8 @@ trackedFiles:
|
||||
pristine_git_object: a1894915bd32aee65f019885634eb7908970a046
|
||||
src/openrouter/components/__init__.py:
|
||||
id: 81754e97b3f4
|
||||
last_write_checksum: sha1:805bb2df1d5fe49556f426348971e5ccdc08aa56
|
||||
pristine_git_object: eca63a922d8154ae9106e8f8b5aaf16dbc580afd
|
||||
last_write_checksum: sha1:e59a97a36a75c1848f5342f9c3d061dd993855d8
|
||||
pristine_git_object: f2928e99d526cad8e81c673c4c03bc864c14a365
|
||||
src/openrouter/components/aabenchmarkentry.py:
|
||||
id: e2e0f0b48c82
|
||||
last_write_checksum: sha1:1b6b66672fb80dccdc39843a98bdef6d7d804364
|
||||
@@ -6558,8 +6566,8 @@ trackedFiles:
|
||||
pristine_git_object: 2ccba8386486b7a730816a9829b01754935a2e96
|
||||
src/openrouter/components/chatusage.py:
|
||||
id: f224a054bf45
|
||||
last_write_checksum: sha1:947079d2163225a49e423151de25dc6132df5bf6
|
||||
pristine_git_object: 3a7357d8a6f725ba18b1f15215a197f11e917659
|
||||
last_write_checksum: sha1:e63f9a7b86d0091b0fddf04ee273088b51dd76a6
|
||||
pristine_git_object: 62e2f91566dbcaf0794d927b679552757efe46b1
|
||||
src/openrouter/components/chatusermessage.py:
|
||||
id: 7777191e729a
|
||||
last_write_checksum: sha1:1ecc9101c05178427d73e455de4d679ac8d78015
|
||||
@@ -8234,8 +8242,8 @@ trackedFiles:
|
||||
pristine_git_object: 37ee42a638f5fce69fc7db1e6b86efb51f381582
|
||||
src/openrouter/operations/__init__.py:
|
||||
id: 9afcea1e7161
|
||||
last_write_checksum: sha1:d0572cc16c500a9dba895239890bc01414b339a6
|
||||
pristine_git_object: 650e7d0faaf2b32b7c96dd196b6e8c412c573795
|
||||
last_write_checksum: sha1:b555b71cf7d07da5aa6b121a740d1ef69e513629
|
||||
pristine_git_object: b9e4c525f346b441e837c4497cc2e8d723a44352
|
||||
src/openrouter/operations/bulkaddworkspacemembers.py:
|
||||
id: e0ed56117619
|
||||
last_write_checksum: sha1:2b9c73dd8a24d6c479d50118a309e4e0969ca7ea
|
||||
@@ -8278,8 +8286,8 @@ trackedFiles:
|
||||
pristine_git_object: 523d24efa869d63a145167b94e811671b84c5cfb
|
||||
src/openrouter/operations/createembeddings.py:
|
||||
id: fe1160a960e9
|
||||
last_write_checksum: sha1:5307ac65b8a4c3eec3de9158c2a3d10554212e8b
|
||||
pristine_git_object: 4cc4c5c044fa87a8ae21dd7aa0f83d09f4d00f09
|
||||
last_write_checksum: sha1:55a231d6e9a2f2a76c3fbc1f8af893e393e08bc3
|
||||
pristine_git_object: 6459cab7e1a597f5a1b24f690d845b4ee8809236
|
||||
src/openrouter/operations/createguardrail.py:
|
||||
id: 52ed4b2f5903
|
||||
last_write_checksum: sha1:119141c01d19df6b6d090b67f80145e3bf4d4d60
|
||||
@@ -10057,6 +10065,8 @@ releaseNotes: |
|
||||
* `open_router.benchmarks.get_benchmarks()`: **Added**
|
||||
* `open_router.datasets.get_benchmarks_artificial_analysis()`: **Deleted** **Breaking** :warning:
|
||||
* `open_router.datasets.get_benchmarks_design_arena()`: **Deleted** **Breaking** :warning:
|
||||
* `open_router.chat.send()`: `response` **Changed**
|
||||
* `open_router.embeddings.generate()`: `response.usage` **Changed**
|
||||
* `open_router.embeddings.list_models()`: `response.data.[].reasoning` **Added**
|
||||
* `open_router.models.get()`: `response.data.reasoning` **Added**
|
||||
* `open_router.models.list()`: `response.data.[].reasoning` **Added**
|
||||
|
||||
@@ -5401,6 +5401,9 @@ components:
|
||||
prompt_tokens: 10
|
||||
prompt_tokens_details:
|
||||
cached_tokens: 2
|
||||
server_tool_use_details:
|
||||
tool_calls_executed: 2
|
||||
tool_calls_requested: 2
|
||||
total_tokens: 25
|
||||
properties:
|
||||
completion_tokens:
|
||||
@@ -5457,6 +5460,28 @@ components:
|
||||
description: Video input tokens
|
||||
type: integer
|
||||
type: object
|
||||
server_tool_use_details:
|
||||
description: Usage for server-side tool execution (e.g., web search)
|
||||
nullable: true
|
||||
properties:
|
||||
tool_calls_executed:
|
||||
description: Number of OpenRouter server tool calls that executed and produced a result
|
||||
nullable: true
|
||||
type: integer
|
||||
tool_calls_requested:
|
||||
description: >-
|
||||
Total number of OpenRouter server-orchestrated tool calls the model requested, across all tool types.
|
||||
Provider-native tools (e.g. native web search) are not counted here.
|
||||
nullable: true
|
||||
type: integer
|
||||
web_search_requests:
|
||||
description: >-
|
||||
Number of web searches performed by server-side tools. For server-orchestrated tool calls a web search
|
||||
is also counted in tool_calls_requested; provider-native web search may report web_search_requests only.
|
||||
Do not sum the two.
|
||||
nullable: true
|
||||
type: integer
|
||||
type: object
|
||||
total_tokens:
|
||||
description: Total number of tokens
|
||||
type: integer
|
||||
@@ -24610,6 +24635,31 @@ paths:
|
||||
example: 0.0001
|
||||
format: double
|
||||
type: number
|
||||
cost_details:
|
||||
description: Breakdown of upstream inference costs
|
||||
example:
|
||||
upstream_inference_completions_cost: 0.0004
|
||||
upstream_inference_cost: null
|
||||
upstream_inference_prompt_cost: 0.0008
|
||||
nullable: true
|
||||
properties:
|
||||
upstream_inference_completions_cost:
|
||||
format: double
|
||||
type: number
|
||||
upstream_inference_cost:
|
||||
format: double
|
||||
nullable: true
|
||||
type: number
|
||||
upstream_inference_prompt_cost:
|
||||
format: double
|
||||
type: number
|
||||
required:
|
||||
- upstream_inference_prompt_cost
|
||||
- upstream_inference_completions_cost
|
||||
type: object
|
||||
is_byok:
|
||||
description: Whether a request was made using a Bring Your Own Key configuration
|
||||
type: boolean
|
||||
prompt_tokens:
|
||||
description: Number of tokens in the input
|
||||
example: 8
|
||||
|
||||
@@ -5392,6 +5392,9 @@ components:
|
||||
prompt_tokens: 10
|
||||
prompt_tokens_details:
|
||||
cached_tokens: 2
|
||||
server_tool_use_details:
|
||||
tool_calls_executed: 2
|
||||
tool_calls_requested: 2
|
||||
total_tokens: 25
|
||||
properties:
|
||||
completion_tokens:
|
||||
@@ -5448,6 +5451,25 @@ components:
|
||||
description: Video input tokens
|
||||
type: integer
|
||||
type: object
|
||||
server_tool_use_details:
|
||||
description: Usage for server-side tool execution (e.g., web search)
|
||||
nullable: true
|
||||
properties:
|
||||
tool_calls_executed:
|
||||
description: Number of OpenRouter server tool calls that executed and produced a result
|
||||
nullable: true
|
||||
type: integer
|
||||
tool_calls_requested:
|
||||
description: >-
|
||||
Total number of OpenRouter server-orchestrated tool calls the model requested, across all tool types. Provider-native tools (e.g. native web search) are not counted here.
|
||||
nullable: true
|
||||
type: integer
|
||||
web_search_requests:
|
||||
description: >-
|
||||
Number of web searches performed by server-side tools. For server-orchestrated tool calls a web search is also counted in tool_calls_requested; provider-native web search may report web_search_requests only. Do not sum the two.
|
||||
nullable: true
|
||||
type: integer
|
||||
type: object
|
||||
total_tokens:
|
||||
description: Total number of tokens
|
||||
type: integer
|
||||
@@ -24459,6 +24481,31 @@ paths:
|
||||
example: 0.0001
|
||||
format: double
|
||||
type: number
|
||||
cost_details:
|
||||
description: Breakdown of upstream inference costs
|
||||
example:
|
||||
upstream_inference_completions_cost: 0.0004
|
||||
upstream_inference_cost: null
|
||||
upstream_inference_prompt_cost: 0.0008
|
||||
nullable: true
|
||||
properties:
|
||||
upstream_inference_completions_cost:
|
||||
format: double
|
||||
type: number
|
||||
upstream_inference_cost:
|
||||
format: double
|
||||
nullable: true
|
||||
type: number
|
||||
upstream_inference_prompt_cost:
|
||||
format: double
|
||||
type: number
|
||||
required:
|
||||
- upstream_inference_prompt_cost
|
||||
- upstream_inference_completions_cost
|
||||
type: object
|
||||
is_byok:
|
||||
description: Whether a request was made using a Bring Your Own Key configuration
|
||||
type: boolean
|
||||
prompt_tokens:
|
||||
description: Number of tokens in the input
|
||||
example: 8
|
||||
|
||||
@@ -2,20 +2,20 @@ speakeasyVersion: 1.680.0
|
||||
sources:
|
||||
OpenRouter API:
|
||||
sourceNamespace: open-router-chat-completions-api
|
||||
sourceRevisionDigest: sha256:6ca77315c3cd31ab7e308e010b26b7c9eb366b11b78ea9c71179facc4daaf97b
|
||||
sourceBlobDigest: sha256:8bada810c7c5ddb302c51dbbbb36dd0c9a45c4ba1c5e44af1646f69fc2a38751
|
||||
sourceRevisionDigest: sha256:1e8bbe0cea645a95cb24c3e0061459d903aca98286d2c74de7cb8359b8c3c29d
|
||||
sourceBlobDigest: sha256:42b4b8df42026cfc885ee4b34e7a30aaa906f40dc6ad99ea9e6c65e4bad495de
|
||||
tags:
|
||||
- latest
|
||||
- speakeasy-sdk-regen-1781818757
|
||||
- speakeasy-sdk-regen-1781885111
|
||||
- 1.0.0
|
||||
targets:
|
||||
open-router:
|
||||
source: OpenRouter API
|
||||
sourceNamespace: open-router-chat-completions-api
|
||||
sourceRevisionDigest: sha256:6ca77315c3cd31ab7e308e010b26b7c9eb366b11b78ea9c71179facc4daaf97b
|
||||
sourceBlobDigest: sha256:8bada810c7c5ddb302c51dbbbb36dd0c9a45c4ba1c5e44af1646f69fc2a38751
|
||||
sourceRevisionDigest: sha256:1e8bbe0cea645a95cb24c3e0061459d903aca98286d2c74de7cb8359b8c3c29d
|
||||
sourceBlobDigest: sha256:42b4b8df42026cfc885ee4b34e7a30aaa906f40dc6ad99ea9e6c65e4bad495de
|
||||
codeSamplesNamespace: open-router-python-code-samples
|
||||
codeSamplesRevisionDigest: sha256:80ceff338c097e19bf3951fd00e8010fc7c102b916a684eeec33d507b7a3844f
|
||||
codeSamplesRevisionDigest: sha256:a16acd4648a2b2c90df0256551f25bb6515c70ea239dba657f07fce770e459d5
|
||||
workflow:
|
||||
workflowVersion: 1.0.0
|
||||
speakeasyVersion: 1.680.0
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ Based on:
|
||||
### Releases
|
||||
- [PyPI v0.10.0] https://pypi.org/project/openrouter/0.10.0 - .
|
||||
|
||||
## 2026-06-18 21:38:57
|
||||
## 2026-06-22 00:59:00
|
||||
### Changes
|
||||
Based on:
|
||||
- OpenAPI Doc
|
||||
|
||||
@@ -527,6 +527,8 @@ if TYPE_CHECKING:
|
||||
CompletionTokensDetailsTypedDict,
|
||||
PromptTokensDetails,
|
||||
PromptTokensDetailsTypedDict,
|
||||
ServerToolUseDetails,
|
||||
ServerToolUseDetailsTypedDict,
|
||||
)
|
||||
from .chatusermessage import (
|
||||
ChatUserMessage,
|
||||
@@ -4056,6 +4058,8 @@ __all__ = [
|
||||
"SearchQualityLevel",
|
||||
"Security",
|
||||
"SecurityTypedDict",
|
||||
"ServerToolUseDetails",
|
||||
"ServerToolUseDetailsTypedDict",
|
||||
"ServiceUnavailableResponseErrorData",
|
||||
"ServiceUnavailableResponseErrorDataTypedDict",
|
||||
"ShellCallItem",
|
||||
@@ -4742,6 +4746,8 @@ _dynamic_imports: dict[str, str] = {
|
||||
"CompletionTokensDetailsTypedDict": ".chatusage",
|
||||
"PromptTokensDetails": ".chatusage",
|
||||
"PromptTokensDetailsTypedDict": ".chatusage",
|
||||
"ServerToolUseDetails": ".chatusage",
|
||||
"ServerToolUseDetailsTypedDict": ".chatusage",
|
||||
"ChatUserMessage": ".chatusermessage",
|
||||
"ChatUserMessageContent": ".chatusermessage",
|
||||
"ChatUserMessageContentTypedDict": ".chatusermessage",
|
||||
|
||||
@@ -112,6 +112,68 @@ class PromptTokensDetails(BaseModel):
|
||||
r"""Video input tokens"""
|
||||
|
||||
|
||||
class ServerToolUseDetailsTypedDict(TypedDict):
|
||||
r"""Usage for server-side tool execution (e.g., web search)"""
|
||||
|
||||
tool_calls_executed: NotRequired[Nullable[int]]
|
||||
r"""Number of OpenRouter server tool calls that executed and produced a result"""
|
||||
tool_calls_requested: NotRequired[Nullable[int]]
|
||||
r"""Total number of OpenRouter server-orchestrated tool calls the model requested, across all tool types. Provider-native tools (e.g. native web search) are not counted here."""
|
||||
web_search_requests: NotRequired[Nullable[int]]
|
||||
r"""Number of web searches performed by server-side tools. For server-orchestrated tool calls a web search is also counted in tool_calls_requested; provider-native web search may report web_search_requests only. Do not sum the two."""
|
||||
|
||||
|
||||
class ServerToolUseDetails(BaseModel):
|
||||
r"""Usage for server-side tool execution (e.g., web search)"""
|
||||
|
||||
tool_calls_executed: OptionalNullable[int] = UNSET
|
||||
r"""Number of OpenRouter server tool calls that executed and produced a result"""
|
||||
|
||||
tool_calls_requested: OptionalNullable[int] = UNSET
|
||||
r"""Total number of OpenRouter server-orchestrated tool calls the model requested, across all tool types. Provider-native tools (e.g. native web search) are not counted here."""
|
||||
|
||||
web_search_requests: OptionalNullable[int] = UNSET
|
||||
r"""Number of web searches performed by server-side tools. For server-orchestrated tool calls a web search is also counted in tool_calls_requested; provider-native web search may report web_search_requests only. Do not sum the two."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = [
|
||||
"tool_calls_executed",
|
||||
"tool_calls_requested",
|
||||
"web_search_requests",
|
||||
]
|
||||
nullable_fields = [
|
||||
"tool_calls_executed",
|
||||
"tool_calls_requested",
|
||||
"web_search_requests",
|
||||
]
|
||||
null_default_fields = []
|
||||
|
||||
serialized = handler(self)
|
||||
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k)
|
||||
serialized.pop(k, None)
|
||||
|
||||
optional_nullable = k in optional_fields and k in nullable_fields
|
||||
is_set = (
|
||||
self.__pydantic_fields_set__.intersection({n})
|
||||
or k in null_default_fields
|
||||
) # pylint: disable=no-member
|
||||
|
||||
if val is not None and val != UNSET_SENTINEL:
|
||||
m[k] = val
|
||||
elif val != UNSET_SENTINEL and (
|
||||
not k in optional_fields or (optional_nullable and is_set)
|
||||
):
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
|
||||
|
||||
class ChatUsageTypedDict(TypedDict):
|
||||
r"""Token usage statistics"""
|
||||
|
||||
@@ -131,6 +193,8 @@ class ChatUsageTypedDict(TypedDict):
|
||||
r"""Whether a request was made using a Bring Your Own Key configuration"""
|
||||
prompt_tokens_details: NotRequired[Nullable[PromptTokensDetailsTypedDict]]
|
||||
r"""Detailed prompt token usage"""
|
||||
server_tool_use_details: NotRequired[Nullable[ServerToolUseDetailsTypedDict]]
|
||||
r"""Usage for server-side tool execution (e.g., web search)"""
|
||||
|
||||
|
||||
class ChatUsage(BaseModel):
|
||||
@@ -160,6 +224,9 @@ class ChatUsage(BaseModel):
|
||||
prompt_tokens_details: OptionalNullable[PromptTokensDetails] = UNSET
|
||||
r"""Detailed prompt token usage"""
|
||||
|
||||
server_tool_use_details: OptionalNullable[ServerToolUseDetails] = UNSET
|
||||
r"""Usage for server-side tool execution (e.g., web search)"""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = [
|
||||
@@ -168,12 +235,14 @@ class ChatUsage(BaseModel):
|
||||
"cost_details",
|
||||
"is_byok",
|
||||
"prompt_tokens_details",
|
||||
"server_tool_use_details",
|
||||
]
|
||||
nullable_fields = [
|
||||
"completion_tokens_details",
|
||||
"cost",
|
||||
"cost_details",
|
||||
"prompt_tokens_details",
|
||||
"server_tool_use_details",
|
||||
]
|
||||
null_default_fields = []
|
||||
|
||||
|
||||
@@ -81,6 +81,8 @@ if TYPE_CHECKING:
|
||||
ContentText,
|
||||
ContentTextTypedDict,
|
||||
ContentTypedDict,
|
||||
CostDetails,
|
||||
CostDetailsTypedDict,
|
||||
CreateEmbeddingsData,
|
||||
CreateEmbeddingsDataTypedDict,
|
||||
CreateEmbeddingsGlobals,
|
||||
@@ -719,6 +721,8 @@ __all__ = [
|
||||
"ContentText",
|
||||
"ContentTextTypedDict",
|
||||
"ContentTypedDict",
|
||||
"CostDetails",
|
||||
"CostDetailsTypedDict",
|
||||
"CreateAudioSpeechGlobals",
|
||||
"CreateAudioSpeechGlobalsTypedDict",
|
||||
"CreateAudioSpeechRequest",
|
||||
@@ -1263,6 +1267,8 @@ _dynamic_imports: dict[str, str] = {
|
||||
"ContentText": ".createembeddings",
|
||||
"ContentTextTypedDict": ".createembeddings",
|
||||
"ContentTypedDict": ".createembeddings",
|
||||
"CostDetails": ".createembeddings",
|
||||
"CostDetailsTypedDict": ".createembeddings",
|
||||
"CreateEmbeddingsData": ".createembeddings",
|
||||
"CreateEmbeddingsDataTypedDict": ".createembeddings",
|
||||
"CreateEmbeddingsGlobals": ".createembeddings",
|
||||
|
||||
@@ -344,6 +344,54 @@ class CreateEmbeddingsData(BaseModel):
|
||||
Object = Literal["list",]
|
||||
|
||||
|
||||
class CostDetailsTypedDict(TypedDict):
|
||||
r"""Breakdown of upstream inference costs"""
|
||||
|
||||
upstream_inference_completions_cost: float
|
||||
upstream_inference_prompt_cost: float
|
||||
upstream_inference_cost: NotRequired[Nullable[float]]
|
||||
|
||||
|
||||
class CostDetails(BaseModel):
|
||||
r"""Breakdown of upstream inference costs"""
|
||||
|
||||
upstream_inference_completions_cost: float
|
||||
|
||||
upstream_inference_prompt_cost: float
|
||||
|
||||
upstream_inference_cost: OptionalNullable[float] = UNSET
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = ["upstream_inference_cost"]
|
||||
nullable_fields = ["upstream_inference_cost"]
|
||||
null_default_fields = []
|
||||
|
||||
serialized = handler(self)
|
||||
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k)
|
||||
serialized.pop(k, None)
|
||||
|
||||
optional_nullable = k in optional_fields and k in nullable_fields
|
||||
is_set = (
|
||||
self.__pydantic_fields_set__.intersection({n})
|
||||
or k in null_default_fields
|
||||
) # pylint: disable=no-member
|
||||
|
||||
if val is not None and val != UNSET_SENTINEL:
|
||||
m[k] = val
|
||||
elif val != UNSET_SENTINEL and (
|
||||
not k in optional_fields or (optional_nullable and is_set)
|
||||
):
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
|
||||
|
||||
class PromptTokensDetailsTypedDict(TypedDict):
|
||||
r"""Per-modality token breakdown. Only present when the input contains 2+ modalities (e.g. text + image) and the upstream provider returns modality-level usage data. Only non-zero modality counts are included."""
|
||||
|
||||
@@ -387,6 +435,10 @@ class CreateEmbeddingsUsageTypedDict(TypedDict):
|
||||
r"""Total number of tokens used"""
|
||||
cost: NotRequired[float]
|
||||
r"""Cost of the request in credits"""
|
||||
cost_details: NotRequired[Nullable[CostDetailsTypedDict]]
|
||||
r"""Breakdown of upstream inference costs"""
|
||||
is_byok: NotRequired[bool]
|
||||
r"""Whether a request was made using a Bring Your Own Key configuration"""
|
||||
prompt_tokens_details: NotRequired[PromptTokensDetailsTypedDict]
|
||||
r"""Per-modality token breakdown. Only present when the input contains 2+ modalities (e.g. text + image) and the upstream provider returns modality-level usage data. Only non-zero modality counts are included."""
|
||||
|
||||
@@ -403,9 +455,45 @@ class CreateEmbeddingsUsage(BaseModel):
|
||||
cost: Optional[float] = None
|
||||
r"""Cost of the request in credits"""
|
||||
|
||||
cost_details: OptionalNullable[CostDetails] = UNSET
|
||||
r"""Breakdown of upstream inference costs"""
|
||||
|
||||
is_byok: Optional[bool] = None
|
||||
r"""Whether a request was made using a Bring Your Own Key configuration"""
|
||||
|
||||
prompt_tokens_details: Optional[PromptTokensDetails] = None
|
||||
r"""Per-modality token breakdown. Only present when the input contains 2+ modalities (e.g. text + image) and the upstream provider returns modality-level usage data. Only non-zero modality counts are included."""
|
||||
|
||||
@model_serializer(mode="wrap")
|
||||
def serialize_model(self, handler):
|
||||
optional_fields = ["cost", "cost_details", "is_byok", "prompt_tokens_details"]
|
||||
nullable_fields = ["cost_details"]
|
||||
null_default_fields = []
|
||||
|
||||
serialized = handler(self)
|
||||
|
||||
m = {}
|
||||
|
||||
for n, f in type(self).model_fields.items():
|
||||
k = f.alias or n
|
||||
val = serialized.get(k)
|
||||
serialized.pop(k, None)
|
||||
|
||||
optional_nullable = k in optional_fields and k in nullable_fields
|
||||
is_set = (
|
||||
self.__pydantic_fields_set__.intersection({n})
|
||||
or k in null_default_fields
|
||||
) # pylint: disable=no-member
|
||||
|
||||
if val is not None and val != UNSET_SENTINEL:
|
||||
m[k] = val
|
||||
elif val != UNSET_SENTINEL and (
|
||||
not k in optional_fields or (optional_nullable and is_set)
|
||||
):
|
||||
m[k] = val
|
||||
|
||||
return m
|
||||
|
||||
|
||||
class CreateEmbeddingsResponseBodyTypedDict(TypedDict):
|
||||
r"""Embeddings response containing embedding vectors"""
|
||||
|
||||
Reference in New Issue
Block a user