@@ -89,6 +89,49 @@ async def test_openai_token_usage(api, batch_size, openai_request_data, openai_r
89
89
assert result ["usage" ] == openai_response_data ["usage" ]
90
90
91
91
92
+ class OpenAIWithUsagePerToken (ls .LitAPI ):
93
+ def setup (self , device ):
94
+ self .model = None
95
+
96
+ def predict (self , x ):
97
+ for i in range (1 , 6 ):
98
+ yield {
99
+ "role" : "assistant" ,
100
+ "content" : f"{ i } " ,
101
+ "prompt_tokens" : 0 ,
102
+ "completion_tokens" : 1 ,
103
+ "total_tokens" : 1 ,
104
+ }
105
+
106
+
107
+ # OpenAIWithUsagePerToken
108
+ @pytest .mark .asyncio
109
+ @pytest .mark .parametrize (
110
+ ("api" , "batch_size" ),
111
+ [
112
+ (OpenAIWithUsagePerToken (), 1 ),
113
+ ],
114
+ )
115
+ async def test_openai_per_token_usage (api , batch_size , openai_request_data , openai_response_data ):
116
+ server = ls .LitServer (api , spec = ls .OpenAISpec (), max_batch_size = batch_size , batch_timeout = 0.01 )
117
+ with wrap_litserve_start (server ) as server :
118
+ async with LifespanManager (server .app ) as manager , AsyncClient (
119
+ transport = ASGITransport (app = manager .app ), base_url = "http://test"
120
+ ) as ac :
121
+ resp = await ac .post ("/v1/chat/completions" , json = openai_request_data , timeout = 10 )
122
+ assert resp .status_code == 200 , "Status code should be 200"
123
+ result = resp .json ()
124
+ content = result ["choices" ][0 ]["message" ]["content" ]
125
+ assert content == "12345" , "LitAPI predict response should match with the generated output"
126
+ assert result ["usage" ]["completion_tokens" ] == 5 , "API yields 5 tokens"
127
+
128
+ # with streaming
129
+ openai_request_data ["stream" ] = True
130
+ resp = await ac .post ("/v1/chat/completions" , json = openai_request_data , timeout = 10 )
131
+ assert resp .status_code == 200 , "Status code should be 200"
132
+ assert result ["usage" ]["completion_tokens" ] == 5 , "API yields 5 tokens"
133
+
134
+
92
135
@pytest .mark .asyncio
93
136
async def test_openai_spec_with_image (openai_request_data_with_image ):
94
137
server = ls .LitServer (TestAPI (), spec = OpenAISpec ())
0 commit comments