openrouter 0.0.19__py3-none-any.whl → 0.0.22__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 (61) hide show
  1. openrouter/_version.py +3 -3
  2. openrouter/analytics.py +2 -0
  3. openrouter/api_keys.py +24 -4
  4. openrouter/basesdk.py +6 -0
  5. openrouter/chat.py +154 -14
  6. openrouter/completions.py +2 -0
  7. openrouter/components/__init__.py +156 -61
  8. openrouter/components/_schema0.py +93 -0
  9. openrouter/components/chatcompletionfinishreason.py +17 -0
  10. openrouter/components/chatgenerationparams.py +397 -13
  11. openrouter/components/chatmessagecontentitem.py +1 -1
  12. openrouter/components/chatmessagecontentitemaudio.py +6 -25
  13. openrouter/components/chatmessagecontentitemcachecontrol.py +32 -0
  14. openrouter/components/chatmessagecontentitemtext.py +9 -2
  15. openrouter/components/chatmessagecontentitemvideo.py +9 -5
  16. openrouter/components/chatresponsechoice.py +1 -67
  17. openrouter/components/chatstreamingchoice.py +72 -0
  18. openrouter/components/chatstreamingresponsechunk.py +1 -1
  19. openrouter/components/completionchoice.py +18 -5
  20. openrouter/components/completioncreateparams.py +10 -10
  21. openrouter/components/completionresponse.py +3 -0
  22. openrouter/components/message.py +10 -9
  23. openrouter/components/openairesponsesannotation.py +11 -4
  24. openrouter/components/openairesponsesreasoningeffort.py +1 -0
  25. openrouter/components/openresponsesnonstreamingresponse.py +13 -10
  26. openrouter/components/openresponsesrequest.py +155 -81
  27. openrouter/components/openresponsesstreamevent.py +110 -39
  28. openrouter/components/outputmessage.py +10 -4
  29. openrouter/components/providername.py +8 -1
  30. openrouter/components/publicendpoint.py +49 -49
  31. openrouter/components/publicpricing.py +49 -49
  32. openrouter/components/responseformattextconfig.py +9 -7
  33. openrouter/components/responsesoutputitem.py +12 -10
  34. openrouter/components/responsesoutputmessage.py +10 -5
  35. openrouter/credits.py +4 -0
  36. openrouter/embeddings.py +4 -0
  37. openrouter/endpoints.py +4 -0
  38. openrouter/generations.py +2 -0
  39. openrouter/models/__init__.py +3 -0
  40. openrouter/models/internal/__init__.py +54 -0
  41. openrouter/models/internal/globals.py +41 -0
  42. openrouter/models_.py +6 -0
  43. openrouter/oauth.py +4 -0
  44. openrouter/operations/__init__.py +10 -1
  45. openrouter/operations/createembeddings.py +44 -24
  46. openrouter/operations/getcredits.py +19 -0
  47. openrouter/operations/getparameters.py +8 -1
  48. openrouter/operations/updatekeys.py +2 -2
  49. openrouter/parameters.py +2 -0
  50. openrouter/providers.py +2 -0
  51. openrouter/responses.py +88 -36
  52. openrouter/sdk.py +13 -0
  53. openrouter/sdkconfiguration.py +2 -0
  54. openrouter/utils/forms.py +21 -10
  55. openrouter/utils/queryparams.py +14 -2
  56. openrouter/utils/retries.py +69 -5
  57. {openrouter-0.0.19.dist-info → openrouter-0.0.22.dist-info}/METADATA +1 -1
  58. {openrouter-0.0.19.dist-info → openrouter-0.0.22.dist-info}/RECORD +61 -54
  59. {openrouter-0.0.19.dist-info → openrouter-0.0.22.dist-info}/WHEEL +0 -0
  60. {openrouter-0.0.19.dist-info → openrouter-0.0.22.dist-info}/licenses/LICENSE +0 -0
  61. {openrouter-0.0.19.dist-info → openrouter-0.0.22.dist-info}/top_level.txt +0 -0
@@ -10,6 +10,7 @@ from .httpclient import AsyncHttpClient, HttpClient
10
10
  from .utils import Logger, RetryConfig, remove_suffix
11
11
  from dataclasses import dataclass
12
12
  from openrouter import components
13
+ from openrouter.models import internal
13
14
  from openrouter.types import OptionalNullable, UNSET
14
15
  from pydantic import Field
15
16
  from typing import Callable, Dict, Optional, Tuple, Union
@@ -30,6 +31,7 @@ class SDKConfiguration:
30
31
  async_client: Union[AsyncHttpClient, None]
31
32
  async_client_supplied: bool
32
33
  debug_logger: Logger
34
+ globals: internal.Globals
33
35
  security: Optional[
34
36
  Union[components.Security, Callable[[], components.Security]]
35
37
  ] = None
openrouter/utils/forms.py CHANGED
@@ -142,16 +142,21 @@ def serialize_multipart_form(
142
142
  if field_metadata.file:
143
143
  if isinstance(val, List):
144
144
  # Handle array of files
145
+ array_field_name = f_name + "[]"
145
146
  for file_obj in val:
146
147
  if not _is_set(file_obj):
147
148
  continue
148
-
149
- file_name, content, content_type = _extract_file_properties(file_obj)
149
+
150
+ file_name, content, content_type = _extract_file_properties(
151
+ file_obj
152
+ )
150
153
 
151
154
  if content_type is not None:
152
- files.append((f_name + "[]", (file_name, content, content_type)))
155
+ files.append(
156
+ (array_field_name, (file_name, content, content_type))
157
+ )
153
158
  else:
154
- files.append((f_name + "[]", (file_name, content)))
159
+ files.append((array_field_name, (file_name, content)))
155
160
  else:
156
161
  # Handle single file
157
162
  file_name, content, content_type = _extract_file_properties(val)
@@ -161,11 +166,16 @@ def serialize_multipart_form(
161
166
  else:
162
167
  files.append((f_name, (file_name, content)))
163
168
  elif field_metadata.json:
164
- files.append((f_name, (
165
- None,
166
- marshal_json(val, request_field_types[name]),
167
- "application/json",
168
- )))
169
+ files.append(
170
+ (
171
+ f_name,
172
+ (
173
+ None,
174
+ marshal_json(val, request_field_types[name]),
175
+ "application/json",
176
+ ),
177
+ )
178
+ )
169
179
  else:
170
180
  if isinstance(val, List):
171
181
  values = []
@@ -175,7 +185,8 @@ def serialize_multipart_form(
175
185
  continue
176
186
  values.append(_val_to_string(value))
177
187
 
178
- form[f_name + "[]"] = values
188
+ array_field_name = f_name + "[]"
189
+ form[array_field_name] = values
179
190
  else:
180
191
  form[f_name] = _val_to_string(val)
181
192
  return media_type, form, files
@@ -27,12 +27,13 @@ from .forms import _populate_form
27
27
  def get_query_params(
28
28
  query_params: Any,
29
29
  gbls: Optional[Any] = None,
30
+ allow_empty_value: Optional[List[str]] = None,
30
31
  ) -> Dict[str, List[str]]:
31
32
  params: Dict[str, List[str]] = {}
32
33
 
33
- globals_already_populated = _populate_query_params(query_params, gbls, params, [])
34
+ globals_already_populated = _populate_query_params(query_params, gbls, params, [], allow_empty_value)
34
35
  if _is_set(gbls):
35
- _populate_query_params(gbls, None, params, globals_already_populated)
36
+ _populate_query_params(gbls, None, params, globals_already_populated, allow_empty_value)
36
37
 
37
38
  return params
38
39
 
@@ -42,6 +43,7 @@ def _populate_query_params(
42
43
  gbls: Any,
43
44
  query_param_values: Dict[str, List[str]],
44
45
  skip_fields: List[str],
46
+ allow_empty_value: Optional[List[str]] = None,
45
47
  ) -> List[str]:
46
48
  globals_already_populated: List[str] = []
47
49
 
@@ -69,6 +71,16 @@ def _populate_query_params(
69
71
  globals_already_populated.append(name)
70
72
 
71
73
  f_name = field.alias if field.alias is not None else name
74
+
75
+ allow_empty_set = set(allow_empty_value or [])
76
+ should_include_empty = f_name in allow_empty_set and (
77
+ value is None or value == [] or value == ""
78
+ )
79
+
80
+ if should_include_empty:
81
+ query_param_values[f_name] = [""]
82
+ continue
83
+
72
84
  serialization = metadata.serialization
73
85
  if serialization is not None:
74
86
  serialized_parms = _get_serialized_params(
@@ -3,7 +3,9 @@
3
3
  import asyncio
4
4
  import random
5
5
  import time
6
- from typing import List
6
+ from datetime import datetime
7
+ from email.utils import parsedate_to_datetime
8
+ from typing import List, Optional
7
9
 
8
10
  import httpx
9
11
 
@@ -51,9 +53,11 @@ class Retries:
51
53
 
52
54
  class TemporaryError(Exception):
53
55
  response: httpx.Response
56
+ retry_after: Optional[int]
54
57
 
55
58
  def __init__(self, response: httpx.Response):
56
59
  self.response = response
60
+ self.retry_after = _parse_retry_after_header(response)
57
61
 
58
62
 
59
63
  class PermanentError(Exception):
@@ -63,6 +67,62 @@ class PermanentError(Exception):
63
67
  self.inner = inner
64
68
 
65
69
 
70
+ def _parse_retry_after_header(response: httpx.Response) -> Optional[int]:
71
+ """Parse Retry-After header from response.
72
+
73
+ Returns:
74
+ Retry interval in milliseconds, or None if header is missing or invalid.
75
+ """
76
+ retry_after_header = response.headers.get("retry-after")
77
+ if not retry_after_header:
78
+ return None
79
+
80
+ try:
81
+ seconds = float(retry_after_header)
82
+ return round(seconds * 1000)
83
+ except ValueError:
84
+ pass
85
+
86
+ try:
87
+ retry_date = parsedate_to_datetime(retry_after_header)
88
+ delta = (retry_date - datetime.now(retry_date.tzinfo)).total_seconds()
89
+ return round(max(0, delta) * 1000)
90
+ except (ValueError, TypeError):
91
+ pass
92
+
93
+ return None
94
+
95
+
96
+ def _get_sleep_interval(
97
+ exception: Exception,
98
+ initial_interval: int,
99
+ max_interval: int,
100
+ exponent: float,
101
+ retries: int,
102
+ ) -> float:
103
+ """Get sleep interval for retry with exponential backoff.
104
+
105
+ Args:
106
+ exception: The exception that triggered the retry.
107
+ initial_interval: Initial retry interval in milliseconds.
108
+ max_interval: Maximum retry interval in milliseconds.
109
+ exponent: Base for exponential backoff calculation.
110
+ retries: Current retry attempt count.
111
+
112
+ Returns:
113
+ Sleep interval in seconds.
114
+ """
115
+ if (
116
+ isinstance(exception, TemporaryError)
117
+ and exception.retry_after is not None
118
+ and exception.retry_after > 0
119
+ ):
120
+ return exception.retry_after / 1000
121
+
122
+ sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1)
123
+ return min(sleep, max_interval / 1000)
124
+
125
+
66
126
  def retry(func, retries: Retries):
67
127
  if retries.config.strategy == "backoff":
68
128
 
@@ -183,8 +243,10 @@ def retry_with_backoff(
183
243
  return exception.response
184
244
 
185
245
  raise
186
- sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1)
187
- sleep = min(sleep, max_interval / 1000)
246
+
247
+ sleep = _get_sleep_interval(
248
+ exception, initial_interval, max_interval, exponent, retries
249
+ )
188
250
  time.sleep(sleep)
189
251
  retries += 1
190
252
 
@@ -211,7 +273,9 @@ async def retry_with_backoff_async(
211
273
  return exception.response
212
274
 
213
275
  raise
214
- sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1)
215
- sleep = min(sleep, max_interval / 1000)
276
+
277
+ sleep = _get_sleep_interval(
278
+ exception, initial_interval, max_interval, exponent, retries
279
+ )
216
280
  await asyncio.sleep(sleep)
217
281
  retries += 1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openrouter
3
- Version: 0.0.19
3
+ Version: 0.0.22
4
4
  Summary: Official Python Client SDK for OpenRouter.
5
5
  Author: OpenRouter
6
6
  License: Apache-2.0
@@ -1,54 +1,58 @@
1
1
  openrouter/__init__.py,sha256=w2u919V3Tzv4zEPQ-OYJ79gQ_4_SyW7GOFFoHtqXDFA,401
2
- openrouter/_version.py,sha256=kLMA8dEH1gvbaZv9KiEG6lFyhKBeTyWY9Lhnr6uH4UI,464
3
- openrouter/analytics.py,sha256=fzxJSr3HBmiWLYe_UOdsl_WpaJG7vwxJaZTC66UJEPA,9721
4
- openrouter/api_keys.py,sha256=lSwv9L_xgWVb6qco7mAwPaSnlJ_lo4Jlev-bkgp3m8w,57088
5
- openrouter/basesdk.py,sha256=A-YAEwrsQAFwE193kKxOg8W9lsST4zlH8YKDTqMzDkM,12333
2
+ openrouter/_version.py,sha256=uAc5ru6tdMIDNZqQtO4q2uOAaoZsJ6Brz4-RKOWhVds,464
3
+ openrouter/analytics.py,sha256=0yULK6M4DpIdOrHCgLF5ZmcbI0oPg7oBUp1Qx5gx2vw,9793
4
+ openrouter/api_keys.py,sha256=XMPuRMfcf8on6GEjElvNNTszGHYGuMr4YKE9yFrl1js,57682
5
+ openrouter/basesdk.py,sha256=VhwM2eELTCr-7vgi1MLohTxYmNJurxN0hwhQjJKfOsA,12595
6
6
  openrouter/beta.py,sha256=MzJTf7x1qwLAR2nd5Y4yzD8bIQCOsREEPf8uhwune_U,668
7
- openrouter/chat.py,sha256=2dFoQ4PFAZ9QqvmSMzEBisa3l2DFL6vwHwqeaki70YY,30941
8
- openrouter/completions.py,sha256=VDcrnsOrZ-AcQByV1HmufsQ7A4xyFEiuzQ5Hnzgmdu4,14204
9
- openrouter/credits.py,sha256=gaVD-KBR7WvJTvdtz3eKjXmrP-LGCjehYWHthq3hkpU,18772
10
- openrouter/embeddings.py,sha256=lTv0Y5A5sPtuOOB-PGaP-0Hl_gWhjn6RTeJntEiCQQA,24211
11
- openrouter/endpoints.py,sha256=Ifs_oM1mRlWb4D17qAi9dZwEDZeKpywGaEPb_ju6wzo,15376
12
- openrouter/generations.py,sha256=5ZVXEFLLZXC2nATJ-VFge4bpzpliW0ar_qipPqq1BVA,12020
7
+ openrouter/chat.py,sha256=UhcHuG_ExmS79AmRj729xroHmQq0NR7NBSZdxW0VE1k,39709
8
+ openrouter/completions.py,sha256=TB7mb7XSfflk7XtMnys0l5sTI-3RY88xKTWYw1MqdHU,14276
9
+ openrouter/credits.py,sha256=h1oyFu4FoShOzFNvwHz1_ZKWJeof5Mf5V0A8OIU8Jps,18916
10
+ openrouter/embeddings.py,sha256=91Ug5KhHCduhJGLqn2vlhyUPXXSMsSha-4y15OQ6EzA,24355
11
+ openrouter/endpoints.py,sha256=z50tI4vJbF6Sbq9_rKdKWIxmU1MYOfKau2K8GNnxInY,15520
12
+ openrouter/generations.py,sha256=sOwPS56RWFLLVaeher1gLoYhdQLa0BcZ-TBwQsmtEAU,12092
13
13
  openrouter/httpclient.py,sha256=dqTPONDBpRn4ktXfcetQiRXnG93f0pJkFhqsYFhLUac,3945
14
- openrouter/models_.py,sha256=8_dqs_2zCdiG52q0fzICo3dOgBXf0xTXhs7HaN8NMLQ,23223
15
- openrouter/oauth.py,sha256=Tu0Wec3rSdE6GlacXJClWmV496Kl8ZVxfPd6yswU6h4,21332
16
- openrouter/parameters.py,sha256=HH5N8IuyAKHScwaYwbdC14OD52AMd4BrNHjlXpZhGlE,9576
17
- openrouter/providers.py,sha256=fiM6jch1DZyTd940GuP4Swy8obL8MjCrLCfraDICs8c,7342
14
+ openrouter/models_.py,sha256=0NICD1xFjvRVzeQhNsWR26g9yEprZLyQNDhbQz5z9lI,23439
15
+ openrouter/oauth.py,sha256=zjmDnnJipJVzM6dqCft5Y73KOtL69rlYPXCXHgXCoTo,21476
16
+ openrouter/parameters.py,sha256=DNE-FBjsaYBVAyPVBZNSAtbD9qK_LKhC5jkYsjGN-ZY,9648
17
+ openrouter/providers.py,sha256=UDurmmNvy1y78TGJ8KrxOwx0XY6VGw2n1ZZBv0IOI3U,7414
18
18
  openrouter/py.typed,sha256=zrp19r0G21lr2yRiMC0f8MFkQFGj9wMpSbboePMg8KM,59
19
- openrouter/responses.py,sha256=CY3eFV95wHh9CSjwtVQrWDYO0iWtbROO8nzoN7bJsXY,50759
20
- openrouter/sdk.py,sha256=GEj_sKoLCrmrqBoapA3MHT2rR0cNni-to6totkL_ChY,8580
21
- openrouter/sdkconfiguration.py,sha256=DYi0lV9re_2Ej-cNaYDBAMVBbpFL9HlLZrXdbraZ7J4,1779
19
+ openrouter/responses.py,sha256=xCGMWZacnSbaCkmsflMtztU3xpCyGjhdRZquCL8MP3c,54999
20
+ openrouter/sdk.py,sha256=e9a8LB2W9ECr6iCKnuzTLsXteyTaFzuGVjL6_8F44TY,9177
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=8yBdcYVLrqS-Ijdn_grzHC88MllWk111EAJhLxX5KAY,93598
26
+ openrouter/components/__init__.py,sha256=CX4x2gUaMKtdllZ3GpK8lKE8uQEknVMkIyAB11jBYCE,99191
27
+ openrouter/components/_schema0.py,sha256=zx1Af9o-sIptU4SVKEEZkMTSFRYLJc0G-_zhvZdarf8,2005
27
28
  openrouter/components/activityitem.py,sha256=QYddTlC36y1VMbIviD50Qw8Rt1GODRXMV_iJuotwyNo,1920
28
29
  openrouter/components/assistantmessage.py,sha256=nIiDnOAxDZ4lyauJ946pYf5Wnk0Gi7R0bsoNw2UTLHM,2709
29
30
  openrouter/components/badgatewayresponseerrordata.py,sha256=pojFsYueX95FC7Ic6tiEiphw4fvI9Z6Jax0QUACU-FI,1643
30
31
  openrouter/components/badrequestresponseerrordata.py,sha256=vo3KNC-cwAqaohMTV0ztfnklqWmxpC5VKUZp-3FUoYE,1643
32
+ openrouter/components/chatcompletionfinishreason.py,sha256=oPpIHQ4HdBIcszyYlbsfPocwGUBZ2EBnwDvvUD_3sPM,367
31
33
  openrouter/components/chaterror.py,sha256=J47w1HLn4kmAxGiz4nVaMMbspoBu3s07-kkmjXaFa80,1733
32
- openrouter/components/chatgenerationparams.py,sha256=CtNXP3hzS03ABEclQgVM8UM40Lb-HP3NyNv1683kRSk,8494
34
+ openrouter/components/chatgenerationparams.py,sha256=F23HDWMPA3b_gHgqQyGqBzkaNTpyuxoS8yYTsdsC_hI,22933
33
35
  openrouter/components/chatgenerationtokenusage.py,sha256=nvu42A6gxY2W2sSDjg5QocVygD7xzPZtQ8AAOltCwoU,3994
34
- openrouter/components/chatmessagecontentitem.py,sha256=Jk-pa-wiiPYyg1vAiWUXG-9OrIcrtH7Q13pyMAjTaW0,1498
35
- openrouter/components/chatmessagecontentitemaudio.py,sha256=h0b3xbaZHMs_38QpZW7xK6oONQwkf2w5R4ZFTUtGCXA,1442
36
+ openrouter/components/chatmessagecontentitem.py,sha256=L4luQfVHGUKnkL1w3cd-WuLtdGjY9g32yqKUuZJO7DI,1498
37
+ openrouter/components/chatmessagecontentitemaudio.py,sha256=w2oedR10YJmBWFlsNkTqqLHt2fZHcK_zfHGV3PxY4xM,1025
38
+ openrouter/components/chatmessagecontentitemcachecontrol.py,sha256=excB0uceH2xW4JaGnay0V9-_RhBpmzjPxtaFanxneUQ,938
36
39
  openrouter/components/chatmessagecontentitemimage.py,sha256=jBKcmC8ZVVXHv544EnwSOv-5iFFJYWjSNC6ypwD5ydo,1213
37
- openrouter/components/chatmessagecontentitemtext.py,sha256=XKqQlLfWo1pbymILqeR23CIKWDre42VFE35hVtKOFnM,651
38
- openrouter/components/chatmessagecontentitemvideo.py,sha256=YGftkBWQmvs5j1OrxnFKjIqYC5pi3HcB_Qa4xjbfqJI,1744
40
+ openrouter/components/chatmessagecontentitemtext.py,sha256=o-MH8YXkQgqGlbxCjfNofc6Nmj_KQej34Gz8c37UsJM,963
41
+ openrouter/components/chatmessagecontentitemvideo.py,sha256=g0Em43dX0xDVENIavmE0EYPuu5tiM3HLC7yfK8JkQtA,1914
39
42
  openrouter/components/chatmessagetokenlogprob.py,sha256=LOpaP2pLKkv4avuk8KXKWZlfmLBOAQfwVZqDx0hRRpw,2708
40
43
  openrouter/components/chatmessagetokenlogprobs.py,sha256=HW1f8RM-gUIMf1HxIwlBPZSzfbjMfU57b8KCLqoxWYw,1625
41
44
  openrouter/components/chatmessagetoolcall.py,sha256=lEaBzI74PCCOgwks6NIZzqS3Xir79G9GQhE18TdNmtI,915
42
45
  openrouter/components/chatresponse.py,sha256=u72782C1mRmQdTJtBR3vsTd5U4rf6nEi1m1KC55PGKY,2353
43
- openrouter/components/chatresponsechoice.py,sha256=6AZs786hf6IMANmwJmzjmz591INPm9zE6hr3gLYaJHk,3857
46
+ openrouter/components/chatresponsechoice.py,sha256=rXANO0ovX3ow9W4i4AG7lyAQHzHVR-YasGcjc-txiSg,2121
47
+ openrouter/components/chatstreamingchoice.py,sha256=xpHEEYnNtm3eO8pJmJb6VBHU1LEFQ02dUbZA3ZFZ_a4,2177
44
48
  openrouter/components/chatstreamingmessagechunk.py,sha256=WYWJKPKpII6ffV5Z8OlKN9xfB-hkVUl1Xss3Dqn7Lbw,2125
45
49
  openrouter/components/chatstreamingmessagetoolcall.py,sha256=eTp291e9xwR6yCRQ_DPjfrgUGqbg2B0piNtxTfycYe8,1179
46
- openrouter/components/chatstreamingresponsechunk.py,sha256=ZYSVObkVYQDv1WZrHqxvk08fwCArX4ABd82KEis_Apc,2926
50
+ openrouter/components/chatstreamingresponsechunk.py,sha256=cK3D1eTMB_F54Oh6bwB2rj2ODvulOH1uK6tCjU7QN3U,2927
47
51
  openrouter/components/chatstreamoptions.py,sha256=b8fwrfV7bPoX9CxoPCUuyn1_T9V5N42GrWJQCXRR63g,391
48
- openrouter/components/completionchoice.py,sha256=_ujGZTziW9Z7EsF2tO-eK1PWe07N891qv4CpBQ92SlE,1970
49
- openrouter/components/completioncreateparams.py,sha256=ojd7PoUIgkaoly5Dy4IFTMyC2_pZ3xVI5yYbMacq9RA,7876
52
+ openrouter/components/completionchoice.py,sha256=GXS8sDYUN2Sebb8fCSlh-VgVoY4goJqeR-2OvZdkgOE,2274
53
+ openrouter/components/completioncreateparams.py,sha256=W4dzWu6RmEReeHwapP4EZ-sqaH15KYjHJjUNqiCeTVY,8068
50
54
  openrouter/components/completionlogprobs.py,sha256=rfOxgVXfnOV82BkpkHQEoBHY6h5-3hoVzZilWyH9Gzw,1545
51
- openrouter/components/completionresponse.py,sha256=m6cNk5yOfFSsXmOmBJ9IV26jO6AK4HI1_KEbF5laCfs,1223
55
+ openrouter/components/completionresponse.py,sha256=Q_-Je-7LCU_kYlF44k2vL64wFupez0vv8AUwFHfx0wo,1290
52
56
  openrouter/components/completionusage.py,sha256=VeguE0iCocTv5wnXujcr2jy2Pug6YVkAGle3DAWp9ws,426
53
57
  openrouter/components/createchargerequest.py,sha256=Fc-tjZWAQeaZddgM_m6PUWlfvAin2Gdr_NRqqsPyeA8,823
54
58
  openrouter/components/datacollection.py,sha256=M0shLYdzgusCOAp6fBzqkpuk12piWejQMH_dLpuzD7M,564
@@ -64,7 +68,7 @@ openrouter/components/instructtype.py,sha256=mWr5X7bjGHlDXV9i6tMNGcxI27p5MOwhPqR
64
68
  openrouter/components/internalserverresponseerrordata.py,sha256=6BtoI6QZNZjdrC4tM3Q1U2-6PIIBAdYBHa1JdmZRdiE,1659
65
69
  openrouter/components/jsonschemaconfig.py,sha256=PfJ7Z5TbDlgwtVCqoJGCes96ivhxk9EdbVnm-mSf5XM,1711
66
70
  openrouter/components/listendpointsresponse.py,sha256=rtdM6ZHtxnNQJNx0IPINoqiosu50nIkFUfEM8l70g6A,4026
67
- openrouter/components/message.py,sha256=xR9RRvm9BgmXef0Riyo5pJxgfY_FlRJXWUdY2Sh8MRg,1866
71
+ openrouter/components/message.py,sha256=Xw75z4vPJN4O-POrIThRUoKYrYMbrvnj6MVf87DMDWo,2105
68
72
  openrouter/components/model.py,sha256=hG9IzmCQEQaJjlykSEyG6lT8myZmJYBmsKSD18a7SaI,4299
69
73
  openrouter/components/modelarchitecture.py,sha256=IBeSVEv4PzulcY7nATFb_886Hj5NnnIolryqe7ytBOc,3405
70
74
  openrouter/components/modelgroup.py,sha256=hN2VH_hksubq8YoOlr320yFTnAVE72Ubo6PKPPq4LEQ,617
@@ -72,13 +76,13 @@ openrouter/components/modelscountresponse.py,sha256=Y29-2jbyoT9-kDJiALNzLzC0Sp_u
72
76
  openrouter/components/modelslistresponse.py,sha256=OuooH3wJd-uzStN7bTWoYSyFOppEhvA8TiabHjmxx20,538
73
77
  openrouter/components/namedtoolchoice.py,sha256=UddzhENYc6B6bUnxPCqA4iqOyw33Zhc8C0Zb3_8il3U,827
74
78
  openrouter/components/notfoundresponseerrordata.py,sha256=MZCphi3GBTXbb-s7NmhLmc6lxH4vSLcjV6UAScoI8-o,1635
75
- openrouter/components/openairesponsesannotation.py,sha256=MIEaHALCXZYJjEWaYpimPIGXo0axbvjEp2SV4puUIpw,644
79
+ openrouter/components/openairesponsesannotation.py,sha256=PKm5Pl0rjHrTi7tZh4KVw-VGelpvsptzmcV1QLaE92M,902
76
80
  openrouter/components/openairesponsesincludable.py,sha256=SvIzHnJ9bSOU8F30s8hbUfE2-YCMerRneyOT5C-DRYk,473
77
81
  openrouter/components/openairesponsesincompletedetails.py,sha256=FZaKZE4f6ryvDba7jChfXSRO_8KUkr9Vjj4QwYkt7PE,747
78
82
  openrouter/components/openairesponsesinput_union.py,sha256=WItKe1RteSuaxAUxmsB_XrEarfllddf190g48eYNGXA,9148
79
83
  openrouter/components/openairesponsesprompt.py,sha256=Z2dZ1-ZehXXwiKr0pcSMcwmMSszZ90JSQRuH8o_m4-Y,2079
80
84
  openrouter/components/openairesponsesreasoningconfig.py,sha256=1Wwb1eA1tTHzWZQtZYP5b_x5TJdIc-ftXh6ywtqQuM8,2018
81
- openrouter/components/openairesponsesreasoningeffort.py,sha256=696FQdRVocyvo5JIneI51Ylfk5XCJjHrSiNqEV2ZlS0,356
85
+ openrouter/components/openairesponsesreasoningeffort.py,sha256=3hp6Wx7_fzWf9PjPhMepdZdfmOEAt4iKmTpditov35s,373
82
86
  openrouter/components/openairesponsesrefusalcontent.py,sha256=Y5KQD2-rLr4lv-C9-NKeJZsmoKYW6C_oq-Lch_4Zndc,504
83
87
  openrouter/components/openairesponsesresponsestatus.py,sha256=pTo8MQQN5e-qDnkQk15YLX4xse0giYEO8qQ2QWjjb3c,394
84
88
  openrouter/components/openairesponsesservicetier.py,sha256=6Fd5GbV_AtTxYhKlpet-NGjpDIKew5URl7ZXMXA0WhY,356
@@ -95,7 +99,7 @@ openrouter/components/openresponsesimagegencallpartialimage.py,sha256=wAMoO2c33D
95
99
  openrouter/components/openresponsesinput.py,sha256=jX5v37zM165aVil1jwQt_cn-hLZ65DvvtbijaAVd6fA,3050
96
100
  openrouter/components/openresponsesinputmessageitem.py,sha256=h3fOAIUhQhidnOxblqKATGFQoMK0O9lYR7U_zjWH3DI,2655
97
101
  openrouter/components/openresponseslogprobs.py,sha256=p8FHlBBE-LY_jiPlRBKfrlhoqS0jIc8tGtee2WhCcqY,749
98
- openrouter/components/openresponsesnonstreamingresponse.py,sha256=9XEZ69LuJx_2qrbNqVj5RYU2oX3zBieEmjlWlCj9OMY,10492
102
+ openrouter/components/openresponsesnonstreamingresponse.py,sha256=BYEyKJea0egr-08mcs-qlVlfBDarNaCmUJKP8q7Ti7A,10765
99
103
  openrouter/components/openresponsesreasoning.py,sha256=sntuEIBjgmvILsi8-lHGkQaZEnkF5P4tFDlhJ1ZCkh8,3934
100
104
  openrouter/components/openresponsesreasoningconfig.py,sha256=XpPdnMcm8iAf-cjtdDOBZXqAh8mFzevIHezRYrbnJT4,2366
101
105
  openrouter/components/openresponsesreasoningdeltaevent.py,sha256=08rTivGkzk1m0iiIPWI3nnDWM57GuAtQFtTiPKtPWHE,855
@@ -103,9 +107,9 @@ openrouter/components/openresponsesreasoningdoneevent.py,sha256=8uaytNWLnKY0zeGc
103
107
  openrouter/components/openresponsesreasoningsummarypartaddedevent.py,sha256=XIwRwP2ajJBjFikH5XaHUaWf5arv7XnOeoM-8ADoJns,1053
104
108
  openrouter/components/openresponsesreasoningsummarytextdeltaevent.py,sha256=CENzEhU9hur6ZUekCoiysSRVzfoVIHFK9aXAs5lQ760,940
105
109
  openrouter/components/openresponsesreasoningsummarytextdoneevent.py,sha256=iRWYHS1Men5in-_McPGfGTJtp-mifontwNw6VoKAmME,940
106
- openrouter/components/openresponsesrequest.py,sha256=uOXyNkVzl05m9Fo-GudtO0KX5feIufkcz8CYM9gY5dg,22021
110
+ openrouter/components/openresponsesrequest.py,sha256=nVdsUZa3d0ULaXIFEXYxOStVG9hXy8mu34MYY7H_ads,26563
107
111
  openrouter/components/openresponsesresponsetext.py,sha256=EvJncVKeadIuD3qBsjCCc2rpgybVMvsE-U4ZQbWMxX8,2415
108
- openrouter/components/openresponsesstreamevent.py,sha256=j1Mz3sotIY_RydKtRfC9V-3EPgB6UGNG3V8hjjTgCzQ,18224
112
+ openrouter/components/openresponsesstreamevent.py,sha256=5A6qa56E3PtEN87rixCMiumQhVbfFcZIoYXA5ILkOeQ,20717
109
113
  openrouter/components/openresponsestoplogprobs.py,sha256=G6evfWbvhl0K_XapnUwN0lB67Z38NJgr6BV1GUssbXU,566
110
114
  openrouter/components/openresponsesusage.py,sha256=es0cr2zM1W9YMTdIlSrOsnShYn4lluHS4OKmOsMW_8Q,3877
111
115
  openrouter/components/openresponseswebsearch20250826tool.py,sha256=tMNWgY5CZOf987Kcm8VKykXpqp0u3txA8bu5G8Fgh4Y,3980
@@ -113,24 +117,24 @@ openrouter/components/openresponseswebsearchpreview20250311tool.py,sha256=BPG7yC
113
117
  openrouter/components/openresponseswebsearchpreviewtool.py,sha256=Wn8hzIZPsCkCWhytK55VYYsmmw7Q-mNnWTC_j9wEmqo,2485
114
118
  openrouter/components/openresponseswebsearchtool.py,sha256=0JVWrgSNw1u6SurGWZNQaMG9UrtYGOG7wA9KE3auiZE,3855
115
119
  openrouter/components/outputitemimagegenerationcall.py,sha256=KdCl0dpLsV2cxXPqAovbXXspFz-y4Y0ygRgvmzvMB5g,1897
116
- openrouter/components/outputmessage.py,sha256=qMZ1Ty9LdrfVMs51cpSyapTqPs51rTD_GXmobTpLv5I,1883
120
+ openrouter/components/outputmessage.py,sha256=262rM0JS75dP_TPRiUKM8HhAmo9T9MV0Rl_DxXkYfKQ,2102
117
121
  openrouter/components/outputmodality.py,sha256=xhd85lcYNR8kBOMPbfXvHHHZO_yYHYtwYpvIKS6MW1M,311
118
122
  openrouter/components/parameter.py,sha256=ffPZ8lvlReTST8pTkyDyJVvLTOT0VxqVYktbSX_ulGE,778
119
123
  openrouter/components/payloadtoolargeresponseerrordata.py,sha256=kksPhvoVefVY_snEVvP37TEh_TlZd_fCYft0T8RA5Pc,1663
120
124
  openrouter/components/paymentrequiredresponseerrordata.py,sha256=rwnrHSbpFug6BjgVPRbgx9eZyxMqwtySBa23PMVk3B8,1663
121
125
  openrouter/components/perrequestlimits.py,sha256=_qhdLIdZCGoPP_V874ik7tOIaD4fm0s0F95etZCgpaU,641
122
- openrouter/components/providername.py,sha256=36Vsbd_OnTwTPJFnAkqEuAcoN-XhkLkWlQVIVFpDKDc,1495
126
+ openrouter/components/providername.py,sha256=QXfEPxkvag6Rwq-_Adj4z0pw6KKLILfUSd4H1OPtVHg,1638
123
127
  openrouter/components/provideroverloadedresponseerrordata.py,sha256=mHwExxgAplc5sL0rJS0x6ajSAs2-Hu16lWy-0UX6BN0,1675
124
128
  openrouter/components/providersort.py,sha256=wseCudRZlwH_oL9cEbxZAcrpB-NiS-ZM36rz9_cG0rg,438
125
- openrouter/components/publicendpoint.py,sha256=yXNmXUf5obvhxgFvMqpd9Zs5Vr9Rl7mQiAVVdzXdDlk,5751
126
- openrouter/components/publicpricing.py,sha256=0VlMzB_GPNoNLeJtgH8fUdPTorWqWoZlLNy2_bp9KwA,2948
129
+ openrouter/components/publicendpoint.py,sha256=MsBM-x0Wsk1bn030ITPDM2qjKT0bU-mcflwP8zd7dEc,5506
130
+ openrouter/components/publicpricing.py,sha256=WNSEiJroJuKy7G9ey-K2xorsBMm1hj6zl1qhOYDK0dU,2703
127
131
  openrouter/components/quantization.py,sha256=1LUfelzKMuC3ZwSpkWOD1ORaNOFcepzMqDHqoYddmNw,398
128
132
  openrouter/components/reasoningsummarytext.py,sha256=qWxNZNRc2mDDKfdLzxYMn8SufkXHipjq5KeDRoWAKHs,458
129
133
  openrouter/components/reasoningsummaryverbosity.py,sha256=gWBgfnfwZH1Iq7iYH8UtDpXtP9_Hm6fJxKwZ_tZDZlo,322
130
134
  openrouter/components/reasoningtextcontent.py,sha256=Gzwq-VaWqaOgrpDoX1PVI1gt0otxihahfe-nYLKkmoo,460
131
135
  openrouter/components/requesttimeoutresponseerrordata.py,sha256=3e3u6xPbIQwOum5YmJW9FLXa4etzxjKm4bq6xKGJFMY,1659
132
136
  openrouter/components/responseformatjsonschema.py,sha256=K4mwkL7L5WxfmEcvzoSTLp6N-AFRUmVYa2FP2ljakjc,820
133
- openrouter/components/responseformattextconfig.py,sha256=W4jDDyhojQHc9mrLsC-P8330Uz1M8iiJ7A6SbIbHb-g,1057
137
+ openrouter/components/responseformattextconfig.py,sha256=yh3y9bCkrS7gQukbx7c308qA15zjdAb_fBFLr1lv_q4,1272
134
138
  openrouter/components/responseformattextgrammar.py,sha256=Q2DPRH3Wksm3MO7QLuWeWSa2jA3wwjlr5MkVmSn7icU,667
135
139
  openrouter/components/responseinputaudio.py,sha256=4Km_5juNvX_vVErka_jdBDYYXX590lpPsKy-hRSHRRo,1192
136
140
  openrouter/components/responseinputfile.py,sha256=coTGm0a2-anr4_S9LmMrvPhcW4md4SwCfqLgypw-HD0,1855
@@ -142,11 +146,11 @@ openrouter/components/responsesformatjsonobject.py,sha256=35NlMHHjC3134fMUp26L_O
142
146
  openrouter/components/responsesformattext.py,sha256=rjXcUvQXyrP6fnLazKPxPMT9ojBTADS701tVsXjn-5Q,494
143
147
  openrouter/components/responsesformattextjsonschemaconfig.py,sha256=_SGg5IEMjv05aTX7UA4YKn5P1O4xdwk6TuVHh24Lhno,2011
144
148
  openrouter/components/responsesimagegenerationcall.py,sha256=oJET3kwqCnyFFeai--GF723D0-7c7iNnKxjTt_IQO7o,1892
145
- openrouter/components/responsesoutputitem.py,sha256=vPOurVc183W_4fOXQX1ayNFJoz6HDkSsrgN5QCkBOjc,1705
149
+ openrouter/components/responsesoutputitem.py,sha256=qYZ2TzdX1X0mzTWoUhJWNac31v_0TSftxtF_jwz5n0M,2040
146
150
  openrouter/components/responsesoutputitemfilesearchcall.py,sha256=ou-dka6s-ocLVyJ7qfLBASTWKrUfmT2AjTCCIOttB0c,849
147
151
  openrouter/components/responsesoutputitemfunctioncall.py,sha256=RvuLqQWJTPpy6YUshnI-zg1e3B52H56ADF2k3yYwrfs,1684
148
152
  openrouter/components/responsesoutputitemreasoning.py,sha256=tMXNoZeteIdukaworDC6YgOMMKOS9vLba-l3poAokrQ,3140
149
- openrouter/components/responsesoutputmessage.py,sha256=R6Gh7-lFHgicMxT1oFcGgaS24xRZ1og163QrEKpQiLk,2219
153
+ openrouter/components/responsesoutputmessage.py,sha256=chGqzUvf-V6bLSpnbYFKsQ3hbCFQO1jxUYJToIAQz2E,2424
150
154
  openrouter/components/responsessearchcontextsize.py,sha256=vOLimyA8tQU1vBnV8HUxMKuxPZaLh2MVHZJHT6oCYdc,372
151
155
  openrouter/components/responseswebsearchcalloutput.py,sha256=K5e_QNyRMaM4cCNYb9yUm5b1Fbazxc16JBKJ0yo_dPU,770
152
156
  openrouter/components/responseswebsearchuserlocation.py,sha256=ya3YynvWPGPMCg3el4Tc7VeJEVTHpvn7N4D55RfPZvs,2059
@@ -185,20 +189,23 @@ openrouter/errors/serviceunavailableresponse_error.py,sha256=4EyyLOwAcn3vRh8jUjQ
185
189
  openrouter/errors/toomanyrequestsresponse_error.py,sha256=Hc9WBP8MSX7-rXNPzg52_8RhSCnEsXMA3JQIytORlik,1219
186
190
  openrouter/errors/unauthorizedresponse_error.py,sha256=g25pLdBp9XbCanNkTNnS3X6EPIi6wX4kUWjCRBrfuPQ,1214
187
191
  openrouter/errors/unprocessableentityresponse_error.py,sha256=uepXefHSgB1-5HS3A3dMJGeorsd8JE4PKmV5vH68OQ4,1266
188
- openrouter/operations/__init__.py,sha256=rJmDzrKGmHe8RcYhgkN5l7NhwDOuS6VMZVv3ZPq9JuM,18239
192
+ openrouter/models/__init__.py,sha256=wIW9sbvSKlrGyoPY4mXvHqw-_Inpl6zqpN6U6j-w6SU,83
193
+ openrouter/models/internal/__init__.py,sha256=xowceJVTVAP3WRyQ0NEGkm9PAoYU1l0_VYgXZP0ZvlM,1569
194
+ openrouter/models/internal/globals.py,sha256=fI0KPVfEWU8t5H3Wph85DiLo6NSIt69gSnCW9wLY4NI,1363
195
+ openrouter/operations/__init__.py,sha256=Tk9uPjJplDiwJSi3MP11DkSGX7rzhlocC5I92k6Uqso,18457
189
196
  openrouter/operations/createauthkeyscode.py,sha256=WM9oLRrH7U64XfYEpXDUDvf7w4N6qm6BUZhEXdHPKLg,4034
190
197
  openrouter/operations/createcoinbasecharge.py,sha256=yOkAvPj_e6rAqM6ThuZKHs7QId5m9S2vH701oNOeYAU,2241
191
- openrouter/operations/createembeddings.py,sha256=uTnYSPDzckoTUckJ3fznxQX3Elm8yQY_GnZ-tmXRpKg,13575
198
+ openrouter/operations/createembeddings.py,sha256=gVbSAz3q-sb3MAyfXJfogCFpsjARpsaG6buhFehn5AE,14572
192
199
  openrouter/operations/createkeys.py,sha256=P6UbY4onogiWdMCMfcnNPHvJLRSIuB-KetdHznD2PAM,8322
193
200
  openrouter/operations/createresponses.py,sha256=Vu1lRymqLWq4PvxkJPJIwHqFRdyyy47bI3SMuU4v2j0,1942
194
201
  openrouter/operations/deletekeys.py,sha256=_XTN4M6sU22DBdhZVj-4qaCo5k-CWEq1e_Xsp5fqqIU,1149
195
202
  openrouter/operations/exchangeauthcodeforapikey.py,sha256=rRAFH6q21ePf448YCAi1UY3aBFU__xLm4FLkYh-FKpc,3973
196
- openrouter/operations/getcredits.py,sha256=r_To7p9Tt8OcsbZ68Y74nsLm4QHphozE9oenSdvgL8s,362
203
+ openrouter/operations/getcredits.py,sha256=AG4qt-dIu5zCu5sjoDC5MYy-zrruDCi01AinqteVuVk,729
197
204
  openrouter/operations/getcurrentkey.py,sha256=NJd5s5QfvZCHjSiUPlS7rZNFm7sBQz1pyTfDmnRe_k0,5955
198
205
  openrouter/operations/getgeneration.py,sha256=vp1Mp7Bb4TezPuciT8uPS4n42c_3tgaMe9d9HFAxShw,8270
199
206
  openrouter/operations/getkey.py,sha256=upv7udNsaAILJpqq-L4Mvn971xCts_4nQqzP3zJB9mU,5473
200
207
  openrouter/operations/getmodels.py,sha256=AUooAWNQiSGWrmKhEvelwjX4AdbUgBpFb2qABjAsCTQ,748
201
- openrouter/operations/getparameters.py,sha256=KNV8AqsVX2PGprIDHbl4WHoJqD5R7cuNCll3ieT2KdA,4276
208
+ openrouter/operations/getparameters.py,sha256=IJkLfTYkl4GbuCt7snilZIo84X-EpgNAMYmUN-wVaHQ,4419
202
209
  openrouter/operations/getuseractivity.py,sha256=oeqU_jqy8t2xtBjnQ9opfDY-FtJlK5essI9oJvfYTjs,1252
203
210
  openrouter/operations/list.py,sha256=meW1unMF371YvOdNFdIjh3Ya2ADY-7xo2WQcFaKAwHk,5766
204
211
  openrouter/operations/listendpoints.py,sha256=keS39WecfOoZvYVZdPEN7Fuxb5LFWhgpbhNXaVReGSQ,1117
@@ -206,7 +213,7 @@ openrouter/operations/listendpointszdr.py,sha256=2CdXrknZg79FTHvFOMA165epUYulrg0
206
213
  openrouter/operations/listmodelsuser.py,sha256=m_jM93D_m-MnUB6S0WUDHX1bQMP-UJimYOxAcM0Kqjw,643
207
214
  openrouter/operations/listproviders.py,sha256=072auQF9sz-yb0UmZAo8sRacibp0IldU0pndumAyK1g,2530
208
215
  openrouter/operations/sendchatcompletionrequest.py,sha256=AtBi9ZPxgU9kb0sKpt-5gCXrkgY2Qsmj_D2GNLRzOXg,1364
209
- openrouter/operations/updatekeys.py,sha256=8dYLGR6-1WFIFKo_YvgIGIoDoT_yTsDQFm08-PEyuz8,8602
216
+ openrouter/operations/updatekeys.py,sha256=zCKB7Gvh9kYkpcow3h6I6zSc2aqw-K0v_8Xml8iAOZ0,8618
210
217
  openrouter/types/__init__.py,sha256=RArOwSgeeTIva6h-4ttjXwMUeCkz10nAFBL9D-QljI4,377
211
218
  openrouter/types/basemodel.py,sha256=L79WXvTECbSqaJzs8D3ud_KdIWkU7Cx2wbohDAktE9E,1127
212
219
  openrouter/utils/__init__.py,sha256=CAG0O76aEToGKXpT6Ft87Vd-iiQTh4XdBrQ37BVbsiM,5861
@@ -214,22 +221,22 @@ openrouter/utils/annotations.py,sha256=FvfvVTUj8TUclm4HbGgY5yi2Ap7EzGmu2UPFU4FwC
214
221
  openrouter/utils/datetimes.py,sha256=oppAA5e3V35pQov1-FNLKxAaNF1_XWi-bQtyjjql3H8,855
215
222
  openrouter/utils/enums.py,sha256=REU6ydF8gsVL3xaeGX4sMNyiL3q5P9h29-f6Sa6luAE,2633
216
223
  openrouter/utils/eventstreaming.py,sha256=SgFqMcUOYKlrTQ4gAp_dNcKLvDXukeiEMNU3DP8mXk8,6692
217
- openrouter/utils/forms.py,sha256=EJdnrfIkuwpDtekyHutla0HjI_FypTYcmYNyPKEu_W0,6874
224
+ openrouter/utils/forms.py,sha256=HzltKnYH5-ULoEz8JYfIUcw13I9dMZjw-1lQKNkH5fw,7178
218
225
  openrouter/utils/headers.py,sha256=cPxWSmUILrefTGDzTH1Hdj7_Hlsj-EY6K5Tyc4iH4dk,3663
219
226
  openrouter/utils/logger.py,sha256=pY0WTOJsLRsvqbx-hT5lWAXoNUhY3Ksjj8rYwdk3TrQ,679
220
227
  openrouter/utils/metadata.py,sha256=Per2KFXXOqOtoUWXrlIfjrSrBg199KrRW0nKQDgHIBU,3136
221
228
  openrouter/utils/oauth_create_authorization_url.py,sha256=qD_lrqu6nzy1Vuism1jCxF3bQ_GoboWlhwsah1dFOjU,2726
222
229
  openrouter/utils/oauth_create_sha256_code_challenge.py,sha256=y0fP_Rz7BghoNxspfURna0EL3f8gj1Msi6dt0qbELmU,3549
223
- openrouter/utils/queryparams.py,sha256=MTK6inMS1_WwjmMJEJmAn67tSHHJyarpdGRlorRHEtI,5899
230
+ openrouter/utils/queryparams.py,sha256=dxtFQDJ8dlbm_hh_fhdFC1qMWOOHR2MszNycKmME8bQ,6326
224
231
  openrouter/utils/requestbodies.py,sha256=ySjEyjcLi731LNUahWvLOrES2HihuA8VrOJx4eQ7Qzg,2101
225
- openrouter/utils/retries.py,sha256=6yhfZifqIat9i76xF0lTR2jLj1IN9BNGyqqxATlEFPU,6348
232
+ openrouter/utils/retries.py,sha256=stPJEFtmK8gOM6aT0DpEJp9Z39oXX1-8I69jpa2n3Ww,8130
226
233
  openrouter/utils/security.py,sha256=k3p0ma6HKapq-eK6WPNjfglReZ5HEs3YggbSTLBnR5A,6014
227
234
  openrouter/utils/serializers.py,sha256=Hndks5M_rJXVub_N5lu0gKZQUoEmWrn6PN7R-0HwvOE,5999
228
235
  openrouter/utils/unmarshal_json_response.py,sha256=glq_wLEH2vSvfMedJOY2dbd5T_z_I4yDxwbBJDI8OjU,875
229
236
  openrouter/utils/url.py,sha256=BgGPgcTA6MRK4bF8fjP2dUopN3NzEzxWMXPBVg8NQUA,5254
230
237
  openrouter/utils/values.py,sha256=CcaCXEa3xHhkUDROyXZocN8f0bdITftv9Y0P9lTf0YM,3517
231
- openrouter-0.0.19.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
232
- openrouter-0.0.19.dist-info/METADATA,sha256=psiF2w6SYf7RZpnbe7vcJ6rOyo2rZ6X-Kw8AVXlcvCw,7462
233
- openrouter-0.0.19.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
234
- openrouter-0.0.19.dist-info/top_level.txt,sha256=0jnlCcRirGeYZLm5ZbWQRUonIp4tTPl_9mq-ds_1SEo,11
235
- openrouter-0.0.19.dist-info/RECORD,,
238
+ openrouter-0.0.22.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
239
+ openrouter-0.0.22.dist-info/METADATA,sha256=50uVWHeME3Mwuud2KH3Czbj2cHEX9Bi-mGCb3GHBo1Y,7462
240
+ openrouter-0.0.22.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
241
+ openrouter-0.0.22.dist-info/top_level.txt,sha256=0jnlCcRirGeYZLm5ZbWQRUonIp4tTPl_9mq-ds_1SEo,11
242
+ openrouter-0.0.22.dist-info/RECORD,,