Supervised fine-tuning trains the model to produce a stated response for each prompt. It fits when the target output can be written down, and it often comes before DPO or GRPO.
SFT trains on a dataset added with --kind sft. Each row of support-replies is a ticket and what a support agent did with it, as a chat messages list:
{"messages": [{"role": "system", "content": "Answer from the knowledge base with search_kb, or call escalate_to_human with one category."}, {"role": "user", "content": "I was charged twice for my October invoice."}, {"role": "assistant", "content": null, "tool_calls": [{"id": "call_1", "type": "function", "function": {"name": "escalate_to_human", "arguments": "{\"reason\": \"money: duplicate charge on the October invoice\"}"}}]}]}
monte dataset add support-replies --from-file demos.jsonl --kind sft