Commit a7d9731b
Changed files (4)
src/openai/_legacy_response.py
@@ -258,6 +258,9 @@ class LegacyAPIResponse(Generic[R]):
if cast_to == float:
return cast(R, float(response.text))
+ if cast_to == bool:
+ return cast(R, response.text.lower() == "true")
+
origin = get_origin(cast_to) or cast_to
if inspect.isclass(origin) and issubclass(origin, HttpxBinaryResponseContent):
src/openai/_response.py
@@ -192,6 +192,9 @@ class BaseAPIResponse(Generic[R]):
if cast_to == float:
return cast(R, float(response.text))
+ if cast_to == bool:
+ return cast(R, response.text.lower() == "true")
+
origin = get_origin(cast_to) or cast_to
# handle the legacy binary response case
tests/test_legacy_response.py
@@ -34,6 +34,31 @@ def test_response_parse_mismatched_basemodel(client: OpenAI) -> None:
response.parse(to=PydanticModel)
+@pytest.mark.parametrize(
+ "content, expected",
+ [
+ ("false", False),
+ ("true", True),
+ ("False", False),
+ ("True", True),
+ ("TrUe", True),
+ ("FalSe", False),
+ ],
+)
+def test_response_parse_bool(client: OpenAI, content: str, expected: bool) -> None:
+ response = LegacyAPIResponse(
+ raw=httpx.Response(200, content=content),
+ client=client,
+ stream=False,
+ stream_cls=None,
+ cast_to=str,
+ options=FinalRequestOptions.construct(method="get", url="/foo"),
+ )
+
+ result = response.parse(to=bool)
+ assert result is expected
+
+
def test_response_parse_custom_stream(client: OpenAI) -> None:
response = LegacyAPIResponse(
raw=httpx.Response(200, content=b"foo"),
tests/test_response.py
@@ -237,6 +237,56 @@ async def test_async_response_parse_annotated_type(async_client: AsyncOpenAI) ->
assert obj.bar == 2
+@pytest.mark.parametrize(
+ "content, expected",
+ [
+ ("false", False),
+ ("true", True),
+ ("False", False),
+ ("True", True),
+ ("TrUe", True),
+ ("FalSe", False),
+ ],
+)
+def test_response_parse_bool(client: OpenAI, content: str, expected: bool) -> None:
+ response = APIResponse(
+ raw=httpx.Response(200, content=content),
+ client=client,
+ stream=False,
+ stream_cls=None,
+ cast_to=str,
+ options=FinalRequestOptions.construct(method="get", url="/foo"),
+ )
+
+ result = response.parse(to=bool)
+ assert result is expected
+
+
+@pytest.mark.parametrize(
+ "content, expected",
+ [
+ ("false", False),
+ ("true", True),
+ ("False", False),
+ ("True", True),
+ ("TrUe", True),
+ ("FalSe", False),
+ ],
+)
+async def test_async_response_parse_bool(client: AsyncOpenAI, content: str, expected: bool) -> None:
+ response = AsyncAPIResponse(
+ raw=httpx.Response(200, content=content),
+ client=client,
+ stream=False,
+ stream_cls=None,
+ cast_to=str,
+ options=FinalRequestOptions.construct(method="get", url="/foo"),
+ )
+
+ result = await response.parse(to=bool)
+ assert result is expected
+
+
class OtherModel(BaseModel):
a: str