The ChatMessage dataclass (in src/smolagents/models.py) is the universal message format across all model backends. It carries role (a MessageRole enum: user/assistant/system/tool-call/tool-response), content (str or multi-modal list of dicts), tool_calls (list of ChatMessageToolCall), raw (original provider response), and token_usage.
get_clean_message_list() normalises a heterogeneous list of ChatMessage objects and dicts into a clean provider-compatible format: it merges consecutive same-role messages, handles image encoding (inline base64 or image_url), applies role conversions (e.g. tool-response → user for providers that don't support tool roles), and optionally flattens multimodal content to plain text for providers like Ollama and Groq.
Streaming is modelled via ChatMessageStreamDelta / ChatMessageToolCallStreamDelta; agglomerate_stream_deltas() assembles a complete ChatMessage from a stream.
src/smolagents/models.py