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
69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
from pydantic import BaseModel
|
|
|
|
import instructor
|
|
from instructor import Mode, Provider
|
|
from instructor.cache import AutoCache
|
|
from instructor.v2.core.function_calls import ResponseSchema
|
|
from instructor.v2.core.response_model import prepare_response_model
|
|
from instructor.v2.dsl.iterable import IterableBase
|
|
|
|
|
|
class User(BaseModel):
|
|
name: str
|
|
|
|
|
|
def test_prepare_response_model_handles_list_of_basemodel() -> None:
|
|
prepared = prepare_response_model(list[User])
|
|
|
|
assert prepared is not None
|
|
assert issubclass(prepared, IterableBase)
|
|
|
|
|
|
def test_prepare_response_model_handles_primitive_str() -> None:
|
|
prepared = prepare_response_model(str)
|
|
|
|
assert prepared is not None
|
|
assert issubclass(prepared, ResponseSchema)
|
|
|
|
|
|
def test_patch_prepares_list_response_model_before_cache() -> None:
|
|
mock_client = MagicMock()
|
|
mock_client.chat.completions.create = MagicMock(
|
|
return_value=MagicMock(text='[{"name": "test"}]')
|
|
)
|
|
patched = instructor.patch(mock_client, mode=Mode.MD_JSON, provider=Provider.GEMINI)
|
|
|
|
try:
|
|
patched.chat.completions.create( # ty: ignore[no-matching-overload]
|
|
response_model=list[User],
|
|
messages=[{"role": "user", "content": "hi"}],
|
|
cache=AutoCache(),
|
|
)
|
|
except AttributeError as exc:
|
|
if "model_json_schema" in str(exc):
|
|
raise AssertionError(f"Regression #2374: {exc}") from exc
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
def test_patch_prepares_str_response_model_before_cache() -> None:
|
|
mock_client = MagicMock()
|
|
mock_client.chat.completions.create = MagicMock(return_value=MagicMock(text='"hi"'))
|
|
patched = instructor.patch(mock_client, mode=Mode.MD_JSON, provider=Provider.GEMINI)
|
|
|
|
try:
|
|
patched.chat.completions.create( # ty: ignore[no-matching-overload]
|
|
response_model=str,
|
|
messages=[{"role": "user", "content": "hi"}],
|
|
cache=AutoCache(),
|
|
)
|
|
except AttributeError as exc:
|
|
if "model_json_schema" in str(exc):
|
|
raise AssertionError(f"Regression #2374: {exc}") from exc
|
|
except Exception:
|
|
pass
|