Spaces:
Running
Running
import os | |
from collections.abc import Iterable | |
from time import sleep | |
from typing import Any, Literal, Union | |
import anthropic | |
import pytest | |
from _pytest.monkeypatch import MonkeyPatch | |
from anthropic import Anthropic, Stream | |
from anthropic.resources import Messages | |
from anthropic.types import ( | |
ContentBlock, | |
ContentBlockDeltaEvent, | |
Message, | |
MessageDeltaEvent, | |
MessageDeltaUsage, | |
MessageParam, | |
MessageStartEvent, | |
MessageStopEvent, | |
MessageStreamEvent, | |
TextDelta, | |
Usage, | |
) | |
from anthropic.types.message_delta_event import Delta | |
MOCK = os.getenv('MOCK_SWITCH', 'false') == 'true' | |
class MockAnthropicClass: | |
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 | |
) | |
) | |
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)): | |
sleep(0.1) | |
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) | |
def setup_anthropic_mock(request, monkeypatch: MonkeyPatch): | |
if MOCK: | |
monkeypatch.setattr(Messages, 'create', MockAnthropicClass.mocked_anthropic) | |
yield | |
if MOCK: | |
monkeypatch.undo() | |