openai-python
65 строк · 1.7 Кб
1import json2
3import httpx4import pytest5import pydantic6
7from openai import OpenAI, BaseModel8from openai._streaming import Stream9from openai._base_client import FinalRequestOptions10from openai._legacy_response import LegacyAPIResponse11
12
13class PydanticModel(pydantic.BaseModel):14...15
16
17def test_response_parse_mismatched_basemodel(client: OpenAI) -> None:18response = LegacyAPIResponse(19raw=httpx.Response(200, content=b"foo"),20client=client,21stream=False,22stream_cls=None,23cast_to=str,24options=FinalRequestOptions.construct(method="get", url="/foo"),25)26
27with pytest.raises(28TypeError,29match="Pydantic models must subclass our base model type, e.g. `from openai import BaseModel`",30):31response.parse(to=PydanticModel)32
33
34def test_response_parse_custom_stream(client: OpenAI) -> None:35response = LegacyAPIResponse(36raw=httpx.Response(200, content=b"foo"),37client=client,38stream=True,39stream_cls=None,40cast_to=str,41options=FinalRequestOptions.construct(method="get", url="/foo"),42)43
44stream = response.parse(to=Stream[int])45assert stream._cast_to == int46
47
48class CustomModel(BaseModel):49foo: str50bar: int51
52
53def test_response_parse_custom_model(client: OpenAI) -> None:54response = LegacyAPIResponse(55raw=httpx.Response(200, content=json.dumps({"foo": "hello!", "bar": 2})),56client=client,57stream=False,58stream_cls=None,59cast_to=str,60options=FinalRequestOptions.construct(method="get", url="/foo"),61)62
63obj = response.parse(to=CustomModel)64assert obj.foo == "hello!"65assert obj.bar == 266