openrouter 0.0.17__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.
Files changed (34) hide show
  1. openrouter/_version.py +2 -2
  2. openrouter/chat.py +58 -0
  3. openrouter/components/__init__.py +171 -30
  4. openrouter/components/_schema0.py +3 -2
  5. openrouter/components/_schema3.py +1 -0
  6. openrouter/components/chatgenerationparams.py +184 -14
  7. openrouter/components/chatgenerationtokenusage.py +3 -0
  8. openrouter/components/chatmessagetokenlogprob.py +4 -4
  9. openrouter/components/openresponseseasyinputmessage.py +93 -20
  10. openrouter/components/openresponsesinput.py +2 -2
  11. openrouter/components/openresponsesinputmessageitem.py +87 -14
  12. openrouter/components/openresponsesnonstreamingresponse.py +20 -9
  13. openrouter/components/openresponsesreasoning.py +1 -0
  14. openrouter/components/openresponsesrequest.py +85 -32
  15. openrouter/components/percentilelatencycutoffs.py +71 -0
  16. openrouter/components/percentilestats.py +34 -0
  17. openrouter/components/percentilethroughputcutoffs.py +71 -0
  18. openrouter/components/preferredmaxlatency.py +21 -0
  19. openrouter/components/preferredminthroughput.py +22 -0
  20. openrouter/components/providername.py +3 -2
  21. openrouter/components/providerpreferences.py +13 -33
  22. openrouter/components/publicendpoint.py +11 -0
  23. openrouter/components/responseinputvideo.py +26 -0
  24. openrouter/components/responseoutputtext.py +36 -1
  25. openrouter/components/responsesoutputitem.py +1 -1
  26. openrouter/components/responsesoutputitemreasoning.py +43 -3
  27. openrouter/components/responsesoutputmodality.py +14 -0
  28. openrouter/operations/getgeneration.py +6 -0
  29. openrouter/responses.py +114 -0
  30. {openrouter-0.0.17.dist-info → openrouter-0.0.18.dist-info}/METADATA +1 -1
  31. {openrouter-0.0.17.dist-info → openrouter-0.0.18.dist-info}/RECORD +34 -27
  32. {openrouter-0.0.17.dist-info → openrouter-0.0.18.dist-info}/WHEEL +0 -0
  33. {openrouter-0.0.17.dist-info → openrouter-0.0.18.dist-info}/licenses/LICENSE +0 -0
  34. {openrouter-0.0.17.dist-info → openrouter-0.0.18.dist-info}/top_level.txt +0 -0
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
  from .endpointstatus import EndpointStatus
5
5
  from .parameter import Parameter
6
+ from .percentilestats import PercentileStats, PercentileStatsTypedDict
6
7
  from .providername import ProviderName
7
8
  from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
8
9
  from openrouter.utils import validate_open_enum
@@ -111,6 +112,9 @@ class PublicEndpointTypedDict(TypedDict):
111
112
  supported_parameters: List[Parameter]
112
113
  uptime_last_30m: Nullable[float]
113
114
  supports_implicit_caching: bool
115
+ latency_last_30m: Nullable[PercentileStatsTypedDict]
116
+ r"""Latency percentiles in milliseconds over the last 30 minutes. Latency measures time to first token. Only visible when authenticated with an API key or cookie; returns null for unauthenticated requests."""
117
+ throughput_last_30m: Nullable[PercentileStatsTypedDict]
114
118
  status: NotRequired[EndpointStatus]
115
119
 
116
120
 
@@ -145,6 +149,11 @@ class PublicEndpoint(BaseModel):
145
149
 
146
150
  supports_implicit_caching: bool
147
151
 
152
+ latency_last_30m: Nullable[PercentileStats]
153
+ r"""Latency percentiles in milliseconds over the last 30 minutes. Latency measures time to first token. Only visible when authenticated with an API key or cookie; returns null for unauthenticated requests."""
154
+
155
+ throughput_last_30m: Nullable[PercentileStats]
156
+
148
157
  status: Annotated[
149
158
  Optional[EndpointStatus], PlainValidator(validate_open_enum(True))
150
159
  ] = None
@@ -157,6 +166,8 @@ class PublicEndpoint(BaseModel):
157
166
  "max_completion_tokens",
158
167
  "max_prompt_tokens",
159
168
  "uptime_last_30m",
169
+ "latency_last_30m",
170
+ "throughput_last_30m",
160
171
  ]
161
172
  null_default_fields = []
162
173
 
@@ -0,0 +1,26 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from openrouter.types import BaseModel
5
+ from typing import Literal
6
+ from typing_extensions import TypedDict
7
+
8
+
9
+ ResponseInputVideoType = Literal["input_video",]
10
+
11
+
12
+ class ResponseInputVideoTypedDict(TypedDict):
13
+ r"""Video input content item"""
14
+
15
+ type: ResponseInputVideoType
16
+ video_url: str
17
+ r"""A base64 data URL or remote URL that resolves to a video file"""
18
+
19
+
20
+ class ResponseInputVideo(BaseModel):
21
+ r"""Video input content item"""
22
+
23
+ type: ResponseInputVideoType
24
+
25
+ video_url: str
26
+ r"""A base64 data URL or remote URL that resolves to a video file"""
@@ -6,17 +6,50 @@ from .openairesponsesannotation import (
6
6
  OpenAIResponsesAnnotationTypedDict,
7
7
  )
8
8
  from openrouter.types import BaseModel
9
+ import pydantic
9
10
  from typing import List, Literal, Optional
10
- from typing_extensions import NotRequired, TypedDict
11
+ from typing_extensions import Annotated, NotRequired, TypedDict
11
12
 
12
13
 
13
14
  ResponseOutputTextType = Literal["output_text",]
14
15
 
15
16
 
17
+ class ResponseOutputTextTopLogprobTypedDict(TypedDict):
18
+ token: str
19
+ bytes_: List[float]
20
+ logprob: float
21
+
22
+
23
+ class ResponseOutputTextTopLogprob(BaseModel):
24
+ token: str
25
+
26
+ bytes_: Annotated[List[float], pydantic.Field(alias="bytes")]
27
+
28
+ logprob: float
29
+
30
+
31
+ class LogprobTypedDict(TypedDict):
32
+ token: str
33
+ bytes_: List[float]
34
+ logprob: float
35
+ top_logprobs: List[ResponseOutputTextTopLogprobTypedDict]
36
+
37
+
38
+ class Logprob(BaseModel):
39
+ token: str
40
+
41
+ bytes_: Annotated[List[float], pydantic.Field(alias="bytes")]
42
+
43
+ logprob: float
44
+
45
+ top_logprobs: List[ResponseOutputTextTopLogprob]
46
+
47
+
16
48
  class ResponseOutputTextTypedDict(TypedDict):
17
49
  type: ResponseOutputTextType
18
50
  text: str
19
51
  annotations: NotRequired[List[OpenAIResponsesAnnotationTypedDict]]
52
+ logprobs: NotRequired[List[LogprobTypedDict]]
20
53
 
21
54
 
22
55
  class ResponseOutputText(BaseModel):
@@ -25,3 +58,5 @@ class ResponseOutputText(BaseModel):
25
58
  text: str
26
59
 
27
60
  annotations: Optional[List[OpenAIResponsesAnnotation]] = None
61
+
62
+ logprobs: Optional[List[Logprob]] = None
@@ -38,8 +38,8 @@ ResponsesOutputItemTypedDict = TypeAliasType(
38
38
  ResponsesOutputItemFileSearchCallTypedDict,
39
39
  ResponsesImageGenerationCallTypedDict,
40
40
  ResponsesOutputMessageTypedDict,
41
- ResponsesOutputItemReasoningTypedDict,
42
41
  ResponsesOutputItemFunctionCallTypedDict,
42
+ ResponsesOutputItemReasoningTypedDict,
43
43
  ],
44
44
  )
45
45
  r"""An output item from the response"""
@@ -9,10 +9,14 @@ from openrouter.types import (
9
9
  OptionalNullable,
10
10
  UNSET,
11
11
  UNSET_SENTINEL,
12
+ UnrecognizedStr,
12
13
  )
14
+ from openrouter.utils import validate_open_enum
15
+ import pydantic
13
16
  from pydantic import model_serializer
17
+ from pydantic.functional_validators import PlainValidator
14
18
  from typing import List, Literal, Optional, Union
15
- from typing_extensions import NotRequired, TypeAliasType, TypedDict
19
+ from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
16
20
 
17
21
 
18
22
  ResponsesOutputItemReasoningType = Literal["reasoning",]
@@ -47,6 +51,20 @@ ResponsesOutputItemReasoningStatusUnion = TypeAliasType(
47
51
  )
48
52
 
49
53
 
54
+ ResponsesOutputItemReasoningFormat = Union[
55
+ Literal[
56
+ "unknown",
57
+ "openai-responses-v1",
58
+ "azure-openai-responses-v1",
59
+ "xai-responses-v1",
60
+ "anthropic-claude-v1",
61
+ "google-gemini-v1",
62
+ ],
63
+ UnrecognizedStr,
64
+ ]
65
+ r"""The format of the reasoning content"""
66
+
67
+
50
68
  class ResponsesOutputItemReasoningTypedDict(TypedDict):
51
69
  r"""An output item containing reasoning"""
52
70
 
@@ -56,6 +74,10 @@ class ResponsesOutputItemReasoningTypedDict(TypedDict):
56
74
  content: NotRequired[List[ReasoningTextContentTypedDict]]
57
75
  encrypted_content: NotRequired[Nullable[str]]
58
76
  status: NotRequired[ResponsesOutputItemReasoningStatusUnionTypedDict]
77
+ signature: NotRequired[Nullable[str]]
78
+ r"""A signature for the reasoning content, used for verification"""
79
+ format_: NotRequired[Nullable[ResponsesOutputItemReasoningFormat]]
80
+ r"""The format of the reasoning content"""
59
81
 
60
82
 
61
83
  class ResponsesOutputItemReasoning(BaseModel):
@@ -73,10 +95,28 @@ class ResponsesOutputItemReasoning(BaseModel):
73
95
 
74
96
  status: Optional[ResponsesOutputItemReasoningStatusUnion] = None
75
97
 
98
+ signature: OptionalNullable[str] = UNSET
99
+ r"""A signature for the reasoning content, used for verification"""
100
+
101
+ format_: Annotated[
102
+ Annotated[
103
+ OptionalNullable[ResponsesOutputItemReasoningFormat],
104
+ PlainValidator(validate_open_enum(False)),
105
+ ],
106
+ pydantic.Field(alias="format"),
107
+ ] = UNSET
108
+ r"""The format of the reasoning content"""
109
+
76
110
  @model_serializer(mode="wrap")
77
111
  def serialize_model(self, handler):
78
- optional_fields = ["content", "encrypted_content", "status"]
79
- nullable_fields = ["encrypted_content"]
112
+ optional_fields = [
113
+ "content",
114
+ "encrypted_content",
115
+ "status",
116
+ "signature",
117
+ "format",
118
+ ]
119
+ nullable_fields = ["encrypted_content", "signature", "format"]
80
120
  null_default_fields = []
81
121
 
82
122
  serialized = handler(self)
@@ -0,0 +1,14 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from openrouter.types import UnrecognizedStr
5
+ from typing import Literal, Union
6
+
7
+
8
+ ResponsesOutputModality = Union[
9
+ Literal[
10
+ "text",
11
+ "image",
12
+ ],
13
+ UnrecognizedStr,
14
+ ]
@@ -96,6 +96,8 @@ class GetGenerationDataTypedDict(TypedDict):
96
96
  r"""External user identifier"""
97
97
  api_type: Nullable[APIType]
98
98
  r"""Type of API used for the generation"""
99
+ router: Nullable[str]
100
+ r"""Router used for the request (e.g., openrouter/auto)"""
99
101
 
100
102
 
101
103
  class GetGenerationData(BaseModel):
@@ -197,6 +199,9 @@ class GetGenerationData(BaseModel):
197
199
  api_type: Annotated[Nullable[APIType], PlainValidator(validate_open_enum(False))]
198
200
  r"""Type of API used for the generation"""
199
201
 
202
+ router: Nullable[str]
203
+ r"""Router used for the request (e.g., openrouter/auto)"""
204
+
200
205
  @model_serializer(mode="wrap")
201
206
  def serialize_model(self, handler):
202
207
  optional_fields = []
@@ -226,6 +231,7 @@ class GetGenerationData(BaseModel):
226
231
  "native_finish_reason",
227
232
  "external_user",
228
233
  "api_type",
234
+ "router",
229
235
  ]
230
236
  null_default_fields = []
231
237
 
openrouter/responses.py CHANGED
@@ -57,7 +57,18 @@ class Responses(BaseSDK):
57
57
  max_output_tokens: OptionalNullable[float] = UNSET,
58
58
  temperature: OptionalNullable[float] = UNSET,
59
59
  top_p: OptionalNullable[float] = UNSET,
60
+ top_logprobs: OptionalNullable[int] = UNSET,
61
+ max_tool_calls: OptionalNullable[int] = UNSET,
62
+ presence_penalty: OptionalNullable[float] = UNSET,
63
+ frequency_penalty: OptionalNullable[float] = UNSET,
60
64
  top_k: Optional[float] = None,
65
+ image_config: Optional[
66
+ Union[
67
+ Dict[str, components.OpenResponsesRequestImageConfig],
68
+ Dict[str, components.OpenResponsesRequestImageConfigTypedDict],
69
+ ]
70
+ ] = None,
71
+ modalities: Optional[List[components.ResponsesOutputModality]] = None,
61
72
  prompt_cache_key: OptionalNullable[str] = UNSET,
62
73
  previous_response_id: OptionalNullable[str] = UNSET,
63
74
  prompt: OptionalNullable[
@@ -108,7 +119,13 @@ class Responses(BaseSDK):
108
119
  :param max_output_tokens:
109
120
  :param temperature:
110
121
  :param top_p:
122
+ :param top_logprobs:
123
+ :param max_tool_calls:
124
+ :param presence_penalty:
125
+ :param frequency_penalty:
111
126
  :param top_k:
127
+ :param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/features/multimodal/image-generation for more details.
128
+ :param modalities: Output modalities for the response. Supported values are \"text\" and \"image\".
112
129
  :param prompt_cache_key:
113
130
  :param previous_response_id:
114
131
  :param prompt:
@@ -168,7 +185,18 @@ class Responses(BaseSDK):
168
185
  max_output_tokens: OptionalNullable[float] = UNSET,
169
186
  temperature: OptionalNullable[float] = UNSET,
170
187
  top_p: OptionalNullable[float] = UNSET,
188
+ top_logprobs: OptionalNullable[int] = UNSET,
189
+ max_tool_calls: OptionalNullable[int] = UNSET,
190
+ presence_penalty: OptionalNullable[float] = UNSET,
191
+ frequency_penalty: OptionalNullable[float] = UNSET,
171
192
  top_k: Optional[float] = None,
193
+ image_config: Optional[
194
+ Union[
195
+ Dict[str, components.OpenResponsesRequestImageConfig],
196
+ Dict[str, components.OpenResponsesRequestImageConfigTypedDict],
197
+ ]
198
+ ] = None,
199
+ modalities: Optional[List[components.ResponsesOutputModality]] = None,
172
200
  prompt_cache_key: OptionalNullable[str] = UNSET,
173
201
  previous_response_id: OptionalNullable[str] = UNSET,
174
202
  prompt: OptionalNullable[
@@ -219,7 +247,13 @@ class Responses(BaseSDK):
219
247
  :param max_output_tokens:
220
248
  :param temperature:
221
249
  :param top_p:
250
+ :param top_logprobs:
251
+ :param max_tool_calls:
252
+ :param presence_penalty:
253
+ :param frequency_penalty:
222
254
  :param top_k:
255
+ :param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/features/multimodal/image-generation for more details.
256
+ :param modalities: Output modalities for the response. Supported values are \"text\" and \"image\".
223
257
  :param prompt_cache_key:
224
258
  :param previous_response_id:
225
259
  :param prompt:
@@ -278,7 +312,18 @@ class Responses(BaseSDK):
278
312
  max_output_tokens: OptionalNullable[float] = UNSET,
279
313
  temperature: OptionalNullable[float] = UNSET,
280
314
  top_p: OptionalNullable[float] = UNSET,
315
+ top_logprobs: OptionalNullable[int] = UNSET,
316
+ max_tool_calls: OptionalNullable[int] = UNSET,
317
+ presence_penalty: OptionalNullable[float] = UNSET,
318
+ frequency_penalty: OptionalNullable[float] = UNSET,
281
319
  top_k: Optional[float] = None,
320
+ image_config: Optional[
321
+ Union[
322
+ Dict[str, components.OpenResponsesRequestImageConfig],
323
+ Dict[str, components.OpenResponsesRequestImageConfigTypedDict],
324
+ ]
325
+ ] = None,
326
+ modalities: Optional[List[components.ResponsesOutputModality]] = None,
282
327
  prompt_cache_key: OptionalNullable[str] = UNSET,
283
328
  previous_response_id: OptionalNullable[str] = UNSET,
284
329
  prompt: OptionalNullable[
@@ -329,7 +374,13 @@ class Responses(BaseSDK):
329
374
  :param max_output_tokens:
330
375
  :param temperature:
331
376
  :param top_p:
377
+ :param top_logprobs:
378
+ :param max_tool_calls:
379
+ :param presence_penalty:
380
+ :param frequency_penalty:
332
381
  :param top_k:
382
+ :param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/features/multimodal/image-generation for more details.
383
+ :param modalities: Output modalities for the response. Supported values are \"text\" and \"image\".
333
384
  :param prompt_cache_key:
334
385
  :param previous_response_id:
335
386
  :param prompt:
@@ -383,7 +434,13 @@ class Responses(BaseSDK):
383
434
  max_output_tokens=max_output_tokens,
384
435
  temperature=temperature,
385
436
  top_p=top_p,
437
+ top_logprobs=top_logprobs,
438
+ max_tool_calls=max_tool_calls,
439
+ presence_penalty=presence_penalty,
440
+ frequency_penalty=frequency_penalty,
386
441
  top_k=top_k,
442
+ image_config=image_config,
443
+ modalities=modalities,
387
444
  prompt_cache_key=prompt_cache_key,
388
445
  previous_response_id=previous_response_id,
389
446
  prompt=utils.get_pydantic_model(
@@ -633,7 +690,18 @@ class Responses(BaseSDK):
633
690
  max_output_tokens: OptionalNullable[float] = UNSET,
634
691
  temperature: OptionalNullable[float] = UNSET,
635
692
  top_p: OptionalNullable[float] = UNSET,
693
+ top_logprobs: OptionalNullable[int] = UNSET,
694
+ max_tool_calls: OptionalNullable[int] = UNSET,
695
+ presence_penalty: OptionalNullable[float] = UNSET,
696
+ frequency_penalty: OptionalNullable[float] = UNSET,
636
697
  top_k: Optional[float] = None,
698
+ image_config: Optional[
699
+ Union[
700
+ Dict[str, components.OpenResponsesRequestImageConfig],
701
+ Dict[str, components.OpenResponsesRequestImageConfigTypedDict],
702
+ ]
703
+ ] = None,
704
+ modalities: Optional[List[components.ResponsesOutputModality]] = None,
637
705
  prompt_cache_key: OptionalNullable[str] = UNSET,
638
706
  previous_response_id: OptionalNullable[str] = UNSET,
639
707
  prompt: OptionalNullable[
@@ -684,7 +752,13 @@ class Responses(BaseSDK):
684
752
  :param max_output_tokens:
685
753
  :param temperature:
686
754
  :param top_p:
755
+ :param top_logprobs:
756
+ :param max_tool_calls:
757
+ :param presence_penalty:
758
+ :param frequency_penalty:
687
759
  :param top_k:
760
+ :param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/features/multimodal/image-generation for more details.
761
+ :param modalities: Output modalities for the response. Supported values are \"text\" and \"image\".
688
762
  :param prompt_cache_key:
689
763
  :param previous_response_id:
690
764
  :param prompt:
@@ -744,7 +818,18 @@ class Responses(BaseSDK):
744
818
  max_output_tokens: OptionalNullable[float] = UNSET,
745
819
  temperature: OptionalNullable[float] = UNSET,
746
820
  top_p: OptionalNullable[float] = UNSET,
821
+ top_logprobs: OptionalNullable[int] = UNSET,
822
+ max_tool_calls: OptionalNullable[int] = UNSET,
823
+ presence_penalty: OptionalNullable[float] = UNSET,
824
+ frequency_penalty: OptionalNullable[float] = UNSET,
747
825
  top_k: Optional[float] = None,
826
+ image_config: Optional[
827
+ Union[
828
+ Dict[str, components.OpenResponsesRequestImageConfig],
829
+ Dict[str, components.OpenResponsesRequestImageConfigTypedDict],
830
+ ]
831
+ ] = None,
832
+ modalities: Optional[List[components.ResponsesOutputModality]] = None,
748
833
  prompt_cache_key: OptionalNullable[str] = UNSET,
749
834
  previous_response_id: OptionalNullable[str] = UNSET,
750
835
  prompt: OptionalNullable[
@@ -795,7 +880,13 @@ class Responses(BaseSDK):
795
880
  :param max_output_tokens:
796
881
  :param temperature:
797
882
  :param top_p:
883
+ :param top_logprobs:
884
+ :param max_tool_calls:
885
+ :param presence_penalty:
886
+ :param frequency_penalty:
798
887
  :param top_k:
888
+ :param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/features/multimodal/image-generation for more details.
889
+ :param modalities: Output modalities for the response. Supported values are \"text\" and \"image\".
799
890
  :param prompt_cache_key:
800
891
  :param previous_response_id:
801
892
  :param prompt:
@@ -854,7 +945,18 @@ class Responses(BaseSDK):
854
945
  max_output_tokens: OptionalNullable[float] = UNSET,
855
946
  temperature: OptionalNullable[float] = UNSET,
856
947
  top_p: OptionalNullable[float] = UNSET,
948
+ top_logprobs: OptionalNullable[int] = UNSET,
949
+ max_tool_calls: OptionalNullable[int] = UNSET,
950
+ presence_penalty: OptionalNullable[float] = UNSET,
951
+ frequency_penalty: OptionalNullable[float] = UNSET,
857
952
  top_k: Optional[float] = None,
953
+ image_config: Optional[
954
+ Union[
955
+ Dict[str, components.OpenResponsesRequestImageConfig],
956
+ Dict[str, components.OpenResponsesRequestImageConfigTypedDict],
957
+ ]
958
+ ] = None,
959
+ modalities: Optional[List[components.ResponsesOutputModality]] = None,
858
960
  prompt_cache_key: OptionalNullable[str] = UNSET,
859
961
  previous_response_id: OptionalNullable[str] = UNSET,
860
962
  prompt: OptionalNullable[
@@ -905,7 +1007,13 @@ class Responses(BaseSDK):
905
1007
  :param max_output_tokens:
906
1008
  :param temperature:
907
1009
  :param top_p:
1010
+ :param top_logprobs:
1011
+ :param max_tool_calls:
1012
+ :param presence_penalty:
1013
+ :param frequency_penalty:
908
1014
  :param top_k:
1015
+ :param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/features/multimodal/image-generation for more details.
1016
+ :param modalities: Output modalities for the response. Supported values are \"text\" and \"image\".
909
1017
  :param prompt_cache_key:
910
1018
  :param previous_response_id:
911
1019
  :param prompt:
@@ -959,7 +1067,13 @@ class Responses(BaseSDK):
959
1067
  max_output_tokens=max_output_tokens,
960
1068
  temperature=temperature,
961
1069
  top_p=top_p,
1070
+ top_logprobs=top_logprobs,
1071
+ max_tool_calls=max_tool_calls,
1072
+ presence_penalty=presence_penalty,
1073
+ frequency_penalty=frequency_penalty,
962
1074
  top_k=top_k,
1075
+ image_config=image_config,
1076
+ modalities=modalities,
963
1077
  prompt_cache_key=prompt_cache_key,
964
1078
  previous_response_id=previous_response_id,
965
1079
  prompt=utils.get_pydantic_model(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openrouter
3
- Version: 0.0.17
3
+ Version: 0.0.18
4
4
  Summary: Official Python Client SDK for OpenRouter.
5
5
  Author: OpenRouter
6
6
  License: Apache-2.0
@@ -1,10 +1,10 @@
1
1
  openrouter/__init__.py,sha256=w2u919V3Tzv4zEPQ-OYJ79gQ_4_SyW7GOFFoHtqXDFA,401
2
- openrouter/_version.py,sha256=F7clcCg37uc-ilBlKA4_YnWh40Jp0BsQO4nKYsk-y8g,464
2
+ openrouter/_version.py,sha256=Jh_aDXPaoXGa0O6pB2xTqSZp2A055i3g7Q4CxI5ZVWw,464
3
3
  openrouter/analytics.py,sha256=0yULK6M4DpIdOrHCgLF5ZmcbI0oPg7oBUp1Qx5gx2vw,9793
4
4
  openrouter/api_keys.py,sha256=XMPuRMfcf8on6GEjElvNNTszGHYGuMr4YKE9yFrl1js,57682
5
5
  openrouter/basesdk.py,sha256=VhwM2eELTCr-7vgi1MLohTxYmNJurxN0hwhQjJKfOsA,12595
6
6
  openrouter/beta.py,sha256=MzJTf7x1qwLAR2nd5Y4yzD8bIQCOsREEPf8uhwune_U,668
7
- openrouter/chat.py,sha256=djHDJvn8nx8LtjJxM9UgKMNEIKg-5CxXTI6mPz9jvn0,38665
7
+ openrouter/chat.py,sha256=ul2ZAqnmJM3l-UWDp_wPpF1Tl4wzqQkubR-OqgXzuBs,40937
8
8
  openrouter/completions.py,sha256=TB7mb7XSfflk7XtMnys0l5sTI-3RY88xKTWYw1MqdHU,14276
9
9
  openrouter/credits.py,sha256=h1oyFu4FoShOzFNvwHz1_ZKWJeof5Mf5V0A8OIU8Jps,18916
10
10
  openrouter/embeddings.py,sha256=zqbIXUtQIx_e0Zm9qZ2z1Ieo6H5ZX22MyNmA9ZLULfs,24383
@@ -16,31 +16,31 @@ openrouter/oauth.py,sha256=zjmDnnJipJVzM6dqCft5Y73KOtL69rlYPXCXHgXCoTo,21476
16
16
  openrouter/parameters.py,sha256=n5ff0YDwU-iImICpcpLWGGs1zl7OtzFECuE_on9ghig,9630
17
17
  openrouter/providers.py,sha256=UDurmmNvy1y78TGJ8KrxOwx0XY6VGw2n1ZZBv0IOI3U,7414
18
18
  openrouter/py.typed,sha256=zrp19r0G21lr2yRiMC0f8MFkQFGj9wMpSbboePMg8KM,59
19
- openrouter/responses.py,sha256=d_MeaqSzwDhOF2zGuay7G-FnXvsFKYwKJZST57yleJw,53419
19
+ openrouter/responses.py,sha256=uQc9kTnO31IpeEPmC4L0qD6LOGUgUkfQmSO1zBxEalQ,59785
20
20
  openrouter/sdk.py,sha256=e9a8LB2W9ECr6iCKnuzTLsXteyTaFzuGVjL6_8F44TY,9177
21
21
  openrouter/sdkconfiguration.py,sha256=Dy4l6oqgR2cdrWqL7i9nkGmjaWaS7X0m5TeOUDzHc5o,1848
22
22
  openrouter/_hooks/__init__.py,sha256=9_7W5jAYw8rcO8Kfc-Ty-lB82BHfksAJJpVFb_UeU1c,146
23
23
  openrouter/_hooks/registration.py,sha256=1QZB41w6If7I9dXiOSQx6dhSc6BPWrnI5Q5bMOr4iVA,624
24
24
  openrouter/_hooks/sdkhooks.py,sha256=LCCg5knZJaFz4Jo42RY9WAHZRRnDbvUE88sEKhQYXM8,2527
25
25
  openrouter/_hooks/types.py,sha256=ZFfWuTCcAptJH7HnEKcZK7K9ENY9bp6zMPbyLLbzNzQ,2989
26
- openrouter/components/__init__.py,sha256=OhupoEgX4qq3cn1r9mK585AwV4CrZTnOOo0pWdlWgV4,103589
27
- openrouter/components/_schema0.py,sha256=zx1Af9o-sIptU4SVKEEZkMTSFRYLJc0G-_zhvZdarf8,2005
28
- openrouter/components/_schema3.py,sha256=f9sIj2GreV6G9XjtaGliqdxK4vJeeIKSKskMQqJ1K9o,6493
26
+ openrouter/components/__init__.py,sha256=cxRkpDVRy1vWKhjFFuHi8acvxQLtrgrwZOYw8Uz7Vi0,111081
27
+ openrouter/components/_schema0.py,sha256=oyV2mhdJMiPV_ADH5bNcZxEylsfnn5sko2CYK8x9d-8,2023
28
+ openrouter/components/_schema3.py,sha256=G9sb9yrQVMGAet_G7tSdxUDCSz8xAz4VhuY0kBvKP74,6530
29
29
  openrouter/components/activityitem.py,sha256=QYddTlC36y1VMbIviD50Qw8Rt1GODRXMV_iJuotwyNo,1920
30
30
  openrouter/components/assistantmessage.py,sha256=nIiDnOAxDZ4lyauJ946pYf5Wnk0Gi7R0bsoNw2UTLHM,2709
31
31
  openrouter/components/badgatewayresponseerrordata.py,sha256=pojFsYueX95FC7Ic6tiEiphw4fvI9Z6Jax0QUACU-FI,1643
32
32
  openrouter/components/badrequestresponseerrordata.py,sha256=vo3KNC-cwAqaohMTV0ztfnklqWmxpC5VKUZp-3FUoYE,1643
33
33
  openrouter/components/chatcompletionfinishreason.py,sha256=oPpIHQ4HdBIcszyYlbsfPocwGUBZ2EBnwDvvUD_3sPM,367
34
34
  openrouter/components/chaterror.py,sha256=J47w1HLn4kmAxGiz4nVaMMbspoBu3s07-kkmjXaFa80,1733
35
- openrouter/components/chatgenerationparams.py,sha256=YAtJa376ANV-G51PFxrzVI3IgSYqtxr6AdUXSUqviMg,21957
36
- openrouter/components/chatgenerationtokenusage.py,sha256=nvu42A6gxY2W2sSDjg5QocVygD7xzPZtQ8AAOltCwoU,3994
35
+ openrouter/components/chatgenerationparams.py,sha256=WEQXNFcSOlEAVkUUUFN6JMp3LjybFmQUlWI7LGx5Y9w,28197
36
+ openrouter/components/chatgenerationtokenusage.py,sha256=M5rFdUdMfg3d3yj8LQx3sdjtGPhVwcspg8vn9gRdzIs,4085
37
37
  openrouter/components/chatmessagecontentitem.py,sha256=L4luQfVHGUKnkL1w3cd-WuLtdGjY9g32yqKUuZJO7DI,1498
38
38
  openrouter/components/chatmessagecontentitemaudio.py,sha256=w2oedR10YJmBWFlsNkTqqLHt2fZHcK_zfHGV3PxY4xM,1025
39
39
  openrouter/components/chatmessagecontentitemcachecontrol.py,sha256=excB0uceH2xW4JaGnay0V9-_RhBpmzjPxtaFanxneUQ,938
40
40
  openrouter/components/chatmessagecontentitemimage.py,sha256=jBKcmC8ZVVXHv544EnwSOv-5iFFJYWjSNC6ypwD5ydo,1213
41
41
  openrouter/components/chatmessagecontentitemtext.py,sha256=o-MH8YXkQgqGlbxCjfNofc6Nmj_KQej34Gz8c37UsJM,963
42
42
  openrouter/components/chatmessagecontentitemvideo.py,sha256=g0Em43dX0xDVENIavmE0EYPuu5tiM3HLC7yfK8JkQtA,1914
43
- openrouter/components/chatmessagetokenlogprob.py,sha256=LOpaP2pLKkv4avuk8KXKWZlfmLBOAQfwVZqDx0hRRpw,2708
43
+ openrouter/components/chatmessagetokenlogprob.py,sha256=msS-G6Bj2_3DJggKGgXfg_7vGFC9cVcKDw46vCgsNxA,2800
44
44
  openrouter/components/chatmessagetokenlogprobs.py,sha256=HW1f8RM-gUIMf1HxIwlBPZSzfbjMfU57b8KCLqoxWYw,1625
45
45
  openrouter/components/chatmessagetoolcall.py,sha256=lEaBzI74PCCOgwks6NIZzqS3Xir79G9GQhE18TdNmtI,915
46
46
  openrouter/components/chatresponse.py,sha256=u72782C1mRmQdTJtBR3vsTd5U4rf6nEi1m1KC55PGKY,2353
@@ -89,7 +89,7 @@ openrouter/components/openairesponsesresponsestatus.py,sha256=pTo8MQQN5e-qDnkQk1
89
89
  openrouter/components/openairesponsesservicetier.py,sha256=6Fd5GbV_AtTxYhKlpet-NGjpDIKew5URl7ZXMXA0WhY,356
90
90
  openrouter/components/openairesponsestoolchoice_union.py,sha256=TVAKt7bGfpBO2MAJcOYv5MfoUlVlz7zpCcnyXE5NU7I,2045
91
91
  openrouter/components/openairesponsestruncation.py,sha256=9ccpw2WlSSb5ix4dwLr31-NmU5sj0lobvh1EhFHKkgk,303
92
- openrouter/components/openresponseseasyinputmessage.py,sha256=zxO89HFYNI_NKs0sJyPTmdUolxDuXNVWWyT8-lSxoco,3123
92
+ openrouter/components/openresponseseasyinputmessage.py,sha256=kCYckSIsa7W017xqbDHfTRooXzk5jiIoh4vR8AT4ZPw,5236
93
93
  openrouter/components/openresponseserrorevent.py,sha256=5lhw1ff2w_qy8_oENxqNC8MKU9ZCKE5yW58O5xXjH1k,1726
94
94
  openrouter/components/openresponsesfunctioncalloutput.py,sha256=H_H-IREEDsx_Ld5JvYOUM7fVk4K3QinM95lMQZ9H--4,2121
95
95
  openrouter/components/openresponsesfunctiontoolcall.py,sha256=TT_bS94YH6a1T41vEdOwcRm5Rqt_Uy_VhrHzRbAngtg,2072
@@ -97,18 +97,18 @@ openrouter/components/openresponsesimagegencallcompleted.py,sha256=J_H1aGKG5f03P
97
97
  openrouter/components/openresponsesimagegencallgenerating.py,sha256=rjK6L00PTMiLhXHjwUZgomQa7vD6cOb6uQUQ-mwl7oU,774
98
98
  openrouter/components/openresponsesimagegencallinprogress.py,sha256=4X-WqFbmLQj14VzBa353v-518fX6wguvw_wHbn7E-fo,771
99
99
  openrouter/components/openresponsesimagegencallpartialimage.py,sha256=wAMoO2c33D6g3KjbjhZ6CxHY2TjvnLdUq1J62ASqvys,915
100
- openrouter/components/openresponsesinput.py,sha256=jX5v37zM165aVil1jwQt_cn-hLZ65DvvtbijaAVd6fA,3050
101
- openrouter/components/openresponsesinputmessageitem.py,sha256=h3fOAIUhQhidnOxblqKATGFQoMK0O9lYR7U_zjWH3DI,2655
100
+ openrouter/components/openresponsesinput.py,sha256=QAVlWRtMY9dATXsE3F28E3LdQib8iRI1-HHjOPv1C9A,3050
101
+ openrouter/components/openresponsesinputmessageitem.py,sha256=CVbg7djKdWh-3MET_wenGH2rai5Q0npFCPRlUvu8lnE,4738
102
102
  openrouter/components/openresponseslogprobs.py,sha256=p8FHlBBE-LY_jiPlRBKfrlhoqS0jIc8tGtee2WhCcqY,749
103
- openrouter/components/openresponsesnonstreamingresponse.py,sha256=BYEyKJea0egr-08mcs-qlVlfBDarNaCmUJKP8q7Ti7A,10765
104
- openrouter/components/openresponsesreasoning.py,sha256=sntuEIBjgmvILsi8-lHGkQaZEnkF5P4tFDlhJ1ZCkh8,3934
103
+ openrouter/components/openresponsesnonstreamingresponse.py,sha256=h9FZ9957olSww9ASNdd3juFwYCb-CDkKtsIkjwy60Sk,11062
104
+ openrouter/components/openresponsesreasoning.py,sha256=fsfhvHT9JsBuhx38WoCH6byFyDLwn7FhZgRvlY1ciV4,3971
105
105
  openrouter/components/openresponsesreasoningconfig.py,sha256=XpPdnMcm8iAf-cjtdDOBZXqAh8mFzevIHezRYrbnJT4,2366
106
106
  openrouter/components/openresponsesreasoningdeltaevent.py,sha256=08rTivGkzk1m0iiIPWI3nnDWM57GuAtQFtTiPKtPWHE,855
107
107
  openrouter/components/openresponsesreasoningdoneevent.py,sha256=8uaytNWLnKY0zeGcp-JfcDkhSgxpFkZbYuh_P-tTTY8,855
108
108
  openrouter/components/openresponsesreasoningsummarypartaddedevent.py,sha256=XIwRwP2ajJBjFikH5XaHUaWf5arv7XnOeoM-8ADoJns,1053
109
109
  openrouter/components/openresponsesreasoningsummarytextdeltaevent.py,sha256=CENzEhU9hur6ZUekCoiysSRVzfoVIHFK9aXAs5lQ760,940
110
110
  openrouter/components/openresponsesreasoningsummarytextdoneevent.py,sha256=iRWYHS1Men5in-_McPGfGTJtp-mifontwNw6VoKAmME,940
111
- openrouter/components/openresponsesrequest.py,sha256=bza6GElACA40wE_tsB2o42E8F1b9JArf1JPka0JqfTc,28020
111
+ openrouter/components/openresponsesrequest.py,sha256=cJZfWq-B442jCXctAdzsN3YQ6Ze17BycNIWr4kM7s3o,30625
112
112
  openrouter/components/openresponsesresponsetext.py,sha256=EvJncVKeadIuD3qBsjCCc2rpgybVMvsE-U4ZQbWMxX8,2415
113
113
  openrouter/components/openresponsesstreamevent.py,sha256=5A6qa56E3PtEN87rixCMiumQhVbfFcZIoYXA5ILkOeQ,20717
114
114
  openrouter/components/openresponsestoplogprobs.py,sha256=G6evfWbvhl0K_XapnUwN0lB67Z38NJgr6BV1GUssbXU,566
@@ -125,14 +125,19 @@ openrouter/components/payloadtoolargeresponseerrordata.py,sha256=kksPhvoVefVY_sn
125
125
  openrouter/components/paymentrequiredresponseerrordata.py,sha256=rwnrHSbpFug6BjgVPRbgx9eZyxMqwtySBa23PMVk3B8,1663
126
126
  openrouter/components/pdfparserengine.py,sha256=5y5HQKx_Att5KrinQ0ZyGHbSVv2q86LIFxPL-_KpIPk,366
127
127
  openrouter/components/pdfparseroptions.py,sha256=1Y1iPgc4Jazs7R_qrwsVcFoweNMThMfX3VMz1BNYQPw,805
128
+ openrouter/components/percentilelatencycutoffs.py,sha256=JMwinGB5zdNBdjBKjbQEcR6bl7qpDxdllOuLBYXMLpk,2230
129
+ openrouter/components/percentilestats.py,sha256=Aorud1zDH78iQWjETwMaQLFCVLncenM6e-vbbXFn9Fc,1053
130
+ openrouter/components/percentilethroughputcutoffs.py,sha256=oulCCmMPC6CWhZE1U-RKuiIAtZDGruX3vnmjkcp0vLQ,2290
128
131
  openrouter/components/perrequestlimits.py,sha256=_qhdLIdZCGoPP_V874ik7tOIaD4fm0s0F95etZCgpaU,641
129
- openrouter/components/providername.py,sha256=QXfEPxkvag6Rwq-_Adj4z0pw6KKLILfUSd4H1OPtVHg,1638
132
+ openrouter/components/preferredmaxlatency.py,sha256=VeHWgbqmPcv206NMLSR52X3Qv3cRgjb8vx4PLNWbmnA,1224
133
+ openrouter/components/preferredminthroughput.py,sha256=ndCaNjZR1yOPhwfNsTL6-YE_3kh4h25rm_EZNsmcOOc,1282
134
+ openrouter/components/providername.py,sha256=iB0z-fsODZhvvhrRvh_SM6eRQ1rvv_06jUqQ6t2pkJQ,1656
130
135
  openrouter/components/provideroverloadedresponseerrordata.py,sha256=mHwExxgAplc5sL0rJS0x6ajSAs2-Hu16lWy-0UX6BN0,1675
131
- openrouter/components/providerpreferences.py,sha256=Y1fHlMcOwr8USwIAuO-HGbxUvMEPWujS3-5YeD2q1nQ,15370
136
+ openrouter/components/providerpreferences.py,sha256=iGnLzGLm8UGiDRElfOgcPo40h0r1UEm2xsfBH3fagH0,14863
132
137
  openrouter/components/providersort.py,sha256=YfJgDEQpTHK4MyRxlHv4LBdAraAteoOd5DATB_zRjL4,312
133
138
  openrouter/components/providersortconfig.py,sha256=Kigyy9Kd-WmBVEDM5cRErlpwlazLzgxmQpjJUFXzDCQ,1962
134
139
  openrouter/components/providersortunion.py,sha256=keZD3nNkp_UW--H9xn2pwMgMKcQDUd-a4R1wJJKKqfQ,730
135
- openrouter/components/publicendpoint.py,sha256=MsBM-x0Wsk1bn030ITPDM2qjKT0bU-mcflwP8zd7dEc,5506
140
+ openrouter/components/publicendpoint.py,sha256=s4My9R8dRGzlBL8wotZAFdgCqF0c2NE4xk6M-DgdVEk,6288
136
141
  openrouter/components/publicpricing.py,sha256=WNSEiJroJuKy7G9ey-K2xorsBMm1hj6zl1qhOYDK0dU,2703
137
142
  openrouter/components/quantization.py,sha256=1LUfelzKMuC3ZwSpkWOD1ORaNOFcepzMqDHqoYddmNw,398
138
143
  openrouter/components/reasoningsummarytext.py,sha256=qWxNZNRc2mDDKfdLzxYMn8SufkXHipjq5KeDRoWAKHs,458
@@ -146,17 +151,19 @@ openrouter/components/responseinputaudio.py,sha256=4Km_5juNvX_vVErka_jdBDYYXX590
146
151
  openrouter/components/responseinputfile.py,sha256=coTGm0a2-anr4_S9LmMrvPhcW4md4SwCfqLgypw-HD0,1855
147
152
  openrouter/components/responseinputimage.py,sha256=SUXY_W7DFNzRNHJTDZeOsoSdLcKytcfQRNemnO_i1aw,2035
148
153
  openrouter/components/responseinputtext.py,sha256=mnRCinkpQqz9segYFdTcex_PllgWPxMJ3MYScCJIHHI,513
149
- openrouter/components/responseoutputtext.py,sha256=vJZKTAYFGmVaDiva26hJ27SK8vf_Et5e6mincZE-Ooc,728
154
+ openrouter/components/responseinputvideo.py,sha256=3d91YabqUyHr_FmMXt_OzmQF9rWXEDVGnHTVfg3WmfM,677
155
+ openrouter/components/responseoutputtext.py,sha256=TXB26eWyaxeqVzuyphQzPrt7bPAbmlDAKO0bYvi8is0,1459
150
156
  openrouter/components/responseserrorfield.py,sha256=KG3X4nOUD2jNz_Qfse37s-l8f0ui3tDJFJRR-GroEow,1292
151
157
  openrouter/components/responsesformatjsonobject.py,sha256=35NlMHHjC3134fMUp26L_O7R8c2pj6wRlc2f2gaXyL0,533
152
158
  openrouter/components/responsesformattext.py,sha256=rjXcUvQXyrP6fnLazKPxPMT9ojBTADS701tVsXjn-5Q,494
153
159
  openrouter/components/responsesformattextjsonschemaconfig.py,sha256=_SGg5IEMjv05aTX7UA4YKn5P1O4xdwk6TuVHh24Lhno,2011
154
160
  openrouter/components/responsesimagegenerationcall.py,sha256=oJET3kwqCnyFFeai--GF723D0-7c7iNnKxjTt_IQO7o,1892
155
- openrouter/components/responsesoutputitem.py,sha256=qYZ2TzdX1X0mzTWoUhJWNac31v_0TSftxtF_jwz5n0M,2040
161
+ openrouter/components/responsesoutputitem.py,sha256=3pFSVd4SYWnkzf6RKMCy-c_xxWnRq3U-4VNdgLt5n1E,2040
156
162
  openrouter/components/responsesoutputitemfilesearchcall.py,sha256=ou-dka6s-ocLVyJ7qfLBASTWKrUfmT2AjTCCIOttB0c,849
157
163
  openrouter/components/responsesoutputitemfunctioncall.py,sha256=RvuLqQWJTPpy6YUshnI-zg1e3B52H56ADF2k3yYwrfs,1684
158
- openrouter/components/responsesoutputitemreasoning.py,sha256=tMXNoZeteIdukaworDC6YgOMMKOS9vLba-l3poAokrQ,3140
164
+ openrouter/components/responsesoutputitemreasoning.py,sha256=YrSrJ7peaOsOzMO7tltTB-FNP7jz1VrS_PL-hGVrqLI,4344
159
165
  openrouter/components/responsesoutputmessage.py,sha256=chGqzUvf-V6bLSpnbYFKsQ3hbCFQO1jxUYJToIAQz2E,2424
166
+ openrouter/components/responsesoutputmodality.py,sha256=hhGwdhIs-_NE9pJFpZgR0Fwj90i-oGOMLjiffnFlcVM,298
160
167
  openrouter/components/responsessearchcontextsize.py,sha256=vOLimyA8tQU1vBnV8HUxMKuxPZaLh2MVHZJHT6oCYdc,372
161
168
  openrouter/components/responseswebsearchcalloutput.py,sha256=K5e_QNyRMaM4cCNYb9yUm5b1Fbazxc16JBKJ0yo_dPU,770
162
169
  openrouter/components/responseswebsearchuserlocation.py,sha256=ya3YynvWPGPMCg3el4Tc7VeJEVTHpvn7N4D55RfPZvs,2059
@@ -209,7 +216,7 @@ openrouter/operations/deletekeys.py,sha256=_XTN4M6sU22DBdhZVj-4qaCo5k-CWEq1e_Xsp
209
216
  openrouter/operations/exchangeauthcodeforapikey.py,sha256=rRAFH6q21ePf448YCAi1UY3aBFU__xLm4FLkYh-FKpc,3973
210
217
  openrouter/operations/getcredits.py,sha256=AG4qt-dIu5zCu5sjoDC5MYy-zrruDCi01AinqteVuVk,729
211
218
  openrouter/operations/getcurrentkey.py,sha256=NJd5s5QfvZCHjSiUPlS7rZNFm7sBQz1pyTfDmnRe_k0,5955
212
- openrouter/operations/getgeneration.py,sha256=vp1Mp7Bb4TezPuciT8uPS4n42c_3tgaMe9d9HFAxShw,8270
219
+ openrouter/operations/getgeneration.py,sha256=pR3OIZa7NA5dts5VOsCYbGjSOrrC2e7uJoBXS7-ttS4,8471
213
220
  openrouter/operations/getkey.py,sha256=upv7udNsaAILJpqq-L4Mvn971xCts_4nQqzP3zJB9mU,5473
214
221
  openrouter/operations/getmodels.py,sha256=AUooAWNQiSGWrmKhEvelwjX4AdbUgBpFb2qABjAsCTQ,748
215
222
  openrouter/operations/getparameters.py,sha256=qk4xRSQ5h7uTO-rjSH_s0GOtMdm89wam14P1wGyTJqQ,3104
@@ -242,8 +249,8 @@ openrouter/utils/serializers.py,sha256=Hndks5M_rJXVub_N5lu0gKZQUoEmWrn6PN7R-0Hwv
242
249
  openrouter/utils/unmarshal_json_response.py,sha256=glq_wLEH2vSvfMedJOY2dbd5T_z_I4yDxwbBJDI8OjU,875
243
250
  openrouter/utils/url.py,sha256=BgGPgcTA6MRK4bF8fjP2dUopN3NzEzxWMXPBVg8NQUA,5254
244
251
  openrouter/utils/values.py,sha256=CcaCXEa3xHhkUDROyXZocN8f0bdITftv9Y0P9lTf0YM,3517
245
- openrouter-0.0.17.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
246
- openrouter-0.0.17.dist-info/METADATA,sha256=DGzUlEKy68NdfqQwrC8hiT6A-pss6QjESwkjFfUj0ZA,7462
247
- openrouter-0.0.17.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
248
- openrouter-0.0.17.dist-info/top_level.txt,sha256=0jnlCcRirGeYZLm5ZbWQRUonIp4tTPl_9mq-ds_1SEo,11
249
- openrouter-0.0.17.dist-info/RECORD,,
252
+ openrouter-0.0.18.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
253
+ openrouter-0.0.18.dist-info/METADATA,sha256=uoeJW7OnVNqO6aa8GejqCLt2yQ6QeHKTItTALHdt64Q,7462
254
+ openrouter-0.0.18.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
255
+ openrouter-0.0.18.dist-info/top_level.txt,sha256=0jnlCcRirGeYZLm5ZbWQRUonIp4tTPl_9mq-ds_1SEo,11
256
+ openrouter-0.0.18.dist-info/RECORD,,