openai/openai-python

Public

mirrored from https://github.com/openai/openai-pythonAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
d137ed7c5b99515cdabd11fd6fc7bb3edef4c18c

Branches

Tags

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

Clone

HTTPS

Download ZIP

tests/api_resources/chat/test_completions.py

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