openrouter 0.0.16__py3-none-any.whl → 0.0.18__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openrouter/_version.py +3 -3
- openrouter/analytics.py +2 -0
- openrouter/api_keys.py +24 -4
- openrouter/basesdk.py +6 -0
- openrouter/chat.py +212 -14
- openrouter/completions.py +2 -0
- openrouter/components/__init__.py +470 -106
- openrouter/components/_schema0.py +94 -0
- openrouter/components/_schema3.py +229 -0
- openrouter/components/chatgenerationparams.py +559 -16
- openrouter/components/chatgenerationtokenusage.py +3 -0
- openrouter/components/chatmessagecontentitem.py +2 -1
- openrouter/components/chatmessagecontentitemaudio.py +6 -25
- openrouter/components/chatmessagecontentitemcachecontrol.py +32 -0
- openrouter/components/chatmessagecontentitemtext.py +9 -2
- openrouter/components/chatmessagecontentitemvideo.py +50 -9
- openrouter/components/chatmessagetokenlogprob.py +4 -4
- openrouter/components/chatresponsechoice.py +6 -1
- openrouter/components/chatstreamingmessagechunk.py +12 -1
- openrouter/components/completionchoice.py +18 -5
- openrouter/components/completioncreateparams.py +10 -10
- openrouter/components/completionresponse.py +3 -0
- openrouter/components/datacollection.py +19 -0
- openrouter/components/message.py +10 -9
- openrouter/components/openairesponsesannotation.py +11 -4
- openrouter/components/openairesponsesreasoningeffort.py +2 -0
- openrouter/components/openresponseseasyinputmessage.py +93 -20
- openrouter/components/openresponsesinput.py +2 -2
- openrouter/components/openresponsesinputmessageitem.py +87 -14
- openrouter/components/openresponsesnonstreamingresponse.py +33 -19
- openrouter/components/openresponsesreasoning.py +2 -0
- openrouter/components/openresponsesrequest.py +246 -142
- openrouter/components/openresponsesstreamevent.py +110 -39
- openrouter/components/outputmessage.py +10 -4
- openrouter/components/parameter.py +1 -0
- openrouter/components/pdfparserengine.py +16 -0
- openrouter/components/pdfparseroptions.py +25 -0
- openrouter/components/percentilelatencycutoffs.py +71 -0
- openrouter/components/percentilestats.py +34 -0
- openrouter/components/percentilethroughputcutoffs.py +71 -0
- openrouter/components/preferredmaxlatency.py +21 -0
- openrouter/components/preferredminthroughput.py +22 -0
- openrouter/components/providername.py +11 -27
- openrouter/components/providerpreferences.py +355 -0
- openrouter/components/providersort.py +15 -0
- openrouter/components/providersortconfig.py +71 -0
- openrouter/components/providersortunion.py +23 -0
- openrouter/components/publicendpoint.py +61 -45
- openrouter/components/publicpricing.py +50 -45
- openrouter/components/responseformattextconfig.py +9 -7
- openrouter/components/responseinputvideo.py +26 -0
- openrouter/components/responseoutputtext.py +36 -1
- openrouter/components/responsesoutputitem.py +13 -11
- openrouter/components/responsesoutputitemreasoning.py +43 -3
- openrouter/components/responsesoutputmessage.py +10 -5
- openrouter/components/responsesoutputmodality.py +14 -0
- openrouter/components/websearchengine.py +15 -0
- openrouter/credits.py +4 -0
- openrouter/embeddings.py +34 -24
- openrouter/endpoints.py +4 -0
- openrouter/generations.py +2 -0
- openrouter/models/__init__.py +3 -0
- openrouter/models/internal/__init__.py +54 -0
- openrouter/models/internal/globals.py +41 -0
- openrouter/models_.py +6 -0
- openrouter/oauth.py +4 -0
- openrouter/operations/__init__.py +46 -49
- openrouter/operations/createembeddings.py +68 -264
- openrouter/operations/getcredits.py +19 -0
- openrouter/operations/getgeneration.py +6 -0
- openrouter/operations/getparameters.py +5 -77
- openrouter/operations/updatekeys.py +2 -2
- openrouter/parameters.py +4 -2
- openrouter/providers.py +2 -0
- openrouter/responses.py +188 -36
- openrouter/sdk.py +13 -0
- openrouter/sdkconfiguration.py +2 -0
- openrouter/utils/forms.py +21 -10
- openrouter/utils/queryparams.py +14 -2
- openrouter/utils/retries.py +69 -5
- {openrouter-0.0.16.dist-info → openrouter-0.0.18.dist-info}/METADATA +2 -1
- {openrouter-0.0.16.dist-info → openrouter-0.0.18.dist-info}/RECORD +85 -64
- {openrouter-0.0.16.dist-info → openrouter-0.0.18.dist-info}/WHEEL +0 -0
- {openrouter-0.0.16.dist-info → openrouter-0.0.18.dist-info}/licenses/LICENSE +0 -0
- {openrouter-0.0.16.dist-info → openrouter-0.0.18.dist-info}/top_level.txt +0 -0
|
@@ -60,9 +60,9 @@ OpenResponsesInput1TypedDict = TypeAliasType(
|
|
|
60
60
|
OpenResponsesFunctionCallOutputTypedDict,
|
|
61
61
|
ResponsesOutputMessageTypedDict,
|
|
62
62
|
OpenResponsesFunctionToolCallTypedDict,
|
|
63
|
-
ResponsesOutputItemReasoningTypedDict,
|
|
64
63
|
ResponsesOutputItemFunctionCallTypedDict,
|
|
65
64
|
OpenResponsesReasoningTypedDict,
|
|
65
|
+
ResponsesOutputItemReasoningTypedDict,
|
|
66
66
|
],
|
|
67
67
|
)
|
|
68
68
|
|
|
@@ -78,9 +78,9 @@ OpenResponsesInput1 = TypeAliasType(
|
|
|
78
78
|
OpenResponsesFunctionCallOutput,
|
|
79
79
|
ResponsesOutputMessage,
|
|
80
80
|
OpenResponsesFunctionToolCall,
|
|
81
|
-
ResponsesOutputItemReasoning,
|
|
82
81
|
ResponsesOutputItemFunctionCall,
|
|
83
82
|
OpenResponsesReasoning,
|
|
83
|
+
ResponsesOutputItemReasoning,
|
|
84
84
|
],
|
|
85
85
|
)
|
|
86
86
|
|
|
@@ -3,16 +3,24 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
from .responseinputaudio import ResponseInputAudio, ResponseInputAudioTypedDict
|
|
5
5
|
from .responseinputfile import ResponseInputFile, ResponseInputFileTypedDict
|
|
6
|
-
from .responseinputimage import ResponseInputImage, ResponseInputImageTypedDict
|
|
7
6
|
from .responseinputtext import ResponseInputText, ResponseInputTextTypedDict
|
|
8
|
-
from
|
|
9
|
-
from openrouter.
|
|
10
|
-
|
|
7
|
+
from .responseinputvideo import ResponseInputVideo, ResponseInputVideoTypedDict
|
|
8
|
+
from openrouter.types import (
|
|
9
|
+
BaseModel,
|
|
10
|
+
Nullable,
|
|
11
|
+
OptionalNullable,
|
|
12
|
+
UNSET,
|
|
13
|
+
UNSET_SENTINEL,
|
|
14
|
+
UnrecognizedStr,
|
|
15
|
+
)
|
|
16
|
+
from openrouter.utils import get_discriminator, validate_open_enum
|
|
17
|
+
from pydantic import Discriminator, Tag, model_serializer
|
|
18
|
+
from pydantic.functional_validators import PlainValidator
|
|
11
19
|
from typing import List, Literal, Optional, Union
|
|
12
20
|
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
|
|
13
21
|
|
|
14
22
|
|
|
15
|
-
|
|
23
|
+
OpenResponsesInputMessageItemTypeMessage = Literal["message",]
|
|
16
24
|
|
|
17
25
|
|
|
18
26
|
OpenResponsesInputMessageItemRoleDeveloper = Literal["developer",]
|
|
@@ -44,23 +52,88 @@ OpenResponsesInputMessageItemRoleUnion = TypeAliasType(
|
|
|
44
52
|
)
|
|
45
53
|
|
|
46
54
|
|
|
47
|
-
|
|
48
|
-
|
|
55
|
+
OpenResponsesInputMessageItemContentType = Literal["input_image",]
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
OpenResponsesInputMessageItemDetail = Union[
|
|
59
|
+
Literal[
|
|
60
|
+
"auto",
|
|
61
|
+
"high",
|
|
62
|
+
"low",
|
|
63
|
+
],
|
|
64
|
+
UnrecognizedStr,
|
|
65
|
+
]
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class OpenResponsesInputMessageItemContentInputImageTypedDict(TypedDict):
|
|
69
|
+
r"""Image input content item"""
|
|
70
|
+
|
|
71
|
+
type: OpenResponsesInputMessageItemContentType
|
|
72
|
+
detail: OpenResponsesInputMessageItemDetail
|
|
73
|
+
image_url: NotRequired[Nullable[str]]
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class OpenResponsesInputMessageItemContentInputImage(BaseModel):
|
|
77
|
+
r"""Image input content item"""
|
|
78
|
+
|
|
79
|
+
type: OpenResponsesInputMessageItemContentType
|
|
80
|
+
|
|
81
|
+
detail: Annotated[
|
|
82
|
+
OpenResponsesInputMessageItemDetail, PlainValidator(validate_open_enum(False))
|
|
83
|
+
]
|
|
84
|
+
|
|
85
|
+
image_url: OptionalNullable[str] = UNSET
|
|
86
|
+
|
|
87
|
+
@model_serializer(mode="wrap")
|
|
88
|
+
def serialize_model(self, handler):
|
|
89
|
+
optional_fields = ["image_url"]
|
|
90
|
+
nullable_fields = ["image_url"]
|
|
91
|
+
null_default_fields = []
|
|
92
|
+
|
|
93
|
+
serialized = handler(self)
|
|
94
|
+
|
|
95
|
+
m = {}
|
|
96
|
+
|
|
97
|
+
for n, f in type(self).model_fields.items():
|
|
98
|
+
k = f.alias or n
|
|
99
|
+
val = serialized.get(k)
|
|
100
|
+
serialized.pop(k, None)
|
|
101
|
+
|
|
102
|
+
optional_nullable = k in optional_fields and k in nullable_fields
|
|
103
|
+
is_set = (
|
|
104
|
+
self.__pydantic_fields_set__.intersection({n})
|
|
105
|
+
or k in null_default_fields
|
|
106
|
+
) # pylint: disable=no-member
|
|
107
|
+
|
|
108
|
+
if val is not None and val != UNSET_SENTINEL:
|
|
109
|
+
m[k] = val
|
|
110
|
+
elif val != UNSET_SENTINEL and (
|
|
111
|
+
not k in optional_fields or (optional_nullable and is_set)
|
|
112
|
+
):
|
|
113
|
+
m[k] = val
|
|
114
|
+
|
|
115
|
+
return m
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
OpenResponsesInputMessageItemContentUnionTypedDict = TypeAliasType(
|
|
119
|
+
"OpenResponsesInputMessageItemContentUnionTypedDict",
|
|
49
120
|
Union[
|
|
50
121
|
ResponseInputTextTypedDict,
|
|
51
122
|
ResponseInputAudioTypedDict,
|
|
52
|
-
|
|
123
|
+
ResponseInputVideoTypedDict,
|
|
124
|
+
OpenResponsesInputMessageItemContentInputImageTypedDict,
|
|
53
125
|
ResponseInputFileTypedDict,
|
|
54
126
|
],
|
|
55
127
|
)
|
|
56
128
|
|
|
57
129
|
|
|
58
|
-
|
|
130
|
+
OpenResponsesInputMessageItemContentUnion = Annotated[
|
|
59
131
|
Union[
|
|
60
132
|
Annotated[ResponseInputText, Tag("input_text")],
|
|
61
|
-
Annotated[
|
|
133
|
+
Annotated[OpenResponsesInputMessageItemContentInputImage, Tag("input_image")],
|
|
62
134
|
Annotated[ResponseInputFile, Tag("input_file")],
|
|
63
135
|
Annotated[ResponseInputAudio, Tag("input_audio")],
|
|
136
|
+
Annotated[ResponseInputVideo, Tag("input_video")],
|
|
64
137
|
],
|
|
65
138
|
Discriminator(lambda m: get_discriminator(m, "type", "type")),
|
|
66
139
|
]
|
|
@@ -68,16 +141,16 @@ OpenResponsesInputMessageItemContent = Annotated[
|
|
|
68
141
|
|
|
69
142
|
class OpenResponsesInputMessageItemTypedDict(TypedDict):
|
|
70
143
|
role: OpenResponsesInputMessageItemRoleUnionTypedDict
|
|
71
|
-
content: List[
|
|
144
|
+
content: List[OpenResponsesInputMessageItemContentUnionTypedDict]
|
|
72
145
|
id: NotRequired[str]
|
|
73
|
-
type: NotRequired[
|
|
146
|
+
type: NotRequired[OpenResponsesInputMessageItemTypeMessage]
|
|
74
147
|
|
|
75
148
|
|
|
76
149
|
class OpenResponsesInputMessageItem(BaseModel):
|
|
77
150
|
role: OpenResponsesInputMessageItemRoleUnion
|
|
78
151
|
|
|
79
|
-
content: List[
|
|
152
|
+
content: List[OpenResponsesInputMessageItemContentUnion]
|
|
80
153
|
|
|
81
154
|
id: Optional[str] = None
|
|
82
155
|
|
|
83
|
-
type: Optional[
|
|
156
|
+
type: Optional[OpenResponsesInputMessageItemTypeMessage] = None
|
|
@@ -48,8 +48,8 @@ from openrouter.types import (
|
|
|
48
48
|
UNSET,
|
|
49
49
|
UNSET_SENTINEL,
|
|
50
50
|
)
|
|
51
|
-
from openrouter.utils import validate_open_enum
|
|
52
|
-
from pydantic import model_serializer
|
|
51
|
+
from openrouter.utils import get_discriminator, validate_open_enum
|
|
52
|
+
from pydantic import Discriminator, Tag, model_serializer
|
|
53
53
|
from pydantic.functional_validators import PlainValidator
|
|
54
54
|
from typing import Any, Dict, List, Literal, Optional, Union
|
|
55
55
|
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
|
|
@@ -127,16 +127,19 @@ OpenResponsesNonStreamingResponseToolUnionTypedDict = TypeAliasType(
|
|
|
127
127
|
)
|
|
128
128
|
|
|
129
129
|
|
|
130
|
-
OpenResponsesNonStreamingResponseToolUnion =
|
|
131
|
-
"OpenResponsesNonStreamingResponseToolUnion",
|
|
130
|
+
OpenResponsesNonStreamingResponseToolUnion = Annotated[
|
|
132
131
|
Union[
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
132
|
+
Annotated[OpenResponsesNonStreamingResponseToolFunction, Tag("function")],
|
|
133
|
+
Annotated[OpenResponsesWebSearchPreviewTool, Tag("web_search_preview")],
|
|
134
|
+
Annotated[
|
|
135
|
+
OpenResponsesWebSearchPreview20250311Tool,
|
|
136
|
+
Tag("web_search_preview_2025_03_11"),
|
|
137
|
+
],
|
|
138
|
+
Annotated[OpenResponsesWebSearchTool, Tag("web_search")],
|
|
139
|
+
Annotated[OpenResponsesWebSearch20250826Tool, Tag("web_search_2025_08_26")],
|
|
138
140
|
],
|
|
139
|
-
)
|
|
141
|
+
Discriminator(lambda m: get_discriminator(m, "type", "type")),
|
|
142
|
+
]
|
|
140
143
|
|
|
141
144
|
|
|
142
145
|
class OpenResponsesNonStreamingResponseTypedDict(TypedDict):
|
|
@@ -146,24 +149,27 @@ class OpenResponsesNonStreamingResponseTypedDict(TypedDict):
|
|
|
146
149
|
object: Object
|
|
147
150
|
created_at: float
|
|
148
151
|
model: str
|
|
152
|
+
status: OpenAIResponsesResponseStatus
|
|
153
|
+
completed_at: Nullable[float]
|
|
149
154
|
output: List[ResponsesOutputItemTypedDict]
|
|
150
155
|
error: Nullable[ResponsesErrorFieldTypedDict]
|
|
151
156
|
r"""Error information returned from the API"""
|
|
152
157
|
incomplete_details: Nullable[OpenAIResponsesIncompleteDetailsTypedDict]
|
|
153
158
|
temperature: Nullable[float]
|
|
154
159
|
top_p: Nullable[float]
|
|
160
|
+
presence_penalty: Nullable[float]
|
|
161
|
+
frequency_penalty: Nullable[float]
|
|
155
162
|
instructions: Nullable[OpenAIResponsesInputUnionTypedDict]
|
|
156
163
|
metadata: Nullable[Dict[str, str]]
|
|
157
164
|
r"""Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed."""
|
|
158
165
|
tools: List[OpenResponsesNonStreamingResponseToolUnionTypedDict]
|
|
159
166
|
tool_choice: OpenAIResponsesToolChoiceUnionTypedDict
|
|
160
167
|
parallel_tool_calls: bool
|
|
161
|
-
status: NotRequired[OpenAIResponsesResponseStatus]
|
|
162
168
|
user: NotRequired[Nullable[str]]
|
|
163
169
|
output_text: NotRequired[str]
|
|
164
170
|
prompt_cache_key: NotRequired[Nullable[str]]
|
|
165
171
|
safety_identifier: NotRequired[Nullable[str]]
|
|
166
|
-
usage: NotRequired[OpenResponsesUsageTypedDict]
|
|
172
|
+
usage: NotRequired[Nullable[OpenResponsesUsageTypedDict]]
|
|
167
173
|
r"""Token usage information for the response"""
|
|
168
174
|
max_tool_calls: NotRequired[Nullable[float]]
|
|
169
175
|
top_logprobs: NotRequired[float]
|
|
@@ -190,6 +196,12 @@ class OpenResponsesNonStreamingResponse(BaseModel):
|
|
|
190
196
|
|
|
191
197
|
model: str
|
|
192
198
|
|
|
199
|
+
status: Annotated[
|
|
200
|
+
OpenAIResponsesResponseStatus, PlainValidator(validate_open_enum(False))
|
|
201
|
+
]
|
|
202
|
+
|
|
203
|
+
completed_at: Nullable[float]
|
|
204
|
+
|
|
193
205
|
output: List[ResponsesOutputItem]
|
|
194
206
|
|
|
195
207
|
error: Nullable[ResponsesErrorField]
|
|
@@ -201,6 +213,10 @@ class OpenResponsesNonStreamingResponse(BaseModel):
|
|
|
201
213
|
|
|
202
214
|
top_p: Nullable[float]
|
|
203
215
|
|
|
216
|
+
presence_penalty: Nullable[float]
|
|
217
|
+
|
|
218
|
+
frequency_penalty: Nullable[float]
|
|
219
|
+
|
|
204
220
|
instructions: Nullable[OpenAIResponsesInputUnion]
|
|
205
221
|
|
|
206
222
|
metadata: Nullable[Dict[str, str]]
|
|
@@ -212,11 +228,6 @@ class OpenResponsesNonStreamingResponse(BaseModel):
|
|
|
212
228
|
|
|
213
229
|
parallel_tool_calls: bool
|
|
214
230
|
|
|
215
|
-
status: Annotated[
|
|
216
|
-
Optional[OpenAIResponsesResponseStatus],
|
|
217
|
-
PlainValidator(validate_open_enum(False)),
|
|
218
|
-
] = None
|
|
219
|
-
|
|
220
231
|
user: OptionalNullable[str] = UNSET
|
|
221
232
|
|
|
222
233
|
output_text: Optional[str] = None
|
|
@@ -225,7 +236,7 @@ class OpenResponsesNonStreamingResponse(BaseModel):
|
|
|
225
236
|
|
|
226
237
|
safety_identifier: OptionalNullable[str] = UNSET
|
|
227
238
|
|
|
228
|
-
usage:
|
|
239
|
+
usage: OptionalNullable[OpenResponsesUsage] = UNSET
|
|
229
240
|
r"""Token usage information for the response"""
|
|
230
241
|
|
|
231
242
|
max_tool_calls: OptionalNullable[float] = UNSET
|
|
@@ -260,7 +271,6 @@ class OpenResponsesNonStreamingResponse(BaseModel):
|
|
|
260
271
|
@model_serializer(mode="wrap")
|
|
261
272
|
def serialize_model(self, handler):
|
|
262
273
|
optional_fields = [
|
|
263
|
-
"status",
|
|
264
274
|
"user",
|
|
265
275
|
"output_text",
|
|
266
276
|
"prompt_cache_key",
|
|
@@ -279,15 +289,19 @@ class OpenResponsesNonStreamingResponse(BaseModel):
|
|
|
279
289
|
"text",
|
|
280
290
|
]
|
|
281
291
|
nullable_fields = [
|
|
292
|
+
"completed_at",
|
|
282
293
|
"user",
|
|
283
294
|
"prompt_cache_key",
|
|
284
295
|
"safety_identifier",
|
|
285
296
|
"error",
|
|
286
297
|
"incomplete_details",
|
|
298
|
+
"usage",
|
|
287
299
|
"max_tool_calls",
|
|
288
300
|
"max_output_tokens",
|
|
289
301
|
"temperature",
|
|
290
302
|
"top_p",
|
|
303
|
+
"presence_penalty",
|
|
304
|
+
"frequency_penalty",
|
|
291
305
|
"instructions",
|
|
292
306
|
"metadata",
|
|
293
307
|
"prompt",
|