Finding (dogfood run, 2026-07-13)
Pointing REM's ollama backend at a thinking/reasoning model (e.g. qwen3-next) produces 502 distillation_failed on every execute-mode run: Ollama routes all output tokens into the response's thinking field (thinking defaults on for capable models), Harper's ollama backend reads only response, so models.generate() returns empty content and validation fails closed (correctly — zero rows staged).
Verified by direct probe with the exact request shape the backend sends: think: false → valid schema-conformant JSON; think absent/default → empty response, everything in thinking. Non-thinking models (qwen3-coder-next, llama3.1) work perfectly — the full stage → review → promote loop passed 14/14 checks against a live model.
Actions
REM's own posture held: fail-closed, zero partial candidates, distinct 502 with no leakage. The failure mode is availability (no candidates), not correctness.
Finding (dogfood run, 2026-07-13)
Pointing REM's ollama backend at a thinking/reasoning model (e.g.
qwen3-next) produces502 distillation_failedon every execute-mode run: Ollama routes all output tokens into the response'sthinkingfield (thinking defaults on for capable models), Harper's ollama backend reads onlyresponse, somodels.generate()returns empty content and validation fails closed (correctly — zero rows staged).Verified by direct probe with the exact request shape the backend sends:
think: false→ valid schema-conformant JSON;thinkabsent/default → empty response, everything inthinking. Non-thinking models (qwen3-coder-next,llama3.1) work perfectly — the full stage → review → promote loop passed 14/14 checks against a live model.Actions
think: falsefor non-streaming generate, or expose it on GenerateOpts, or error on empty-content-with-thinking). Upstream filing in progress.REM's own posture held: fail-closed, zero partial candidates, distinct 502 with no leakage. The failure mode is availability (no candidates), not correctness.