When a Mistral model returns well-formed JSON that is not an object — for example a JSON array like [1, 2, 3] or a bare scalar — convert_to_parsed_chat_completion_response passes the decoded value directly to pydantic_model.model_validate() without checking that it is a dict. Pydantic's model_validate requires a mapping when validating a model class, so it raises pydantic_core.ValidationError with the unhelpful message "Input should be a valid dictionary or instance of ...".
Repro:
from mistralai.extra.struct_chat import convert_to_parsed_chat_completion_response
from mistralai.client.models import ChatCompletionResponse, ChatCompletionChoice, AssistantMessage, UsageInfo
from pydantic import BaseModel
class Item(BaseModel):
name: str
usage = UsageInfo(prompt_tokens=5, completion_tokens=10, total_tokens=15)
msg = AssistantMessage(role='assistant', content='[1, 2, 3]')
choice = ChatCompletionChoice(index=0, message=msg, finish_reason='stop')
response = ChatCompletionResponse(id='x', object='chat.completion', model='mistral-7b', created=0, choices=[choice], usage=usage)
convert_to_parsed_chat_completion_response(response, Item)
Traceback:
File "src/mistralai/extra/utils/response_format.py", line 37, in pydantic_model_from_json
return pydantic_model.model_validate(json_data)
pydantic_core._pydantic_core.ValidationError: 1 validation error for Item
Input should be a valid dictionary or instance of Item [type=model_type, input_value=[1, 2, 3], input_type=list]
The root cause is in pydantic_model_from_json in src/mistralai/extra/utils/response_format.py: it calls model_validate unconditionally without verifying json_data is a dict. The fix is to add an isinstance(json_data, dict) check and raise a descriptive TypeError if the check fails.
When a Mistral model returns well-formed JSON that is not an object — for example a JSON array like
[1, 2, 3]or a bare scalar —convert_to_parsed_chat_completion_responsepasses the decoded value directly topydantic_model.model_validate()without checking that it is adict. Pydantic'smodel_validaterequires a mapping when validating a model class, so it raisespydantic_core.ValidationErrorwith the unhelpful message "Input should be a valid dictionary or instance of ...".Repro:
Traceback:
The root cause is in
pydantic_model_from_jsoninsrc/mistralai/extra/utils/response_format.py: it callsmodel_validateunconditionally without verifyingjson_datais adict. The fix is to add anisinstance(json_data, dict)check and raise a descriptiveTypeErrorif the check fails.