Trace-to-Preference
v0.26.0 turns traffic logs into DPO / KTO training data. Point soup data from-traces at LangChain, OpenAI, or Soup-serve logs. Soup extracts preference signals — thumbs, regenerations, user edits — and writes clean pairs.
Ingest a log
bash
soup data from-traces \
--logs chat_logs.jsonl \
--format langchain \
--signal thumbs_up \
--output prefs.jsonlFlags
| Flag | Meaning |
|---|---|
--logs | JSONL trace file (or a directory for the soup-serve format) |
--format | langchain · openai · soup-serve |
--signal | thumbs_up · regenerations · user_edit |
--output / -o | Destination JSONL (default prefs.jsonl) |
Signals
thumbs_up— explicit positive feedback becomes the chosen responseregenerations— if the user hit regenerate, the later response is preferreduser_edit— if the user rewrote the response, the edit becomes chosen
Review before training
bash
soup data review prefs.jsonl --sample 10Previews up to 100 random pairs side-by-side with their chosen / rejected labels. Use it as a sanity check before burning a GPU on junk data.
Train on them
DPO or KTO — the output format of from-traces matches both:
yaml
task: dpo
data:
train: prefs.jsonl
format: dpoSafety
- Logs never execute model code — parsers only read JSON.
- Traces may contain PII or secrets; Soup warns on ingest and leaves scrubbing to you before sharing pairs externally.
- Output JSONL can be validated with the same
soup data validatepipeline as any other dataset.
See also
- [Data formats](/docs/data-formats)
- [DPO training guide](/docs/dpo-training-guide)