@@ -200,6 +200,37 @@ def test_call_litellm_falls_back_to_message_content_when_blocks_empty(self):
200200 assert model_used == "openai/deepseek-chat"
201201 assert usage == {}
202202
203+ def test_call_litellm_extracts_list_message_content_from_dict_response (self ):
204+ analyzer = self ._make_analyzer ()
205+ analyzer ._config_override = SimpleNamespace (
206+ litellm_model = "openai/list-content-provider" ,
207+ litellm_fallback_models = [],
208+ llm_model_list = [],
209+ )
210+ response = {
211+ "choices" : [
212+ {
213+ "message" : {
214+ "content" : [
215+ {"type" : "text" , "text" : "list " },
216+ {"type" : "text" , "text" : "response" },
217+ ],
218+ },
219+ }
220+ ],
221+ "usage" : {"prompt_tokens" : 3 , "completion_tokens" : 4 , "total_tokens" : 7 },
222+ }
223+
224+ with patch .object (analyzer , "_dispatch_litellm_completion" , return_value = response ):
225+ text , model_used , usage = analyzer ._call_litellm (
226+ "prompt" ,
227+ {"max_tokens" : 128 , "temperature" : 0.2 },
228+ )
229+
230+ assert text == "list response"
231+ assert model_used == "openai/list-content-provider"
232+ assert usage == {"prompt_tokens" : 3 , "completion_tokens" : 4 , "total_tokens" : 7 }
233+
203234 def test_call_litellm_normalizes_kimi_k26_temperature (self ):
204235 analyzer = self ._make_analyzer ()
205236 analyzer ._config_override = SimpleNamespace (
0 commit comments