@@ -132,3 +132,44 @@ def test_stream_empty(openai_client, model):
132
132
133
133
assert tru_events == exp_events
134
134
openai_client .chat .completions .create .assert_called_once_with (** request )
135
+
136
+
137
+ def test_stream_with_empty_choices (openai_client , model ):
138
+ mock_delta = unittest .mock .Mock (content = "content" , tool_calls = None )
139
+ mock_usage = unittest .mock .Mock (prompt_tokens = 10 , completion_tokens = 20 , total_tokens = 30 )
140
+
141
+ # Event with no choices attribute
142
+ mock_event_1 = unittest .mock .Mock (spec = [])
143
+
144
+ # Event with empty choices list
145
+ mock_event_2 = unittest .mock .Mock (choices = [])
146
+
147
+ # Valid event with content
148
+ mock_event_3 = unittest .mock .Mock (choices = [unittest .mock .Mock (finish_reason = None , delta = mock_delta )])
149
+
150
+ # Event with finish reason
151
+ mock_event_4 = unittest .mock .Mock (choices = [unittest .mock .Mock (finish_reason = "stop" , delta = mock_delta )])
152
+
153
+ # Final event with usage info
154
+ mock_event_5 = unittest .mock .Mock (usage = mock_usage )
155
+
156
+ openai_client .chat .completions .create .return_value = iter (
157
+ [mock_event_1 , mock_event_2 , mock_event_3 , mock_event_4 , mock_event_5 ]
158
+ )
159
+
160
+ request = {"model" : "m1" , "messages" : [{"role" : "user" , "content" : ["test" ]}]}
161
+ response = model .stream (request )
162
+
163
+ tru_events = list (response )
164
+ exp_events = [
165
+ {"chunk_type" : "message_start" },
166
+ {"chunk_type" : "content_start" , "data_type" : "text" },
167
+ {"chunk_type" : "content_delta" , "data_type" : "text" , "data" : "content" },
168
+ {"chunk_type" : "content_delta" , "data_type" : "text" , "data" : "content" },
169
+ {"chunk_type" : "content_stop" , "data_type" : "text" },
170
+ {"chunk_type" : "message_stop" , "data" : "stop" },
171
+ {"chunk_type" : "metadata" , "data" : mock_usage },
172
+ ]
173
+
174
+ assert tru_events == exp_events
175
+ openai_client .chat .completions .create .assert_called_once_with (** request )
0 commit comments