Files
litellm/tests/local_testing/test_text_completion.py
T
Jugal D. Bhatt aea0605eed [LLM Translation] Fix Realtime API endpoint for no intent (#13476)
* fix intent params

* Add responses

* fix unrelated test

* test fix - fireworks API endpoint is down

* test fix fireworks ai is having an active outage

* test_completion_cost_databricks

* dbrx fix test API currently not responding

* Update OpenAI Realtime handler to use the correct endpoint and include all query parameters. Adjusted error messages for missing API base and key. Updated health check URL construction to pass model as a query parameter.

* Enhance OpenAI Realtime handler tests to ensure model parameter inclusion in WebSocket URL. Added new tests to verify correct URL construction with model and additional parameters, preventing 'missing_model' errors. Updated existing tests for consistency.

* Remove debug print statements for API base and key in OpenAIRealtime handler to clean up the code.

---------

Co-authored-by: Ishaan Jaff <ishaanjaffer0324@gmail.com>
2025-08-14 16:24:14 -07:00

4222 lines
86 KiB
Python

import asyncio
import json
import os
import sys
import traceback
from dotenv import load_dotenv
load_dotenv()
import io
import os
sys.path.insert(
0, os.path.abspath("../..")
) # Adds the parent directory to the system path
from unittest.mock import MagicMock, patch
import pytest
import litellm
from litellm import (
RateLimitError,
TextCompletionResponse,
atext_completion,
completion,
completion_cost,
embedding,
text_completion,
)
litellm.num_retries = 3
token_prompt = [
[
32,
2043,
32,
329,
4585,
262,
1644,
14,
34,
3705,
319,
616,
47551,
30,
930,
19219,
284,
1949,
284,
787,
428,
355,
1790,
355,
1744,
981,
1390,
3307,
2622,
13,
220,
198,
198,
40,
423,
587,
351,
616,
41668,
32682,
329,
718,
812,
13,
376,
666,
32682,
468,
281,
4697,
6621,
11,
356,
1183,
869,
607,
25737,
11,
508,
318,
2579,
290,
468,
257,
642,
614,
1468,
1200,
13,
314,
373,
612,
262,
1110,
25737,
373,
287,
4827,
290,
14801,
373,
4642,
11,
673,
318,
616,
41803,
13,
2399,
2104,
1641,
468,
6412,
284,
502,
355,
465,
38074,
494,
1201,
1110,
352,
13,
314,
716,
407,
2910,
475,
356,
389,
1641,
11,
673,
3848,
502,
38074,
494,
290,
356,
423,
3993,
13801,
11,
26626,
11864,
11,
3503,
13,
220,
198,
198,
17,
812,
2084,
25737,
373,
287,
14321,
422,
2563,
13230,
13,
21051,
11,
2356,
25542,
11,
290,
47482,
897,
547,
607,
1517,
13,
1375,
550,
257,
5110,
14608,
290,
262,
1641,
7723,
1637,
284,
3758,
607,
284,
14321,
290,
477,
8389,
257,
7269,
284,
1011,
1337,
286,
14801,
13,
383,
5156,
338,
9955,
11,
25737,
338,
13850,
11,
468,
257,
47973,
14,
9979,
2762,
1693,
290,
373,
503,
286,
3240,
329,
362,
1933,
523,
339,
2492,
470,
612,
329,
477,
286,
428,
13,
220,
198,
198,
3347,
10667,
5223,
503,
706,
513,
1528,
11,
23630,
673,
373,
366,
38125,
290,
655,
2622,
257,
3338,
8399,
1911,
314,
2298,
607,
510,
11,
1011,
607,
284,
607,
2156,
11,
290,
673,
3393,
2925,
284,
7523,
20349,
290,
4144,
257,
6099,
13,
314,
836,
470,
892,
20349,
318,
257,
2563,
290,
716,
845,
386,
12,
66,
1236,
571,
292,
3584,
314,
836,
470,
7523,
11,
475,
326,
373,
407,
5035,
6402,
314,
655,
6497,
607,
510,
422,
14321,
13,
220,
198,
198,
32,
1285,
1568,
673,
373,
6294,
329,
3013,
24707,
287,
262,
12436,
1539,
819,
5722,
329,
852,
604,
1933,
2739,
11,
39398,
607,
1097,
5059,
981,
1029,
290,
318,
852,
16334,
329,
720,
1120,
74,
422,
15228,
278,
656,
257,
2156,
11,
290,
373,
12165,
503,
286,
376,
666,
32682,
338,
584,
6621,
338,
2156,
329,
32012,
262,
14595,
373,
30601,
510,
290,
2491,
357,
7091,
373,
1029,
8,
290,
262,
2104,
34624,
373,
46432,
1268,
1961,
422,
1660,
2465,
780,
8168,
2073,
1625,
1363,
329,
807,
2250,
13,
720,
1238,
11,
830,
286,
2465,
290,
5875,
5770,
511,
2156,
5096,
5017,
340,
13,
220,
198,
198,
2504,
373,
477,
938,
614,
13,
1119,
1053,
587,
287,
511,
649,
2156,
319,
511,
898,
329,
546,
718,
1933,
13,
554,
3389,
673,
1444,
34020,
290,
531,
511,
8744,
373,
4423,
572,
780,
673,
1422,
470,
423,
262,
1637,
780,
41646,
338,
37751,
1392,
32621,
510,
290,
1422,
470,
467,
832,
13,
679,
3432,
511,
2739,
8744,
9024,
492,
257,
2472,
286,
720,
4059,
13,
314,
1807,
340,
373,
13678,
306,
5789,
475,
4030,
616,
5422,
4423,
13,
1439,
468,
587,
5897,
1201,
13,
220,
198,
198,
7571,
2745,
2084,
11,
673,
1965,
502,
284,
8804,
617,
1637,
284,
651,
38464,
329,
399,
8535,
13,
3226,
1781,
314,
1101,
407,
1016,
284,
1309,
616,
41803,
393,
6621,
467,
14720,
11,
645,
2300,
644,
318,
1016,
319,
4306,
11,
523,
314,
910,
314,
1183,
307,
625,
379,
642,
13,
314,
1392,
572,
670,
1903,
290,
651,
612,
379,
362,
25,
2231,
13,
314,
1282,
287,
1262,
616,
13952,
1994,
11,
2513,
287,
11,
766,
399,
8535,
2712,
351,
36062,
287,
262,
5228,
11,
25737,
3804,
503,
319,
262,
18507,
11,
290,
16914,
319,
262,
6891,
3084,
13,
8989,
2406,
422,
257,
1641,
47655,
351,
13230,
11,
314,
760,
644,
16914,
3073,
588,
13,
314,
836,
470,
760,
703,
881,
340,
373,
11,
475,
314,
714,
423,
23529,
276,
340,
510,
290,
5901,
616,
18057,
351,
340,
13,
314,
6810,
19772,
2024,
8347,
287,
262,
2166,
2119,
290,
399,
8535,
373,
287,
3294,
11685,
286,
8242,
290,
607,
7374,
15224,
13,
383,
4894,
373,
572,
13,
383,
2156,
373,
3863,
2319,
37,
532,
340,
373,
1542,
2354,
13,
220,
198,
198,
40,
1718,
399,
8535,
284,
616,
1097,
11,
290,
1444,
16679,
329,
281,
22536,
355,
314,
373,
12008,
25737,
373,
14904,
2752,
13,
220,
314,
1422,
470,
765,
284,
10436,
290,
22601,
503,
399,
8535,
523,
314,
9658,
287,
262,
1097,
290,
1309,
607,
711,
319,
616,
3072,
1566,
262,
22536,
5284,
13,
3226,
1781,
1644,
290,
32084,
3751,
510,
355,
880,
13,
314,
4893,
262,
3074,
290,
780,
399,
8535,
338,
9955,
318,
503,
286,
3240,
1762,
11,
34020,
14,
44,
4146,
547,
1444,
13,
1649,
484,
5284,
484,
547,
5897,
290,
4692,
11,
1422,
470,
1107,
1561,
11,
1718,
399,
8535,
11,
290,
1297,
502,
284,
467,
1363,
13,
220,
198,
198,
2025,
1711,
1568,
314,
651,
1363,
290,
41668,
32682,
7893,
502,
644,
314,
1053,
1760,
13,
314,
4893,
2279,
284,
683,
290,
477,
339,
550,
373,
8993,
329,
502,
13,
18626,
262,
2104,
1641,
1541,
2993,
290,
547,
28674,
379,
502,
329,
644,
314,
550,
1760,
13,
18626,
314,
373,
366,
448,
286,
1627,
290,
8531,
1,
780,
314,
1444,
16679,
878,
4379,
611,
673,
373,
1682,
31245,
6,
278,
780,
340,
2900,
503,
673,
373,
655,
47583,
503,
422,
262,
16914,
13,
775,
8350,
329,
2250,
290,
314,
1364,
290,
3377,
262,
1755,
379,
616,
1266,
1545,
338,
2156,
290,
16896,
477,
1755,
13,
314,
3521,
470,
5412,
340,
477,
523,
314,
2900,
616,
3072,
572,
290,
3088,
284,
8960,
290,
655,
9480,
866,
13,
2011,
1266,
1545,
373,
510,
477,
1755,
351,
502,
11,
5149,
502,
314,
750,
2147,
2642,
11,
290,
314,
1101,
8788,
13,
220,
198,
198,
40,
1210,
616,
3072,
319,
290,
314,
550,
6135,
13399,
14,
37348,
1095,
13,
31515,
11,
34020,
11,
47551,
11,
41668,
32682,
11,
290,
511,
7083,
1641,
1866,
24630,
502,
13,
1119,
389,
2282,
314,
20484,
607,
1204,
11,
20484,
399,
8535,
338,
1204,
11,
925,
2279,
517,
8253,
621,
340,
2622,
284,
307,
11,
925,
340,
1171,
618,
340,
373,
257,
366,
17989,
14669,
1600,
290,
20484,
25737,
338,
8395,
286,
1683,
1972,
20750,
393,
1719,
10804,
286,
607,
1200,
757,
11,
4844,
286,
606,
1683,
765,
284,
766,
502,
757,
290,
314,
481,
1239,
766,
616,
41803,
757,
11,
290,
484,
765,
502,
284,
1414,
329,
25737,
338,
7356,
6314,
290,
20889,
502,
329,
262,
32084,
1339,
290,
7016,
12616,
13,
198,
198,
40,
716,
635,
783,
2060,
13,
1406,
319,
1353,
286,
6078,
616,
1266,
1545,
286,
838,
812,
357,
69,
666,
32682,
828,
314,
481,
4425,
616,
7962,
314,
550,
351,
683,
11,
644,
314,
3177,
616,
1641,
11,
290,
616,
399,
8535,
13,
198,
198,
40,
4988,
1254,
12361,
13,
314,
423,
12361,
9751,
284,
262,
966,
810,
314,
1101,
7960,
2130,
318,
1016,
284,
1282,
651,
366,
260,
18674,
1,
319,
502,
329,
644,
314,
750,
13,
314,
460,
470,
4483,
13,
314,
423,
2626,
767,
8059,
422,
340,
13,
314,
1101,
407,
11029,
329,
7510,
13,
314,
423,
11668,
739,
616,
2951,
13,
314,
1053,
550,
807,
50082,
12,
12545,
287,
734,
2745,
13,
1629,
717,
314,
2936,
523,
6563,
287,
616,
2551,
475,
355,
262,
1528,
467,
416,
314,
1101,
3612,
3863,
484,
547,
826,
290,
314,
815,
423,
10667,
319,
607,
878,
4585,
16679,
290,
852,
5306,
3019,
992,
13,
314,
836,
470,
1337,
546,
25737,
7471,
11,
475,
314,
750,
18344,
257,
642,
614,
1468,
1200,
1497,
422,
607,
3397,
290,
314,
1254,
12361,
546,
340,
13,
314,
760,
2130,
287,
262,
1641,
481,
1011,
607,
287,
11,
475,
340,
338,
1239,
588,
852,
351,
534,
3397,
13,
1375,
481,
1663,
510,
20315,
278,
502,
329,
340,
290,
477,
314,
1053,
1683,
1760,
318,
1842,
607,
355,
616,
898,
13,
220,
198,
198,
22367,
11,
317,
2043,
32,
30,
4222,
1037,
502,
13,
383,
14934,
318,
6600,
502,
6776,
13,
220,
198,
24361,
25,
1148,
428,
2642,
30,
198,
33706,
25,
645,
],
[
32,
2043,
32,
329,
4585,
262,
1644,
14,
34,
3705,
319,
616,
47551,
30,
930,
19219,
284,
1949,
284,
787,
428,
355,
1790,
355,
1744,
981,
1390,
3307,
2622,
13,
220,
198,
198,
40,
423,
587,
351,
616,
41668,
32682,
329,
718,
812,
13,
376,
666,
32682,
468,
281,
4697,
6621,
11,
356,
1183,
869,
607,
25737,
11,
508,
318,
2579,
290,
468,
257,
642,
614,
1468,
1200,
13,
314,
373,
612,
262,
1110,
25737,
373,
287,
4827,
290,
14801,
373,
4642,
11,
673,
318,
616,
41803,
13,
2399,
2104,
1641,
468,
6412,
284,
502,
355,
465,
38074,
494,
1201,
1110,
352,
13,
314,
716,
407,
2910,
475,
356,
389,
1641,
11,
673,
3848,
502,
38074,
494,
290,
356,
423,
3993,
13801,
11,
26626,
11864,
11,
3503,
13,
220,
198,
198,
17,
812,
2084,
25737,
373,
287,
14321,
422,
2563,
13230,
13,
21051,
11,
2356,
25542,
11,
290,
47482,
897,
547,
607,
1517,
13,
1375,
550,
257,
5110,
14608,
290,
262,
1641,
7723,
1637,
284,
3758,
607,
284,
14321,
290,
477,
8389,
257,
7269,
284,
1011,
1337,
286,
14801,
13,
383,
5156,
338,
9955,
11,
25737,
338,
13850,
11,
468,
257,
47973,
14,
9979,
2762,
1693,
290,
373,
503,
286,
3240,
329,
362,
1933,
523,
339,
2492,
470,
612,
329,
477,
286,
428,
13,
220,
198,
198,
3347,
10667,
5223,
503,
706,
513,
1528,
11,
23630,
673,
373,
366,
38125,
290,
655,
2622,
257,
3338,
8399,
1911,
314,
2298,
607,
510,
11,
1011,
607,
284,
607,
2156,
11,
290,
673,
3393,
2925,
284,
7523,
20349,
290,
4144,
257,
6099,
13,
314,
836,
470,
892,
20349,
318,
257,
2563,
290,
716,
845,
386,
12,
66,
1236,
571,
292,
3584,
314,
836,
470,
7523,
11,
475,
326,
373,
407,
5035,
6402,
314,
655,
6497,
607,
510,
422,
14321,
13,
220,
198,
198,
32,
1285,
1568,
673,
373,
6294,
329,
3013,
24707,
287,
262,
12436,
1539,
819,
5722,
329,
852,
604,
1933,
2739,
11,
39398,
607,
1097,
5059,
981,
1029,
290,
318,
852,
16334,
329,
720,
1120,
74,
422,
15228,
278,
656,
257,
2156,
11,
290,
373,
12165,
503,
286,
376,
666,
32682,
338,
584,
6621,
338,
2156,
329,
32012,
262,
14595,
373,
30601,
510,
290,
2491,
357,
7091,
373,
1029,
8,
290,
262,
2104,
34624,
373,
46432,
1268,
1961,
422,
1660,
2465,
780,
8168,
2073,
1625,
1363,
329,
807,
2250,
13,
720,
1238,
11,
830,
286,
2465,
290,
5875,
5770,
511,
2156,
5096,
5017,
340,
13,
220,
198,
198,
2504,
373,
477,
938,
614,
13,
1119,
1053,
587,
287,
511,
649,
2156,
319,
511,
898,
329,
546,
718,
1933,
13,
554,
3389,
673,
1444,
34020,
290,
531,
511,
8744,
373,
4423,
572,
780,
673,
1422,
470,
423,
262,
1637,
780,
41646,
338,
37751,
1392,
32621,
510,
290,
1422,
470,
467,
832,
13,
679,
3432,
511,
2739,
8744,
9024,
492,
257,
2472,
286,
720,
4059,
13,
314,
1807,
340,
373,
13678,
306,
5789,
475,
4030,
616,
5422,
4423,
13,
1439,
468,
587,
5897,
1201,
13,
220,
198,
198,
7571,
2745,
2084,
11,
673,
1965,
502,
284,
8804,
617,
1637,
284,
651,
38464,
329,
399,
8535,
13,
3226,
1781,
314,
1101,
407,
1016,
284,
1309,
616,
41803,
393,
6621,
467,
14720,
11,
645,
2300,
644,
318,
1016,
319,
4306,
11,
523,
314,
910,
314,
1183,
307,
625,
379,
642,
13,
314,
1392,
572,
670,
1903,
290,
651,
612,
379,
362,
25,
2231,
13,
314,
1282,
287,
1262,
616,
13952,
1994,
11,
2513,
287,
11,
766,
399,
8535,
2712,
351,
36062,
287,
262,
5228,
11,
25737,
3804,
503,
319,
262,
18507,
11,
290,
16914,
319,
262,
6891,
3084,
13,
8989,
2406,
422,
257,
1641,
47655,
351,
13230,
11,
314,
760,
644,
16914,
3073,
588,
13,
314,
836,
470,
760,
703,
881,
340,
373,
11,
475,
314,
714,
423,
23529,
276,
340,
510,
290,
5901,
616,
18057,
351,
340,
13,
314,
6810,
19772,
2024,
8347,
287,
262,
2166,
2119,
290,
399,
8535,
373,
287,
3294,
11685,
286,
8242,
290,
607,
7374,
15224,
13,
383,
4894,
373,
572,
13,
383,
2156,
373,
3863,
2319,
37,
532,
340,
373,
1542,
2354,
13,
220,
198,
198,
40,
1718,
399,
8535,
284,
616,
1097,
11,
290,
1444,
16679,
329,
281,
22536,
355,
314,
373,
12008,
25737,
373,
14904,
2752,
13,
220,
314,
1422,
470,
765,
284,
10436,
290,
22601,
503,
399,
8535,
523,
314,
9658,
287,
262,
1097,
290,
1309,
607,
711,
319,
616,
3072,
1566,
262,
22536,
5284,
13,
3226,
1781,
1644,
290,
32084,
3751,
510,
355,
880,
13,
314,
4893,
262,
3074,
290,
780,
399,
8535,
338,
9955,
318,
503,
286,
3240,
1762,
11,
34020,
14,
44,
4146,
547,
1444,
13,
1649,
484,
5284,
484,
547,
5897,
290,
4692,
11,
1422,
470,
1107,
1561,
11,
1718,
399,
8535,
11,
290,
1297,
502,
284,
467,
1363,
13,
220,
198,
198,
2025,
1711,
1568,
314,
651,
1363,
290,
41668,
32682,
7893,
502,
644,
314,
1053,
1760,
13,
314,
4893,
2279,
284,
683,
290,
477,
339,
550,
373,
8993,
329,
502,
13,
18626,
262,
2104,
1641,
1541,
2993,
290,
547,
28674,
379,
502,
329,
644,
314,
550,
1760,
13,
18626,
314,
373,
366,
448,
286,
1627,
290,
8531,
1,
780,
314,
1444,
16679,
878,
4379,
611,
673,
373,
1682,
31245,
6,
278,
780,
340,
2900,
503,
673,
373,
655,
47583,
503,
422,
262,
16914,
13,
775,
8350,
329,
2250,
290,
314,
1364,
290,
3377,
262,
1755,
379,
616,
1266,
1545,
338,
2156,
290,
16896,
477,
1755,
13,
314,
3521,
470,
5412,
340,
477,
523,
314,
2900,
616,
3072,
572,
290,
3088,
284,
8960,
290,
655,
9480,
866,
13,
2011,
1266,
1545,
373,
510,
477,
1755,
351,
502,
11,
5149,
502,
314,
750,
2147,
2642,
11,
290,
314,
1101,
8788,
13,
220,
198,
198,
40,
1210,
616,
3072,
319,
290,
314,
550,
6135,
13399,
14,
37348,
1095,
13,
31515,
11,
34020,
11,
47551,
11,
41668,
32682,
11,
290,
511,
7083,
1641,
1866,
24630,
502,
13,
1119,
389,
2282,
314,
20484,
607,
1204,
11,
20484,
399,
8535,
338,
1204,
11,
925,
2279,
517,
8253,
621,
340,
2622,
284,
307,
11,
925,
340,
1171,
618,
340,
373,
257,
366,
17989,
14669,
1600,
290,
20484,
25737,
338,
8395,
286,
1683,
1972,
20750,
393,
1719,
10804,
286,
607,
1200,
757,
11,
4844,
286,
606,
1683,
765,
284,
766,
502,
757,
290,
314,
481,
1239,
766,
616,
41803,
757,
11,
290,
484,
765,
502,
284,
1414,
329,
25737,
338,
7356,
6314,
290,
20889,
502,
329,
262,
32084,
1339,
290,
7016,
12616,
13,
198,
198,
40,
716,
635,
783,
2060,
13,
1406,
319,
1353,
286,
6078,
616,
1266,
1545,
286,
838,
812,
357,
69,
666,
32682,
828,
314,
481,
4425,
616,
7962,
314,
550,
351,
683,
11,
644,
314,
3177,
616,
1641,
11,
290,
616,
399,
8535,
13,
198,
198,
40,
4988,
1254,
12361,
13,
314,
423,
12361,
9751,
284,
262,
966,
810,
314,
1101,
7960,
2130,
318,
1016,
284,
1282,
651,
366,
260,
18674,
1,
319,
502,
329,
644,
314,
750,
13,
314,
460,
470,
4483,
13,
314,
423,
2626,
767,
8059,
422,
340,
13,
314,
1101,
407,
11029,
329,
7510,
13,
314,
423,
11668,
739,
616,
2951,
13,
314,
1053,
550,
807,
50082,
12,
12545,
287,
734,
2745,
13,
1629,
717,
314,
2936,
523,
6563,
287,
616,
2551,
475,
355,
262,
1528,
467,
416,
314,
1101,
3612,
3863,
484,
547,
826,
290,
314,
815,
423,
10667,
319,
607,
878,
4585,
16679,
290,
852,
5306,
3019,
992,
13,
314,
836,
470,
1337,
546,
25737,
7471,
11,
475,
314,
750,
18344,
257,
642,
614,
1468,
1200,
1497,
422,
607,
3397,
290,
314,
1254,
12361,
546,
340,
13,
314,
760,
2130,
287,
262,
1641,
481,
1011,
607,
287,
11,
475,
340,
338,
1239,
588,
852,
351,
534,
3397,
13,
1375,
481,
1663,
510,
20315,
278,
502,
329,
340,
290,
477,
314,
1053,
1683,
1760,
318,
1842,
607,
355,
616,
898,
13,
220,
198,
198,
22367,
11,
317,
2043,
32,
30,
4222,
1037,
502,
13,
383,
14934,
318,
6600,
502,
6776,
13,
220,
198,
24361,
25,
1148,
428,
2642,
30,
198,
33706,
25,
3763,
],
]
def test_unit_test_text_completion_object():
openai_object = {
"id": "cmpl-99y7B2svVoRWe1xd7UFRmeGjZrFSh",
"choices": [
{
"finish_reason": "length",
"index": 0,
"logprobs": {
"text_offset": [101],
"token_logprobs": [-0.00023488728],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.00023488728,
"1": -8.375235,
"zero": -14.101797,
"__": -14.554922,
"00": -14.98461,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 1,
"logprobs": {
"text_offset": [116],
"token_logprobs": [-0.013745008],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.013745008,
"1": -4.294995,
"00": -12.287183,
"2": -12.771558,
"3": -14.013745,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 2,
"logprobs": {
"text_offset": [108],
"token_logprobs": [-3.655073e-5],
"tokens": ["0"],
"top_logprobs": [
{
"0": -3.655073e-5,
"1": -10.656286,
"__": -11.789099,
"false": -12.984411,
"00": -14.039099,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 3,
"logprobs": {
"text_offset": [106],
"token_logprobs": [-0.1345946],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.1345946,
"1": -2.0720947,
"2": -12.798657,
"false": -13.970532,
"00": -14.27522,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 4,
"logprobs": {
"text_offset": [95],
"token_logprobs": [-0.10491652],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.10491652,
"1": -2.3236666,
"2": -7.0111666,
"3": -7.987729,
"4": -9.050229,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 5,
"logprobs": {
"text_offset": [121],
"token_logprobs": [-0.00026300468],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.00026300468,
"1": -8.250263,
"zero": -14.976826,
" ": -15.461201,
"000": -15.773701,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 6,
"logprobs": {
"text_offset": [146],
"token_logprobs": [-5.085517e-5],
"tokens": ["0"],
"top_logprobs": [
{
"0": -5.085517e-5,
"1": -9.937551,
"000": -13.929738,
"__": -14.968801,
"zero": -15.070363,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 7,
"logprobs": {
"text_offset": [100],
"token_logprobs": [-0.13875218],
"tokens": ["1"],
"top_logprobs": [
{
"1": -0.13875218,
"0": -2.0450022,
"2": -9.7559395,
"3": -11.1465645,
"4": -11.5528145,
}
],
},
"text": "1",
},
{
"finish_reason": "length",
"index": 8,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-0.0005573204],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0005573204,
"1": -7.6099324,
"3": -10.070869,
"2": -11.617744,
" ": -12.859932,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 9,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-0.0018747397],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0018747397,
"1": -6.29875,
"3": -11.2675,
"4": -11.634687,
"2": -11.822187,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 10,
"logprobs": {
"text_offset": [110],
"token_logprobs": [-0.003476763],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.003476763,
"1": -5.6909766,
"__": -10.526915,
"None": -10.925352,
"False": -11.88629,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 11,
"logprobs": {
"text_offset": [106],
"token_logprobs": [-0.00032962486],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.00032962486,
"1": -8.03158,
"__": -13.445642,
"2": -13.828455,
"zero": -15.453455,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 12,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-9.984788e-5],
"tokens": ["0"],
"top_logprobs": [
{
"0": -9.984788e-5,
"1": -9.21885,
" ": -14.836038,
"zero": -16.265724,
"00": -16.578224,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 13,
"logprobs": {
"text_offset": [106],
"token_logprobs": [-0.0010039895],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0010039895,
"1": -6.907254,
"2": -13.743192,
"false": -15.227567,
"3": -15.297879,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 14,
"logprobs": {
"text_offset": [106],
"token_logprobs": [-0.0005681643],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0005681643,
"1": -7.5005684,
"__": -11.836506,
"zero": -13.242756,
"file": -13.445881,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 15,
"logprobs": {
"text_offset": [146],
"token_logprobs": [-3.9769227e-5],
"tokens": ["0"],
"top_logprobs": [
{
"0": -3.9769227e-5,
"1": -10.15629,
"000": -15.078165,
"00": -15.664103,
"zero": -16.015665,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 16,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-0.0006509595],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0006509595,
"1": -7.344401,
"2": -13.352214,
" ": -13.852214,
"3": -14.680339,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 17,
"logprobs": {
"text_offset": [103],
"token_logprobs": [-0.0093299495],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0093299495,
"1": -4.681205,
"2": -11.173392,
"3": -13.439017,
"00": -14.673392,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 18,
"logprobs": {
"text_offset": [130],
"token_logprobs": [-0.00024382756],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.00024382756,
"1": -8.328369,
" ": -13.640869,
"zero": -14.859619,
"null": -16.51587,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 19,
"logprobs": {
"text_offset": [107],
"token_logprobs": [-0.0006452414],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0006452414,
"1": -7.36002,
"00": -12.328771,
"000": -12.961583,
"2": -14.211583,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 20,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-0.0012751155],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0012751155,
"1": -6.67315,
"__": -11.970025,
"<|endoftext|>": -14.907525,
"3": -14.930963,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 21,
"logprobs": {
"text_offset": [107],
"token_logprobs": [-7.1954215e-5],
"tokens": ["0"],
"top_logprobs": [
{
"0": -7.1954215e-5,
"1": -9.640697,
"00": -13.500072,
"000": -13.523509,
"__": -13.945384,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 22,
"logprobs": {
"text_offset": [108],
"token_logprobs": [-0.0032367748],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0032367748,
"1": -5.737612,
"<|endoftext|>": -13.940737,
"2": -14.167299,
"00": -14.292299,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 23,
"logprobs": {
"text_offset": [117],
"token_logprobs": [-0.00018673266],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.00018673266,
"1": -8.593937,
"zero": -15.179874,
"null": -15.515812,
"None": -15.851749,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 24,
"logprobs": {
"text_offset": [104],
"token_logprobs": [-0.0010223285],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0010223285,
"1": -6.8916473,
"__": -13.05571,
"00": -14.071335,
"zero": -14.235397,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 25,
"logprobs": {
"text_offset": [108],
"token_logprobs": [-0.0038979414],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0038979414,
"1": -5.550773,
"2": -13.160148,
"00": -14.144523,
"3": -14.41796,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 26,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-0.00074721366],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.00074721366,
"1": -7.219497,
"3": -11.430435,
"2": -13.367935,
" ": -13.735123,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 27,
"logprobs": {
"text_offset": [146],
"token_logprobs": [-8.566264e-5],
"tokens": ["0"],
"top_logprobs": [
{
"0": -8.566264e-5,
"1": -9.375086,
"000": -15.359461,
"__": -15.671961,
"00": -15.679773,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 28,
"logprobs": {
"text_offset": [119],
"token_logprobs": [-0.000274683],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.000274683,
"1": -8.2034,
"00": -14.898712,
"2": -15.633087,
"__": -16.844025,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 29,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-0.014869375],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.014869375,
"1": -4.217994,
"2": -11.63987,
"3": -11.944557,
"5": -12.26487,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 30,
"logprobs": {
"text_offset": [110],
"token_logprobs": [-0.010907865],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.010907865,
"1": -4.5265326,
"2": -11.440596,
"<|endoftext|>": -12.456221,
"file": -13.049971,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 31,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-0.00070528337],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.00070528337,
"1": -7.2663302,
"6": -13.141331,
"2": -13.797581,
"3": -13.836643,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 32,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-0.0004983439],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0004983439,
"1": -7.6098733,
"3": -14.211436,
"2": -14.336436,
" ": -15.117686,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 33,
"logprobs": {
"text_offset": [110],
"token_logprobs": [-3.6908343e-5],
"tokens": ["0"],
"top_logprobs": [
{
"0": -3.6908343e-5,
"1": -10.250037,
"00": -14.2266,
"__": -14.7266,
"000": -16.164099,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 34,
"logprobs": {
"text_offset": [104],
"token_logprobs": [-0.003917157],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.003917157,
"1": -5.550792,
"2": -11.355479,
"00": -12.777354,
"3": -13.652354,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 35,
"logprobs": {
"text_offset": [146],
"token_logprobs": [-5.0139948e-5],
"tokens": ["0"],
"top_logprobs": [
{
"0": -5.0139948e-5,
"1": -9.921926,
"000": -14.851613,
"00": -15.414113,
"zero": -15.687551,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 36,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-0.0005143099],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0005143099,
"1": -7.5786395,
" ": -14.406764,
"00": -14.570827,
"999": -14.633327,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 37,
"logprobs": {
"text_offset": [103],
"token_logprobs": [-0.00013691289],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.00013691289,
"1": -8.968887,
"__": -12.547012,
"zero": -13.57045,
"00": -13.8517,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 38,
"logprobs": {
"text_offset": [103],
"token_logprobs": [-0.00032569113],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.00032569113,
"1": -8.047201,
"2": -13.570639,
"zero": -14.023764,
"false": -14.726889,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 39,
"logprobs": {
"text_offset": [113],
"token_logprobs": [-3.7146747e-5],
"tokens": ["0"],
"top_logprobs": [
{
"0": -3.7146747e-5,
"1": -10.203162,
"zero": -18.437536,
"2": -20.117224,
" zero": -20.210974,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 40,
"logprobs": {
"text_offset": [110],
"token_logprobs": [-7.4695905e-5],
"tokens": ["0"],
"top_logprobs": [
{
"0": -7.4695905e-5,
"1": -9.515699,
"00": -14.836012,
"__": -16.093824,
"file": -16.468824,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 41,
"logprobs": {
"text_offset": [111],
"token_logprobs": [-0.02289473],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.02289473,
"1": -3.7885196,
"2": -12.499457,
"3": -14.546332,
"00": -15.66352,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 42,
"logprobs": {
"text_offset": [108],
"token_logprobs": [-0.0011367622],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0011367622,
"1": -6.782387,
"2": -13.493324,
"00": -15.071449,
"zero": -15.727699,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 43,
"logprobs": {
"text_offset": [115],
"token_logprobs": [-0.0006384541],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0006384541,
"1": -7.3600135,
"00": -14.0397005,
"2": -14.4303255,
"000": -15.563138,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 44,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-0.0007382771],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0007382771,
"1": -7.219488,
"4": -13.516363,
"2": -13.555426,
"3": -13.602301,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 45,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-0.0014242834],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0014242834,
"1": -6.5639243,
"2": -12.493611,
"__": -12.712361,
"3": -12.884236,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 46,
"logprobs": {
"text_offset": [111],
"token_logprobs": [-0.00017088225],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.00017088225,
"1": -8.765796,
"zero": -12.695483,
"__": -12.804858,
"time": -12.882983,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 47,
"logprobs": {
"text_offset": [146],
"token_logprobs": [-0.000107238506],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.000107238506,
"1": -9.171982,
"000": -13.648544,
"__": -14.531357,
"zero": -14.586044,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 48,
"logprobs": {
"text_offset": [106],
"token_logprobs": [-0.0028172398],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0028172398,
"1": -5.877817,
"00": -12.16688,
"2": -12.487192,
"000": -14.182505,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 49,
"logprobs": {
"text_offset": [104],
"token_logprobs": [-0.00043460296],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.00043460296,
"1": -7.7816844,
"00": -13.570747,
"2": -13.60981,
"__": -13.789497,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 50,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-0.0046973573],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0046973573,
"1": -5.3640723,
"null": -14.082823,
" ": -14.707823,
"2": -14.746885,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 51,
"logprobs": {
"text_offset": [100],
"token_logprobs": [-0.2487161],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.2487161,
"1": -1.5143411,
"2": -9.037779,
"3": -10.100279,
"4": -10.756529,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 52,
"logprobs": {
"text_offset": [108],
"token_logprobs": [-0.0011751055],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0011751055,
"1": -6.751175,
" ": -13.73555,
"2": -15.258987,
"3": -15.399612,
}
],
},
"text": "0",
},
{
"finish_reason": "length",
"index": 53,
"logprobs": {
"text_offset": [143],
"token_logprobs": [-0.0012339224],
"tokens": ["0"],
"top_logprobs": [
{
"0": -0.0012339224,
"1": -6.719984,
"6": -11.430922,
"3": -12.165297,
"2": -12.696547,
}
],
},
"text": "0",
},
],
"created": 1712163061,
"model": "ft:babbage-002:ai-r-d-zapai:v3-fields-used:84jb9rtr",
"object": "text_completion",
"system_fingerprint": None,
"usage": {"completion_tokens": 54, "prompt_tokens": 1877, "total_tokens": 1931},
}
text_completion_obj = TextCompletionResponse(**openai_object)
## WRITE UNIT TESTS FOR TEXT_COMPLETION_OBJECT
assert text_completion_obj.id == "cmpl-99y7B2svVoRWe1xd7UFRmeGjZrFSh"
assert text_completion_obj.object == "text_completion"
assert text_completion_obj.created == 1712163061
assert (
text_completion_obj.model
== "ft:babbage-002:ai-r-d-zapai:v3-fields-used:84jb9rtr"
)
assert text_completion_obj.system_fingerprint == None
assert len(text_completion_obj.choices) == len(openai_object["choices"])
# TEST FIRST CHOICE #
first_text_completion_obj = text_completion_obj.choices[0]
assert first_text_completion_obj.index == 0
assert first_text_completion_obj.logprobs.text_offset == [101]
assert first_text_completion_obj.logprobs.tokens == ["0"]
assert first_text_completion_obj.logprobs.token_logprobs == [-0.00023488728]
assert len(first_text_completion_obj.logprobs.top_logprobs) == len(
openai_object["choices"][0]["logprobs"]["top_logprobs"]
)
assert first_text_completion_obj.text == "0"
assert first_text_completion_obj.finish_reason == "length"
# TEST SECOND CHOICE #
second_text_completion_obj = text_completion_obj.choices[1]
assert second_text_completion_obj.index == 1
assert second_text_completion_obj.logprobs.text_offset == [116]
assert second_text_completion_obj.logprobs.tokens == ["0"]
assert second_text_completion_obj.logprobs.token_logprobs == [-0.013745008]
assert len(second_text_completion_obj.logprobs.top_logprobs) == len(
openai_object["choices"][0]["logprobs"]["top_logprobs"]
)
assert second_text_completion_obj.text == "0"
assert second_text_completion_obj.finish_reason == "length"
# TEST LAST CHOICE #
last_text_completion_obj = text_completion_obj.choices[-1]
assert last_text_completion_obj.index == 53
assert last_text_completion_obj.logprobs.text_offset == [143]
assert last_text_completion_obj.logprobs.tokens == ["0"]
assert last_text_completion_obj.logprobs.token_logprobs == [-0.0012339224]
assert len(last_text_completion_obj.logprobs.top_logprobs) == len(
openai_object["choices"][0]["logprobs"]["top_logprobs"]
)
assert last_text_completion_obj.text == "0"
assert last_text_completion_obj.finish_reason == "length"
assert text_completion_obj.usage.completion_tokens == 54
assert text_completion_obj.usage.prompt_tokens == 1877
assert text_completion_obj.usage.total_tokens == 1931
def test_completion_openai_prompt():
try:
print("\n text 003 test\n")
response = text_completion(
model="gpt-3.5-turbo-instruct",
prompt=["What's the weather in SF?", "How is Manchester?"],
)
print(response)
assert len(response.choices) == 2
response_str = response["choices"][0]["text"]
except Exception as e:
pytest.fail(f"Error occurred: {e}")
# test_completion_openai_prompt()
def test_completion_openai_engine_and_model():
try:
print("\n text 003 test\n")
litellm.set_verbose = True
response = text_completion(
model="gpt-3.5-turbo-instruct",
engine="anything",
prompt="What's the weather in SF?",
max_tokens=5,
)
print(response)
response_str = response["choices"][0]["text"]
# print(response.choices[0])
# print(response.choices[0].text)
except Exception as e:
pytest.fail(f"Error occurred: {e}")
# test_completion_openai_engine_and_model()
def test_completion_openai_engine():
try:
print("\n text 003 test\n")
litellm.set_verbose = True
response = text_completion(
engine="gpt-3.5-turbo-instruct",
prompt="What's the weather in SF?",
max_tokens=5,
)
print(response)
response_str = response["choices"][0]["text"]
# print(response.choices[0])
# print(response.choices[0].text)
except Exception as e:
pytest.fail(f"Error occurred: {e}")
# test_completion_openai_engine()
def test_completion_chatgpt_prompt():
try:
print("\n gpt3.5 test\n")
response = text_completion(
model="openai/gpt-3.5-turbo", prompt="What's the weather in SF?"
)
print(response)
response_str = response["choices"][0]["text"]
print("\n", response.choices)
print("\n", response.choices[0])
# print(response.choices[0].text)
except Exception as e:
pytest.fail(f"Error occurred: {e}")
# test_completion_chatgpt_prompt()
def test_completion_gpt_instruct():
try:
response = text_completion(
model="gpt-3.5-turbo-instruct-0914",
prompt="What's the weather in SF?",
custom_llm_provider="openai",
)
print(response)
response_str = response["choices"][0]["text"]
print("\n", response.choices)
print("\n", response.choices[0])
# print(response.choices[0].text)
except Exception as e:
pytest.fail(f"Error occurred: {e}")
# test_completion_chatgpt_prompt()
def test_text_completion_basic():
try:
print("\n test 003 with logprobs \n")
litellm.set_verbose = False
response = text_completion(
model="gpt-3.5-turbo-instruct",
prompt="good morning",
max_tokens=10,
logprobs=10,
)
print(response)
print(response.choices)
print(response.choices[0])
# print(response.choices[0].text)
response_str = response["choices"][0]["text"]
except Exception as e:
if "502: Bad gateway" in str(e):
print("502: Bad gateway error occurred... passing")
return
pytest.fail(f"Error occurred: {e}")
# test_text_completion_basic()
def test_completion_text_003_prompt_array():
try:
litellm.set_verbose = False
response = text_completion(
model="gpt-3.5-turbo-instruct",
prompt=token_prompt, # token prompt is a 2d list
)
print("\n\n response")
print(response)
# response_str = response["choices"][0]["text"]
except Exception as e:
pytest.fail(f"Error occurred: {e}")
# test_completion_text_003_prompt_array()
# not including this in our ci cd pipeline, since we don't want to fail tests due to an unstable replit
# def test_text_completion_with_proxy():
# try:
# litellm.set_verbose=True
# response = text_completion(
# model="facebook/opt-125m",
# prompt='Write a tagline for a traditional bavarian tavern',
# api_base="https://openai-proxy.berriai.repl.co/v1",
# custom_llm_provider="openai",
# temperature=0,
# max_tokens=10,
# )
# print("\n\n response")
# print(response)
# except Exception as e:
# pytest.fail(f"Error occurred: {e}")
# test_text_completion_with_proxy()
##### hugging face tests
@pytest.mark.skip(reason="local test")
def test_completion_hf_prompt_array():
try:
litellm.set_verbose = True
print("\n testing hf mistral\n")
response = text_completion(
model="huggingface/mistralai/Mistral-7B-Instruct-v0.3",
prompt=token_prompt, # token prompt is a 2d list,
max_tokens=0,
temperature=0.0,
# echo=True, # hugging face inference api is currently raising errors for this, looks like they have a regression on their side
)
print("\n\n response")
print(response)
print(response.choices)
assert len(response.choices) == 2
# response_str = response["choices"][0]["text"]
except litellm.RateLimitError:
print("got rate limit error from hugging face... passsing")
return
except Exception as e:
print(str(e))
if "is currently loading" in str(e):
return
if "Service Unavailable" in str(e):
return
pytest.fail(f"Error occurred: {e}")
# test_completion_hf_prompt_array()
@pytest.mark.skip(reason="HF Inference API is unstable, this is now the 3rd time it's stopped working")
def test_text_completion_stream():
try:
for _ in range(2): # check if closed client used
response = text_completion(
model="huggingface/deepseek-ai/DeepSeek-R1",
prompt="good morning",
stream=True,
max_tokens=10,
)
for chunk in response:
print(f"chunk: {chunk}")
except Exception as e:
pytest.fail(f"GOT exception for HF In streaming{e}")
# test_text_completion_stream()
# async def test_text_completion_async_stream():
# try:
# response = await atext_completion(
# model="text-completion-openai/gpt-3.5-turbo-instruct",
# prompt="good morning",
# stream=True,
# max_tokens=10,
# )
# async for chunk in response:
# print(f"chunk: {chunk}")
# except Exception as e:
# pytest.fail(f"GOT exception for HF In streaming{e}")
# asyncio.run(test_text_completion_async_stream())
def test_async_text_completion():
litellm.set_verbose = True
print("test_async_text_completion")
async def test_get_response():
try:
response = await litellm.atext_completion(
model="gpt-3.5-turbo-instruct",
prompt="good morning",
stream=False,
max_tokens=10,
)
print(f"response: {response}")
except litellm.Timeout as e:
print(e)
except Exception as e:
print(e)
asyncio.run(test_get_response())
@pytest.mark.flaky(retries=6, delay=1)
def test_async_text_completion_together_ai():
litellm.set_verbose = True
print("test_async_text_completion")
async def test_get_response():
try:
response = await litellm.atext_completion(
model="together_ai/mistralai/Mixtral-8x7B-Instruct-v0.1",
prompt="good morning",
max_tokens=10,
)
print(f"response: {response}")
except litellm.RateLimitError as e:
print(e)
except litellm.Timeout as e:
print(e)
except Exception as e:
pytest.fail("An unexpected error occurred")
asyncio.run(test_get_response())
# test_async_text_completion()
def test_async_text_completion_stream():
# tests atext_completion + streaming - assert only one finish reason sent
litellm.set_verbose = False
print("test_async_text_completion with stream")
async def test_get_response():
try:
response = await litellm.atext_completion(
model="gpt-3.5-turbo-instruct",
prompt="good morning",
stream=True,
)
print(f"response: {response}")
num_finish_reason = 0
async for chunk in response:
print(chunk)
if chunk["choices"][0].get("finish_reason") is not None:
num_finish_reason += 1
print("finish_reason", chunk["choices"][0].get("finish_reason"))
assert (
num_finish_reason == 1
), f"expected only one finish reason. Got {num_finish_reason}"
except Exception as e:
pytest.fail(f"GOT exception for gpt-3.5 instruct In streaming{e}")
asyncio.run(test_get_response())
# test_async_text_completion_stream()
@pytest.mark.asyncio
async def test_async_text_completion_chat_model_stream():
try:
response = await litellm.atext_completion(
model="gpt-3.5-turbo",
prompt="good morning",
stream=True,
max_tokens=10,
)
num_finish_reason = 0
chunks = []
async for chunk in response:
print(chunk)
chunks.append(chunk)
if chunk["choices"][0].get("finish_reason") is not None:
num_finish_reason += 1
assert (
num_finish_reason == 1
), f"expected only one finish reason. Got {num_finish_reason}"
response_obj = litellm.stream_chunk_builder(chunks=chunks)
cost = litellm.completion_cost(completion_response=response_obj)
assert cost > 0
except Exception as e:
pytest.fail(f"GOT exception for gpt-3.5 In streaming{e}")
# asyncio.run(test_async_text_completion_chat_model_stream())
def mock_post(*args, **kwargs):
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.headers = {"Content-Type": "application/json"}
mock_response.parse.return_value.model_dump.return_value = {
"id": "cmpl-7a59383dd4234092b9e5d652a7ab8143",
"object": "text_completion",
"created": 1718824735,
"model": "Sao10K/L3-70B-Euryale-v2.1",
"choices": [
{
"index": 0,
"text": ") might be faster than then answering, and the added time it takes for the",
"logprobs": None,
"finish_reason": "length",
"stop_reason": None,
}
],
"usage": {"prompt_tokens": 2, "total_tokens": 18, "completion_tokens": 16},
}
return mock_response
@pytest.mark.parametrize("provider", ["openai", "hosted_vllm"])
def test_completion_vllm(provider):
"""
Asserts a text completion call for vllm actually goes to the text completion endpoint
"""
from openai import OpenAI
client = OpenAI(api_key="my-fake-key")
with patch.object(
client.completions.with_raw_response, "create", side_effect=mock_post
) as mock_call:
response = text_completion(
model="{provider}/gemini-2.5-flash-lite".format(provider=provider),
prompt="ping",
client=client,
hello="world",
)
print("raw response", response)
assert response.usage.prompt_tokens == 2
mock_call.assert_called_once()
assert "hello" in mock_call.call_args.kwargs["extra_body"]
@pytest.mark.skip(reason="fireworks is having an active outage")
def test_completion_fireworks_ai_multiple_choices():
litellm._turn_on_debug()
response = litellm.text_completion(
model="fireworks_ai/llama-v3p1-8b-instruct",
prompt=["halo", "hi", "halo", "hi"],
)
print(response.choices)
assert len(response.choices) == 4
@pytest.mark.parametrize("stream", [True, False])
def test_text_completion_with_echo(stream):
litellm.set_verbose = True
response = litellm.text_completion(
model="davinci-002",
prompt="hello",
max_tokens=1, # only see the first token
stop="\n", # stop at the first newline
logprobs=1, # return log prob
echo=True, # if True, return the prompt as well
stream=stream,
)
print(response)
if stream:
for chunk in response:
print(chunk)
else:
assert isinstance(response, TextCompletionResponse)
def test_text_completion_ollama():
from litellm.llms.custom_httpx.http_handler import HTTPHandler
client = HTTPHandler()
with patch.object(client, "post") as mock_call:
try:
response = litellm.text_completion(
model="ollama/llama3.1:8b",
prompt="hello",
client=client,
)
print(response)
except Exception as e:
print(e)
mock_call.assert_called_once()
print(mock_call.call_args.kwargs)
json_data = json.loads(mock_call.call_args.kwargs["data"])
assert json_data["prompt"] == "hello"