main
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.fine_tuning import (
14 FineTuningJob,
15 FineTuningJobEvent,
16)
17
18base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
19
20
21class TestJobs:
22 parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
23
24 @parametrize
25 def test_method_create(self, client: OpenAI) -> None:
26 job = client.fine_tuning.jobs.create(
27 model="gpt-4o-mini",
28 training_file="file-abc123",
29 )
30 assert_matches_type(FineTuningJob, job, path=["response"])
31
32 @parametrize
33 def test_method_create_with_all_params(self, client: OpenAI) -> None:
34 job = client.fine_tuning.jobs.create(
35 model="gpt-4o-mini",
36 training_file="file-abc123",
37 hyperparameters={
38 "batch_size": "auto",
39 "learning_rate_multiplier": "auto",
40 "n_epochs": "auto",
41 },
42 integrations=[
43 {
44 "type": "wandb",
45 "wandb": {
46 "project": "my-wandb-project",
47 "entity": "entity",
48 "name": "name",
49 "tags": ["custom-tag"],
50 },
51 }
52 ],
53 metadata={"foo": "string"},
54 method={
55 "type": "supervised",
56 "dpo": {
57 "hyperparameters": {
58 "batch_size": "auto",
59 "beta": "auto",
60 "learning_rate_multiplier": "auto",
61 "n_epochs": "auto",
62 }
63 },
64 "reinforcement": {
65 "grader": {
66 "input": "input",
67 "name": "name",
68 "operation": "eq",
69 "reference": "reference",
70 "type": "string_check",
71 },
72 "hyperparameters": {
73 "batch_size": "auto",
74 "compute_multiplier": "auto",
75 "eval_interval": "auto",
76 "eval_samples": "auto",
77 "learning_rate_multiplier": "auto",
78 "n_epochs": "auto",
79 "reasoning_effort": "default",
80 },
81 },
82 "supervised": {
83 "hyperparameters": {
84 "batch_size": "auto",
85 "learning_rate_multiplier": "auto",
86 "n_epochs": "auto",
87 }
88 },
89 },
90 seed=42,
91 suffix="x",
92 validation_file="file-abc123",
93 )
94 assert_matches_type(FineTuningJob, job, path=["response"])
95
96 @parametrize
97 def test_raw_response_create(self, client: OpenAI) -> None:
98 response = client.fine_tuning.jobs.with_raw_response.create(
99 model="gpt-4o-mini",
100 training_file="file-abc123",
101 )
102
103 assert response.is_closed is True
104 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
105 job = response.parse()
106 assert_matches_type(FineTuningJob, job, path=["response"])
107
108 @parametrize
109 def test_streaming_response_create(self, client: OpenAI) -> None:
110 with client.fine_tuning.jobs.with_streaming_response.create(
111 model="gpt-4o-mini",
112 training_file="file-abc123",
113 ) as response:
114 assert not response.is_closed
115 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
116
117 job = response.parse()
118 assert_matches_type(FineTuningJob, job, path=["response"])
119
120 assert cast(Any, response.is_closed) is True
121
122 @parametrize
123 def test_method_retrieve(self, client: OpenAI) -> None:
124 job = client.fine_tuning.jobs.retrieve(
125 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
126 )
127 assert_matches_type(FineTuningJob, job, path=["response"])
128
129 @parametrize
130 def test_raw_response_retrieve(self, client: OpenAI) -> None:
131 response = client.fine_tuning.jobs.with_raw_response.retrieve(
132 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
133 )
134
135 assert response.is_closed is True
136 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
137 job = response.parse()
138 assert_matches_type(FineTuningJob, job, path=["response"])
139
140 @parametrize
141 def test_streaming_response_retrieve(self, client: OpenAI) -> None:
142 with client.fine_tuning.jobs.with_streaming_response.retrieve(
143 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
144 ) as response:
145 assert not response.is_closed
146 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
147
148 job = response.parse()
149 assert_matches_type(FineTuningJob, job, path=["response"])
150
151 assert cast(Any, response.is_closed) is True
152
153 @parametrize
154 def test_path_params_retrieve(self, client: OpenAI) -> None:
155 with pytest.raises(ValueError, match=r"Expected a non-empty value for `fine_tuning_job_id` but received ''"):
156 client.fine_tuning.jobs.with_raw_response.retrieve(
157 "",
158 )
159
160 @parametrize
161 def test_method_list(self, client: OpenAI) -> None:
162 job = client.fine_tuning.jobs.list()
163 assert_matches_type(SyncCursorPage[FineTuningJob], job, path=["response"])
164
165 @parametrize
166 def test_method_list_with_all_params(self, client: OpenAI) -> None:
167 job = client.fine_tuning.jobs.list(
168 after="string",
169 limit=0,
170 metadata={"foo": "string"},
171 )
172 assert_matches_type(SyncCursorPage[FineTuningJob], job, path=["response"])
173
174 @parametrize
175 def test_raw_response_list(self, client: OpenAI) -> None:
176 response = client.fine_tuning.jobs.with_raw_response.list()
177
178 assert response.is_closed is True
179 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
180 job = response.parse()
181 assert_matches_type(SyncCursorPage[FineTuningJob], job, path=["response"])
182
183 @parametrize
184 def test_streaming_response_list(self, client: OpenAI) -> None:
185 with client.fine_tuning.jobs.with_streaming_response.list() as response:
186 assert not response.is_closed
187 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
188
189 job = response.parse()
190 assert_matches_type(SyncCursorPage[FineTuningJob], job, path=["response"])
191
192 assert cast(Any, response.is_closed) is True
193
194 @parametrize
195 def test_method_cancel(self, client: OpenAI) -> None:
196 job = client.fine_tuning.jobs.cancel(
197 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
198 )
199 assert_matches_type(FineTuningJob, job, path=["response"])
200
201 @parametrize
202 def test_raw_response_cancel(self, client: OpenAI) -> None:
203 response = client.fine_tuning.jobs.with_raw_response.cancel(
204 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
205 )
206
207 assert response.is_closed is True
208 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
209 job = response.parse()
210 assert_matches_type(FineTuningJob, job, path=["response"])
211
212 @parametrize
213 def test_streaming_response_cancel(self, client: OpenAI) -> None:
214 with client.fine_tuning.jobs.with_streaming_response.cancel(
215 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
216 ) as response:
217 assert not response.is_closed
218 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
219
220 job = response.parse()
221 assert_matches_type(FineTuningJob, job, path=["response"])
222
223 assert cast(Any, response.is_closed) is True
224
225 @parametrize
226 def test_path_params_cancel(self, client: OpenAI) -> None:
227 with pytest.raises(ValueError, match=r"Expected a non-empty value for `fine_tuning_job_id` but received ''"):
228 client.fine_tuning.jobs.with_raw_response.cancel(
229 "",
230 )
231
232 @parametrize
233 def test_method_list_events(self, client: OpenAI) -> None:
234 job = client.fine_tuning.jobs.list_events(
235 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
236 )
237 assert_matches_type(SyncCursorPage[FineTuningJobEvent], job, path=["response"])
238
239 @parametrize
240 def test_method_list_events_with_all_params(self, client: OpenAI) -> None:
241 job = client.fine_tuning.jobs.list_events(
242 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
243 after="string",
244 limit=0,
245 )
246 assert_matches_type(SyncCursorPage[FineTuningJobEvent], job, path=["response"])
247
248 @parametrize
249 def test_raw_response_list_events(self, client: OpenAI) -> None:
250 response = client.fine_tuning.jobs.with_raw_response.list_events(
251 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
252 )
253
254 assert response.is_closed is True
255 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
256 job = response.parse()
257 assert_matches_type(SyncCursorPage[FineTuningJobEvent], job, path=["response"])
258
259 @parametrize
260 def test_streaming_response_list_events(self, client: OpenAI) -> None:
261 with client.fine_tuning.jobs.with_streaming_response.list_events(
262 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
263 ) as response:
264 assert not response.is_closed
265 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
266
267 job = response.parse()
268 assert_matches_type(SyncCursorPage[FineTuningJobEvent], job, path=["response"])
269
270 assert cast(Any, response.is_closed) is True
271
272 @parametrize
273 def test_path_params_list_events(self, client: OpenAI) -> None:
274 with pytest.raises(ValueError, match=r"Expected a non-empty value for `fine_tuning_job_id` but received ''"):
275 client.fine_tuning.jobs.with_raw_response.list_events(
276 "",
277 )
278
279 @parametrize
280 def test_method_pause(self, client: OpenAI) -> None:
281 job = client.fine_tuning.jobs.pause(
282 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
283 )
284 assert_matches_type(FineTuningJob, job, path=["response"])
285
286 @parametrize
287 def test_raw_response_pause(self, client: OpenAI) -> None:
288 response = client.fine_tuning.jobs.with_raw_response.pause(
289 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
290 )
291
292 assert response.is_closed is True
293 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
294 job = response.parse()
295 assert_matches_type(FineTuningJob, job, path=["response"])
296
297 @parametrize
298 def test_streaming_response_pause(self, client: OpenAI) -> None:
299 with client.fine_tuning.jobs.with_streaming_response.pause(
300 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
301 ) as response:
302 assert not response.is_closed
303 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
304
305 job = response.parse()
306 assert_matches_type(FineTuningJob, job, path=["response"])
307
308 assert cast(Any, response.is_closed) is True
309
310 @parametrize
311 def test_path_params_pause(self, client: OpenAI) -> None:
312 with pytest.raises(ValueError, match=r"Expected a non-empty value for `fine_tuning_job_id` but received ''"):
313 client.fine_tuning.jobs.with_raw_response.pause(
314 "",
315 )
316
317 @parametrize
318 def test_method_resume(self, client: OpenAI) -> None:
319 job = client.fine_tuning.jobs.resume(
320 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
321 )
322 assert_matches_type(FineTuningJob, job, path=["response"])
323
324 @parametrize
325 def test_raw_response_resume(self, client: OpenAI) -> None:
326 response = client.fine_tuning.jobs.with_raw_response.resume(
327 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
328 )
329
330 assert response.is_closed is True
331 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
332 job = response.parse()
333 assert_matches_type(FineTuningJob, job, path=["response"])
334
335 @parametrize
336 def test_streaming_response_resume(self, client: OpenAI) -> None:
337 with client.fine_tuning.jobs.with_streaming_response.resume(
338 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
339 ) as response:
340 assert not response.is_closed
341 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
342
343 job = response.parse()
344 assert_matches_type(FineTuningJob, job, path=["response"])
345
346 assert cast(Any, response.is_closed) is True
347
348 @parametrize
349 def test_path_params_resume(self, client: OpenAI) -> None:
350 with pytest.raises(ValueError, match=r"Expected a non-empty value for `fine_tuning_job_id` but received ''"):
351 client.fine_tuning.jobs.with_raw_response.resume(
352 "",
353 )
354
355
356class TestAsyncJobs:
357 parametrize = pytest.mark.parametrize(
358 "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
359 )
360
361 @parametrize
362 async def test_method_create(self, async_client: AsyncOpenAI) -> None:
363 job = await async_client.fine_tuning.jobs.create(
364 model="gpt-4o-mini",
365 training_file="file-abc123",
366 )
367 assert_matches_type(FineTuningJob, job, path=["response"])
368
369 @parametrize
370 async def test_method_create_with_all_params(self, async_client: AsyncOpenAI) -> None:
371 job = await async_client.fine_tuning.jobs.create(
372 model="gpt-4o-mini",
373 training_file="file-abc123",
374 hyperparameters={
375 "batch_size": "auto",
376 "learning_rate_multiplier": "auto",
377 "n_epochs": "auto",
378 },
379 integrations=[
380 {
381 "type": "wandb",
382 "wandb": {
383 "project": "my-wandb-project",
384 "entity": "entity",
385 "name": "name",
386 "tags": ["custom-tag"],
387 },
388 }
389 ],
390 metadata={"foo": "string"},
391 method={
392 "type": "supervised",
393 "dpo": {
394 "hyperparameters": {
395 "batch_size": "auto",
396 "beta": "auto",
397 "learning_rate_multiplier": "auto",
398 "n_epochs": "auto",
399 }
400 },
401 "reinforcement": {
402 "grader": {
403 "input": "input",
404 "name": "name",
405 "operation": "eq",
406 "reference": "reference",
407 "type": "string_check",
408 },
409 "hyperparameters": {
410 "batch_size": "auto",
411 "compute_multiplier": "auto",
412 "eval_interval": "auto",
413 "eval_samples": "auto",
414 "learning_rate_multiplier": "auto",
415 "n_epochs": "auto",
416 "reasoning_effort": "default",
417 },
418 },
419 "supervised": {
420 "hyperparameters": {
421 "batch_size": "auto",
422 "learning_rate_multiplier": "auto",
423 "n_epochs": "auto",
424 }
425 },
426 },
427 seed=42,
428 suffix="x",
429 validation_file="file-abc123",
430 )
431 assert_matches_type(FineTuningJob, job, path=["response"])
432
433 @parametrize
434 async def test_raw_response_create(self, async_client: AsyncOpenAI) -> None:
435 response = await async_client.fine_tuning.jobs.with_raw_response.create(
436 model="gpt-4o-mini",
437 training_file="file-abc123",
438 )
439
440 assert response.is_closed is True
441 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
442 job = response.parse()
443 assert_matches_type(FineTuningJob, job, path=["response"])
444
445 @parametrize
446 async def test_streaming_response_create(self, async_client: AsyncOpenAI) -> None:
447 async with async_client.fine_tuning.jobs.with_streaming_response.create(
448 model="gpt-4o-mini",
449 training_file="file-abc123",
450 ) as response:
451 assert not response.is_closed
452 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
453
454 job = await response.parse()
455 assert_matches_type(FineTuningJob, job, path=["response"])
456
457 assert cast(Any, response.is_closed) is True
458
459 @parametrize
460 async def test_method_retrieve(self, async_client: AsyncOpenAI) -> None:
461 job = await async_client.fine_tuning.jobs.retrieve(
462 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
463 )
464 assert_matches_type(FineTuningJob, job, path=["response"])
465
466 @parametrize
467 async def test_raw_response_retrieve(self, async_client: AsyncOpenAI) -> None:
468 response = await async_client.fine_tuning.jobs.with_raw_response.retrieve(
469 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
470 )
471
472 assert response.is_closed is True
473 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
474 job = response.parse()
475 assert_matches_type(FineTuningJob, job, path=["response"])
476
477 @parametrize
478 async def test_streaming_response_retrieve(self, async_client: AsyncOpenAI) -> None:
479 async with async_client.fine_tuning.jobs.with_streaming_response.retrieve(
480 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
481 ) as response:
482 assert not response.is_closed
483 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
484
485 job = await response.parse()
486 assert_matches_type(FineTuningJob, job, path=["response"])
487
488 assert cast(Any, response.is_closed) is True
489
490 @parametrize
491 async def test_path_params_retrieve(self, async_client: AsyncOpenAI) -> None:
492 with pytest.raises(ValueError, match=r"Expected a non-empty value for `fine_tuning_job_id` but received ''"):
493 await async_client.fine_tuning.jobs.with_raw_response.retrieve(
494 "",
495 )
496
497 @parametrize
498 async def test_method_list(self, async_client: AsyncOpenAI) -> None:
499 job = await async_client.fine_tuning.jobs.list()
500 assert_matches_type(AsyncCursorPage[FineTuningJob], job, path=["response"])
501
502 @parametrize
503 async def test_method_list_with_all_params(self, async_client: AsyncOpenAI) -> None:
504 job = await async_client.fine_tuning.jobs.list(
505 after="string",
506 limit=0,
507 metadata={"foo": "string"},
508 )
509 assert_matches_type(AsyncCursorPage[FineTuningJob], job, path=["response"])
510
511 @parametrize
512 async def test_raw_response_list(self, async_client: AsyncOpenAI) -> None:
513 response = await async_client.fine_tuning.jobs.with_raw_response.list()
514
515 assert response.is_closed is True
516 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
517 job = response.parse()
518 assert_matches_type(AsyncCursorPage[FineTuningJob], job, path=["response"])
519
520 @parametrize
521 async def test_streaming_response_list(self, async_client: AsyncOpenAI) -> None:
522 async with async_client.fine_tuning.jobs.with_streaming_response.list() as response:
523 assert not response.is_closed
524 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
525
526 job = await response.parse()
527 assert_matches_type(AsyncCursorPage[FineTuningJob], job, path=["response"])
528
529 assert cast(Any, response.is_closed) is True
530
531 @parametrize
532 async def test_method_cancel(self, async_client: AsyncOpenAI) -> None:
533 job = await async_client.fine_tuning.jobs.cancel(
534 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
535 )
536 assert_matches_type(FineTuningJob, job, path=["response"])
537
538 @parametrize
539 async def test_raw_response_cancel(self, async_client: AsyncOpenAI) -> None:
540 response = await async_client.fine_tuning.jobs.with_raw_response.cancel(
541 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
542 )
543
544 assert response.is_closed is True
545 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
546 job = response.parse()
547 assert_matches_type(FineTuningJob, job, path=["response"])
548
549 @parametrize
550 async def test_streaming_response_cancel(self, async_client: AsyncOpenAI) -> None:
551 async with async_client.fine_tuning.jobs.with_streaming_response.cancel(
552 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
553 ) as response:
554 assert not response.is_closed
555 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
556
557 job = await response.parse()
558 assert_matches_type(FineTuningJob, job, path=["response"])
559
560 assert cast(Any, response.is_closed) is True
561
562 @parametrize
563 async def test_path_params_cancel(self, async_client: AsyncOpenAI) -> None:
564 with pytest.raises(ValueError, match=r"Expected a non-empty value for `fine_tuning_job_id` but received ''"):
565 await async_client.fine_tuning.jobs.with_raw_response.cancel(
566 "",
567 )
568
569 @parametrize
570 async def test_method_list_events(self, async_client: AsyncOpenAI) -> None:
571 job = await async_client.fine_tuning.jobs.list_events(
572 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
573 )
574 assert_matches_type(AsyncCursorPage[FineTuningJobEvent], job, path=["response"])
575
576 @parametrize
577 async def test_method_list_events_with_all_params(self, async_client: AsyncOpenAI) -> None:
578 job = await async_client.fine_tuning.jobs.list_events(
579 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
580 after="string",
581 limit=0,
582 )
583 assert_matches_type(AsyncCursorPage[FineTuningJobEvent], job, path=["response"])
584
585 @parametrize
586 async def test_raw_response_list_events(self, async_client: AsyncOpenAI) -> None:
587 response = await async_client.fine_tuning.jobs.with_raw_response.list_events(
588 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
589 )
590
591 assert response.is_closed is True
592 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
593 job = response.parse()
594 assert_matches_type(AsyncCursorPage[FineTuningJobEvent], job, path=["response"])
595
596 @parametrize
597 async def test_streaming_response_list_events(self, async_client: AsyncOpenAI) -> None:
598 async with async_client.fine_tuning.jobs.with_streaming_response.list_events(
599 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
600 ) as response:
601 assert not response.is_closed
602 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
603
604 job = await response.parse()
605 assert_matches_type(AsyncCursorPage[FineTuningJobEvent], job, path=["response"])
606
607 assert cast(Any, response.is_closed) is True
608
609 @parametrize
610 async def test_path_params_list_events(self, async_client: AsyncOpenAI) -> None:
611 with pytest.raises(ValueError, match=r"Expected a non-empty value for `fine_tuning_job_id` but received ''"):
612 await async_client.fine_tuning.jobs.with_raw_response.list_events(
613 "",
614 )
615
616 @parametrize
617 async def test_method_pause(self, async_client: AsyncOpenAI) -> None:
618 job = await async_client.fine_tuning.jobs.pause(
619 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
620 )
621 assert_matches_type(FineTuningJob, job, path=["response"])
622
623 @parametrize
624 async def test_raw_response_pause(self, async_client: AsyncOpenAI) -> None:
625 response = await async_client.fine_tuning.jobs.with_raw_response.pause(
626 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
627 )
628
629 assert response.is_closed is True
630 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
631 job = response.parse()
632 assert_matches_type(FineTuningJob, job, path=["response"])
633
634 @parametrize
635 async def test_streaming_response_pause(self, async_client: AsyncOpenAI) -> None:
636 async with async_client.fine_tuning.jobs.with_streaming_response.pause(
637 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
638 ) as response:
639 assert not response.is_closed
640 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
641
642 job = await response.parse()
643 assert_matches_type(FineTuningJob, job, path=["response"])
644
645 assert cast(Any, response.is_closed) is True
646
647 @parametrize
648 async def test_path_params_pause(self, async_client: AsyncOpenAI) -> None:
649 with pytest.raises(ValueError, match=r"Expected a non-empty value for `fine_tuning_job_id` but received ''"):
650 await async_client.fine_tuning.jobs.with_raw_response.pause(
651 "",
652 )
653
654 @parametrize
655 async def test_method_resume(self, async_client: AsyncOpenAI) -> None:
656 job = await async_client.fine_tuning.jobs.resume(
657 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
658 )
659 assert_matches_type(FineTuningJob, job, path=["response"])
660
661 @parametrize
662 async def test_raw_response_resume(self, async_client: AsyncOpenAI) -> None:
663 response = await async_client.fine_tuning.jobs.with_raw_response.resume(
664 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
665 )
666
667 assert response.is_closed is True
668 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
669 job = response.parse()
670 assert_matches_type(FineTuningJob, job, path=["response"])
671
672 @parametrize
673 async def test_streaming_response_resume(self, async_client: AsyncOpenAI) -> None:
674 async with async_client.fine_tuning.jobs.with_streaming_response.resume(
675 "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
676 ) as response:
677 assert not response.is_closed
678 assert response.http_request.headers.get("X-Stainless-Lang") == "python"
679
680 job = await response.parse()
681 assert_matches_type(FineTuningJob, job, path=["response"])
682
683 assert cast(Any, response.is_closed) is True
684
685 @parametrize
686 async def test_path_params_resume(self, async_client: AsyncOpenAI) -> None:
687 with pytest.raises(ValueError, match=r"Expected a non-empty value for `fine_tuning_job_id` but received ''"):
688 await async_client.fine_tuning.jobs.with_raw_response.resume(
689 "",
690 )