<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[xiun xiao]]></title><description><![CDATA[xiun xiao]]></description><link>https://xiunxiao.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Tue, 10 Nov 2026 10:41:21 GMT</lastBuildDate><atom:link href="https://xiunxiao.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Image generation API compared: 11 models, the same 3 prompts, real outputs]]></title><description><![CDATA[GPT Image 2.5, Seedream, Qwen Image, FLUX, SDXL Turbo and more on the same three prompts: text rendering, composition, latency and price per image.]]></description><link>https://xiunxiao.hashnode.dev/image-generation-api-compared-11-models-the-same-3-prompts-real-outputs</link><guid isPermaLink="true">https://xiunxiao.hashnode.dev/image-generation-api-compared-11-models-the-same-3-prompts-real-outputs</guid><category><![CDATA[image generation]]></category><category><![CDATA[AI]]></category><category><![CDATA[api]]></category><category><![CDATA[llm]]></category><dc:creator><![CDATA[xiun xiao]]></dc:creator><pubDate>Tue, 10 Nov 2026 01:27:56 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally published on the <a href="https://quicksilverpro.io/blog/image-generation-api-compared/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=image-models">QuickSilver Pro blog</a>.</em></p>
<p>QuickSilver Pro sells a dozen image-generation models behind one OpenAI-compatible endpoint, <code>/v1/images/generations</code>. They are billed per image, and the price per image ranges widely: $0.003 for FLUX.1 Schnell, $0.07 for Seedream 5.0 Pro. The question is what the extra money buys.</p>
<p>So on 2026-10-20 we gave 11 of them the same three prompts and looked at every image.</p>
<table>
<thead>
<tr>
<th>Model</th>
<th>Price per image</th>
</tr>
</thead>
<tbody><tr>
<td><a href="https://quicksilverpro.io/models/gpt-image-2.5-flare/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=image-models">GPT Image 2.5 Flare</a></td>
<td>$0.018</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/gpt-image-2.5-sunburst/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=image-models">GPT Image 2.5 Sunburst</a></td>
<td>$0.018</td>
</tr>
<tr>
<td>GPT Image 2</td>
<td>$0.01</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/seedream-5.0-pro/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=image-models">Seedream 5.0 Pro</a></td>
<td>$0.07</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/seedream-4/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=image-models">Seedream 4</a></td>
<td>$0.055</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/qwen-image-3.0/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=image-models">Qwen Image 3.0</a></td>
<td>$0.04</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/flux.2-pro/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=image-models">FLUX.2 Pro</a></td>
<td>$0.027</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/flux.2-klein/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=image-models">FLUX.2 Klein</a></td>
<td>$0.02</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/flux.1-schnell/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=image-models">FLUX.1 Schnell</a></td>
<td>$0.003</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/sdxl-turbo/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=image-models">SDXL Turbo</a></td>
<td>$0.003</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/bria-fibo-1.5/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=image-models">Bria FIBO 1.5</a></td>
<td>$0.055</td>
</tr>
</tbody></table>
<p>Nano Banana Pro is also in the catalog; it is not part of this test.</p>
<h2>How we tested</h2>
<p>Three prompts, each testing something different:</p>
<ol>
<li><strong>Text on packaging:</strong> <em>Product photo of a matte black coffee bag standing on a wooden table. The front label reads "NORTHWIND ROASTERS" in large white capital letters, and below it, in smaller text, "Ethiopia Yirgacheffe" and "250 g". Soft studio lighting, shallow depth of field.</em></li>
<li><strong>Exact composition:</strong> <em>Flat vector illustration on a plain white background: exactly three red apples on the left side of the image, and exactly one blue cup on the right side. Nothing else in the image.</em></li>
<li><strong>Photoreal scene:</strong> <em>Photorealistic photograph of a small wooden cabin beside a mountain lake at dawn, mist over the water, a red canoe tied to a wooden dock in the foreground, pine trees, no people.</em></li>
</ol>
<p>Every request used the same parameters: <code>size="1024x1024"</code>, <code>n=1</code>, nothing else. Each model ran each prompt once. We then ran the composition prompt a second time on every model, one request at a time, to get a cleaner latency figure and a second sample. We judged every image by eye: for the label, whether all three lines are spelled exactly right; for the illustration, whether there are exactly three apples on the left and one cup on the right; for the scene, whether every element in the prompt is there and physically plausible.</p>
<h2>Results</h2>
<table>
<thead>
<tr>
<th>Model</th>
<th>Median latency</th>
<th>Text on packaging</th>
<th>Three apples, one cup</th>
<th>Photoreal scene</th>
</tr>
</thead>
<tbody><tr>
<td>GPT Image 2.5 Flare</td>
<td>11.5 s</td>
<td>All correct</td>
<td>2 of 2</td>
<td>All elements</td>
</tr>
<tr>
<td>GPT Image 2.5 Sunburst</td>
<td>17.5 s</td>
<td>All correct, plus a line we did not ask for</td>
<td>2 of 2</td>
<td>All elements</td>
</tr>
<tr>
<td>GPT Image 2</td>
<td>20.2 s</td>
<td>All correct</td>
<td>2 of 2</td>
<td>All elements</td>
</tr>
<tr>
<td>Seedream 5.0 Pro</td>
<td>40.8 s</td>
<td>All correct, brand name smaller than asked</td>
<td>1 of 1</td>
<td>All elements</td>
</tr>
<tr>
<td>Seedream 4</td>
<td>6.4 s</td>
<td>All correct</td>
<td>1 of 1</td>
<td>All elements, very saturated colours</td>
</tr>
<tr>
<td>Qwen Image 3.0</td>
<td>5.0 s</td>
<td>All correct</td>
<td>1 of 2 (four apples once)</td>
<td>All elements</td>
</tr>
<tr>
<td>FLUX.2 Pro</td>
<td>8.9 s</td>
<td>All correct</td>
<td>1 of 2 (two apples once)</td>
<td>All elements</td>
</tr>
<tr>
<td>FLUX.2 Klein</td>
<td>1.3 s</td>
<td>All correct</td>
<td>0 of 2 (two apples both times)</td>
<td>Canoe overlaps the dock</td>
</tr>
<tr>
<td>FLUX.1 Schnell</td>
<td>0.7 s</td>
<td>Brand correct, small text garbled</td>
<td>1 of 2 (two apples and two cups once)</td>
<td>Canoe lying on the dock</td>
</tr>
<tr>
<td>SDXL Turbo</td>
<td>4.1 s</td>
<td>Garbled</td>
<td>0 of 2</td>
<td>Two canoes, neither at the dock</td>
</tr>
<tr>
<td>Bria FIBO 1.5</td>
<td>8.9 s</td>
<td>"Yirgachefee", plus two lines of invented text</td>
<td>1 of 1</td>
<td>All elements</td>
</tr>
</tbody></table>
<p>Latency is the median of four requests per model, measured from one client. The second composition run was not saved for Seedream 4, Seedream 5.0 Pro and Bria FIBO 1.5, so those have one sample. All 33 requests in the main run succeeded.</p>
<p>What stands out:</p>
<ul>
<li><strong>Text is mostly solved, except at the cheap end.</strong> Eight of the eleven models wrote all three lines of the label correctly. FLUX.1 Schnell and Bria FIBO 1.5 got the brand name right and garbled or misspelled the smaller lines; SDXL Turbo produced lettering that is not words.</li>
<li><strong>Counting is where models differ.</strong> Only the three GPT Image models drew three apples and one cup in both runs. Qwen Image 3.0, FLUX.2 Pro and FLUX.1 Schnell got it right once and wrong once, so a single good image does not mean the model follows counts reliably. FLUX.2 Klein drew two apples both times.</li>
<li><strong>The photoreal scene was easy for nearly everyone.</strong> Eight of eleven images had every element in a plausible arrangement. The failures were physical: a canoe merged into the dock, a canoe lying on top of it.</li>
<li><strong>Latency spans nearly two orders of magnitude.</strong> FLUX.1 Schnell answered in under a second; Seedream 5.0 Pro took 28 to 51 seconds per image.</li>
</ul>
<h3>Text on packaging</h3>
<table>
<tr><th>GPT Image 2.5 Flare</th><th>GPT Image 2.5 Sunburst</th><th>Qwen Image 3.0</th></tr>
<tr><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/gpt-image-2.5-flare-label.webp" alt="GPT Image 2.5 Flare: coffee bag with all three label lines correct" width="240" /></td><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/gpt-image-2.5-sunburst-label.webp" alt="GPT Image 2.5 Sunburst: coffee bag with correct label and an added 'Single origin coffee' line" width="240" /></td><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/qwen-image-3.0-label.webp" alt="Qwen Image 3.0: coffee bag with large correct brand name" width="240" /></td></tr>
<tr><th>FLUX.2 Klein</th><th>Bria FIBO 1.5</th><th>SDXL Turbo</th></tr>
<tr><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/flux.2-klein-label.webp" alt="FLUX.2 Klein: coffee bag with correct label" width="240" /></td><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/bria-fibo-1.5-label.webp" alt="Bria FIBO 1.5: coffee bag with 'Yirgachefee' misspelled and invented filler text" width="240" /></td><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/sdxl-turbo-label.webp" alt="SDXL Turbo: coffee bag with garbled lettering" width="240" /></td></tr>
</table>

<h3>Three apples on the left, one cup on the right</h3>
<table>
<tr><th>GPT Image 2.5 Sunburst</th><th>Seedream 5.0 Pro</th><th>Bria FIBO 1.5</th></tr>
<tr><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/gpt-image-2.5-sunburst-layout.webp" alt="GPT Image 2.5 Sunburst: three apples left, blue cup right" width="240" /></td><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/seedream-5.0-pro-layout.webp" alt="Seedream 5.0 Pro: three apples left, blue mug right" width="240" /></td><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/bria-fibo-1.5-layout.webp" alt="Bria FIBO 1.5: three apples left, blue cup right" width="240" /></td></tr>
<tr><th>Qwen Image 3.0 (first run)</th><th>FLUX.2 Pro (first run)</th><th>SDXL Turbo</th></tr>
<tr><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/qwen-image-3.0-layout.webp" alt="Qwen Image 3.0: four apples instead of three" width="240" /></td><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/flux.2-pro-layout.webp" alt="FLUX.2 Pro: two apples instead of three" width="240" /></td><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/sdxl-turbo-layout.webp" alt="SDXL Turbo: several apples in bowls and no cup" width="240" /></td></tr>
</table>

<h3>Cabin, lake and red canoe</h3>
<table>
<tr><th>GPT Image 2.5 Flare</th><th>Seedream 5.0 Pro</th><th>FLUX.2 Pro</th></tr>
<tr><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/gpt-image-2.5-flare-scene.webp" alt="GPT Image 2.5 Flare: cabin, misty lake, red canoe tied to a dock" width="240" /></td><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/seedream-5.0-pro-scene.webp" alt="Seedream 5.0 Pro: cabin across a misty lake, red canoe at a dock" width="240" /></td><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/flux.2-pro-scene.webp" alt="FLUX.2 Pro: cabin with smoking chimney, red canoe next to a dock" width="240" /></td></tr>
<tr><th>Qwen Image 3.0</th><th>FLUX.2 Klein</th><th>SDXL Turbo</th></tr>
<tr><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/qwen-image-3.0-scene.webp" alt="Qwen Image 3.0: cabin, lake, red canoe tied to a dock" width="240" /></td><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/flux.2-klein-scene.webp" alt="FLUX.2 Klein: red canoe overlapping the dock planks" width="240" /></td><td><img src="https://quicksilverpro.io/blog/image-generation-api-compared/sdxl-turbo-scene.webp" alt="SDXL Turbo: red cabin and two canoes, neither at the dock" width="240" /></td></tr>
</table>

<h2>What the API actually returns</h2>
<p>The models do not all answer a request the same way, and code that works with one can break on another:</p>
<ul>
<li><strong>Size is not always what you ask for.</strong> We asked for 1024x1024 every time. Seedream 4 returned 1280x1024 every time we checked. GPT Image 2 picks its own aspect ratio at about 1.57 megapixels: 1774x887 for the apples (twice), 1536x1024 for the lake, 1312x1199 for the coffee bag. Every other model returned 1024x1024.</li>
<li><strong>Some models return a link instead of the image.</strong> GPT Image, Qwen Image, FLUX and SDXL Turbo put the image in <code>b64_json</code>. Seedream 4, Seedream 5.0 Pro and Bria FIBO 1.5 return a download URL in <code>url</code> instead, and still did when we passed <code>response_format="b64_json"</code>. We did not test how long those links stay valid, so download the file straight away.</li>
<li><strong>The format differs too.</strong> FLUX, SDXL Turbo and the Seedream models returned JPEG; GPT Image, Qwen Image and Bria returned PNG. Check the file's first bytes rather than assuming an extension.</li>
</ul>
<p>Code that handles both response shapes:</p>
<pre><code class="language-python">import base64
import urllib.request

from openai import OpenAI

client = OpenAI(
    base_url="https://api.quicksilverpro.io/v1",
    api_key="YOUR_QSP_KEY",
)

result = client.images.generate(
    model="gpt-image-2.5-flare",
    prompt="Flat vector illustration: three red apples on the left, one blue cup on the right, plain white background.",
    size="1024x1024",
    n=1,
)

image = result.data[0]
if image.b64_json:
    data = base64.b64decode(image.b64_json)
else:  # Seedream and Bria return a download link instead
    data = urllib.request.urlopen(image.url).read()

with open("apples.png", "wb") as f:
    f.write(data)
</code></pre>
<h2>Which one to use</h2>
<ul>
<li><strong>GPT Image 2.5 Flare</strong> if the image has to match the prompt: correct text and correct counts in every run, at $0.018 per image and about 11 seconds. Sunburst gave the same accuracy here, more slowly, and added a line of text we did not ask for; GPT Image 2 is cheaper at $0.01 but slower and does not keep the size you request.</li>
<li><strong>Qwen Image 3.0 or FLUX.2 Pro</strong> for good text and photoreal scenes in five to nine seconds, if you can retry when a count comes out wrong.</li>
<li><strong>FLUX.2 Klein or FLUX.1 Schnell</strong> when speed and volume matter more than precision: drafts, thumbnails, many variations to choose from. Klein even got the label text right, in about a second.</li>
<li><strong>Seedream 5.0 Pro</strong> produced accurate, natural-looking images, but at $0.07 and 28 to 51 seconds per image it is the most expensive and slowest model in this test.</li>
</ul>
<p>The whole test, about 50 images including reruns and checks, cost about $1.45 at QuickSilver Pro prices on 2026-10-20.</p>
<h2>Limits of this test</h2>
<p>One or two images per model per prompt is a very small sample: the composition prompt showed that the same model can get it right on one run and wrong on the next, so treat every cell in the table as one observation, not a rate. Quality was judged by one person looking at the images, and "looks natural" is a matter of taste. We used default settings only; several of these models accept extra parameters (quality, seeds, prompt rewriting) that we did not try. Latency was measured from one client on one day, and in the first run all eleven models were working at the same time. Run your own prompts before choosing: every image request appears in your dashboard with its cost.</p>
<p>For setup in other languages and SDKs, see the <a href="https://quicksilverpro.io/docs/quickstart/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=image-models">quickstart</a> and the <a href="https://quicksilverpro.io/docs/models/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=image-models">model list</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Kimi K3.1 Pro Highspeed vs Pro: we measured the real speedup]]></title><description><![CDATA[Same model, twice the price. Highspeed generated text 2 to 3x faster but did not start sooner; a coding agent finished 2.5x faster for 1.5x the cost.]]></description><link>https://xiunxiao.hashnode.dev/kimi-k3-1-pro-highspeed-vs-pro-we-measured-the-real-speedup</link><guid isPermaLink="true">https://xiunxiao.hashnode.dev/kimi-k3-1-pro-highspeed-vs-pro-we-measured-the-real-speedup</guid><category><![CDATA[Kimi]]></category><category><![CDATA[llm]]></category><category><![CDATA[AI]]></category><category><![CDATA[Benchmark]]></category><dc:creator><![CDATA[xiun xiao]]></dc:creator><pubDate>Tue, 10 Nov 2026 01:27:51 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally published on the <a href="https://quicksilverpro.io/blog/kimi-k3-1-pro-highspeed-vs-pro/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=kimi-highspeed">QuickSilver Pro blog</a>.</em></p>
<p><a href="https://quicksilverpro.io/models/kimi-k3.1-pro-highspeed/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=kimi-highspeed">Kimi K3.1 Pro Highspeed</a> is the same model as <a href="https://quicksilverpro.io/models/kimi-k3.1-pro/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=kimi-highspeed">Kimi K3.1 Pro</a>, served on Moonshot's high-speed endpoint. On QuickSilver Pro it costs $4.00 / $20.00 per million tokens, twice the $2.00 / $10.00 of the standard version. The usual pitch is "about three times faster". We wanted to know how much faster it is end to end, and when the extra money buys anything.</p>
<p>We tested both on 2026-11-02 through the QuickSilver Pro API, in two ways: single API requests of three shapes, and a coding agent working on six tasks with hidden tests. Short answer:</p>
<ul>
<li><strong>Generation speed:</strong> Highspeed generated text 2 to 3 times faster.</li>
<li><strong>Time to first token:</strong> about the same for both models. Highspeed does not start answering any sooner.</li>
<li><strong>End to end:</strong> a short answer arrived 1.7 times faster and a long code answer 2 times faster. A question about a 52,000-token log came back only 1.25 times faster.</li>
<li><strong>Coding agent:</strong> every task finished 2.5 times faster on average, for 1.5 times the cost. Both versions passed every hidden test.</li>
</ul>
<h2>Test 1: single API requests</h2>
<h3>How we tested</h3>
<ul>
<li><strong>Requests:</strong> streamed <code>/v1/chat/completions</code> calls with default settings, sent by a small Python script. Each model got three request types:<ul>
<li><strong>Short answer:</strong> "In three sentences, explain what a database index is and when it hurts write performance." About 110 input tokens.</li>
<li><strong>Long code answer:</strong> an LRU cache module with per-entry TTL, thread safety and size-based eviction, plus a pytest file. About 150 input tokens; both models wrote about 11,700 output tokens, of which about 9,400 were reasoning.</li>
<li><strong>Long input:</strong> a 52,614-token service log with one line naming the root cause of an incident. The question asked the model to quote that line and explain it.</li>
</ul>
</li>
<li><strong>Runs:</strong> 8 per model and request type, 48 requests in total. The two models alternated going first, so both saw the same network and server conditions.</li>
<li><strong>No cache:</strong> every request started with a unique tag, so no request was served from the prompt cache.</li>
<li><strong>Measured:</strong> time to the first token (reasoning or answer), total time, output tokens per second after the first token, and the cost QuickSilver Pro returned in each response's usage block.</li>
</ul>
<h3>Results</h3>
<p>Medians of 8 runs per model and request type.</p>
<table>
<thead>
<tr>
<th>Request</th>
<th>Model</th>
<th>First token</th>
<th>Total time</th>
<th>Output tokens/s</th>
<th>Cost per request</th>
</tr>
</thead>
<tbody><tr>
<td>Short answer</td>
<td>Kimi K3.1 Pro</td>
<td>2.1 s</td>
<td>9.8 s</td>
<td>37</td>
<td>$0.0028</td>
</tr>
<tr>
<td>Short answer</td>
<td>Highspeed</td>
<td>2.8 s</td>
<td>5.7 s</td>
<td>102</td>
<td>$0.0059</td>
</tr>
<tr>
<td>Long code answer</td>
<td>Kimi K3.1 Pro</td>
<td>2.2 s</td>
<td>5 min 42 s</td>
<td>34</td>
<td>$0.117</td>
</tr>
<tr>
<td>Long code answer</td>
<td>Highspeed</td>
<td>2.7 s</td>
<td>2 min 51 s</td>
<td>71</td>
<td>$0.235</td>
</tr>
<tr>
<td>52K-token log</td>
<td>Kimi K3.1 Pro</td>
<td>7.3 s</td>
<td>12.4 s</td>
<td>51</td>
<td>$0.108</td>
</tr>
<tr>
<td>52K-token log</td>
<td>Highspeed</td>
<td>7.4 s</td>
<td>9.9 s</td>
<td>148</td>
<td>$0.216</td>
</tr>
</tbody></table>
<p>Both models found the root-cause line in all 16 long-input runs and quoted it exactly.</p>
<h3>What the numbers say</h3>
<p><strong>The speedup is in generation, not in getting started.</strong> Once text started flowing, Highspeed produced 2 to 3 times as many tokens per second. Time to first token was the same, or slightly longer on Highspeed: 2.8 seconds against 2.1 for the short answer. On the long log both models spent about 7 seconds reading the input before the first token.</p>
<p><strong>So the end-to-end gain depends on the shape of the request.</strong> Total time is the wait for the first token plus the generation time. The more of a request is generation, the closer it gets to the full speedup:</p>
<ul>
<li><strong>Short answer:</strong> 1.7 times faster. Waiting for the first token is a big share of a 10-second request.</li>
<li><strong>Long code answer:</strong> 2 times faster, or 2 minutes 51 seconds saved per answer.</li>
<li><strong>52K-token log:</strong> 1.25 times faster. Most of the time goes to reading the input, so Highspeed saved about 2.5 seconds for twice the cost.</li>
</ul>
<p><strong>Twice the price meant twice the cost per request.</strong> Both models wrote about the same number of tokens for the same request, so each Highspeed request cost almost exactly double.</p>
<p><strong>Kimi reasons a lot by default.</strong> Between 60% and 80% of the output tokens were reasoning, depending on the request type. The long code answer varied from 6,200 to 15,300 output tokens across runs of the same prompt, so the cost of a single request can swing by a factor of two either way.</p>
<h2>Test 2: a coding agent on six tasks</h2>
<h3>How we tested</h3>
<ul>
<li><strong>Agent:</strong> <a href="https://opencode.ai/">OpenCode</a> 1.19.4, non-interactive (<code>opencode run --auto</code>), with QuickSilver Pro added as an OpenAI-compatible provider. The only thing that changed between runs was <code>-m quicksilverpro/kimi-k3.1-pro</code> or <code>-m quicksilverpro/kimi-k3.1-pro-highspeed</code>.</li>
<li><strong>Agent settings:</strong> a clean OpenCode config with no MCP servers, plugins or extra skills, and OpenCode's defaults otherwise. Both models got the same system prompt and tools.</li>
<li><strong>Tasks:</strong> the six tasks from our <a href="https://quicksilverpro.io/blog/gemini-4-argon-vs-opus-5-5-coding/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=kimi-highspeed">Gemini 4 Argon vs Claude Opus 5.5</a> test. Each is a throwaway Python repository with a one-paragraph prompt, a spec or bug report, one visible test, and a separate hidden test suite that we ran after the agent finished:<ol>
<li><strong>Two-file bug fix</strong> in a shop module. 18 hidden tests.</li>
<li><strong>A duration parser</strong> implemented from a page of rules. 84 hidden tests.</li>
<li><strong>A refactor</strong> that must not change behaviour. 317 hidden tests.</li>
<li><strong>Sign-up validation</strong> with interacting rules. 84 hidden tests.</li>
<li><strong>A config-format parser</strong> with references and cycle detection. 57 hidden tests.</li>
<li><strong>A Mustache template renderer</strong>, graded against the official Mustache spec suite. 136 hidden tests.</li>
</ol>
</li>
<li><strong>Runs:</strong> each task twice per model, 24 runs in total. The two models ran side by side.</li>
<li><strong>Cost:</strong> the per-request cost that QuickSilver Pro returned, summed over every request in a run.</li>
</ul>
<h3>Results</h3>
<p>Both models passed every hidden test in every run. Averages over two runs per model and task:</p>
<table>
<thead>
<tr>
<th>Task</th>
<th>Kimi K3.1 Pro: time</th>
<th>Kimi K3.1 Pro: cost</th>
<th>Highspeed: time</th>
<th>Highspeed: cost</th>
<th>Speedup</th>
</tr>
</thead>
<tbody><tr>
<td>1. Two-file bug fix</td>
<td>226 s</td>
<td>$0.143</td>
<td>115 s</td>
<td>$0.251</td>
<td>2.0x</td>
</tr>
<tr>
<td>2. Duration parser</td>
<td>284 s</td>
<td>$0.149</td>
<td>135 s</td>
<td>$0.259</td>
<td>2.1x</td>
</tr>
<tr>
<td>3. Refactor</td>
<td>365 s</td>
<td>$0.194</td>
<td>129 s</td>
<td>$0.310</td>
<td>2.8x</td>
</tr>
<tr>
<td>4. Sign-up validation</td>
<td>263 s</td>
<td>$0.134</td>
<td>105 s</td>
<td>$0.206</td>
<td>2.5x</td>
</tr>
<tr>
<td>5. Config parser</td>
<td>559 s</td>
<td>$0.268</td>
<td>272 s</td>
<td>$0.477</td>
<td>2.1x</td>
</tr>
<tr>
<td>6. Mustache renderer</td>
<td>754 s</td>
<td>$0.440</td>
<td>239 s</td>
<td>$0.463</td>
<td>3.2x</td>
</tr>
<tr>
<td><strong>Average</strong></td>
<td><strong>409 s</strong></td>
<td><strong>$0.221</strong></td>
<td><strong>166 s</strong></td>
<td><strong>$0.328</strong></td>
<td><strong>2.5x</strong></td>
</tr>
</tbody></table>
<p>All twelve runs per model together took 82 minutes on Kimi K3.1 Pro and 33 minutes on Highspeed.</p>
<h3>What the numbers say</h3>
<p><strong>In an agent, Highspeed cost 1.5 times as much, not 2.</strong> About 90% of each run's input tokens were cache reads. An agent sends the whole conversation again on every request, and the repeated part comes from the prompt cache. Cache reads cost $0.20 per million tokens on both versions, so only the new input and the output pay the doubled price.</p>
<p><strong>Saving four minutes cost about eleven cents.</strong> On average a task took 4 minutes less on Highspeed and cost $0.107 more.</p>
<p><strong>The Mustache gap is partly luck.</strong> In one of its two Mustache runs, Kimi K3.1 Pro started a sub-agent and made 41 requests, against 11 to 18 in the other Mustache runs. That run took 18 minutes and cost $0.65. Without it, the Mustache times were 7 minutes against 4. All four Mustache runs downloaded the official spec tests and ran them before finishing. Our hidden tests for that task are the same files, so the Mustache scores are not independent.</p>
<h2>When Highspeed is worth it</h2>
<ul>
<li><strong>Someone is waiting:</strong> chat, coding assistants, interactive agents. Two to three times faster generation is easy to feel. An agent task that takes 7 minutes takes about 3.</li>
<li><strong>Long answers:</strong> code generation and long-form writing, where generation is most of the time.</li>
<li><strong>Agents with long sessions:</strong> the prompt cache keeps the extra cost to about 1.5 times.</li>
</ul>
<p><strong>Stay on Kimi K3.1 Pro for:</strong></p>
<ul>
<li><strong>Batch jobs and pipelines</strong>, where nobody watches the clock. You pay twice as much for time nobody uses.</li>
<li><strong>Long input, short output:</strong> summarising, extraction and search over big documents. On our 52,000-token log, Highspeed saved 2.5 seconds per request at twice the price.</li>
</ul>
<h2>Limits of this test</h2>
<ul>
<li>One day of measurements (2026-11-02). Serving speed depends on load, so another day or time could give different numbers, for either version.</li>
<li>Eight runs per API request type and two runs per agent task. The agent times varied by up to 2.5 times between two runs of the same task, mostly because of how much the model chose to reason or check its own work.</li>
<li>Times include network time from our client to QuickSilver Pro and on to the provider.</li>
<li>Default settings only. We did not change the reasoning effort or limit reasoning tokens. Either would change speed and cost for both versions.</li>
<li>One agent, OpenCode, and small Python tasks of 1.5 to 18 minutes each, not a multi-hour change in a large codebase.</li>
</ul>
<h2>Run it yourself</h2>
<p>Stream a request to each model and watch the difference:</p>
<pre><code class="language-bash">export QSP_API_KEY=YOUR_QSP_KEY

for model in kimi-k3.1-pro kimi-k3.1-pro-highspeed; do
  echo "== $model"
  time curl -sN https://api.quicksilverpro.io/v1/chat/completions \
    -H "Authorization: Bearer $QSP_API_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"model\": \"$model\", \"stream\": true, \"messages\": [{\"role\": \"user\", \"content\": \"Write a Python LRU cache with TTL.\"}]}" \
    &gt; /dev/null
done
</code></pre>
<p>To try both in OpenCode, add QuickSilver Pro as a provider in <code>opencode.json</code>:</p>
<pre><code class="language-json">{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "quicksilverpro": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "QuickSilver Pro",
      "options": {
        "baseURL": "https://api.quicksilverpro.io/v1",
        "apiKey": "{env:QSP_API_KEY}"
      },
      "models": {
        "kimi-k3.1-pro": { "name": "Kimi K3.1 Pro" },
        "kimi-k3.1-pro-highspeed": { "name": "Kimi K3.1 Pro Highspeed" }
      }
    }
  }
}
</code></pre>
<pre><code class="language-bash">opencode run --auto -m quicksilverpro/kimi-k3.1-pro "Fix the failing test in tests/"
opencode run --auto -m quicksilverpro/kimi-k3.1-pro-highspeed "Fix the failing test in tests/"
</code></pre>
<p>Every request shows up in your QuickSilver Pro dashboard with its model, token counts and cost, so you can compare the two versions on your own work. Prices for every model are on the <a href="https://quicksilverpro.io/pricing/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=kimi-highspeed">pricing page</a>.</p>
]]></content:encoded></item><item><title><![CDATA[DeepSeek V4.1 Flash vs Claude Haiku 5.5: a 17-task benchmark of the two cheapest tiers]]></title><description><![CDATA[The two cheapest tiers on the same 17 coding, extraction and reasoning tasks, three runs each: pass rate, latency and cost per 1,000 tasks.]]></description><link>https://xiunxiao.hashnode.dev/deepseek-v4-1-flash-vs-claude-haiku-5-5-a-17-task-benchmark-of-the-two-cheapest-tiers</link><guid isPermaLink="true">https://xiunxiao.hashnode.dev/deepseek-v4-1-flash-vs-claude-haiku-5-5-a-17-task-benchmark-of-the-two-cheapest-tiers</guid><category><![CDATA[Deepseek]]></category><category><![CDATA[claude]]></category><category><![CDATA[llm]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[xiun xiao]]></dc:creator><pubDate>Tue, 10 Nov 2026 01:27:47 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally published on the <a href="https://quicksilverpro.io/blog/deepseek-v4-1-flash-vs-claude-haiku-5-5/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=flash-vs-haiku">QuickSilver Pro blog</a>.</em></p>
<p>DeepSeek V4.1 Flash and Claude Haiku 5.5 are the two models people reach for when a job runs thousands of times a day: classification, extraction, small code edits, the background calls of an agent. Both are cheap per token. The question is which one is cheaper per <em>finished task</em>, and whether either gets things wrong more often.</p>
<p>So we measured it, on 2026-10-20, through the QuickSilver Pro API.</p>
<table>
<thead>
<tr>
<th>Model</th>
<th>Price per 1M tokens (input / output)</th>
</tr>
</thead>
<tbody><tr>
<td><a href="https://quicksilverpro.io/models/deepseek-v4.1-flash/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=flash-vs-haiku">DeepSeek V4.1 Flash</a></td>
<td>$0.0558 / $0.2231</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/claude-haiku-5-5/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=flash-vs-haiku">Claude Haiku 5.5</a></td>
<td>$0.025 / $0.125</td>
</tr>
</tbody></table>
<p><strong>Update, 2026-11-07:</strong> DeepSeek V4.1 Flash's price fell on 2026-11-06, from $0.125 / $0.55 to $0.0558 / $0.2231 per million tokens. Haiku's price did not change. Below, costs are shown at both prices, computed from the same measured tokens; the test itself was not rerun.</p>
<h2>How we tested</h2>
<p>17 tasks, every one with an answer a script can check:</p>
<ul>
<li><strong>7 Python coding tasks</strong> (duration parser, interval merging, LRU cache, strict Roman numerals, an expression evaluator with C-style division, semantic-version ordering, shell-style word splitting). The returned code is run against a fixed set of unit tests; it passes only if every assertion holds.</li>
<li><strong>4 extraction tasks</strong> (an invoice from an email, attendees from meeting notes, log-line counts, the final state of an order after a chat full of changes). The returned JSON is compared to the expected object field by field.</li>
<li><strong>6 reasoning tasks</strong> with known numeric or one-word answers (counting arrangements, a pipes-and-tank problem, a weekday two years out, a step-by-step simulation, an elimination puzzle, a digit-sum count).</li>
</ul>
<p>Each model got the same single user message per task, through the OpenAI-compatible <code>/v1/chat/completions</code> endpoint, non-streaming, <code>max_tokens</code> 8,000, no system prompt and no temperature setting. Each task ran three times, so 51 requests per model. Cost is the billed input and output tokens multiplied by the QuickSilver Pro prices on 2026-10-20. DeepSeek V4.1 Flash thinks before it answers by default, and those reasoning tokens are billed as output, so they are included.</p>
<h2>Results</h2>
<table>
<thead>
<tr>
<th></th>
<th>DeepSeek V4.1 Flash</th>
<th>Claude Haiku 5.5</th>
<th>DeepSeek V4.1 Flash, reasoning off</th>
</tr>
</thead>
<tbody><tr>
<td>Passed</td>
<td>50 / 51</td>
<td>50 / 51</td>
<td>48 / 51</td>
</tr>
<tr>
<td>Median latency</td>
<td>9.9 s</td>
<td>2.8 s</td>
<td>3.6 s</td>
</tr>
<tr>
<td>90th percentile latency</td>
<td>40.5 s</td>
<td>7.2 s</td>
<td>9.0 s</td>
</tr>
<tr>
<td>Average input tokens</td>
<td>175</td>
<td>895</td>
<td>149</td>
</tr>
<tr>
<td>Average output tokens</td>
<td>1,730 (1,518 of them reasoning)</td>
<td>834</td>
<td>556</td>
</tr>
<tr>
<td>Cost per 1,000 tasks, prices on 2026-10-20</td>
<td>$0.97</td>
<td>$0.13</td>
<td>$0.32</td>
</tr>
<tr>
<td>Cost per 1,000 tasks, prices from 2026-11-06</td>
<td>$0.40</td>
<td>$0.13</td>
<td>$0.13</td>
</tr>
</tbody></table>
<p>Costs are computed from the measured tokens: the first row at QuickSilver Pro prices on 2026-10-20, the second with DeepSeek V4.1 Flash's price from 2026-11-06.</p>
<p>Haiku's input count is higher than Flash's for the same prompts mainly because of overhead, not the prompts themselves. Every Claude request on QuickSilver Pro carries about 690 extra input tokens: an identity instruction the gateway adds, plus a system block added upstream. A one-line "say hi" to Claude Opus 5.5 reported about 690 input tokens in our earlier test. Those tokens are billed and are included in Haiku's cost above, about $0.02 of its $0.13 per 1,000 tasks. Without them Haiku would be slightly cheaper, so the comparison does not change.</p>
<p>What stands out:</p>
<ul>
<li><strong>Same pass rate, very different bill.</strong> Both models passed 50 of 51. Haiku did it for about one seventh of the cost at the prices we tested with, and about a third at Flash's new price. It is cheaper per token on both input and output, and it wrote fewer tokens: Flash averaged 1,730 output tokens per task, 88% of them reasoning the reader never sees.</li>
<li><strong>Haiku answered faster on every task type.</strong> Its median was 2.8 seconds against 9.9 for Flash, and its slowest answers came back much sooner: on the expression evaluator, the shell splitter and the elimination puzzle, Flash usually took 30 to 60 seconds, against 2 to 18 seconds for Haiku.</li>
<li><strong>The misses were different.</strong> Flash gave a wrong number on the elimination puzzle once (the other two runs were right). Haiku's one miss was a response that ended in the middle of the function; the other two runs of that task passed.</li>
</ul>
<h3>Turning off Flash's reasoning</h3>
<p>DeepSeek V4.1 Flash can skip the thinking step. On QuickSilver Pro you pass <code>reasoning: {"enabled": false}</code> in the request body; we checked that the response then reports zero reasoning tokens. With reasoning off, Flash became three times cheaper and almost as fast as Haiku, and dropped three tasks: the elimination puzzle twice and the duration parser once. At 2026-10-20 prices it was still about 2.5 times Haiku's cost per task; at the 2026-11-06 price the two cost about the same, $0.13 per 1,000 tasks each.</p>
<pre><code class="language-python">from openai import OpenAI

client = OpenAI(
    base_url="https://api.quicksilverpro.io/v1",
    api_key="YOUR_QSP_KEY",
)

response = client.chat.completions.create(
    model="deepseek-v4.1-flash",
    messages=[{"role": "user", "content": "Extract the invoice number from: ..."}],
    extra_body={"reasoning": {"enabled": False}},
)
print(response.choices[0].message.content)
</code></pre>
<h2>Which one to use</h2>
<ul>
<li><strong>Claude Haiku 5.5</strong> for high-volume work with short prompts: extraction, classification, small functions, routing. On this test it matched Flash's accuracy at about a third of the cost of Flash with default settings, and answered faster.</li>
<li><strong>DeepSeek V4.1 Flash</strong> if your prompts are long. Haiku's price rises to $0.125 / $0.625 for any request whose prompt is longer than 200K tokens, while Flash keeps one rate across its 1M-token context. We did not test long prompts, so compare the two prices for your own prompt sizes.</li>
<li><strong>If you do use Flash for short tasks,</strong> try it with reasoning off first. On our tasks it gave up a little accuracy for a much smaller bill and much faster answers. At the 2026-11-06 price it costs about what Haiku does, but Haiku was still faster (2.8 against 3.6 seconds median) and passed two more runs.</li>
</ul>
<p>Both models are starter models, so the $0.05 free credit a new account gets covers a test like this one: one pass of all 17 tasks on both models cost us about two cents.</p>
<h2>Limits of this test</h2>
<p>17 tasks and three runs per model is a small sample. One task more or less changes a pass rate by two points, so read 50/51 versus 48/51 as "about the same", not as a ranking. The tasks are short, self-contained and in English; long documents, multi-turn conversations, tool calls and other languages were not tested. Latency was measured from one client on one day and depends on load. Run your own prompts before you switch a production workload: every request appears in your dashboard with its tokens and cost, which makes that comparison easy.</p>
<p>For the full Claude price list, see <a href="https://quicksilverpro.io/blog/claude-api-pricing/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=flash-vs-haiku">Claude API pricing in 2026</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Claude Opus 5.5 vs GPT-6.1 Sol for coding agents]]></title><description><![CDATA[Same coding agent, six tasks with hidden tests, two runs per model. Both passed every test; Opus took about half the time at about the same cost.]]></description><link>https://xiunxiao.hashnode.dev/claude-opus-5-5-vs-gpt-6-1-sol-for-coding-agents</link><guid isPermaLink="true">https://xiunxiao.hashnode.dev/claude-opus-5-5-vs-gpt-6-1-sol-for-coding-agents</guid><category><![CDATA[claude]]></category><category><![CDATA[openai]]></category><category><![CDATA[llm]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[xiun xiao]]></dc:creator><pubDate>Tue, 10 Nov 2026 01:27:43 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally published on the <a href="https://quicksilverpro.io/blog/opus-5-5-vs-gpt-6-1-sol-coding/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=opus-vs-gpt-sol">QuickSilver Pro blog</a>.</em></p>
<p>On QuickSilver Pro, Claude Opus 5.5 costs $1.00 / $5.00 per million tokens and GPT-6.1 Sol costs $2.00 / $10.00. Both are sold for agentic coding, so for anyone running a coding agent the question is which one gets the work done, how fast, and for how much.</p>
<p>We tested this on 2026-10-27. Both models ran in the same agent, OpenCode, on six small but real coding tasks, and we graded every run with tests the agent never saw. Short answer: both models passed every hidden test in every run. Opus finished a task in 82 seconds on average and Sol in 152. Per task they cost about the same: $0.094 for Opus and $0.098 for Sol.</p>
<h2>How we tested</h2>
<ul>
<li><strong>Agent:</strong> <a href="https://opencode.ai/">OpenCode</a> 1.19.4, non-interactive (<code>opencode run --auto</code>), with QuickSilver Pro added as an OpenAI-compatible provider. The only thing that changed between runs was <code>-m quicksilverpro/claude-opus-5-5</code> or <code>-m quicksilverpro/gpt-6.1-sol</code>. We could not use Claude Code here. QuickSilver Pro serves GPT-6.1 Sol only on the OpenAI-compatible endpoints (<code>/v1/chat/completions</code> and <code>/v1/responses</code>), and Claude Code needs the Anthropic Messages API, so we used one agent that can drive both models.</li>
<li><strong>Agent settings:</strong> a clean OpenCode config with no MCP servers, plugins or extra skills, and OpenCode's defaults otherwise. OpenCode sent no reasoning-effort setting, so each model ran at its default. OpenCode chooses its system prompt and file-editing tools by model family, and we left that as shipped. With Opus it used a 9,300-character system prompt and <code>edit</code> / <code>write</code> tools. With Sol it used a 5,100-character prompt and an <code>apply_patch</code> tool. Each model therefore ran the way OpenCode normally drives it.</li>
<li><strong>Tasks:</strong> six throwaway Python repositories, each with a one-paragraph prompt, a spec or bug report in the repo, and one visible test. Every task had a separate hidden test suite that we ran after the agent finished. We wrote five of the suites before any run and checked that each passed against our own reference solution and failed against the starting code. The sixth is the official Mustache spec suite.</li>
<li><strong>Runs:</strong> each task twice per model, same inputs, 24 runs in total. Opus and Sol ran each task at the same time, so both saw the same network and server conditions.</li>
<li><strong>Graded on:</strong> the share of hidden tests passing. We also recorded wall-clock time, number of API requests, input / cached / output tokens, and cost.</li>
<li><strong>Cost:</strong> the per-request cost that QuickSilver Pro returns in each response's usage block, summed over every request in a run, at QuickSilver Pro prices on 2026-10-27. We recorded it with a small local pass-through proxy. The same figures appear per request in the dashboard.</li>
</ul>
<p>The tasks:</p>
<ol>
<li><strong>Two-file bug fix.</strong> A shop module whose totals were off by a cent and whose discount was applied twice. The fix needed changes in both files, plus a rule from the README that the bug report did not mention: a minimum order for one discount code. 18 hidden tests.</li>
<li><strong>Implement from a spec.</strong> A duration parser (<code>"1h30m"</code>, <code>"2 hours and 5 min"</code>, <code>"PT1H30M"</code>) with a page of rules on separators, unit order and what must be rejected, including non-ASCII digits. 84 hidden tests.</li>
<li><strong>Refactor without changing behaviour.</strong> Split a long function full of copy-pasted code into helpers. The hidden tests compared the new output with the original on 300 random inputs and 16 edge cases, including invalid options and missing fields. They also checked that the function shrank to at most half its original length. 317 hidden tests.</li>
<li><strong>Add input validation.</strong> A sign-up function with a written rule set: per-field error codes, rule order, and fields that interact. For example, a password must not contain the username, but only if the username is valid. 84 hidden tests.</li>
<li><strong>Parser for a config format.</strong> Sections, quoted values with escapes, inline comments, line continuation with correct error line numbers, and <code>${section.key}</code> references with cycle detection. 57 hidden tests.</li>
<li><strong>A Mustache template renderer</strong> from scratch, graded against the official Mustache spec test suite: interpolation, sections, inverted sections, comments, partials and delimiter changes. 136 hidden tests.</li>
</ol>
<h2>Results</h2>
<p>Averages over two runs per model and task. Cost is per run, at QuickSilver Pro prices on 2026-10-27.</p>
<table>
<thead>
<tr>
<th>Task</th>
<th>Opus 5.5: tests passed</th>
<th>Opus 5.5: time</th>
<th>Opus 5.5: cost</th>
<th>GPT-6.1 Sol: tests passed</th>
<th>GPT-6.1 Sol: time</th>
<th>GPT-6.1 Sol: cost</th>
</tr>
</thead>
<tbody><tr>
<td>1. Two-file bug fix</td>
<td>18/18, both runs</td>
<td>34 s</td>
<td>$0.049</td>
<td>18/18, both runs</td>
<td>137 s</td>
<td>$0.066</td>
</tr>
<tr>
<td>2. Duration parser</td>
<td>84/84, both runs</td>
<td>53 s</td>
<td>$0.063</td>
<td>84/84, both runs</td>
<td>102 s</td>
<td>$0.080</td>
</tr>
<tr>
<td>3. Refactor</td>
<td>317/317, both runs</td>
<td>85 s</td>
<td>$0.091</td>
<td>317/317, both runs</td>
<td>148 s</td>
<td>$0.106</td>
</tr>
<tr>
<td>4. Input validation</td>
<td>84/84, both runs</td>
<td>65 s</td>
<td>$0.075</td>
<td>84/84, both runs</td>
<td>142 s</td>
<td>$0.085</td>
</tr>
<tr>
<td>5. Config parser</td>
<td>57/57, both runs</td>
<td>116 s</td>
<td>$0.132</td>
<td>57/57, both runs</td>
<td>177 s</td>
<td>$0.106</td>
</tr>
<tr>
<td>6. Mustache renderer</td>
<td>136/136, both runs</td>
<td>139 s</td>
<td>$0.155</td>
<td>136/136, both runs</td>
<td>205 s</td>
<td>$0.148</td>
</tr>
<tr>
<td><strong>Average</strong></td>
<td><strong>all passed</strong></td>
<td><strong>82 s</strong></td>
<td><strong>$0.094</strong></td>
<td><strong>all passed</strong></td>
<td><strong>152 s</strong></td>
<td><strong>$0.098</strong></td>
</tr>
</tbody></table>
<p>Where the tokens and the money went, averaged over all 12 runs per model:</p>
<table>
<thead>
<tr>
<th>Per run</th>
<th>Opus 5.5</th>
<th>GPT-6.1 Sol</th>
</tr>
</thead>
<tbody><tr>
<td>Requests (including one short title request from OpenCode)</td>
<td>7.9</td>
<td>12.1</td>
</tr>
<tr>
<td>Input tokens</td>
<td>107,000</td>
<td>101,000</td>
</tr>
<tr>
<td>...of which read from the prompt cache</td>
<td>54,000 (51%)</td>
<td>82,000 (81%)</td>
</tr>
<tr>
<td>Output tokens</td>
<td>7,800</td>
<td>4,200</td>
</tr>
<tr>
<td>...of which reasoning</td>
<td>0</td>
<td>700</td>
</tr>
<tr>
<td>Cost of uncached input</td>
<td>$0.052</td>
<td>$0.049</td>
</tr>
<tr>
<td>Cost of cached input</td>
<td>$0.003</td>
<td>$0.008</td>
</tr>
<tr>
<td>Cost of output</td>
<td>$0.039</td>
<td>$0.042</td>
</tr>
<tr>
<td><strong>Total cost per task</strong></td>
<td><strong>$0.094</strong></td>
<td><strong>$0.098</strong></td>
</tr>
</tbody></table>
<p>Sol's uncached-input line includes cache writes: QuickSilver Pro billed some of Sol's uncached input at the cache-write rate rather than the plain input rate. Opus's uncached input was billed at the plain input rate.</p>
<h2>What the numbers say</h2>
<p><strong>Quality was a tie.</strong> Neither model failed a hidden test in 24 runs. That includes all 136 cases of the official Mustache suite and the 316 comparisons with the original function in the refactor. These tasks did not find a ceiling for either model.</p>
<p><strong>Opus was faster on every task.</strong> On average Sol took 1.9 times as long, from 1.5 times as long on the Mustache renderer to 4 times as long on the bug fix. Two things account for it. Opus used fewer requests per task (7.9 against 12.1), so it made fewer round trips. Its requests were also quicker, with a median of 7.6 seconds per request against 11.7 for Sol. Sol also split its work into more small steps. Over 12 runs it made 54 calls to OpenCode's file-read tool and 43 to-do-list updates. Opus made 6 and none.</p>
<p><strong>The cost came out even, for two different reasons.</strong> Opus has the lower per-token prices, but it wrote almost twice as much output (7,800 tokens per task against 4,200). It also got less of its input from the prompt cache. On every Opus request the cache covered the same 8,028 tokens, about the size of OpenCode's system prompt and tool definitions. The rest of the conversation was billed at the full input rate each time. Sol's cache hits grew with the conversation and covered 81% of its input. Sol was cheaper on the two longest tasks, the config parser and the Mustache renderer. Opus was cheaper on the other four.</p>
<p><strong>Both checked their own work the same way.</strong> In both refactor runs, each model saved a copy of the original function and wrote a throwaway script that compared old and new output on random inputs. On the Mustache task, both models downloaded the official spec test files from GitHub in both runs and ran them before finishing: Opus with <code>curl</code>, Sol with OpenCode's web-fetch tool and a Python one-liner. Our hidden tests for that task are the same files, so neither model's Mustache score is independent of what it downloaded.</p>
<h2>When to use which</h2>
<p><strong>Opus 5.5</strong> is the better default for interactive work on tasks like these. You wait about half as long for the same result, at the same price per task.</p>
<p><strong>GPT-6.1 Sol</strong> is just as good at these tasks and was the cheaper of the two on the two longest ones. If your agent runs unattended and wall time matters less than the bill, the two are close enough that your own workload should decide. We did not find a task in this set that either model failed, so we cannot tell you which one solves more on harder work.</p>
<p>Both models are on the same QuickSilver Pro key and balance, so trying the other one is a change of <code>-m</code>.</p>
<h2>Limits of this test</h2>
<ul>
<li>Six tasks, two runs per model. Small, self-contained Python tasks of 30 seconds to 3.5 minutes each, not a multi-hour change in a large codebase.</li>
<li>We wrote five of the six hidden test suites, so they reflect our reading of each spec. We checked each against a reference solution before running the agents.</li>
<li>One agent, OpenCode, with its default per-model prompts and tools. Another agent, or a different reasoning-effort setting, could change both the speed and the cost. Opus reported no reasoning tokens in any run, so it worked without extended thinking. Sol used about 700 reasoning tokens per task at its default effort.</li>
<li>Wall time includes network and server time. Two runs of the same model on the same task differed by up to 47%, so read the time column as a rough guide.</li>
<li>Every Claude request reported about 690 more input tokens than the text sent. OpenCode's short title request, which is the same text for every model, came to 1,593 input tokens on Opus against 593 on Sol, and a one-line "say hi" to Opus reported 690. At 7.9 requests per task that adds at most about $0.005 to an Opus run. It does not change the comparison.</li>
<li>One of Sol's 133 agent requests got an upstream error and OpenCode retried it. The error was not billed and the run passed.</li>
</ul>
<h2>Run it yourself</h2>
<p>The OpenCode config we used, pointed at the public endpoint. Save it as <code>opencode.json</code> in your project:</p>
<pre><code class="language-json">{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "quicksilverpro": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "QuickSilver Pro",
      "options": {
        "baseURL": "https://api.quicksilverpro.io/v1",
        "apiKey": "{env:QSP_API_KEY}"
      },
      "models": {
        "claude-opus-5-5": { "name": "Claude Opus 5.5", "limit": { "context": 1000000, "output": 64000 } },
        "gpt-6.1-sol": { "name": "GPT-6.1 Sol", "limit": { "context": 1000000, "output": 64000 } }
      }
    }
  }
}
</code></pre>
<p>Then run the same prompt with each model:</p>
<pre><code class="language-bash">export QSP_API_KEY=YOUR_QSP_KEY

opencode run --auto -m quicksilverpro/claude-opus-5-5 "Fix the failing test in tests/"
opencode run --auto -m quicksilverpro/gpt-6.1-sol "Fix the failing test in tests/"
</code></pre>
<p><code>--auto</code> approves the agent's file edits and shell commands without asking, so use it only in a project you can reset. OpenCode shows a cost of 0 for a custom provider. The real cost of each request, with its model and token counts, is in your QuickSilver Pro dashboard. For more on the setup, see <a href="https://quicksilverpro.io/blog/opencode-crush-quicksilver-pro/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=opus-vs-gpt-sol">Use QuickSilver Pro in OpenCode and Crush</a>. For the same six-task method with Claude Code, see <a href="https://quicksilverpro.io/blog/claude-opus-5-5-vs-sonnet-5-5-coding/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=opus-vs-gpt-sol">Claude Opus 5.5 vs Sonnet 5.5 for coding agents</a>. <a href="https://quicksilverpro.io/models/claude-opus-5-5/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=opus-vs-gpt-sol">Claude Opus 5.5</a> is 75% below Anthropic's list price of $4.00 / $20.00.</p>
]]></content:encoded></item><item><title><![CDATA[Gemini 4 Argon vs Claude Opus 5.5 for coding agents]]></title><description><![CDATA[Same coding agent, six tasks with hidden tests, two runs per model. Both passed every test; Gemini took 1.6x as long and cost 1.5x as much per task.]]></description><link>https://xiunxiao.hashnode.dev/gemini-4-argon-vs-claude-opus-5-5-for-coding-agents</link><guid isPermaLink="true">https://xiunxiao.hashnode.dev/gemini-4-argon-vs-claude-opus-5-5-for-coding-agents</guid><category><![CDATA[gemini]]></category><category><![CDATA[claude]]></category><category><![CDATA[llm]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[xiun xiao]]></dc:creator><pubDate>Tue, 10 Nov 2026 01:27:38 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally published on the <a href="https://quicksilverpro.io/blog/gemini-4-argon-vs-opus-5-5-coding/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=gemini-argon-vs-opus">QuickSilver Pro blog</a>.</em></p>
<p>Gemini 4 Argon is Google's new flagship reasoning model. On QuickSilver Pro it costs $2.00 / $10.00 per million tokens, against $1.00 / $5.00 for Claude Opus 5.5. We wanted to know whether it can stand in for Opus in a coding agent, and what that costs.</p>
<p>We tested this on 2026-10-27. Both models ran in the same agent, OpenCode, on six small but real coding tasks, and we graded every run with tests the agent never saw. Short answer: both passed every hidden test in every run. Gemini 4 Argon was slower and more expensive on every task: 134 seconds and $0.142 per task on average, against 82 seconds and $0.094 for Opus.</p>
<h2>How we tested</h2>
<ul>
<li><strong>Agent:</strong> <a href="https://opencode.ai/">OpenCode</a> 1.19.4, non-interactive (<code>opencode run --auto</code>), with QuickSilver Pro added as an OpenAI-compatible provider. The only thing that changed between runs was <code>-m quicksilverpro/gemini-4-argon</code> or <code>-m quicksilverpro/claude-opus-5-5</code>. QuickSilver Pro serves Gemini 4 Argon on the OpenAI-compatible endpoints (<code>/v1/chat/completions</code> and <code>/v1/responses</code>), not on the Anthropic Messages API that Claude Code needs. So we used one agent that can drive both models.</li>
<li><strong>Agent settings:</strong> a clean OpenCode config with no MCP servers, plugins or extra skills, and OpenCode's defaults otherwise. OpenCode sent no reasoning-effort setting, so each model ran at its default. OpenCode chooses its system prompt by model family, and we left that as shipped. Gemini got a 16,400-character system prompt and Opus a 9,300-character one. Both got the same tools.</li>
<li><strong>Tasks:</strong> six throwaway Python repositories, each with a one-paragraph prompt, a spec or bug report in the repo, and one visible test. Every task had a separate hidden test suite that we ran after the agent finished. We wrote five of the suites before any run and checked that each passed against our own reference solution and failed against the starting code. The sixth is the official Mustache spec suite.</li>
<li><strong>Runs:</strong> each task twice per model, same inputs, 24 runs in total. Both models ran each task at the same time, so both saw the same network and server conditions.</li>
<li><strong>Graded on:</strong> the share of hidden tests passing. We also recorded wall-clock time, number of API requests, input / cached / output tokens, and cost.</li>
<li><strong>Cost:</strong> the per-request cost that QuickSilver Pro returns in each response's usage block, summed over every request in a run, at QuickSilver Pro prices on 2026-10-27. We recorded it with a small local pass-through proxy. The same figures appear per request in the dashboard.</li>
</ul>
<p>The tasks:</p>
<ol>
<li><strong>Two-file bug fix.</strong> A shop module whose totals were off by a cent and whose discount was applied twice. The fix needed changes in both files, plus a rule from the README that the bug report did not mention: a minimum order for one discount code. 18 hidden tests.</li>
<li><strong>Implement from a spec.</strong> A duration parser (<code>"1h30m"</code>, <code>"2 hours and 5 min"</code>, <code>"PT1H30M"</code>) with a page of rules on separators, unit order and what must be rejected, including non-ASCII digits. 84 hidden tests.</li>
<li><strong>Refactor without changing behaviour.</strong> Split a long function full of copy-pasted code into helpers. The hidden tests compared the new output with the original on 300 random inputs and 16 edge cases, including invalid options and missing fields. They also checked that the function shrank to at most half its original length. 317 hidden tests.</li>
<li><strong>Add input validation.</strong> A sign-up function with a written rule set: per-field error codes, rule order, and fields that interact. For example, a password must not contain the username, but only if the username is valid. 84 hidden tests.</li>
<li><strong>Parser for a config format.</strong> Sections, quoted values with escapes, inline comments, line continuation with correct error line numbers, and <code>${section.key}</code> references with cycle detection. 57 hidden tests.</li>
<li><strong>A Mustache template renderer</strong> from scratch, graded against the official Mustache spec test suite: interpolation, sections, inverted sections, comments, partials and delimiter changes. 136 hidden tests.</li>
</ol>
<h2>Results</h2>
<p>Averages over two runs per model and task. Cost is per run, at QuickSilver Pro prices on 2026-10-27.</p>
<table>
<thead>
<tr>
<th>Task</th>
<th>Gemini 4 Argon: tests passed</th>
<th>Gemini 4 Argon: time</th>
<th>Gemini 4 Argon: cost</th>
<th>Opus 5.5: tests passed</th>
<th>Opus 5.5: time</th>
<th>Opus 5.5: cost</th>
</tr>
</thead>
<tbody><tr>
<td>1. Two-file bug fix</td>
<td>18/18, both runs</td>
<td>73 s</td>
<td>$0.079</td>
<td>18/18, both runs</td>
<td>34 s</td>
<td>$0.049</td>
</tr>
<tr>
<td>2. Duration parser</td>
<td>84/84, both runs</td>
<td>74 s</td>
<td>$0.100</td>
<td>84/84, both runs</td>
<td>53 s</td>
<td>$0.063</td>
</tr>
<tr>
<td>3. Refactor</td>
<td>317/317, both runs</td>
<td>133 s</td>
<td>$0.131</td>
<td>317/317, both runs</td>
<td>85 s</td>
<td>$0.091</td>
</tr>
<tr>
<td>4. Input validation</td>
<td>84/84, both runs</td>
<td>86 s</td>
<td>$0.104</td>
<td>84/84, both runs</td>
<td>65 s</td>
<td>$0.075</td>
</tr>
<tr>
<td>5. Config parser</td>
<td>57/57, both runs</td>
<td>267 s</td>
<td>$0.267</td>
<td>57/57, both runs</td>
<td>116 s</td>
<td>$0.132</td>
</tr>
<tr>
<td>6. Mustache renderer</td>
<td>136/136, both runs</td>
<td>173 s</td>
<td>$0.172</td>
<td>136/136, both runs</td>
<td>139 s</td>
<td>$0.155</td>
</tr>
<tr>
<td><strong>Average</strong></td>
<td><strong>all passed</strong></td>
<td><strong>134 s</strong></td>
<td><strong>$0.142</strong></td>
<td><strong>all passed</strong></td>
<td><strong>82 s</strong></td>
<td><strong>$0.094</strong></td>
</tr>
</tbody></table>
<p>Where the tokens and the money went, averaged over all 12 runs per model:</p>
<table>
<thead>
<tr>
<th>Per run</th>
<th>Gemini 4 Argon</th>
<th>Opus 5.5</th>
</tr>
</thead>
<tbody><tr>
<td>Requests (including one short title request from OpenCode)</td>
<td>10.2</td>
<td>7.9</td>
</tr>
<tr>
<td>Input tokens</td>
<td>124,000</td>
<td>107,000</td>
</tr>
<tr>
<td>...of which read from the prompt cache</td>
<td>86,000 (69%)</td>
<td>54,000 (51%)</td>
</tr>
<tr>
<td>Output tokens</td>
<td>5,600</td>
<td>7,800</td>
</tr>
<tr>
<td>...of which reasoning</td>
<td>900</td>
<td>0</td>
</tr>
<tr>
<td>Cost of uncached input</td>
<td>$0.077</td>
<td>$0.052</td>
</tr>
<tr>
<td>Cost of cached input</td>
<td>$0.009</td>
<td>$0.003</td>
</tr>
<tr>
<td>Cost of output</td>
<td>$0.056</td>
<td>$0.039</td>
</tr>
<tr>
<td><strong>Total cost per task</strong></td>
<td><strong>$0.142</strong></td>
<td><strong>$0.094</strong></td>
</tr>
</tbody></table>
<h2>What the numbers say</h2>
<p><strong>Quality was a tie.</strong> Neither model failed a hidden test in 24 runs. That includes all 136 cases of the official Mustache suite and the 316 comparisons with the original function in the refactor.</p>
<p><strong>Gemini got there with less checking.</strong> On the refactor, both Opus runs saved a copy of the original function and compared old and new output on random inputs before finishing. Neither Gemini run did that; Gemini relied on the one visible test and still matched the original on all 316 hidden comparisons. On the Mustache task, both Opus runs downloaded the official spec test files from GitHub and ran them. Our hidden tests for that task are the same files, so Opus's score there is not independent. Gemini did not download them and passed all 136 anyway. What Gemini did instead was run the test suite more often: 24 <code>pytest</code> runs over its 12 runs, against 14 for Opus.</p>
<p><strong>Gemini was slower on every task</strong>, from 1.2 times as long on the Mustache renderer to 2.3 times on the config parser. Its typical request was actually quicker than Opus's, with a median of 6.2 seconds against 7.6. But it made more requests (10.2 per task against 7.9), and its slow requests were slower: one in ten took over 34 seconds, and the slowest took 109. The config parser shows the effect most: the second Gemini run took 18 requests and almost five minutes.</p>
<p><strong>Gemini cost more on every task</strong>, about 1.5 times as much on average. It has the higher per-token prices on QuickSilver Pro, and it sent more input per task because it made more requests. It wrote fewer output tokens than Opus, but at its output price they still cost more ($0.056 against $0.039 per task). Gemini's caching did better than Opus's: 69% of its input came from the prompt cache. On every Opus request the cache covered the same 8,028 tokens, about the size of OpenCode's system prompt and tool definitions. The rest of the conversation was billed at the full input rate. Even so, Opus came out cheaper.</p>
<h2>When Gemini 4 Argon makes sense</h2>
<p>On these tasks, <strong>Opus 5.5 is the better choice for a coding agent.</strong> It solved the same tasks, in about 60% of the time, for about two thirds of the cost.</p>
<p><strong>Gemini 4 Argon</strong> solved every task too, so it is a workable second model. Use it if you want a non-Anthropic model in the loop, for example to cross-check a change, or if you are already building on Gemini elsewhere. We did not find a task in this set that either model failed, so we cannot tell you which one solves more on harder work. On this evidence, Gemini 4 Argon does not save you money over Opus 5.5.</p>
<h2>Limits of this test</h2>
<ul>
<li>Six tasks, two runs per model. Small, self-contained Python tasks of 30 seconds to 5 minutes each, not a multi-hour change in a large codebase.</li>
<li>We wrote five of the six hidden test suites, so they reflect our reading of each spec. We checked each against a reference solution before running the agents.</li>
<li>One agent, OpenCode, with its default per-model system prompts. Another agent, or a different reasoning-effort setting, could change both the speed and the cost. Gemini used about 900 reasoning tokens per task at its default effort. Opus reported none, so it worked without extended thinking.</li>
<li>The prompt told the agents not to edit the existing tests. In four runs Gemini added its own tests to the end of the existing test file instead of creating a new one. It did not change or remove the existing test, and the hidden tests are separate, so this did not affect the scores.</li>
<li>Wall time includes network and server time. Two runs of the same model on the same task differed by up to 47%, so read the time column as a rough guide.</li>
<li>Every Claude request reported about 690 more input tokens than the text sent. OpenCode's short title request, which is the same text for every model, came to 1,593 input tokens on Opus against 639 on Gemini. At 7.9 requests per task that adds at most about $0.005 to an Opus run, which does not change the comparison.</li>
</ul>
<h2>Run it yourself</h2>
<p>The OpenCode config we used, pointed at the public endpoint. Save it as <code>opencode.json</code> in your project:</p>
<pre><code class="language-json">{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "quicksilverpro": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "QuickSilver Pro",
      "options": {
        "baseURL": "https://api.quicksilverpro.io/v1",
        "apiKey": "{env:QSP_API_KEY}"
      },
      "models": {
        "gemini-4-argon": { "name": "Gemini 4 Argon", "limit": { "context": 1000000, "output": 64000 } },
        "claude-opus-5-5": { "name": "Claude Opus 5.5", "limit": { "context": 1000000, "output": 64000 } }
      }
    }
  }
}
</code></pre>
<p>Then run the same prompt with each model:</p>
<pre><code class="language-bash">export QSP_API_KEY=YOUR_QSP_KEY

opencode run --auto -m quicksilverpro/gemini-4-argon "Fix the failing test in tests/"
opencode run --auto -m quicksilverpro/claude-opus-5-5 "Fix the failing test in tests/"
</code></pre>
<p><code>--auto</code> approves the agent's file edits and shell commands without asking, so use it only in a project you can reset. OpenCode shows a cost of 0 for a custom provider. The real cost of each request, with its model and token counts, is in your QuickSilver Pro dashboard. Model details are on the <a href="https://quicksilverpro.io/models/gemini-4-argon/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=gemini-argon-vs-opus">Gemini 4 Argon</a> and <a href="https://quicksilverpro.io/models/claude-opus-5-5/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=gemini-argon-vs-opus">Claude Opus 5.5</a> pages. For the OpenCode setup, see <a href="https://quicksilverpro.io/blog/opencode-crush-quicksilver-pro/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=gemini-argon-vs-opus">Use QuickSilver Pro in OpenCode and Crush</a>. For Opus against GPT-6.1 Sol on the same tasks, see <a href="https://quicksilverpro.io/blog/opus-5-5-vs-gpt-6-1-sol-coding/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=gemini-argon-vs-opus">Claude Opus 5.5 vs GPT-6.1 Sol for coding agents</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Claude Code on GitHub Codespaces vs Machines, tested]]></title><description><![CDATA[The same Claude Code task, three runs each, on a 2-core GitHub Codespace and on QuickSilver Machines: start time, setup, task speed, pause and cost.]]></description><link>https://xiunxiao.hashnode.dev/claude-code-on-github-codespaces-vs-machines-tested</link><guid isPermaLink="true">https://xiunxiao.hashnode.dev/claude-code-on-github-codespaces-vs-machines-tested</guid><category><![CDATA[claude-code]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[Devops]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[xiun xiao]]></dc:creator><pubDate>Tue, 10 Nov 2026 01:20:45 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally published on the <a href="https://quicksilverpro.io/blog/claude-code-github-codespaces-vs-machines/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=codespaces-vs-machines">QuickSilver Pro blog</a>.</em></p>
<p>GitHub Codespaces and <a href="https://quicksilverpro.io/machines/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=codespaces-vs-machines">QuickSilver Machines</a> both give you a Linux box in the browser that a coding agent can treat as its own. We already compared their <a href="https://quicksilverpro.io/vs/github-codespaces/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=codespaces-vs-machines">list prices and features</a>. This time we ran the same Claude Code task on both, three times each, on 2026-11-05, and timed everything from creating the box to deleting it.</p>
<p>Short version:</p>
<ul>
<li><strong>The task itself ran at the same speed on both.</strong> Three runs of a 317-test refactoring task averaged 24.0 seconds on Codespaces and 24.5 seconds on Machines, and every run passed all hidden tests. The model and the API were the same, so the box made no real difference.</li>
<li><strong>Codespaces started faster.</strong> About 19 seconds from <code>gh codespace create</code> to a working shell, against 35 seconds from clicking Create to a running Machine with its terminal open.</li>
<li><strong>Machines needed no setup.</strong> On Codespaces we installed Claude Code, created an API key and wrote a settings file before the first task. On the Machine, <code>claude</code> worked as soon as the terminal opened.</li>
<li><strong>Pause kept our processes only on Machines.</strong> A Codespace stop shut the container down: files stayed, the background job was gone. A Machine pause took 11 seconds, resume 7, and the job was still running afterwards.</li>
<li><strong>Price depends on GitHub's free quota.</strong> Codespaces is free until a personal account's monthly quota runs out, then $0.18 per hour for 2 cores. Machines is $0.02 per running hour from the first minute.</li>
</ul>
<h2>How we tested</h2>
<table>
<thead>
<tr>
<th></th>
<th>GitHub Codespaces</th>
<th>QuickSilver Machines</th>
</tr>
</thead>
<tbody><tr>
<td>Size</td>
<td>2 cores, 8 GB RAM, 32 GB disk (<code>basicLinux32gb</code>)</td>
<td>Standard: 2 vCPU, 4 GB RAM, 20 GB home disk</td>
</tr>
<tr>
<td>Region</td>
<td>West US 2</td>
<td>US West (Santa Clara)</td>
</tr>
<tr>
<td>Image</td>
<td><code>github/codespaces-blank</code> (Ubuntu 24.04, Python 3.14.2)</td>
<td>Machines default (Python 3.11.2)</td>
</tr>
<tr>
<td>Claude Code</td>
<td>2.1.318, installed by us</td>
<td>2.1.316, preinstalled</td>
</tr>
<tr>
<td>Model</td>
<td>Claude Sonnet 5.5 through QuickSilver Pro</td>
<td>Claude Sonnet 5.5 through QuickSilver Pro</td>
</tr>
</tbody></table>
<p>Both boxes sent their AI requests to the same QuickSilver Pro API with the same model, so any difference in task time comes from the box, not the model. The Codespace first came up in Singapore, the default for our location. We deleted it and created it again in West US 2, so that both boxes were on the US west coast.</p>
<p>The task is the refactoring task from our <a href="https://quicksilverpro.io/blog/opus-5-5-vs-gpt-6-1-sol-coding/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=codespaces-vs-machines">coding agent benchmark</a>: a long, copy-pasted <code>build_report</code> function has to be split into small helpers without changing its output for any input. A hidden suite of 317 tests, which the agent never sees, compares the result with the original function. One script ran it 3 times on each box, each time on a fresh copy of the repository:</p>
<pre><code class="language-bash">claude -p --dangerously-skip-permissions --model claude-sonnet-5-5 --output-format json "$PROMPT"
</code></pre>
<p>The script also timed a fixed single-threaded Python loop, to compare raw CPU speed.</p>
<h2>Getting to the first task</h2>
<p><strong>Codespaces.</strong> <code>gh codespace create</code> returned in 6 seconds, and the shell answered over SSH 14 seconds later, 19 seconds in total (17 for the first attempt in Singapore). Claude Code is not in the default image, so we installed it with the official installer, which took 32 seconds. Claude Code then needs a model provider. We created a QuickSilver Pro API key in the dashboard and wrote it to <code>~/.claude/settings.json</code>:</p>
<pre><code class="language-json">{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.quicksilverpro.io",
    "ANTHROPIC_AUTH_TOKEN": "YOUR_QSP_KEY",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-5-5",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-5-5",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-5-5"
  }
}
</code></pre>
<p>With an Anthropic account you would sign in instead of using a key. Either way, it is a step you do once per Codespace, or once in a dev container that you maintain. One thing to watch: our first check, <code>claude -p "Reply with ok"</code>, went to Claude Opus 5.5, Claude Code's default, and cost $0.030 for a one-word reply. Pass <code>--model</code> or set a default model if you do not want Opus.</p>
<p><strong>Machines.</strong> We clicked Create Machine, and 35 seconds later the machine was Running with the terminal open. Claude Code, Codex, OpenCode and Hermes were already installed and signed in with the machine's own key, so we went straight to the task. The setup steps are in our <a href="https://quicksilverpro.io/blog/claude-code-cloud-dev-box/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=codespaces-vs-machines">Machines walkthrough</a>.</p>
<h2>Results</h2>
<table>
<thead>
<tr>
<th></th>
<th>Codespaces</th>
<th>Machines</th>
</tr>
</thead>
<tbody><tr>
<td>Create to working shell</td>
<td>19 s</td>
<td>35 s</td>
</tr>
<tr>
<td>Setup before the first task</td>
<td>Install Claude Code (32 s), create a key, write settings</td>
<td>None</td>
</tr>
<tr>
<td>Task run 1</td>
<td>24.9 s, 317/317</td>
<td>25.5 s, 317/317</td>
</tr>
<tr>
<td>Task run 2</td>
<td>24.0 s, 317/317</td>
<td>23.8 s, 317/317</td>
</tr>
<tr>
<td>Task run 3</td>
<td>23.1 s, 317/317</td>
<td>24.1 s, 317/317</td>
</tr>
<tr>
<td>Python CPU loop</td>
<td>4.3 s</td>
<td>4.0 s</td>
</tr>
<tr>
<td>AI cost per run</td>
<td>$0.031 / $0.030 / $0.020</td>
<td>$0.020 / $0.020 / $0.020</td>
</tr>
<tr>
<td>Stop or pause</td>
<td>58 s to Shutdown</td>
<td>11 s to Paused</td>
</tr>
<tr>
<td>Start or resume</td>
<td>24 s to a working shell</td>
<td>7 s to Running</td>
</tr>
<tr>
<td>After resume</td>
<td>Files kept, background job gone</td>
<td>Files, shell variable and background job kept</td>
</tr>
</tbody></table>
<p><img src="https://quicksilverpro.io/blog/claude-code-github-codespaces-vs-machines/machines-results.webp?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=codespaces-vs-machines" alt="The Machine's terminal after the three runs: 25.5, 23.8 and 24.1 seconds, 317 hidden tests passed each time" /></p>
<h2>What the numbers say</h2>
<p><strong>The box is not the bottleneck.</strong> On Codespaces, Claude Code's own timing put 21 to 22.5 seconds of each 23 to 25-second run in API calls, and the hidden tests ran in a third of a second on both boxes. A faster box would not have made the agent noticeably faster. This holds for agent tasks like this one: a large build or test suite would feel the difference in CPU and RAM, and Codespaces has twice the RAM.</p>
<p><strong>AI cost is a property of the model, not the box.</strong> All six runs cost 2 to 3 cents on Claude Sonnet 5.5. The two dearer Codespaces runs differ from the rest in their first request ($0.016 against $0.005 to $0.006), which looks like a prompt-cache write rather than anything the box did.</p>
<p><strong>Setup is the real difference.</strong> On Codespaces we had to install the agent, get a key and configure it. A dev container can do this for you on every new Codespace, but someone has to write and maintain it, and the key or sign-in is still yours to manage. On Machines, the agents and the key come with the box, and machine time and AI usage come from one QuickSilver balance.</p>
<p><strong>Pause behaves differently.</strong> Stopping a Codespace shuts the container down: your files survive, running processes do not. Pausing a Machine saves a checkpoint, so a long-running agent or dev server is still there when you come back. In our test the background job's log simply had a gap for the paused minute.</p>
<h2>What it costs</h2>
<p>Machines charges $0.02 per running hour, per minute, from your QuickSilver Pro balance, and nothing while paused. Our Machine was billed $0.0013 for about 4 minutes of running time.</p>
<p>Codespaces charges <a href="https://docs.github.com/en/billing/concepts/product-billing/github-codespaces">$0.18 per hour for a 2-core machine and $0.07 per GB-month of storage</a>, but personal accounts get a monthly quota first: 120 core-hours and 15 GB-month on GitHub Free, 180 core-hours and 20 GB-month on GitHub Pro. A 2-core Codespace uses 2 core-hours per hour, so GitHub Free covers 60 hours a month of it. Our Codespace ran about 15 minutes, half a core-hour of the quota, and cost us nothing. Organizations get no free quota.</p>
<p>For an agent box used 2 hours a day on 22 working days (44 hours a month):</p>
<table>
<thead>
<tr>
<th></th>
<th>Monthly cost</th>
</tr>
</thead>
<tbody><tr>
<td>Machines</td>
<td>$0.88</td>
</tr>
<tr>
<td>Codespaces, within GitHub Free quota</td>
<td>$0.00</td>
</tr>
<tr>
<td>Codespaces, quota used up or paid by an organization</td>
<td>$7.92 compute, plus storage</td>
</tr>
</tbody></table>
<p>AI usage is extra in every case. With Machines it comes from the same balance; with Codespaces it goes to whichever provider your agent uses.</p>
<h2>Which one to pick</h2>
<p>Codespaces makes sense when:</p>
<ul>
<li>your use fits in the free quota of a personal account;</li>
<li>your work starts from a GitHub repository and you want VS Code in the browser;</li>
<li>your team already has dev containers that install the tools you need.</li>
</ul>
<p>Machines makes sense when:</p>
<ul>
<li>you would pay for Codespaces anyway, because the quota is used up or an organization pays: $0.02 against $0.18 an hour;</li>
<li>you want Claude Code, Codex, OpenCode and Hermes ready without installing anything or handling keys;</li>
<li>you want a full Linux desktop with Chromium next to the terminal;</li>
<li>you pause and resume often and want running processes to survive.</li>
</ul>
<h2>Limits of this test</h2>
<ul>
<li>One task, three runs per box, on one day. Times through a shared API vary from run to run.</li>
<li>The two boxes are not the same size: Codespaces has 8 GB of RAM, Machines 4 GB.</li>
<li>We timed Codespaces from the command line (<code>gh codespace create</code> and <code>gh codespace ssh</code>) and Machines from the browser. Opening VS Code in the browser on Codespaces takes longer than an SSH shell.</li>
<li>The Codespace stop-and-start test was done over SSH, so we checked a background job but not a shell variable in an open terminal.</li>
<li>Machines is in beta. It has one size, an 8-hour session limit and a 200-hour monthly cap, and no backup guarantee.</li>
</ul>
<h2>Run it yourself</h2>
<p>The task is described in our <a href="https://quicksilverpro.io/blog/opus-5-5-vs-gpt-6-1-sol-coding/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=codespaces-vs-machines">coding agent benchmark</a>; any task from your own repository works the same way with the <code>claude -p</code> command above. To try the Machine side, open <a href="https://quicksilverpro.io/dashboard/machines/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=codespaces-vs-machines">Machines</a>, create one and type <code>claude</code> in the terminal. To run Claude Code on your own computer or in a Codespace instead, follow our <a href="https://quicksilverpro.io/blog/claude-code-quicksilver-pro/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=codespaces-vs-machines">Claude Code setup guide</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Open models vs Claude: Kimi K3, GLM 5.3 and DeepSeek V4 Pro against Sonnet 5.5 and Opus 5.5]]></title><description><![CDATA[17 coding, extraction and reasoning tasks, three runs each, on three open models and two Claude models: pass rate, latency and cost per 1,000 tasks.]]></description><link>https://xiunxiao.hashnode.dev/open-models-vs-claude-kimi-k3-glm-5-3-and-deepseek-v4-pro-against-sonnet-5-5-and-opus-5-5</link><guid isPermaLink="true">https://xiunxiao.hashnode.dev/open-models-vs-claude-kimi-k3-glm-5-3-and-deepseek-v4-pro-against-sonnet-5-5-and-opus-5-5</guid><category><![CDATA[llm]]></category><category><![CDATA[claude]]></category><category><![CDATA[open source]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[xiun xiao]]></dc:creator><pubDate>Mon, 09 Nov 2026 12:10:23 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally published on the <a href="https://quicksilverpro.io/blog/open-models-vs-claude/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=open-models">QuickSilver Pro blog</a>.</em></p>
<p>The usual reason to choose an open model over Claude is price. Now that every Claude model on QuickSilver Pro costs 75% less than Anthropic's list price, that reason needs checking again, and so does the question of what you give up in quality. So we put three large open models from our catalog and two Claude models through the same set of tasks, on 2026-10-20.</p>
<table>
<thead>
<tr>
<th>Model</th>
<th>Price per 1M tokens (input / output)</th>
</tr>
</thead>
<tbody><tr>
<td><a href="https://quicksilverpro.io/models/kimi-k3/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=open-models">Kimi K3</a></td>
<td>$2.55 / $12.75</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/glm-5.3/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=open-models">GLM 5.3</a></td>
<td>$0.60 / $2.20</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/deepseek-v4-pro/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=open-models">DeepSeek V4 Pro</a></td>
<td>$0.70 / $2.10</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/claude-sonnet-5-5/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=open-models">Claude Sonnet 5.5</a></td>
<td>$0.50 / $2.50</td>
</tr>
<tr>
<td><a href="https://quicksilverpro.io/models/claude-opus-5-5/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=open-models">Claude Opus 5.5</a></td>
<td>$1.00 / $5.00</td>
</tr>
</tbody></table>
<h2>How we tested</h2>
<p>17 tasks, each with an answer a script can check, in two groups:</p>
<ul>
<li><strong>13 standard tasks:</strong> six small Python functions (a duration parser, interval merging, an LRU cache, strict Roman numerals, an expression evaluator with C-style division, semantic-version ordering), three extractions to JSON (an invoice from an email, attendees from meeting notes, log-line counts) and four short maths and logic questions.</li>
<li><strong>4 harder tasks:</strong> shell-style word splitting with quoting rules, the final state of an order after a chat full of changes and reversals, a counting-out puzzle where the count alternates between 3 and 4, and the number of integers up to 100,000 whose digits sum to 20.</li>
</ul>
<p>Code passes only if it survives a fixed set of unit tests; JSON passes only if it equals the expected object; maths answers must match exactly. Every model got the same single user message per task through the OpenAI-compatible <code>/v1/chat/completions</code> endpoint, non-streaming, <code>max_tokens</code> 8,000, no system prompt, no temperature setting. Each task ran three times: 51 requests per model.</p>
<p>With these defaults the three open models think before answering and bill those reasoning tokens as output; the two Claude models answered directly, without extended thinking. Cost below is the billed input and output tokens multiplied by QuickSilver Pro prices on 2026-10-20.</p>
<h2>Results</h2>
<table>
<thead>
<tr>
<th></th>
<th>Kimi K3</th>
<th>GLM 5.3</th>
<th>DeepSeek V4 Pro</th>
<th>Claude Sonnet 5.5</th>
<th>Claude Opus 5.5</th>
</tr>
</thead>
<tbody><tr>
<td>Standard tasks passed</td>
<td>39 / 39</td>
<td>37 / 39</td>
<td>35 / 39</td>
<td>39 / 39</td>
<td>39 / 39</td>
</tr>
<tr>
<td>Harder tasks passed</td>
<td>10 / 12</td>
<td>8 / 12</td>
<td>7 / 12</td>
<td>12 / 12</td>
<td>12 / 12</td>
</tr>
<tr>
<td><strong>All tasks</strong></td>
<td><strong>49 / 51</strong></td>
<td><strong>45 / 51</strong></td>
<td><strong>42 / 51</strong></td>
<td><strong>51 / 51</strong></td>
<td><strong>51 / 51</strong></td>
</tr>
<tr>
<td>Median latency</td>
<td>26.6 s</td>
<td>3.7 s</td>
<td>110.5 s</td>
<td>3.7 s</td>
<td>5.2 s</td>
</tr>
<tr>
<td>90th percentile latency</td>
<td>140 s</td>
<td>10 s</td>
<td>370 s</td>
<td>7.0 s</td>
<td>9.4 s</td>
</tr>
<tr>
<td>Average output tokens</td>
<td>1,312</td>
<td>513</td>
<td>2,631</td>
<td>507</td>
<td>580</td>
</tr>
<tr>
<td>Cost per 1,000 tasks</td>
<td>$17.31</td>
<td>$1.22</td>
<td>$5.68</td>
<td>$1.71</td>
<td>$3.80</td>
</tr>
</tbody></table>
<p>Costs are at QuickSilver Pro prices on 2026-10-20, computed from the measured tokens.</p>
<h2>Where the open models were good enough</h2>
<ul>
<li><strong>Routine extraction.</strong> All three open models got the invoice, the attendee list and the log counts right in all nine of their runs. If your workload is "turn this text into this JSON", any of them will do it.</li>
<li><strong>Small, well-specified functions.</strong> Kimi K3 passed every coding task in every run. GLM 5.3 missed two of 21 coding runs: once it accepted an empty string as a Roman numeral, once it rejected a valid quoted string in the shell splitter.</li>
<li><strong>GLM 5.3 on price and speed.</strong> It was the only open model that was both cheaper than Sonnet 5.5 (about 30% less per task) and as fast (the same 3.7-second median). On the 13 standard tasks alone it passed 37 of 39 for $0.85 per 1,000 tasks, against 39 of 39 for $1.59 on Sonnet.</li>
</ul>
<h2>Where they were not</h2>
<ul>
<li><strong>Multi-step reasoning.</strong> The counting-out puzzle needs about forty careful steps. Sonnet 5.5 and Opus 5.5 solved it in all six runs. Kimi K3 solved it once in three, GLM 5.3 once (its other answers were 37 and 13), DeepSeek V4 Pro never.</li>
<li><strong>Getting an answer out at all.</strong> DeepSeek V4 Pro returned an empty answer 8 times out of 51: it spent its tokens reasoning and stopped before writing anything, five times by reaching the 8,000-token limit. A ninth request had not finished after ten minutes. Kimi K3's two misses were the same pattern. A larger <code>max_tokens</code> might have let them finish, at a higher cost per task; we did not test that.</li>
<li><strong>Following the output format.</strong> In one run GLM 5.3 wrote the correct JSON object and then appended its reasoning after it, which breaks any parser that expects JSON only.</li>
<li><strong>Latency.</strong> Kimi K3's median was 26.6 seconds and DeepSeek V4 Pro's 110 seconds, with DeepSeek's median ranging from 24 seconds in one run to 233 seconds in another. Fine for a batch job, not for anything a user waits on.</li>
<li><strong>Price.</strong> At 75% off list, Sonnet 5.5 cost less per task than both Kimi K3 (ten times less) and DeepSeek V4 Pro (a third), and it passed every task. Even Opus 5.5 was cheaper per task than both on this test.</li>
</ul>
<h2>So which should you use?</h2>
<ul>
<li>For extraction and simple functions where cost matters most, <strong>GLM 5.3</strong> held up: cheaper than Sonnet and just as fast, with a few more misses. Validate its output, as you would with any model in a pipeline.</li>
<li>For anything with several reasoning steps, or where a wrong or empty answer is expensive, <strong>Claude Sonnet 5.5</strong> was the better buy on this test: every task passed, a few seconds each, at a lower cost per task than two of the three open models.</li>
<li><strong>Kimi K3</strong> was accurate on the standard tasks but slow and, at its price, by far the most expensive model here per task.</li>
<li><strong>DeepSeek V4 Pro</strong> had the lowest pass rate and the slowest answers on this harness; if you use it, allow a large <code>max_tokens</code> and retry empty responses.</li>
</ul>
<h2>Limits of this test</h2>
<p>17 tasks and three runs per model is a small sample: one task moves a pass rate by two points, and the harder group has only four tasks. The tasks are short, single-turn and in English. We did not test long contexts, tool use, agentic coding, other languages, or the open models with reasoning turned down or Claude with extended thinking turned on, and any of those could change the picture. Latency was measured from one client on one day. Treat the table as a starting point and run your own prompts: the request code is the same for every model, so switching is a one-word change.</p>
<pre><code class="language-python">from openai import OpenAI

client = OpenAI(
    base_url="https://api.quicksilverpro.io/v1",
    api_key="YOUR_QSP_KEY",
)

for model in ["glm-5.3", "kimi-k3", "deepseek-v4-pro", "claude-sonnet-5-5"]:
    response = client.chat.completions.create(
        model=model,
        max_tokens=8000,
        messages=[{"role": "user", "content": "Your task here"}],
    )
    print(model, response.usage.completion_tokens, response.choices[0].message.content)
</code></pre>
<p>For the full Claude price list, see <a href="https://quicksilverpro.io/blog/claude-api-pricing/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=open-models">Claude API pricing in 2026</a>. For requesting output that follows a JSON schema, see <a href="https://quicksilverpro.io/docs/json-schema/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=open-models">the JSON schema guide</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Claude Opus 5.5 vs Sonnet 5.5 for coding: worth 2.5x the cost?]]></title><description><![CDATA[Claude Code on six coding tasks with hidden tests, twice per model. Both passed every test; Opus took 1.6x as long and cost 2.5x as much per task.]]></description><link>https://xiunxiao.hashnode.dev/claude-opus-5-5-vs-sonnet-5-5-for-coding-worth-2-5x-the-cost</link><guid isPermaLink="true">https://xiunxiao.hashnode.dev/claude-opus-5-5-vs-sonnet-5-5-for-coding-worth-2-5x-the-cost</guid><category><![CDATA[claude]]></category><category><![CDATA[claude-code]]></category><category><![CDATA[llm]]></category><category><![CDATA[AI]]></category><dc:creator><![CDATA[xiun xiao]]></dc:creator><pubDate>Mon, 09 Nov 2026 11:57:30 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally published on the <a href="https://quicksilverpro.io/blog/claude-opus-5-5-vs-sonnet-5-5-coding/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=opus-vs-sonnet">QuickSilver Pro blog</a>.</em></p>
<p>Claude Opus 5.5 costs $1.00 / $5.00 per million tokens on QuickSilver Pro, against $0.50 / $2.50 for Claude Sonnet 5.5. The question for anyone running a coding agent is whether Opus buys anything for that.</p>
<p>We tested it on 2026-10-20 with Claude Code, on six small but real coding tasks, and graded every run with tests the agent never saw. Short answer: on these tasks, no. Both models passed every hidden test in every run. Opus was slower and, per task, cost about two and a half times as much.</p>
<h2>How we tested</h2>
<ul>
<li><strong>Agent:</strong> Claude Code 2.1.301, non-interactive (<code>claude -p</code>), default settings, with <code>--allowedTools "Read,Edit,Write,Bash,Glob,Grep"</code> so it could read and edit files and run shell commands. The only thing that changed between runs was <code>--model claude-sonnet-5-5</code> or <code>--model claude-opus-5-5</code>. <code>ANTHROPIC_DEFAULT_HAIKU_MODEL</code> was set to <code>claude-haiku-5-5</code>.</li>
<li><strong>Tasks:</strong> six throwaway Python repositories, each with a one-paragraph prompt, a spec or bug report in the repo, and one visible test. Every task had a separate hidden test suite that we ran after the agent finished. Five suites were written by us before any run and checked against our own reference solutions; the sixth is the official Mustache spec suite.</li>
<li><strong>Runs:</strong> each task twice per model, same inputs, 24 runs in total.</li>
<li><strong>Graded on:</strong> the share of hidden tests passing. Also recorded: wall-clock time, number of API requests, input / cached / output tokens, and cost.</li>
<li><strong>Cost:</strong> computed from the token counts of every request each run made, at QuickSilver Pro prices on 2026-10-20 — input, output, cache reads and cache writes each at their own rate.</li>
</ul>
<p>The tasks:</p>
<ol>
<li><strong>Two-file bug fix.</strong> A shop module whose totals were off by a cent and whose discount was applied twice. The fix needed changes in both files plus a rule from the README that the bug report did not mention (a minimum order for one code). 17 hidden tests.</li>
<li><strong>Implement from a spec.</strong> A duration parser (<code>"1h30m"</code>, <code>"2 hours and 5 min"</code>, <code>"PT1H30M"</code>) with a page of rules on separators, unit order and what must be rejected. 57 hidden tests.</li>
<li><strong>Refactor without changing behaviour.</strong> Split a long function full of duplicated code into helpers. The hidden tests compared the new output with the original on 300 random inputs and a set of edge cases, and checked that the function actually got shorter. 312 hidden tests.</li>
<li><strong>Add input validation.</strong> A sign-up function with a written rule set: per-field error codes, rule order, and fields that interact (a password must not contain the username, but only if the username is valid). 52 hidden tests.</li>
<li><strong>Parser for a config format.</strong> Sections, quoted values with escapes, inline comments, line continuation with correct error line numbers, and <code>${section.key}</code> references with cycle detection. 34 hidden tests.</li>
<li><strong>A Mustache template renderer</strong> from scratch, graded against the official Mustache spec test suite: interpolation, sections, inverted sections, comments, partials and delimiter changes. 136 hidden tests.</li>
</ol>
<h2>Results</h2>
<p>Averages over two runs per model and task. Cost is per run, at QuickSilver Pro prices on 2026-10-20.</p>
<table>
<thead>
<tr>
<th>Task</th>
<th>Sonnet 5.5: tests passed</th>
<th>Sonnet 5.5: time</th>
<th>Sonnet 5.5: cost</th>
<th>Opus 5.5: tests passed</th>
<th>Opus 5.5: time</th>
<th>Opus 5.5: cost</th>
</tr>
</thead>
<tbody><tr>
<td>1. Two-file bug fix</td>
<td>17/17, both runs</td>
<td>21 s</td>
<td>$0.048</td>
<td>17/17, both runs</td>
<td>37 s</td>
<td>$0.120</td>
</tr>
<tr>
<td>2. Duration parser</td>
<td>57/57, both runs</td>
<td>46 s</td>
<td>$0.093</td>
<td>57/57, both runs</td>
<td>62 s</td>
<td>$0.121</td>
</tr>
<tr>
<td>3. Refactor</td>
<td>312/312, both runs</td>
<td>30 s</td>
<td>$0.052</td>
<td>312/312, both runs</td>
<td>81 s</td>
<td>$0.156</td>
</tr>
<tr>
<td>4. Input validation</td>
<td>52/52, both runs</td>
<td>33 s</td>
<td>$0.056</td>
<td>52/52, both runs</td>
<td>36 s</td>
<td>$0.088</td>
</tr>
<tr>
<td>5. Config parser</td>
<td>34/34, both runs</td>
<td>55 s</td>
<td>$0.075</td>
<td>34/34, both runs</td>
<td>77 s</td>
<td>$0.127</td>
</tr>
<tr>
<td>6. Mustache renderer</td>
<td>136/136, both runs</td>
<td>82 s</td>
<td>$0.093</td>
<td>136/136, both runs</td>
<td>137 s</td>
<td>$0.438</td>
</tr>
<tr>
<td><strong>Average</strong></td>
<td><strong>all passed</strong></td>
<td><strong>45 s</strong></td>
<td><strong>$0.069</strong></td>
<td><strong>all passed</strong></td>
<td><strong>72 s</strong></td>
<td><strong>$0.175</strong></td>
</tr>
</tbody></table>
<p>Where the tokens went, averaged over all 12 runs per model:</p>
<table>
<thead>
<tr>
<th>Per run</th>
<th>Sonnet 5.5</th>
<th>Opus 5.5</th>
</tr>
</thead>
<tbody><tr>
<td>Requests to the chosen model</td>
<td>5.8</td>
<td>6.0</td>
</tr>
<tr>
<td>Input tokens to the chosen model</td>
<td>141,000</td>
<td>148,000</td>
</tr>
<tr>
<td>...of which read from the prompt cache</td>
<td>111,000</td>
<td>110,000</td>
</tr>
<tr>
<td>Output tokens</td>
<td>5,200</td>
<td>5,800</td>
</tr>
<tr>
<td>Cost of the chosen model's requests</td>
<td>$0.034</td>
<td>$0.074</td>
</tr>
<tr>
<td>Safety-check requests (see below)</td>
<td>1.4</td>
<td>4.0</td>
</tr>
<tr>
<td>Cost of the safety checks</td>
<td>$0.036</td>
<td>$0.101</td>
</tr>
<tr>
<td><strong>Total cost per task</strong></td>
<td><strong>$0.069</strong></td>
<td><strong>$0.175</strong></td>
</tr>
</tbody></table>
<h2>What the numbers say</h2>
<p><strong>Quality was a tie.</strong> Neither model failed a single hidden test in 24 runs, including the 136 cases of the official Mustache suite, which include the fiddly rules for whitespace around standalone tags and indented partials. These tasks did not find a ceiling for Sonnet 5.5, so they cannot show Opus clearing it.</p>
<p><strong>Opus did not write much more.</strong> The two models used about the same number of requests and output tokens per task. The model-only cost difference (2.2 times) comes almost entirely from Opus's higher per-token price.</p>
<p><strong>Opus checked its own work more, and that is where its extra time and cost went.</strong> It ran more shell commands. On the refactor, both Opus runs wrote a throwaway script that compared the old and new function on random inputs; one of the two Sonnet runs did the same, the other relied on the existing test. On the Mustache task, both Opus runs downloaded the official spec test files from GitHub and ran them before finishing — one of them started a sub-agent to do it — which made that task four times as expensive as with Sonnet. (Our hidden tests for that task are the same files, so Opus's score there is not independent. Sonnet passed all 136 without them.)</p>
<p><strong>Opus was slower in every task</strong>, from about the same speed on the validation task to 2.7 times as long on the refactor. Averaged over all runs it took 1.6 times as long.</p>
<h2>The extra requests you are billed for</h2>
<p>Every run also sent requests to <a href="https://quicksilverpro.io/models/claude-sonnet-5/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=opus-vs-sonnet">Claude Sonnet 5</a>, a model we never selected. We logged one of them: it is Claude Code's own safety check, a "security monitor" prompt that receives the conversation so far and grades the shell command the agent is about to run. Each check sent about 49,000 input tokens and returned a few tokens of output.</p>
<p>Three things about these checks matter for your bill:</p>
<ul>
<li>They do not appear in Claude Code's own usage summary, which in our runs listed only the model we picked. They are ordinary API requests made with your key, so they are billed like any other.</li>
<li>In our runs they cost about as much as the Sonnet 5.5 work itself ($0.036 against $0.034 per task).</li>
<li>They scale with how many shell commands the agent runs, not with the model you chose. Opus ran more commands, so it triggered almost three times as many checks; the two Opus Mustache runs, which downloaded files from GitHub, sent 9 and 15.</li>
</ul>
<h2>When Opus earns its price, and when Sonnet is enough</h2>
<p><strong>Sonnet 5.5 is enough</strong> for the kind of work we measured: bug fixes across a couple of files, implementing a function from a written spec, behaviour-preserving refactors, validation rules, parsers of a few hundred lines. It solved all of them, every time, at about 40% of Opus's cost per task and in less time.</p>
<p><strong>Opus 5.5 is worth trying</strong> when Sonnet fails a task — and, judging by these runs, when you want the agent to go out of its way to verify its work, as it did by fuzz-testing its refactors and fetching the reference test suite. We did not find a task in this set that Sonnet failed, so we cannot tell you how much more Opus solves on harder work. Treat that as a reason to keep Opus one <code>/model opus</code> away, not to run it by default.</p>
<p>A practical setup: map Claude Code's <code>sonnet</code> alias to <code>claude-sonnet-5-5</code> and its <code>opus</code> alias to <code>claude-opus-5-5</code> (see <a href="https://quicksilverpro.io/blog/claude-code-quicksilver-pro/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=opus-vs-sonnet">Claude Code with QuickSilver Pro</a>), work in Sonnet, and switch with <code>/model opus</code> for the task where Sonnet keeps going round in circles.</p>
<h2>Limits of this test</h2>
<ul>
<li>Six tasks, two runs per model. Small, self-contained Python tasks of 20 seconds to 2.5 minutes each, not a multi-hour change in a large codebase.</li>
<li>Five of the six hidden test suites were written by us, so they reflect our reading of each spec. We checked each against a reference solution before running the agents.</li>
<li>Wall time includes network and server time, and two runs of the same model on the same task differed by as much as 55%. Read the time column as a rough guide.</li>
<li>Claude Code ran with its default settings, including the default effort level for each model.</li>
</ul>
<h2>Run it yourself</h2>
<p>The settings we used, pointed at the public endpoint:</p>
<pre><code class="language-bash">export ANTHROPIC_BASE_URL=https://api.quicksilverpro.io
export ANTHROPIC_AUTH_TOKEN=YOUR_QSP_KEY
export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-5-5

claude -p "Fix the failing test in tests/" --model claude-sonnet-5-5 --allowedTools "Read,Edit,Write,Bash,Glob,Grep"
claude -p "Fix the failing test in tests/" --model claude-opus-5-5 --allowedTools "Read,Edit,Write,Bash,Glob,Grep"
</code></pre>
<p>Each request shows up in your QuickSilver Pro dashboard with its model, token counts and cost, so you can compare the two models on your own tasks. Prices for every Claude model are in <a href="https://quicksilverpro.io/blog/claude-api-pricing/?utm_source=hashnode&amp;utm_medium=referral&amp;utm_campaign=opus-vs-sonnet">Claude API pricing in 2026</a>.</p>
]]></content:encoded></item></channel></rss>