Spaces:
Building
Building
import os | |
from collections.abc import Callable | |
from typing import Literal | |
import pytest | |
# import monkeypatch | |
from _pytest.monkeypatch import MonkeyPatch | |
from openai.resources.audio.transcriptions import Transcriptions | |
from openai.resources.chat import Completions as ChatCompletions | |
from openai.resources.completions import Completions | |
from openai.resources.embeddings import Embeddings | |
from openai.resources.models import Models | |
from openai.resources.moderations import Moderations | |
from tests.integration_tests.model_runtime.__mock.openai_chat import MockChatClass | |
from tests.integration_tests.model_runtime.__mock.openai_completion import MockCompletionsClass | |
from tests.integration_tests.model_runtime.__mock.openai_embeddings import MockEmbeddingsClass | |
from tests.integration_tests.model_runtime.__mock.openai_moderation import MockModerationClass | |
from tests.integration_tests.model_runtime.__mock.openai_remote import MockModelClass | |
from tests.integration_tests.model_runtime.__mock.openai_speech2text import MockSpeech2TextClass | |
def mock_openai( | |
monkeypatch: MonkeyPatch, | |
methods: list[Literal["completion", "chat", "remote", "moderation", "speech2text", "text_embedding"]], | |
) -> Callable[[], None]: | |
""" | |
mock openai module | |
:param monkeypatch: pytest monkeypatch fixture | |
:return: unpatch function | |
""" | |
def unpatch() -> None: | |
monkeypatch.undo() | |
if "completion" in methods: | |
monkeypatch.setattr(Completions, "create", MockCompletionsClass.completion_create) | |
if "chat" in methods: | |
monkeypatch.setattr(ChatCompletions, "create", MockChatClass.chat_create) | |
if "remote" in methods: | |
monkeypatch.setattr(Models, "list", MockModelClass.list) | |
if "moderation" in methods: | |
monkeypatch.setattr(Moderations, "create", MockModerationClass.moderation_create) | |
if "speech2text" in methods: | |
monkeypatch.setattr(Transcriptions, "create", MockSpeech2TextClass.speech2text_create) | |
if "text_embedding" in methods: | |
monkeypatch.setattr(Embeddings, "create", MockEmbeddingsClass.create_embeddings) | |
return unpatch | |
MOCK = os.getenv("MOCK_SWITCH", "false").lower() == "true" | |
def setup_openai_mock(request, monkeypatch): | |
methods = request.param if hasattr(request, "param") else [] | |
if MOCK: | |
unpatch = mock_openai(monkeypatch, methods=methods) | |
yield | |
if MOCK: | |
unpatch() | |