-
Notifications
You must be signed in to change notification settings - Fork 3.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(client): show a helpful error message if the v0 API is used (#743)
- Loading branch information
1 parent
ed16c4d
commit 920567c
Showing
2 changed files
with
67 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
from __future__ import annotations | ||
|
||
from typing import TYPE_CHECKING | ||
from typing_extensions import override | ||
|
||
from .._utils import LazyProxy | ||
from .._exceptions import OpenAIError | ||
|
||
INSTRUCTIONS = """ | ||
You tried to access openai.{symbol}, but this is no longer supported in openai>=1.0.0 - see the README at https://github.com/openai/openai-python for the API. | ||
You can run `openai migrate` to automatically upgrade your codebase to use the 1.0.0 interface. | ||
Alternatively, you can pin your installation to the old version, e.g. `pip install openai==0.28` | ||
A detailed migration guide is available here: https://github.com/openai/openai-python/discussions/742 | ||
""" | ||
|
||
|
||
class APIRemovedInV1(OpenAIError): | ||
def __init__(self, *, symbol: str) -> None: | ||
super().__init__(INSTRUCTIONS.format(symbol=symbol)) | ||
|
||
|
||
class APIRemovedInV1Proxy(LazyProxy[None]): | ||
def __init__(self, *, symbol: str) -> None: | ||
super().__init__() | ||
self._symbol = symbol | ||
|
||
@override | ||
def __load__(self) -> None: | ||
raise APIRemovedInV1(symbol=self._symbol) | ||
|
||
|
||
SYMBOLS = [ | ||
"Edit", | ||
"File", | ||
"Audio", | ||
"Image", | ||
"Model", | ||
"Engine", | ||
"Customer", | ||
"FineTune", | ||
"Embedding", | ||
"Completion", | ||
"Deployment", | ||
"Moderation", | ||
"ErrorObject", | ||
"FineTuningJob", | ||
"ChatCompletion", | ||
] | ||
|
||
# we explicitly tell type checkers that nothing is exported | ||
# from this file so that when we re-export the old symbols | ||
# in `openai/__init__.py` they aren't added to the auto-complete | ||
# suggestions given by editors | ||
if TYPE_CHECKING: | ||
__all__: list[str] = [] | ||
else: | ||
__all__ = SYMBOLS | ||
|
||
|
||
__locals = locals() | ||
for symbol in SYMBOLS: | ||
__locals[symbol] = APIRemovedInV1Proxy(symbol=symbol) |