|
1 | | -import httpx |
2 | | -import pytest |
3 | | -from openai import AsyncOpenAI, DefaultAsyncHttpxClient |
4 | | - |
5 | | -@pytest.mark.anyio |
6 | | -async def test_images_generate_includes_content_filter_results_async(): |
7 | | - """ |
8 | | - Ensure the Image model exposes optional fields returned by the API, |
9 | | - specifically `content_filter_results` (keeping `revised_prompt` coverage). |
10 | | - """ |
11 | | - mock_json = { |
12 | | - "created": 1711111111, |
13 | | - "data": [ |
14 | | - { |
15 | | - "url": "https://example.test/cat.png", |
16 | | - "revised_prompt": "a cute cat wearing sunglasses", |
17 | | - "content_filter_results": { |
18 | | - "sexual_minors": {"filtered": False}, |
19 | | - "violence": {"filtered": False}, |
20 | | - }, |
21 | | - } |
22 | | - ], |
23 | | - } |
24 | | - |
25 | | - # Async handler because we'll use AsyncOpenAI (httpx.AsyncClient under the hood) |
26 | | - async def ahandler(request: httpx.Request) -> httpx.Response: |
27 | | - assert "images" in str(request.url).lower() |
28 | | - return httpx.Response(200, json=mock_json) |
29 | | - |
30 | | - atransport = httpx.MockTransport(ahandler) |
31 | | - |
32 | | - client = AsyncOpenAI( |
33 | | - api_key="test", |
34 | | - http_client=DefaultAsyncHttpxClient(transport=atransport), |
35 | | - timeout=10.0, |
36 | | - ) |
37 | | - |
38 | | - resp = await client.images.generate(model="gpt-image-1", prompt="cat with glasses") # type: ignore |
39 | | - |
40 | | - assert hasattr(resp, "data") and isinstance(resp.data, list) and resp.data |
41 | | - item = resp.data[0] |
42 | | - |
43 | | - # existing field |
44 | | - assert item.revised_prompt == "a cute cat wearing sunglasses" |
45 | | - |
46 | | - # new optional field |
47 | | - cfr = item.content_filter_results |
48 | | - assert isinstance(cfr, dict), f"content_filter_results should be dict, got {type(cfr)}" |
49 | | - assert cfr.get("violence", {}).get("filtered") is False |
50 | | - assert cfr.get("sexual_minors", {}).get("filtered") is False |
| 1 | +import httpx |
| 2 | +import pytest |
| 3 | +from openai import AsyncOpenAI, DefaultAsyncHttpxClient |
| 4 | + |
| 5 | +@pytest.mark.anyio |
| 6 | +async def test_images_generate_includes_content_filter_results_async(): |
| 7 | + """ |
| 8 | + Ensure the Image model exposes optional fields returned by the API, |
| 9 | + specifically `content_filter_results` (keeping `revised_prompt` coverage). |
| 10 | + """ |
| 11 | + mock_json = { |
| 12 | + "created": 1711111111, |
| 13 | + "data": [ |
| 14 | + { |
| 15 | + "url": "https://example.test/cat.png", |
| 16 | + "revised_prompt": "a cute cat wearing sunglasses", |
| 17 | + "content_filter_results": { |
| 18 | + "sexual_minors": {"filtered": False}, |
| 19 | + "violence": {"filtered": False}, |
| 20 | + }, |
| 21 | + } |
| 22 | + ], |
| 23 | + } |
| 24 | + |
| 25 | + # Async handler because we'll use AsyncOpenAI (httpx.AsyncClient under the hood) |
| 26 | + async def ahandler(request: httpx.Request) -> httpx.Response: |
| 27 | + assert "images" in str(request.url).lower() |
| 28 | + return httpx.Response(200, json=mock_json) |
| 29 | + |
| 30 | + atransport = httpx.MockTransport(ahandler) |
| 31 | + |
| 32 | + client = AsyncOpenAI( |
| 33 | + api_key="test", |
| 34 | + http_client=DefaultAsyncHttpxClient(transport=atransport), |
| 35 | + timeout=10.0, |
| 36 | + ) |
| 37 | + |
| 38 | + resp = await client.images.generate(model="gpt-image-1", prompt="cat with glasses") # type: ignore |
| 39 | + |
| 40 | + assert hasattr(resp, "data") and isinstance(resp.data, list) and resp.data |
| 41 | + item = resp.data[0] |
| 42 | + |
| 43 | + # existing field |
| 44 | + assert item.revised_prompt == "a cute cat wearing sunglasses" |
| 45 | + |
| 46 | + # new optional field |
| 47 | + cfr = item.content_filter_results |
| 48 | + assert isinstance(cfr, dict), f"content_filter_results should be dict, got {type(cfr)}" |
| 49 | + assert cfr.get("violence", {}).get("filtered") is False |
| 50 | + assert cfr.get("sexual_minors", {}).get("filtered") is False |
0 commit comments