Skip to content

v1.4.0 — fusion models

Choose a tag to compare

@ericleepi314 ericleepi314 released this 02 Aug 21:00
· 74 commits to main since this release
1f1776e

Fusion models — give a text-only model vision

Several strong reasoning models cannot see images at all. deepseek-v4-pro rejects an image content block outright (400 unknown variant \image_url`), so pasting a screenshot, @-mentioning one, or letting Read` return one ended the turn.

A fusion model pairs that base with a second, vision-capable model: every image is described by the vision model first, and the base model reads the description.

/fusion create deepseek-v4-flash-luna deepseek:deepseek-v4-flash openai:gpt-5.6-luna
/model deepseek-v4-flash-luna

It then behaves like a normal model — in the /model picker, as --model <name>, in -p, and across restarts.

Ported from claude-code-router's Fusion Model concept, with one deliberate difference: CCR is a proxy, so it can only offer vision as a tool the model may choose to call — which cannot help a pasted image, already on the wire before the model gets a turn. ClawCodex owns the agent loop, so it substitutes images in place, covering paste, @file.png, Read, and Bash image output at once.

Verified end to end on Terminal-Bench 2.1's code-from-image — transcribe handwritten pseudocode from a PNG and reproduce its output — with deepseek-v4-flash + openai:gpt-5.6-luna (#787). The base model alone returns a 400 on the same image, so the pass is attributable to the fusion path rather than the base coping. That is one task, not a benchmark sweep.

Also in this release

  • GPT-5.6 Sol / Terra / Luna, and four more OpenAI-compatible providers — groq, cerebras, baseten, xai — taking the registry to 30 (#773, #784)
  • /permissions replaces /mode with a three-level picker and Full Access by default (#768)
  • AskUserQuestion renders a real picker instead of returning JSON to the model (#774)
  • The OpenAI provider picks its wire protocol from the model, not the auth mode — what makes gpt-5.6-luna usable on an API key at all (#783)
  • Cached prompt tokens bill at the cache rate, not the full input rate, and OpenRouter's streamed reasoning is no longer discarded (#785, #786)
  • Headless runs stop reporting a cut-short run as a success (#777#782)

Full notes: CHANGELOG.md