openai/openai-python

Public

mirrored fromhttps://github.com/openai/openai-pythonAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v1.63.2

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

tests/api_resources/chat/test_completions.py

825lines · modecode

1# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
3from __future__ import annotations
4
5import os
6from typing import Any, cast
7
8import pytest
9import pydantic
10
11from openai import OpenAI, AsyncOpenAI
12from tests.utils import assert_matches_type
13from openai.pagination import SyncCursorPage, AsyncCursorPage
14from openai.types.chat import (
15 ChatCompletion,
16 ChatCompletionDeleted,
17)
18
19base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
20
21
22class TestCompletions:
23 parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
24
25 @parametrize
26 def test_method_create_overload_1(self, client: OpenAI) -> None:
27 completion = client.chat.completions.create(
28 messages=[
29 {
30 "content": "string",
31 "role": "developer",
32 }
33 ],
34 model="gpt-4o",
35 )
36 assert_matches_type(ChatCompletion, completion, path=["response"])
37
38 @parametrize
39 def test_method_create_with_all_params_overload_1(self, client: OpenAI) -> None:
40 completion = client.chat.completions.create(
41 messages=[
42 {
43 "content": "string",
44 "role": "developer",
45 "name": "name",
46 }
47 ],
48 model="gpt-4o",
49 audio={
50 "format": "wav",
51 "voice": "alloy",
52 },
53 frequency_penalty=-2,
54 function_call="none",
55 functions=[
56 {
57 "name": "name",
58 "description": "description",
59 "parameters": {"foo": "bar"},
60 }
61 ],
62 logit_bias={"foo": 0},
63 logprobs=True,
64 max_completion_tokens=0,
65 max_tokens=0,
66 metadata={"foo": "string"},
67 modalities=["text"],
68 n=1,
69 parallel_tool_calls=True,
70 prediction={
71 "content": "string",
72 "type": "content",
73 },
74 presence_penalty=-2,
75 reasoning_effort="low",
76 response_format={"type": "text"},
77 seed=0,
78 service_tier="auto",
79 stop="string",
80 store=True,
81 stream=False,
82 stream_options={"include_usage": True},
83 temperature=1,
84 tool_choice="none",
85 tools=[
86 {
87 "function": {
88 "name": "name",
89 "description": "description",
90 "parameters": {"foo": "bar"},
91 "strict": True,
92 },
93 "type": "function",
94 }
95 ],
96 top_logprobs=0,
97 top_p=1,
98 user="user-1234",
99 )
100 assert_matches_type(ChatCompletion, completion, path=["response"])
101
102 @parametrize
103 def test_raw_response_create_overload_1(self, client: OpenAI) -> None:
104 response = client.chat.completions.with_raw_response.create(
105 messages=[
106 {
107 "content": "string",
108 "role": "developer",
109 }
110 ],
111 model="gpt-4o",
112 )
113
114 assert response.is_closed is True
115 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
116 completion = response.parse()
117 assert_matches_type(ChatCompletion, completion, path=["response"])
118
119 @parametrize
120 def test_streaming_response_create_overload_1(self, client: OpenAI) -> None:
121 with client.chat.completions.with_streaming_response.create(
122 messages=[
123 {
124 "content": "string",
125 "role": "developer",
126 }
127 ],
128 model="gpt-4o",
129 ) as response:
130 assert not response.is_closed
131 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
132
133 completion = response.parse()
134 assert_matches_type(ChatCompletion, completion, path=["response"])
135
136 assert cast(Any, response.is_closed) is True
137
138 @parametrize
139 def test_method_create_overload_2(self, client: OpenAI) -> None:
140 completion_stream = client.chat.completions.create(
141 messages=[
142 {
143 "content": "string",
144 "role": "developer",
145 }
146 ],
147 model="gpt-4o",
148 stream=True,
149 )
150 completion_stream.response.close()
151
152 @parametrize
153 def test_method_create_with_all_params_overload_2(self, client: OpenAI) -> None:
154 completion_stream = client.chat.completions.create(
155 messages=[
156 {
157 "content": "string",
158 "role": "developer",
159 "name": "name",
160 }
161 ],
162 model="gpt-4o",
163 stream=True,
164 audio={
165 "format": "wav",
166 "voice": "alloy",
167 },
168 frequency_penalty=-2,
169 function_call="none",
170 functions=[
171 {
172 "name": "name",
173 "description": "description",
174 "parameters": {"foo": "bar"},
175 }
176 ],
177 logit_bias={"foo": 0},
178 logprobs=True,
179 max_completion_tokens=0,
180 max_tokens=0,
181 metadata={"foo": "string"},
182 modalities=["text"],
183 n=1,
184 parallel_tool_calls=True,
185 prediction={
186 "content": "string",
187 "type": "content",
188 },
189 presence_penalty=-2,
190 reasoning_effort="low",
191 response_format={"type": "text"},
192 seed=0,
193 service_tier="auto",
194 stop="string",
195 store=True,
196 stream_options={"include_usage": True},
197 temperature=1,
198 tool_choice="none",
199 tools=[
200 {
201 "function": {
202 "name": "name",
203 "description": "description",
204 "parameters": {"foo": "bar"},
205 "strict": True,
206 },
207 "type": "function",
208 }
209 ],
210 top_logprobs=0,
211 top_p=1,
212 user="user-1234",
213 )
214 completion_stream.response.close()
215
216 @parametrize
217 def test_raw_response_create_overload_2(self, client: OpenAI) -> None:
218 response = client.chat.completions.with_raw_response.create(
219 messages=[
220 {
221 "content": "string",
222 "role": "developer",
223 }
224 ],
225 model="gpt-4o",
226 stream=True,
227 )
228
229 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
230 stream = response.parse()
231 stream.close()
232
233 @parametrize
234 def test_streaming_response_create_overload_2(self, client: OpenAI) -> None:
235 with client.chat.completions.with_streaming_response.create(
236 messages=[
237 {
238 "content": "string",
239 "role": "developer",
240 }
241 ],
242 model="gpt-4o",
243 stream=True,
244 ) as response:
245 assert not response.is_closed
246 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
247
248 stream = response.parse()
249 stream.close()
250
251 assert cast(Any, response.is_closed) is True
252
253 @parametrize
254 def test_method_retrieve(self, client: OpenAI) -> None:
255 completion = client.chat.completions.retrieve(
256 "completion_id",
257 )
258 assert_matches_type(ChatCompletion, completion, path=["response"])
259
260 @parametrize
261 def test_raw_response_retrieve(self, client: OpenAI) -> None:
262 response = client.chat.completions.with_raw_response.retrieve(
263 "completion_id",
264 )
265
266 assert response.is_closed is True
267 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
268 completion = response.parse()
269 assert_matches_type(ChatCompletion, completion, path=["response"])
270
271 @parametrize
272 def test_streaming_response_retrieve(self, client: OpenAI) -> None:
273 with client.chat.completions.with_streaming_response.retrieve(
274 "completion_id",
275 ) as response:
276 assert not response.is_closed
277 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
278
279 completion = response.parse()
280 assert_matches_type(ChatCompletion, completion, path=["response"])
281
282 assert cast(Any, response.is_closed) is True
283
284 @parametrize
285 def test_path_params_retrieve(self, client: OpenAI) -> None:
286 with pytest.raises(ValueError, match=r"Expected a non-empty value for `completion_id` but received ''"):
287 client.chat.completions.with_raw_response.retrieve(
288 "",
289 )
290
291 @parametrize
292 def test_method_update(self, client: OpenAI) -> None:
293 completion = client.chat.completions.update(
294 completion_id="completion_id",
295 metadata={"foo": "string"},
296 )
297 assert_matches_type(ChatCompletion, completion, path=["response"])
298
299 @parametrize
300 def test_raw_response_update(self, client: OpenAI) -> None:
301 response = client.chat.completions.with_raw_response.update(
302 completion_id="completion_id",
303 metadata={"foo": "string"},
304 )
305
306 assert response.is_closed is True
307 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
308 completion = response.parse()
309 assert_matches_type(ChatCompletion, completion, path=["response"])
310
311 @parametrize
312 def test_streaming_response_update(self, client: OpenAI) -> None:
313 with client.chat.completions.with_streaming_response.update(
314 completion_id="completion_id",
315 metadata={"foo": "string"},
316 ) as response:
317 assert not response.is_closed
318 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
319
320 completion = response.parse()
321 assert_matches_type(ChatCompletion, completion, path=["response"])
322
323 assert cast(Any, response.is_closed) is True
324
325 @parametrize
326 def test_path_params_update(self, client: OpenAI) -> None:
327 with pytest.raises(ValueError, match=r"Expected a non-empty value for `completion_id` but received ''"):
328 client.chat.completions.with_raw_response.update(
329 completion_id="",
330 metadata={"foo": "string"},
331 )
332
333 @parametrize
334 def test_method_list(self, client: OpenAI) -> None:
335 completion = client.chat.completions.list()
336 assert_matches_type(SyncCursorPage[ChatCompletion], completion, path=["response"])
337
338 @parametrize
339 def test_method_list_with_all_params(self, client: OpenAI) -> None:
340 completion = client.chat.completions.list(
341 after="after",
342 limit=0,
343 metadata={"foo": "string"},
344 model="model",
345 order="asc",
346 )
347 assert_matches_type(SyncCursorPage[ChatCompletion], completion, path=["response"])
348
349 @parametrize
350 def test_raw_response_list(self, client: OpenAI) -> None:
351 response = client.chat.completions.with_raw_response.list()
352
353 assert response.is_closed is True
354 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
355 completion = response.parse()
356 assert_matches_type(SyncCursorPage[ChatCompletion], completion, path=["response"])
357
358 @parametrize
359 def test_streaming_response_list(self, client: OpenAI) -> None:
360 with client.chat.completions.with_streaming_response.list() as response:
361 assert not response.is_closed
362 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
363
364 completion = response.parse()
365 assert_matches_type(SyncCursorPage[ChatCompletion], completion, path=["response"])
366
367 assert cast(Any, response.is_closed) is True
368
369 @parametrize
370 def test_method_delete(self, client: OpenAI) -> None:
371 completion = client.chat.completions.delete(
372 "completion_id",
373 )
374 assert_matches_type(ChatCompletionDeleted, completion, path=["response"])
375
376 @parametrize
377 def test_raw_response_delete(self, client: OpenAI) -> None:
378 response = client.chat.completions.with_raw_response.delete(
379 "completion_id",
380 )
381
382 assert response.is_closed is True
383 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
384 completion = response.parse()
385 assert_matches_type(ChatCompletionDeleted, completion, path=["response"])
386
387 @parametrize
388 def test_streaming_response_delete(self, client: OpenAI) -> None:
389 with client.chat.completions.with_streaming_response.delete(
390 "completion_id",
391 ) as response:
392 assert not response.is_closed
393 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
394
395 completion = response.parse()
396 assert_matches_type(ChatCompletionDeleted, completion, path=["response"])
397
398 assert cast(Any, response.is_closed) is True
399
400 @parametrize
401 def test_path_params_delete(self, client: OpenAI) -> None:
402 with pytest.raises(ValueError, match=r"Expected a non-empty value for `completion_id` but received ''"):
403 client.chat.completions.with_raw_response.delete(
404 "",
405 )
406
407 @parametrize
408 def test_method_create_disallows_pydantic(self, client: OpenAI) -> None:
409 class MyModel(pydantic.BaseModel):
410 a: str
411
412 with pytest.raises(TypeError, match=r"You tried to pass a `BaseModel` class"):
413 client.chat.completions.create(
414 messages=[
415 {
416 "content": "string",
417 "role": "system",
418 }
419 ],
420 model="gpt-4o",
421 response_format=cast(Any, MyModel),
422 )
423
424
425class TestAsyncCompletions:
426 parametrize = pytest.mark.parametrize("async_client", [False, True], indirect=True, ids=["loose", "strict"])
427
428 @parametrize
429 async def test_method_create_overload_1(self, async_client: AsyncOpenAI) -> None:
430 completion = await async_client.chat.completions.create(
431 messages=[
432 {
433 "content": "string",
434 "role": "developer",
435 }
436 ],
437 model="gpt-4o",
438 )
439 assert_matches_type(ChatCompletion, completion, path=["response"])
440
441 @parametrize
442 async def test_method_create_with_all_params_overload_1(self, async_client: AsyncOpenAI) -> None:
443 completion = await async_client.chat.completions.create(
444 messages=[
445 {
446 "content": "string",
447 "role": "developer",
448 "name": "name",
449 }
450 ],
451 model="gpt-4o",
452 audio={
453 "format": "wav",
454 "voice": "alloy",
455 },
456 frequency_penalty=-2,
457 function_call="none",
458 functions=[
459 {
460 "name": "name",
461 "description": "description",
462 "parameters": {"foo": "bar"},
463 }
464 ],
465 logit_bias={"foo": 0},
466 logprobs=True,
467 max_completion_tokens=0,
468 max_tokens=0,
469 metadata={"foo": "string"},
470 modalities=["text"],
471 n=1,
472 parallel_tool_calls=True,
473 prediction={
474 "content": "string",
475 "type": "content",
476 },
477 presence_penalty=-2,
478 reasoning_effort="low",
479 response_format={"type": "text"},
480 seed=0,
481 service_tier="auto",
482 stop="string",
483 store=True,
484 stream=False,
485 stream_options={"include_usage": True},
486 temperature=1,
487 tool_choice="none",
488 tools=[
489 {
490 "function": {
491 "name": "name",
492 "description": "description",
493 "parameters": {"foo": "bar"},
494 "strict": True,
495 },
496 "type": "function",
497 }
498 ],
499 top_logprobs=0,
500 top_p=1,
501 user="user-1234",
502 )
503 assert_matches_type(ChatCompletion, completion, path=["response"])
504
505 @parametrize
506 async def test_raw_response_create_overload_1(self, async_client: AsyncOpenAI) -> None:
507 response = await async_client.chat.completions.with_raw_response.create(
508 messages=[
509 {
510 "content": "string",
511 "role": "developer",
512 }
513 ],
514 model="gpt-4o",
515 )
516
517 assert response.is_closed is True
518 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
519 completion = response.parse()
520 assert_matches_type(ChatCompletion, completion, path=["response"])
521
522 @parametrize
523 async def test_streaming_response_create_overload_1(self, async_client: AsyncOpenAI) -> None:
524 async with async_client.chat.completions.with_streaming_response.create(
525 messages=[
526 {
527 "content": "string",
528 "role": "developer",
529 }
530 ],
531 model="gpt-4o",
532 ) as response:
533 assert not response.is_closed
534 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
535
536 completion = await response.parse()
537 assert_matches_type(ChatCompletion, completion, path=["response"])
538
539 assert cast(Any, response.is_closed) is True
540
541 @parametrize
542 async def test_method_create_overload_2(self, async_client: AsyncOpenAI) -> None:
543 completion_stream = await async_client.chat.completions.create(
544 messages=[
545 {
546 "content": "string",
547 "role": "developer",
548 }
549 ],
550 model="gpt-4o",
551 stream=True,
552 )
553 await completion_stream.response.aclose()
554
555 @parametrize
556 async def test_method_create_with_all_params_overload_2(self, async_client: AsyncOpenAI) -> None:
557 completion_stream = await async_client.chat.completions.create(
558 messages=[
559 {
560 "content": "string",
561 "role": "developer",
562 "name": "name",
563 }
564 ],
565 model="gpt-4o",
566 stream=True,
567 audio={
568 "format": "wav",
569 "voice": "alloy",
570 },
571 frequency_penalty=-2,
572 function_call="none",
573 functions=[
574 {
575 "name": "name",
576 "description": "description",
577 "parameters": {"foo": "bar"},
578 }
579 ],
580 logit_bias={"foo": 0},
581 logprobs=True,
582 max_completion_tokens=0,
583 max_tokens=0,
584 metadata={"foo": "string"},
585 modalities=["text"],
586 n=1,
587 parallel_tool_calls=True,
588 prediction={
589 "content": "string",
590 "type": "content",
591 },
592 presence_penalty=-2,
593 reasoning_effort="low",
594 response_format={"type": "text"},
595 seed=0,
596 service_tier="auto",
597 stop="string",
598 store=True,
599 stream_options={"include_usage": True},
600 temperature=1,
601 tool_choice="none",
602 tools=[
603 {
604 "function": {
605 "name": "name",
606 "description": "description",
607 "parameters": {"foo": "bar"},
608 "strict": True,
609 },
610 "type": "function",
611 }
612 ],
613 top_logprobs=0,
614 top_p=1,
615 user="user-1234",
616 )
617 await completion_stream.response.aclose()
618
619 @parametrize
620 async def test_raw_response_create_overload_2(self, async_client: AsyncOpenAI) -> None:
621 response = await async_client.chat.completions.with_raw_response.create(
622 messages=[
623 {
624 "content": "string",
625 "role": "developer",
626 }
627 ],
628 model="gpt-4o",
629 stream=True,
630 )
631
632 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
633 stream = response.parse()
634 await stream.close()
635
636 @parametrize
637 async def test_streaming_response_create_overload_2(self, async_client: AsyncOpenAI) -> None:
638 async with async_client.chat.completions.with_streaming_response.create(
639 messages=[
640 {
641 "content": "string",
642 "role": "developer",
643 }
644 ],
645 model="gpt-4o",
646 stream=True,
647 ) as response:
648 assert not response.is_closed
649 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
650
651 stream = await response.parse()
652 await stream.close()
653
654 assert cast(Any, response.is_closed) is True
655
656 @parametrize
657 async def test_method_retrieve(self, async_client: AsyncOpenAI) -> None:
658 completion = await async_client.chat.completions.retrieve(
659 "completion_id",
660 )
661 assert_matches_type(ChatCompletion, completion, path=["response"])
662
663 @parametrize
664 async def test_raw_response_retrieve(self, async_client: AsyncOpenAI) -> None:
665 response = await async_client.chat.completions.with_raw_response.retrieve(
666 "completion_id",
667 )
668
669 assert response.is_closed is True
670 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
671 completion = response.parse()
672 assert_matches_type(ChatCompletion, completion, path=["response"])
673
674 @parametrize
675 async def test_streaming_response_retrieve(self, async_client: AsyncOpenAI) -> None:
676 async with async_client.chat.completions.with_streaming_response.retrieve(
677 "completion_id",
678 ) as response:
679 assert not response.is_closed
680 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
681
682 completion = await response.parse()
683 assert_matches_type(ChatCompletion, completion, path=["response"])
684
685 assert cast(Any, response.is_closed) is True
686
687 @parametrize
688 async def test_path_params_retrieve(self, async_client: AsyncOpenAI) -> None:
689 with pytest.raises(ValueError, match=r"Expected a non-empty value for `completion_id` but received ''"):
690 await async_client.chat.completions.with_raw_response.retrieve(
691 "",
692 )
693
694 @parametrize
695 async def test_method_update(self, async_client: AsyncOpenAI) -> None:
696 completion = await async_client.chat.completions.update(
697 completion_id="completion_id",
698 metadata={"foo": "string"},
699 )
700 assert_matches_type(ChatCompletion, completion, path=["response"])
701
702 @parametrize
703 async def test_raw_response_update(self, async_client: AsyncOpenAI) -> None:
704 response = await async_client.chat.completions.with_raw_response.update(
705 completion_id="completion_id",
706 metadata={"foo": "string"},
707 )
708
709 assert response.is_closed is True
710 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
711 completion = response.parse()
712 assert_matches_type(ChatCompletion, completion, path=["response"])
713
714 @parametrize
715 async def test_streaming_response_update(self, async_client: AsyncOpenAI) -> None:
716 async with async_client.chat.completions.with_streaming_response.update(
717 completion_id="completion_id",
718 metadata={"foo": "string"},
719 ) as response:
720 assert not response.is_closed
721 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
722
723 completion = await response.parse()
724 assert_matches_type(ChatCompletion, completion, path=["response"])
725
726 assert cast(Any, response.is_closed) is True
727
728 @parametrize
729 async def test_path_params_update(self, async_client: AsyncOpenAI) -> None:
730 with pytest.raises(ValueError, match=r"Expected a non-empty value for `completion_id` but received ''"):
731 await async_client.chat.completions.with_raw_response.update(
732 completion_id="",
733 metadata={"foo": "string"},
734 )
735
736 @parametrize
737 async def test_method_list(self, async_client: AsyncOpenAI) -> None:
738 completion = await async_client.chat.completions.list()
739 assert_matches_type(AsyncCursorPage[ChatCompletion], completion, path=["response"])
740
741 @parametrize
742 async def test_method_list_with_all_params(self, async_client: AsyncOpenAI) -> None:
743 completion = await async_client.chat.completions.list(
744 after="after",
745 limit=0,
746 metadata={"foo": "string"},
747 model="model",
748 order="asc",
749 )
750 assert_matches_type(AsyncCursorPage[ChatCompletion], completion, path=["response"])
751
752 @parametrize
753 async def test_raw_response_list(self, async_client: AsyncOpenAI) -> None:
754 response = await async_client.chat.completions.with_raw_response.list()
755
756 assert response.is_closed is True
757 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
758 completion = response.parse()
759 assert_matches_type(AsyncCursorPage[ChatCompletion], completion, path=["response"])
760
761 @parametrize
762 async def test_streaming_response_list(self, async_client: AsyncOpenAI) -> None:
763 async with async_client.chat.completions.with_streaming_response.list() as response:
764 assert not response.is_closed
765 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
766
767 completion = await response.parse()
768 assert_matches_type(AsyncCursorPage[ChatCompletion], completion, path=["response"])
769
770 assert cast(Any, response.is_closed) is True
771
772 @parametrize
773 async def test_method_delete(self, async_client: AsyncOpenAI) -> None:
774 completion = await async_client.chat.completions.delete(
775 "completion_id",
776 )
777 assert_matches_type(ChatCompletionDeleted, completion, path=["response"])
778
779 @parametrize
780 async def test_raw_response_delete(self, async_client: AsyncOpenAI) -> None:
781 response = await async_client.chat.completions.with_raw_response.delete(
782 "completion_id",
783 )
784
785 assert response.is_closed is True
786 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
787 completion = response.parse()
788 assert_matches_type(ChatCompletionDeleted, completion, path=["response"])
789
790 @parametrize
791 async def test_streaming_response_delete(self, async_client: AsyncOpenAI) -> None:
792 async with async_client.chat.completions.with_streaming_response.delete(
793 "completion_id",
794 ) as response:
795 assert not response.is_closed
796 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
797
798 completion = await response.parse()
799 assert_matches_type(ChatCompletionDeleted, completion, path=["response"])
800
801 assert cast(Any, response.is_closed) is True
802
803 @parametrize
804 async def test_path_params_delete(self, async_client: AsyncOpenAI) -> None:
805 with pytest.raises(ValueError, match=r"Expected a non-empty value for `completion_id` but received ''"):
806 await async_client.chat.completions.with_raw_response.delete(
807 "",
808 )
809
810 @parametrize
811 async def test_method_create_disallows_pydantic(self, async_client: AsyncOpenAI) -> None:
812 class MyModel(pydantic.BaseModel):
813 a: str
814
815 with pytest.raises(TypeError, match=r"You tried to pass a `BaseModel` class"):
816 await async_client.chat.completions.create(
817 messages=[
818 {
819 "content": "string",
820 "role": "system",
821 }
822 ],
823 model="gpt-4o",
824 response_format=cast(Any, MyModel),
825 )