mirror of
https://github.com/kennethreitz/instructor.git
synced 2026-06-05 22:50:18 +00:00
e5048eb938
Co-authored-by: Jason Liu <jxnl@users.noreply.github.com> Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
from itertools import product
|
|
import pytest
|
|
|
|
import instructor
|
|
|
|
from typing_extensions import Annotated
|
|
from pydantic import BaseModel, AfterValidator, BeforeValidator, ValidationError
|
|
|
|
from instructor.dsl.validators import llm_validator
|
|
from tests.openai.util import models, modes
|
|
|
|
|
|
def test_patch_completes_successfully(client):
|
|
class Response(BaseModel):
|
|
message: Annotated[
|
|
str, AfterValidator(instructor.openai_moderation(client=client))
|
|
]
|
|
|
|
with pytest.raises(ValidationError):
|
|
Response(message="I want to make them suffer the consequences")
|
|
|
|
|
|
@pytest.mark.parametrize("model, mode", product(models, modes))
|
|
def test_runmodel_validator_error(model, mode, client):
|
|
client = instructor.patch(client, mode=mode)
|
|
|
|
class QuestionAnswerNoEvil(BaseModel):
|
|
question: str
|
|
answer: Annotated[
|
|
str,
|
|
BeforeValidator(
|
|
llm_validator(
|
|
"don't say objectionable things", model=model, openai_client=client
|
|
)
|
|
),
|
|
]
|
|
|
|
with pytest.raises(ValidationError):
|
|
QuestionAnswerNoEvil(
|
|
question="What is the meaning of life?",
|
|
answer="The meaning of life is to be evil and steal",
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize("model", models)
|
|
def test_runmodel_validator_default_openai_client(model):
|
|
class QuestionAnswerNoEvil(BaseModel):
|
|
question: str
|
|
answer: Annotated[
|
|
str,
|
|
BeforeValidator(
|
|
llm_validator("don't say objectionable things", model=model)
|
|
),
|
|
]
|
|
|
|
with pytest.raises(ValidationError):
|
|
QuestionAnswerNoEvil(
|
|
question="What is the meaning of life?",
|
|
answer="The meaning of life is to be evil and steal",
|
|
)
|