| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- from __future__ import annotations
- from typing import TYPE_CHECKING, Any
- 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[Any]):
- def __init__(self, *, symbol: str) -> None:
- super().__init__()
- self._symbol = symbol
- @override
- def __load__(self) -> Any:
- # return the proxy until it is eventually called so that
- # we don't break people that are just checking the attributes
- # of a module
- return self
- def __call__(self, *_args: Any, **_kwargs: Any) -> Any:
- 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)
|