| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | import osfrom collections.abc import Iterablefrom typing import Any, Literal, Unionimport anthropicimport pytestfrom _pytest.monkeypatch import MonkeyPatchfrom anthropic import Streamfrom anthropic.resources import Messagesfrom anthropic.types import (    ContentBlock,    ContentBlockDeltaEvent,    Message,    MessageDeltaEvent,    MessageDeltaUsage,    MessageParam,    MessageStartEvent,    MessageStopEvent,    MessageStreamEvent,    TextDelta,    Usage,)from anthropic.types.message_delta_event import DeltaMOCK = os.getenv("MOCK_SWITCH", "false") == "true"class MockAnthropicClass:    @staticmethod    def mocked_anthropic_chat_create_sync(model: str) -> Message:        return Message(            id="msg-123",            type="message",            role="assistant",            content=[ContentBlock(text="hello, I'm a chatbot from anthropic", type="text")],            model=model,            stop_reason="stop_sequence",            usage=Usage(input_tokens=1, output_tokens=1),        )    @staticmethod    def mocked_anthropic_chat_create_stream(model: str) -> Stream[MessageStreamEvent]:        full_response_text = "hello, I'm a chatbot from anthropic"        yield MessageStartEvent(            type="message_start",            message=Message(                id="msg-123",                content=[],                role="assistant",                model=model,                stop_reason=None,                type="message",                usage=Usage(input_tokens=1, output_tokens=1),            ),        )        index = 0        for i in range(0, len(full_response_text)):            yield ContentBlockDeltaEvent(                type="content_block_delta", delta=TextDelta(text=full_response_text[i], type="text_delta"), index=index            )            index += 1        yield MessageDeltaEvent(            type="message_delta", delta=Delta(stop_reason="stop_sequence"), usage=MessageDeltaUsage(output_tokens=1)        )        yield MessageStopEvent(type="message_stop")    def mocked_anthropic(        self: Messages,        *,        max_tokens: int,        messages: Iterable[MessageParam],        model: str,        stream: Literal[True],        **kwargs: Any,    ) -> Union[Message, Stream[MessageStreamEvent]]:        if len(self._client.api_key) < 18:            raise anthropic.AuthenticationError("Invalid API key")        if stream:            return MockAnthropicClass.mocked_anthropic_chat_create_stream(model=model)        else:            return MockAnthropicClass.mocked_anthropic_chat_create_sync(model=model)@pytest.fixturedef setup_anthropic_mock(request, monkeypatch: MonkeyPatch):    if MOCK:        monkeypatch.setattr(Messages, "create", MockAnthropicClass.mocked_anthropic)    yield    if MOCK:        monkeypatch.undo()
 |