Files
wehub-resource-sync 97e91a83f3
Ruff / Ruff (push) Has been cancelled
Test / Core Tests (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.10) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.11) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.12) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.13) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.9) (push) Has been cancelled
Test / Full Coverage (Python 3.11) (push) Has been cancelled
Test / Core Provider Tests (OpenAI) (push) Has been cancelled
Test / Core Provider Tests (Anthropic) (push) Has been cancelled
Test / Core Provider Tests (Google) (push) Has been cancelled
Test / Core Provider Tests (Other) (push) Has been cancelled
Test / Anthropic Tests (push) Has been cancelled
Test / Gemini Tests (push) Has been cancelled
Test / Google GenAI Tests (push) Has been cancelled
Test / Vertex AI Tests (push) Has been cancelled
Test / OpenAI Tests (push) Has been cancelled
Test / Writer Tests (push) Has been cancelled
Test / Auto Client Tests (push) Has been cancelled
ty / type-check (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:36:38 +08:00

67 lines
1.7 KiB
Python

"""Isolated tests for Anthropic JSON parsing helpers."""
from anthropic.types import Message, TextBlock, Usage
import pytest
from pydantic import BaseModel, ValidationError
from typing import cast
from instructor.mode import Mode
from instructor.processing.response import process_response
from instructor.utils.providers import Provider
CONTROL_CHAR_JSON = """{
"data": "Claude likes
control
characters"
}"""
class _AnthropicTestModel(BaseModel):
data: str
def _build_message(data_content: str) -> Message:
return Message(
id="test_id",
content=[TextBlock(type="text", text=data_content)],
model="claude-3-5-haiku-20241022",
role="assistant",
stop_reason="end_turn",
stop_sequence=None,
type="message",
usage=Usage(input_tokens=10, output_tokens=10),
)
def test_parse_anthropic_json_strict_control_characters() -> None:
message = _build_message(CONTROL_CHAR_JSON)
with pytest.raises(ValidationError):
process_response(
response=message,
response_model=_AnthropicTestModel,
stream=False,
strict=True,
mode=Mode.JSON,
provider=Provider.ANTHROPIC,
)
def test_parse_anthropic_json_non_strict_preserves_control_characters() -> None:
message = _build_message(CONTROL_CHAR_JSON)
model = cast(
_AnthropicTestModel,
process_response(
response=message,
response_model=_AnthropicTestModel,
stream=False,
strict=False,
mode=Mode.JSON,
provider=Provider.ANTHROPIC,
),
)
assert model.data == "Claude likes\ncontrol\ncharacters"