Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 2804bd6

Browse files
stainless-app[bot]zekeRobertCraigie
authored
release: 2.0.0-alpha.27 (#74)
* feat: add api_token parameter support for legacy compatibility Adds support for the legacy api_token parameter in both Replicate and AsyncReplicate client initialization as an alternative to bearer_token. This enables backward compatibility with v1.x client code that uses: - Client(api_token="...") - AsyncClient(api_token="...") The implementation: - Accepts both api_token and bearer_token parameters - Raises clear error if both are provided - Maps api_token to bearer_token internally - Maintains existing environment variable behavior - Includes comprehensive test coverage * Revert "feat: add api_token parameter support for legacy compatibility" This reverts commit 8c05e64. * chore(types): change optional parameter type from NotGiven to Omit * chore(internal): update formatting * fix(predictions): use Omit instead of NotGiven * release: 2.0.0-alpha.27 --------- Co-authored-by: Zeke Sikelianos <zeke@sikelianos.com> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Robert Craigie <robert@craigie.dev>
1 parent 1a66fc8 commit 2804bd6

25 files changed

+195
-159
lines changed

‎.release-please-manifest.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "2.0.0-alpha.26"
2+
".": "2.0.0-alpha.27"
33
}

‎CHANGELOG.md‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,25 @@
11
# Changelog
22

3+
## 2.0.0-alpha.27 (2025年09月29日)
4+
5+
Full Changelog: [v2.0.0-alpha.26...v2.0.0-alpha.27](https://github.com/replicate/replicate-python-stainless/compare/v2.0.0-alpha.26...v2.0.0-alpha.27)
6+
7+
### Features
8+
9+
* add api_token parameter support for legacy compatibility ([7a781df](https://github.com/replicate/replicate-python-stainless/commit/7a781df6004d204439b95cb1fba09871f4bf28b7))
10+
* add legacy exception compatibility aliases ([#70](https://github.com/replicate/replicate-python-stainless/issues/70)) ([1a66fc8](https://github.com/replicate/replicate-python-stainless/commit/1a66fc86cb9c258d16d4bf37d172216cd4206ccc))
11+
12+
13+
### Bug Fixes
14+
15+
* **predictions:** use Omit instead of NotGiven ([6f10116](https://github.com/replicate/replicate-python-stainless/commit/6f1011624cd05a82422386332917748fc821fdc6))
16+
17+
18+
### Chores
19+
20+
* **internal:** update formatting ([d1bebb6](https://github.com/replicate/replicate-python-stainless/commit/d1bebb6109cf3c79de4f3796eb65ec40ce7b592d))
21+
* **types:** change optional parameter type from NotGiven to Omit ([3223abf](https://github.com/replicate/replicate-python-stainless/commit/3223abfcc308e1eeee45eea0549623fdad5a583f))
22+
323
## 2.0.0-alpha.26 (2025年09月17日)
424

525
Full Changelog: [v2.0.0-alpha.25...v2.0.0-alpha.26](https://github.com/replicate/replicate-python-stainless/compare/v2.0.0-alpha.25...v2.0.0-alpha.26)

‎pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "replicate"
3-
version = "2.0.0-alpha.26"
3+
version = "2.0.0-alpha.27"
44
description = "The official Python library for the replicate API"
55
dynamic = ["readme"]
66
license = "Apache-2.0"

‎src/replicate/__init__.py‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from typing_extensions import override
77

88
from . import types
9-
from ._types import NOT_GIVEN, Omit, NoneType, NotGiven, Transport, ProxiesTypes
9+
from ._types import NOT_GIVEN, Omit, NoneType, NotGiven, Transport, ProxiesTypes, omit, not_given
1010
from ._utils import file_from_path
1111
from ._client import (
1212
Client,
@@ -54,7 +54,9 @@
5454
"ProxiesTypes",
5555
"NotGiven",
5656
"NOT_GIVEN",
57+
"not_given",
5758
"Omit",
59+
"omit",
5860
"ReplicateError",
5961
"APIError",
6062
"APIStatusError",

‎src/replicate/_base_client.py‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
from ._qs import Querystring
4343
from ._files import to_httpx_files, async_to_httpx_files
4444
from ._types import (
45-
NOT_GIVEN,
4645
Body,
4746
Omit,
4847
Query,
@@ -57,6 +56,7 @@
5756
RequestOptions,
5857
HttpxRequestFiles,
5958
ModelBuilderProtocol,
59+
not_given,
6060
)
6161
from ._utils import is_dict, is_list, asyncify, is_given, lru_cache, is_mapping
6262
from ._compat import PYDANTIC_V1, model_copy, model_dump
@@ -145,9 +145,9 @@ def __init__(
145145
def __init__(
146146
self,
147147
*,
148-
url: URL | NotGiven = NOT_GIVEN,
149-
json: Body | NotGiven = NOT_GIVEN,
150-
params: Query | NotGiven = NOT_GIVEN,
148+
url: URL | NotGiven = not_given,
149+
json: Body | NotGiven = not_given,
150+
params: Query | NotGiven = not_given,
151151
) -> None:
152152
self.url = url
153153
self.json = json
@@ -595,7 +595,7 @@ def _maybe_override_cast_to(self, cast_to: type[ResponseT], options: FinalReques
595595
# we internally support defining a temporary header to override the
596596
# default `cast_to` type for use with `.with_raw_response` and `.with_streaming_response`
597597
# see _response.py for implementation details
598-
override_cast_to = headers.pop(OVERRIDE_CAST_TO_HEADER, NOT_GIVEN)
598+
override_cast_to = headers.pop(OVERRIDE_CAST_TO_HEADER, not_given)
599599
if is_given(override_cast_to):
600600
options.headers = headers
601601
return cast(Type[ResponseT], override_cast_to)
@@ -825,7 +825,7 @@ def __init__(
825825
version: str,
826826
base_url: str | URL,
827827
max_retries: int = DEFAULT_MAX_RETRIES,
828-
timeout: float | Timeout | None | NotGiven = NOT_GIVEN,
828+
timeout: float | Timeout | None | NotGiven = not_given,
829829
http_client: httpx.Client | None = None,
830830
custom_headers: Mapping[str, str] | None = None,
831831
custom_query: Mapping[str, object] | None = None,
@@ -1370,7 +1370,7 @@ def __init__(
13701370
base_url: str | URL,
13711371
_strict_response_validation: bool,
13721372
max_retries: int = DEFAULT_MAX_RETRIES,
1373-
timeout: float | Timeout | None | NotGiven = NOT_GIVEN,
1373+
timeout: float | Timeout | None | NotGiven = not_given,
13741374
http_client: httpx.AsyncClient | None = None,
13751375
custom_headers: Mapping[str, str] | None = None,
13761376
custom_query: Mapping[str, object] | None = None,
@@ -1846,8 +1846,8 @@ def make_request_options(
18461846
extra_query: Query | None = None,
18471847
extra_body: Body | None = None,
18481848
idempotency_key: str | None = None,
1849-
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1850-
post_parser: PostParser | NotGiven = NOT_GIVEN,
1849+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
1850+
post_parser: PostParser | NotGiven = not_given,
18511851
) -> RequestOptions:
18521852
"""Create a dict of type RequestOptions without keys of NotGiven values."""
18531853
options: RequestOptions = {}

‎src/replicate/_qs.py‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from urllib.parse import parse_qs, urlencode
55
from typing_extensions import Literal, get_args
66

7-
from ._types import NOT_GIVEN, NotGiven, NotGivenOr
7+
from ._types import NotGiven, not_given
88
from ._utils import flatten
99

1010
_T = TypeVar("_T")
@@ -41,8 +41,8 @@ def stringify(
4141
self,
4242
params: Params,
4343
*,
44-
array_format: NotGivenOr[ArrayFormat] =NOT_GIVEN,
45-
nested_format: NotGivenOr[NestedFormat] =NOT_GIVEN,
44+
array_format: ArrayFormat|NotGiven=not_given,
45+
nested_format: NestedFormat|NotGiven=not_given,
4646
) -> str:
4747
return urlencode(
4848
self.stringify_items(
@@ -56,8 +56,8 @@ def stringify_items(
5656
self,
5757
params: Params,
5858
*,
59-
array_format: NotGivenOr[ArrayFormat] =NOT_GIVEN,
60-
nested_format: NotGivenOr[NestedFormat] =NOT_GIVEN,
59+
array_format: ArrayFormat|NotGiven=not_given,
60+
nested_format: NestedFormat|NotGiven=not_given,
6161
) -> list[tuple[str, str]]:
6262
opts = Options(
6363
qs=self,
@@ -143,8 +143,8 @@ def __init__(
143143
self,
144144
qs: Querystring = _qs,
145145
*,
146-
array_format: NotGivenOr[ArrayFormat] =NOT_GIVEN,
147-
nested_format: NotGivenOr[NestedFormat] =NOT_GIVEN,
146+
array_format: ArrayFormat|NotGiven=not_given,
147+
nested_format: NestedFormat|NotGiven=not_given,
148148
) -> None:
149149
self.array_format = qs.array_format if isinstance(array_format, NotGiven) else array_format
150150
self.nested_format = qs.nested_format if isinstance(nested_format, NotGiven) else nested_format

‎src/replicate/_types.py‎

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -117,18 +117,21 @@ class RequestOptions(TypedDict, total=False):
117117
# Sentinel class used until PEP 0661 is accepted
118118
class NotGiven:
119119
"""
120-
A sentinel singleton class used to distinguish omitted keyword arguments
121-
from those passed in with the value None (which may have different behavior).
120+
For parameters with a meaningful None value, we need to distinguish between
121+
the user explicitly passing None, and the user not passing the parameter at
122+
all.
123+
124+
User code shouldn't need to use not_given directly.
122125
123126
For example:
124127
125128
```py
126-
def get(timeout: Union[int, NotGiven, None] = NotGiven()) -> Response: ...
129+
def create(timeout: Timeout | None | NotGiven = not_given): ...
127130
128131
129-
get(timeout=1) # 1s timeout
130-
get(timeout=None) # No timeout
131-
get() # Default timeout behavior, which may not be statically known at the method definition.
132+
create(timeout=1) # 1s timeout
133+
create(timeout=None) # No timeout
134+
create() # Default timeout behavior
132135
```
133136
"""
134137

@@ -140,13 +143,14 @@ def __repr__(self) -> str:
140143
return "NOT_GIVEN"
141144

142145

143-
NotGivenOr = Union[_T, NotGiven]
146+
not_given = NotGiven()
147+
# for backwards compatibility:
144148
NOT_GIVEN = NotGiven()
145149

146150

147151
class Omit:
148-
"""In certain situations you need to be able to represent a case where a default value has
149-
to be explicitly removed and `None` is not an appropriate substitute, for example:
152+
"""
153+
To explicitly omit something from being sent in a request, use `omit`.
150154
151155
```py
152156
# as the default `Content-Type` header is `application/json` that will be sent
@@ -156,15 +160,18 @@ class Omit:
156160
# to look something like: 'multipart/form-data; boundary=0d8382fcf5f8c3be01ca2e11002d2983'
157161
client.post(..., headers={"Content-Type": "multipart/form-data"})
158162
159-
# instead you can remove the default `application/json` header by passing Omit
160-
client.post(..., headers={"Content-Type": Omit()})
163+
# instead you can remove the default `application/json` header by passing omit
164+
client.post(..., headers={"Content-Type": omit})
161165
```
162166
"""
163167

164168
def __bool__(self) -> Literal[False]:
165169
return False
166170

167171

172+
omit = Omit()
173+
174+
168175
@runtime_checkable
169176
class ModelBuilderProtocol(Protocol):
170177
@classmethod

‎src/replicate/_utils/_transform.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ def _transform_typeddict(
268268
annotations = get_type_hints(expected_type, include_extras=True)
269269
for key, value in data.items():
270270
if not is_given(value):
271-
# we don't need to include `NotGiven` values here as they'll
271+
# we don't need to include omitted values here as they'll
272272
# be stripped out before the request is sent anyway
273273
continue
274274

@@ -434,7 +434,7 @@ async def _async_transform_typeddict(
434434
annotations = get_type_hints(expected_type, include_extras=True)
435435
for key, value in data.items():
436436
if not is_given(value):
437-
# we don't need to include `NotGiven` values here as they'll
437+
# we don't need to include omitted values here as they'll
438438
# be stripped out before the request is sent anyway
439439
continue
440440

‎src/replicate/_utils/_utils.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import sniffio
2323

24-
from .._types import NotGiven, FileTypes, NotGivenOr, HeadersLike
24+
from .._types import Omit, NotGiven, FileTypes, HeadersLike
2525

2626
_T = TypeVar("_T")
2727
_TupleT = TypeVar("_TupleT", bound=Tuple[object, ...])
@@ -63,7 +63,7 @@ def _extract_items(
6363
try:
6464
key = path[index]
6565
except IndexError:
66-
if isinstance(obj, NotGiven):
66+
if notis_given(obj):
6767
# no value was provided - we can safely ignore
6868
return []
6969

@@ -126,8 +126,8 @@ def _extract_items(
126126
return []
127127

128128

129-
def is_given(obj: NotGivenOr[_T]) -> TypeGuard[_T]:
130-
return not isinstance(obj, NotGiven)
129+
def is_given(obj: _T|NotGiven|Omit) -> TypeGuard[_T]:
130+
return not isinstance(obj, NotGiven)andnotisinstance(obj, Omit)
131131

132132

133133
# Type safe methods for narrowing types with TypeVars.

‎src/replicate/_version.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

33
__title__ = "replicate"
4-
__version__ = "2.0.0-alpha.26" # x-release-please-version
4+
__version__ = "2.0.0-alpha.27" # x-release-please-version

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /