37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
import os
|
|
import pytest
|
|
from pydantic import BaseModel, field_validator
|
|
import instructor
|
|
|
|
|
|
@pytest.mark.parametrize("mode", [instructor.Mode.GENAI_TOOLS])
|
|
def test_genai_tools_validation_retry_preserves_model_content(mode):
|
|
"""Ensure GENAI_TOOLS validation retries are wired end-to-end."""
|
|
from instructor.core.exceptions import InstructorRetryException
|
|
|
|
model = os.getenv("GOOGLE_GENAI_MODEL", "gemini-2.0-flash")
|
|
|
|
class AlwaysInvalid(BaseModel):
|
|
value: int
|
|
|
|
@field_validator("value")
|
|
@classmethod
|
|
def always_fail(cls, v: int) -> int: # noqa: ARG003
|
|
raise ValueError("force retry for reask validation coverage")
|
|
|
|
client = instructor.from_provider(f"google/{model}", mode=mode)
|
|
with pytest.raises(InstructorRetryException) as exc_info:
|
|
client.chat.completions.create(
|
|
model=model,
|
|
messages=[
|
|
{
|
|
"role": "user",
|
|
"content": "Return any integer value",
|
|
}
|
|
],
|
|
response_model=AlwaysInvalid,
|
|
max_retries=2,
|
|
)
|
|
|
|
assert exc_info.value.n_attempts == 2
|