<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Postal</title>
    <description>The latest articles on DEV Community by Postal (@postal6666).</description>
    <link>https://dev.to/postal6666</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4085914%2F75993d02-37ca-4cc5-b59e-719703c55642.jpg</url>
      <title>DEV Community: Postal</title>
      <link>https://dev.to/postal6666</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/postal6666"/>
    <language>en</language>
    <item>
      <title>GPT-5.6 Sol vs Terra vs Luna: A Cost-Aware Router in Python</title>
      <dc:creator>Postal</dc:creator>
      <pubDate>Fri, 28 Aug 2026 02:23:57 +0000</pubDate>
      <link>https://dev.to/postal6666/gpt-56-sol-vs-terra-vs-luna-a-cost-aware-router-in-python-7eg</link>
      <guid>https://dev.to/postal6666/gpt-56-sol-vs-terra-vs-luna-a-cost-aware-router-in-python-7eg</guid>
      <description>&lt;p&gt;The useful question about GPT-5.6 is not “Which model is best?” It is “Which part of this workflow actually needs Sol?”&lt;/p&gt;

&lt;p&gt;OpenAI now positions the family in three tiers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;API ID&lt;/th&gt;
&lt;th&gt;Input / 1M tokens&lt;/th&gt;
&lt;th&gt;Output / 1M tokens&lt;/th&gt;
&lt;th&gt;Sensible default&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sol&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-sol&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$4.00&lt;/td&gt;
&lt;td&gt;$20.00&lt;/td&gt;
&lt;td&gt;Ambiguous, high-consequence reasoning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Terra&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-terra&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$2.00&lt;/td&gt;
&lt;td&gt;$12.00&lt;/td&gt;
&lt;td&gt;Everyday production work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Luna&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-5.6-luna&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;$0.20&lt;/td&gt;
&lt;td&gt;$1.20&lt;/td&gt;
&lt;td&gt;High-volume, well-specified jobs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are the API prices shown in OpenAI's model documentation on August 28, 2026. They can change, so keep them in configuration rather than burying them in application code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The price gap is large enough to change architecture
&lt;/h2&gt;

&lt;p&gt;Consider a job that consumes 8,000 input tokens and produces 1,500 output tokens.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sol: about &lt;strong&gt;$0.062&lt;/strong&gt; per task&lt;/li&gt;
&lt;li&gt;Terra: about &lt;strong&gt;$0.034&lt;/strong&gt; per task&lt;/li&gt;
&lt;li&gt;Luna: about &lt;strong&gt;$0.0034&lt;/strong&gt; per task&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At 100,000 tasks, that becomes roughly $6,200, $3,400, or $340.&lt;/p&gt;

&lt;p&gt;The arithmetic is simple. The harder part is deciding which requests deserve the expensive path.&lt;/p&gt;

&lt;p&gt;For this workflow, CometAPI can serve as the shared API layer for switching between model tiers. That does not remove the need to evaluate each model on real tasks; it keeps routing, usage tracking, and fallback logic around one client instead of several provider-specific integrations. The &lt;a href="https://apidoc.cometapi.com/" rel="noopener noreferrer"&gt;CometAPI documentation&lt;/a&gt; lists the current model catalog and request formats.&lt;/p&gt;

&lt;p&gt;I would not route by prompt length alone. A short request can hide a hard decision, while a long document may only need extraction. Route by the kind of uncertainty the model must resolve.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small routing rule that is easy to audit
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dataclasses&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;dataclass&lt;/span&gt;


&lt;span class="nd"&gt;@dataclass&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;ambiguity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;low&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;consequence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;low&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;needs_final_review&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;choose_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;consequence&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;high&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;needs_final_review&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-5.6-sol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ambiguity&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;high&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;debugging&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;planning&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;multi_step_analysis&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-5.6-terra&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-5.6-luna&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is intentionally boring. The rule is visible, testable, and easy to replace once evaluation data arrives.&lt;/p&gt;

&lt;p&gt;The application call stays ordinary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kind&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;classification&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;choose_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Classify this support request as billing, technical, or account access.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Where each model fits in a real pipeline
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Luna: repeated work with a clear acceptance test
&lt;/h3&gt;

&lt;p&gt;Good candidates include classification, extraction, normalization, short summaries, formatting, routing, and first-pass transformations.&lt;/p&gt;

&lt;p&gt;The common feature is not that these tasks are “easy.” It is that success can be checked cheaply. If an extraction must match a schema, validation code can catch failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Terra: the default when context and judgment both matter
&lt;/h3&gt;

&lt;p&gt;Terra makes sense for ordinary coding assistance, document analysis, planning with known constraints, support responses that require interpretation, and multi-step work where Luna's failure rate becomes expensive.&lt;/p&gt;

&lt;p&gt;If I had to choose one model before running an evaluation, Terra would be the least surprising starting point.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sol: use it where a bad decision creates follow-up work
&lt;/h3&gt;

&lt;p&gt;Sol is easier to justify for ambiguous debugging, architecture decisions, difficult research synthesis, final review, and tasks where one overlooked constraint can invalidate the result.&lt;/p&gt;

&lt;p&gt;The important phrase is “easier to justify,” not “always better.” A stronger model can still waste money on a task that a validator and Luna could finish reliably.&lt;/p&gt;

&lt;h2&gt;
  
  
  A better pattern than one model per application
&lt;/h2&gt;

&lt;p&gt;For longer workflows, I prefer stage-level routing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Luna&lt;/strong&gt; classifies the request and extracts structured facts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terra&lt;/strong&gt; creates the plan or draft.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sol&lt;/strong&gt; handles unresolved ambiguity or reviews a high-consequence result.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That design also makes evaluation cleaner. Instead of asking whether one model is globally better, you can measure acceptance rate, retries, latency, and cost at each stage.&lt;/p&gt;

&lt;p&gt;The metric worth tracking is not cost per token. It is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cost per accepted task = total model cost / outputs that pass review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cheap tokens are not cheap when they create three retries. Expensive tokens are not expensive when they prevent an hour of rework.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would measure before changing traffic
&lt;/h2&gt;

&lt;p&gt;Start with 30 to 50 representative tasks. For each model, record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;acceptance without editing;&lt;/li&gt;
&lt;li&gt;number of retries;&lt;/li&gt;
&lt;li&gt;input and output tokens;&lt;/li&gt;
&lt;li&gt;latency;&lt;/li&gt;
&lt;li&gt;validation failures;&lt;/li&gt;
&lt;li&gt;human review time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then route the stable majority to the least expensive model that passes, keeping an escalation path for the awkward cases.&lt;/p&gt;

&lt;p&gt;That is less exciting than declaring a universal winner. It is also much closer to how production systems behave.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://platform.openai.com/docs/models" rel="noopener noreferrer"&gt;OpenAI model guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openai.com/index/advancing-the-price-performance-frontier-with-gpt-5-6/" rel="noopener noreferrer"&gt;OpenAI's July 30 price-performance update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openai.com/index/gpt-5-6/" rel="noopener noreferrer"&gt;GPT-5.6 family announcement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I work with CometAPI content. The prices above come from OpenAI's public documentation, and this article does not use promotional gateway pricing.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>GLM-5.3-Flash API: What I Tested Before Using It in Production</title>
      <dc:creator>Postal</dc:creator>
      <pubDate>Thu, 27 Aug 2026 07:11:03 +0000</pubDate>
      <link>https://dev.to/postal6666/glm-53-flash-api-what-i-tested-before-using-it-in-production-5eni</link>
      <guid>https://dev.to/postal6666/glm-53-flash-api-what-i-tested-before-using-it-in-production-5eni</guid>
      <description>&lt;p&gt;I saw the 50% launch discount for GLM-5.3-Flash and had the same reaction I usually have to model promotions: the price is interesting, but the endpoint behavior matters more.&lt;/p&gt;

&lt;p&gt;So I reduced the test to a few things I could verify quickly: the model ID, a plain text request, streaming, multimodal input, and the cost of an actual response.&lt;/p&gt;

&lt;p&gt;Here is the short version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model ID:&lt;/strong&gt; &lt;code&gt;glm-5.3-flash&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API style:&lt;/strong&gt; OpenAI-compatible Chat Completions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base URL:&lt;/strong&gt; &lt;code&gt;https://api.cometapi.com/v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advertised input:&lt;/strong&gt; text, images, and video at the model level&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Promotion shown on August 27:&lt;/strong&gt; 50% off until September 9, 2026 at 24:00 UTC+8&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The discount is time-sensitive. The code and verification steps are the useful part.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is GLM-5.3-Flash?
&lt;/h2&gt;

&lt;p&gt;GLM-5.3-Flash is presented as a multimodal member of the GLM-5 family. The model announcement describes native support for text, image, and video input, while the hosted API route still needs to be checked against the current provider documentation.&lt;/p&gt;

&lt;p&gt;That distinction matters. A model can support a modality in its underlying release while a particular hosted endpoint exposes only part of that capability, or uses a slightly different message format. The safest workflow is to start with a text request, then test images or video separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  The smallest Python test I would run
&lt;/h2&gt;

&lt;p&gt;CometAPI uses the OpenAI Python client format, so the first test does not need a new SDK. Keep the API key in an environment variable rather than pasting it into a notebook or repository.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;


&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMETAPI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.cometapi.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;glm-5.3-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarize the trade-offs between streaming and non-streaming API responses.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install the client with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;openai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then set the key before running the script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;COMETAPI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_COMETAPI_KEY"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows PowerShell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;COMETAPI_API_KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_COMETAPI_KEY"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What should developers verify first?
&lt;/h2&gt;

&lt;p&gt;Before comparing the model with another provider, I would record five things from a real request:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The accepted model ID.&lt;/strong&gt; Use &lt;code&gt;glm-5.3-flash&lt;/code&gt; exactly as listed, then check the live model page if the request returns an unknown-model error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response shape.&lt;/strong&gt; Confirm that the usual &lt;code&gt;choices[0].message.content&lt;/code&gt; path is returned by the route you are using.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming behavior.&lt;/strong&gt; A short streaming test will show whether the endpoint emits the chunks and finish reason your application expects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multimodal syntax.&lt;/strong&gt; Test one small image only after the text request works. Do not assume that a model-level capability maps one-to-one to every API wrapper.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Current pricing.&lt;/strong&gt; The 50% figure in this article comes from the update card shown on August 27, 2026. Check the live rate card before estimating a bill or publishing a comparison.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This kind of checklist is more useful than a single benchmark number when the goal is to decide whether a model fits an existing application.&lt;/p&gt;

&lt;h2&gt;
  
  
  A quick way to think about the promotion
&lt;/h2&gt;

&lt;p&gt;The update card shows the following standard reference rates per one million tokens:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Usage&lt;/th&gt;
&lt;th&gt;Standard reference&lt;/th&gt;
&lt;th&gt;50% promotion reference&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;$0.15&lt;/td&gt;
&lt;td&gt;$0.075&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cached input&lt;/td&gt;
&lt;td&gt;$0.03&lt;/td&gt;
&lt;td&gt;$0.015&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;$0.50&lt;/td&gt;
&lt;td&gt;$0.25&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These numbers are useful for a rough estimate, not a billing guarantee. A simple cost check is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;estimated cost = input tokens × input rate
               + cached input tokens × cached-input rate
               + output tokens × output rate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a production estimate, include your actual cache-hit ratio, average output length, retries, and any changes after the promotion ends.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would use it for
&lt;/h2&gt;

&lt;p&gt;GLM-5.3-Flash looks most relevant for workloads where speed and unit cost matter: short agent loops, classification, extraction, and high-volume text generation. Multimodal projects need a separate test because model-level support does not guarantee that every hosted route accepts the same message format.&lt;/p&gt;

&lt;p&gt;I would keep the model name configurable, log token usage and latency, and compare a fixed prompt set before routing production traffic to it. That is less exciting than a benchmark screenshot, but it is the part that prevents surprises.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the GLM-5.3-Flash API model ID on CometAPI?
&lt;/h3&gt;

&lt;p&gt;The model ID shown in the update is &lt;code&gt;glm-5.3-flash&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the CometAPI base URL for the OpenAI Python SDK?
&lt;/h3&gt;

&lt;p&gt;Use &lt;code&gt;https://api.cometapi.com/v1&lt;/code&gt; as the &lt;code&gt;base_url&lt;/code&gt; and pass the CometAPI key through the &lt;code&gt;api_key&lt;/code&gt; parameter.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is GLM-5.3-Flash multimodal?
&lt;/h3&gt;

&lt;p&gt;The model announcement describes text, image, and video input. Verify the exact content format and supported limits on the live hosted API route before building around it.&lt;/p&gt;

&lt;h3&gt;
  
  
  When does the 50% GLM-5.3-Flash promotion end?
&lt;/h3&gt;

&lt;p&gt;The update card supplied for this article shows September 9, 2026 at 24:00 UTC+8, which is September 9 at 16:00 UTC. Pricing and availability should still be rechecked before use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is this a production recommendation?
&lt;/h3&gt;

&lt;p&gt;No. It is a practical starting point for testing. Production adoption should follow a small evaluation covering quality, latency, errors, limits, multimodal behavior, and the post-promotion price.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and runnable examples
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/FifoCodeDev/glm-5-3-flash-api-guide" rel="noopener noreferrer"&gt;GLM-5.3-Flash Python examples on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cometapi.com/models/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=glm_5_3_flash_update&amp;amp;utm_content=article" rel="noopener noreferrer"&gt;CometAPI model catalog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cometapi.com/quickstart/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=glm_5_3_flash_update&amp;amp;utm_content=article" rel="noopener noreferrer"&gt;CometAPI quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://z.ai/blog/glm-5.3-flash" rel="noopener noreferrer"&gt;Official GLM-5.3-Flash announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://huggingface.co/zai-org/GLM-5.3-Flash" rel="noopener noreferrer"&gt;Official model repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I work with CometAPI content. I have separated the provider-specific promotion from the checks developers can reproduce themselves. Pricing, limits, and route behavior can change.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>api</category>
      <category>llm</category>
    </item>
    <item>
      <title>DeepSeek Harness Review: A Practical Guide to Its Plugin-Based Agent Runtime</title>
      <dc:creator>Postal</dc:creator>
      <pubDate>Wed, 26 Aug 2026 02:18:15 +0000</pubDate>
      <link>https://dev.to/postal6666/deepseek-harness-review-a-practical-guide-to-its-plugin-based-agent-runtime-7l3</link>
      <guid>https://dev.to/postal6666/deepseek-harness-review-a-practical-guide-to-its-plugin-based-agent-runtime-7l3</guid>
      <description>&lt;p&gt;If you have only seen DeepSeek Harness as another way to run a coding model, you are looking at the wrong layer.&lt;/p&gt;

&lt;p&gt;DeepSeek Harness is an &lt;strong&gt;agent runtime&lt;/strong&gt;: the part that connects a model to files, shell commands, tools, skills, sessions, planning, and repeatable workflows. The model is important, but the harness determines whether the model can actually finish a task in a real workspace.&lt;/p&gt;

&lt;p&gt;That is also why the project is worth evaluating separately from the model it happens to use.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; DeepSeek Harness is practical for developers building or evaluating tool-using agents. Its strongest ideas are a plugin-based architecture, traceable session logs, multiple runtime modes, and a configurable provider boundary. It can connect to a wide range of model endpoints, especially OpenAI-compatible APIs, but “connect anything” still means “use a supported protocol or write an adapter.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This review looks at what the interface makes possible, where it adds real value, where it adds complexity, and how to connect one OpenAI-compatible endpoint as a concrete example.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is DeepSeek Harness?
&lt;/h2&gt;

&lt;p&gt;DeepSeek Harness (&lt;code&gt;dsh&lt;/code&gt;) is an open-source, developer-preview environment for running and composing coding agents. DeepSeek describes the design with the simple formula &lt;strong&gt;Agent = Model + Harness&lt;/strong&gt; in its &lt;a href="https://www.deepseek.com/harness/en/" rel="noopener noreferrer"&gt;official overview&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The distinction is useful:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Job&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model&lt;/td&gt;
&lt;td&gt;Generates text, decisions, code, and tool arguments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Harness&lt;/td&gt;
&lt;td&gt;Gives the model an environment, tools, context, and an agent loop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plugins&lt;/td&gt;
&lt;td&gt;Add or replace capabilities such as providers, tools, skills, storage, or UI components&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workspace&lt;/td&gt;
&lt;td&gt;Supplies files, repositories, commands, and task-specific context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Session log&lt;/td&gt;
&lt;td&gt;Records prompts, tool calls, results, and context changes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The official project currently presents four runtime modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standard mode&lt;/strong&gt;: a full coding-agent setup with files, shell, search, skills, planning, goals, subagents, and workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code mode&lt;/strong&gt;: exposes tools through the Code Mode SDK so the model can orchestrate several calls inside a generated TypeScript program.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimal mode&lt;/strong&gt;: keeps a small shell-and-editor environment for model or harness benchmarking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creator mode&lt;/strong&gt;: lets developers inspect the runtime, experiment with plugins, and compose custom presets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a much broader scope than a chat interface or a one-shot SDK call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the plugin boundary matters
&lt;/h2&gt;

&lt;p&gt;The most interesting part of DeepSeek Harness is not the model picker. It is the boundary between the agent runtime and the model provider.&lt;/p&gt;

&lt;p&gt;In a tightly coupled coding assistant, changing providers can mean rewriting authentication, message conversion, streaming, tool schemas, error handling, and orchestration. The workspace and the model become one large implementation detail.&lt;/p&gt;

&lt;p&gt;DeepSeek Harness takes a different approach. Providers, tools, sessions, storage, loops, scheduling, and UI capabilities are represented as composable pieces. The official documentation explains that developers can select, swap, or extend capabilities through configuration without changing the Harness source code.&lt;/p&gt;

&lt;p&gt;That makes several experiments much easier:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run the same repository task against different models.&lt;/li&gt;
&lt;li&gt;Use a faster model for routine checks and a stronger model for complex edits.&lt;/li&gt;
&lt;li&gt;Point the same agent workflow at a hosted API, an internal gateway, or a self-hosted endpoint.&lt;/li&gt;
&lt;li&gt;Add a tool or skill without rebuilding the whole runtime.&lt;/li&gt;
&lt;li&gt;Inspect the complete trajectory after a task succeeds or fails.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The fifth item is particularly valuable. DeepSeek Harness records what the model saw and did in an append-only session log. Its Trajectory view can expose system prompts, tool calls, tool results, subagent scheduling, and context injections. A long agent run becomes something closer to a debuggable program than an opaque chat transcript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can DeepSeek Harness connect to anything?
&lt;/h2&gt;

&lt;p&gt;Almost anything with a clear adapter boundary, but not every arbitrary HTTP API automatically.&lt;/p&gt;

&lt;p&gt;There are three practical levels of integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. OpenAI-compatible endpoints
&lt;/h3&gt;

&lt;p&gt;This is the easiest path. A custom provider needs a lowercase provider ID, a base URL, an API protocol, a credential, and at least one model ID. DeepSeek Harness can send requests through its OpenAI-compatible adapter.&lt;/p&gt;

&lt;p&gt;This pattern covers many hosted gateways, enterprise proxies, local inference servers, and internal model routers.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Providers already supported by the catalog
&lt;/h3&gt;

&lt;p&gt;When a provider is included in the installed catalog, Harness can supply its endpoint, protocol, and model list through the provider configuration. The developer does not need to recreate every field manually.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Proprietary or unusual protocols
&lt;/h3&gt;

&lt;p&gt;This is where a plugin or adapter is needed. The adapter has to translate details such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;authentication;&lt;/li&gt;
&lt;li&gt;message roles;&lt;/li&gt;
&lt;li&gt;streaming events;&lt;/li&gt;
&lt;li&gt;tool calls;&lt;/li&gt;
&lt;li&gt;reasoning fields;&lt;/li&gt;
&lt;li&gt;model metadata;&lt;/li&gt;
&lt;li&gt;error responses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important distinction is this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;DeepSeek Harness is protocol-flexible and adapter-friendly. It is not a magic wrapper that makes every API compatible without integration work.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is still a strong interface. It puts the integration work at the edge instead of forcing every agent workflow to know the details of every provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  How practical is DeepSeek Harness?
&lt;/h2&gt;

&lt;p&gt;This is a practical engineering scorecard, not a model benchmark.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Practical assessment&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Extensibility&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;td&gt;Providers, tools, sessions, storage, runtime modes, and UI capabilities can be composed through plugins.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Provider flexibility&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;OpenAI-compatible gateways are approachable; proprietary protocols still need adapters.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debuggability&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;td&gt;Session logs and trajectory inspection make long tool-using runs easier to understand.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Experimentation&lt;/td&gt;
&lt;td&gt;9/10&lt;/td&gt;
&lt;td&gt;Minimal, Standard, Code, and Creator modes support different evaluation goals.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Setup simplicity&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;The path is clear, but model metadata and compatibility settings require attention.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production readiness&lt;/td&gt;
&lt;td&gt;6/10&lt;/td&gt;
&lt;td&gt;It is still a developer preview and may introduce compatibility-breaking changes.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Where it is genuinely useful
&lt;/h3&gt;

&lt;p&gt;DeepSeek Harness makes the most sense when you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;build coding agents instead of simple chat features;&lt;/li&gt;
&lt;li&gt;need to inspect why an agent made a tool call;&lt;/li&gt;
&lt;li&gt;compare model providers on the same repository task;&lt;/li&gt;
&lt;li&gt;want to keep the workspace and tool loop stable while changing models;&lt;/li&gt;
&lt;li&gt;are comfortable pinning versions and working with configuration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where it may be unnecessary
&lt;/h3&gt;

&lt;p&gt;A direct SDK call is usually simpler when your application only needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one synchronous completion;&lt;/li&gt;
&lt;li&gt;a small chat widget;&lt;/li&gt;
&lt;li&gt;a structured extraction request;&lt;/li&gt;
&lt;li&gt;a thin API wrapper with no files or tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Harness abstraction starts paying for itself when the task has multiple steps, commands, edits, retries, persistent context, or a need to understand the path taken by the agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting DeepSeek Harness to an OpenAI-compatible API
&lt;/h2&gt;

&lt;p&gt;The cleanest way to test the provider interface is to use a gateway that already speaks the OpenAI chat-completions format. This section uses CometAPI as one concrete example; the same structure applies to other compatible endpoints.&lt;/p&gt;

&lt;p&gt;CometAPI’s &lt;a href="https://apidoc.cometapi.com/guides/use-cometapi-with-openai-sdk" rel="noopener noreferrer"&gt;official SDK guide&lt;/a&gt; documents this base URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://api.cometapi.com/v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The integration is interesting less because of the gateway name and more because the Harness workflow does not need to change when the provider route changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Start the local Web UI
&lt;/h3&gt;

&lt;p&gt;Install Node.js, then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @deepseek-ai/dsh web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The default local address is usually &lt;code&gt;http://127.0.0.1:3080&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Add a custom provider in the UI
&lt;/h3&gt;

&lt;p&gt;Open:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Settings → Models → Add a custom provider&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use values like these:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Provider ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cometapi&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Display name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CometAPI&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Base URL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://api.cometapi.com/v1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API protocol&lt;/td&gt;
&lt;td&gt;&lt;code&gt;openai-completions&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credential&lt;/td&gt;
&lt;td&gt;Your API key, stored through the UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model ID&lt;/td&gt;
&lt;td&gt;A model ID currently listed by the gateway&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The provider ID is effectively permanent because saved sessions, defaults, and credential references use it. Treat it as an internal identifier rather than a display label.&lt;/p&gt;

&lt;p&gt;If model discovery is available, use &lt;strong&gt;Fetch available models&lt;/strong&gt;. If the endpoint does not provide a usable &lt;code&gt;GET /models&lt;/code&gt; response, add the model ID manually. The current model directory should be the source of truth; model names and availability can change.&lt;/p&gt;

&lt;p&gt;For example, if they are present in your current catalog, you might test model IDs such as &lt;code&gt;deepseek-v4-flash&lt;/code&gt; or &lt;code&gt;deepseek-v4-pro&lt;/code&gt;. Do not assume that a display name is the same as the API model ID.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Use &lt;code&gt;settings.yaml&lt;/code&gt; for a reproducible setup
&lt;/h3&gt;

&lt;p&gt;For a setup that can be reviewed and recreated, add a provider route to &lt;code&gt;$DSH_HOME/settings.yaml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;llm-pi-ai&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cometapi&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;apiKeyEnv&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;COMETAPI_KEY&lt;/span&gt;
      &lt;span class="na"&gt;api&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;openai-completions&lt;/span&gt;
      &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://api.cometapi.com/v1&lt;/span&gt;
      &lt;span class="na"&gt;models&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;MODEL_ID&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set the key in the same shell that launches Harness:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;COMETAPI_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"YOUR_COMETAPI_KEY"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PowerShell users can use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;COMETAPI_KEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_COMETAPI_KEY"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep credentials in the Harness credential store or an environment variable. Do not commit them to a repository or paste them into a public issue.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Test the route before testing the agent
&lt;/h3&gt;

&lt;p&gt;A direct request makes it easier to separate provider problems from Harness problems:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.cometapi.com/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$COMETAPI_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "MODEL_ID",
    "messages": [
      {"role": "user", "content": "Reply in one sentence: what is an agent harness?"}
    ],
    "stream": false
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once that succeeds, select the same model in Harness and run a small workspace task. The model route handles inference; Harness still owns the workspace, tools, session, and agent loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  The compatibility details that matter
&lt;/h2&gt;

&lt;p&gt;“OpenAI-compatible” is a useful starting point, not a guarantee of byte-for-byte behavior.&lt;/p&gt;

&lt;p&gt;Different gateways can disagree about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether the system prompt uses &lt;code&gt;system&lt;/code&gt; or &lt;code&gt;developer&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;whether the output limit is &lt;code&gt;max_tokens&lt;/code&gt; or &lt;code&gt;max_completion_tokens&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;how reasoning content is represented;&lt;/li&gt;
&lt;li&gt;which streaming events are emitted;&lt;/li&gt;
&lt;li&gt;whether tool calls are supported for a specific model;&lt;/li&gt;
&lt;li&gt;whether image input is actually available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the route is reachable and the key is valid but requests are rejected, the provider guide suggests declaring the compatibility differences explicitly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;llm-pi-ai&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cometapi&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;apiKeyEnv&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;COMETAPI_KEY&lt;/span&gt;
      &lt;span class="na"&gt;api&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;openai-completions&lt;/span&gt;
      &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://api.cometapi.com/v1&lt;/span&gt;
      &lt;span class="na"&gt;compat&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;supportsDeveloperRole&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
        &lt;span class="na"&gt;maxTokensField&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;max_tokens&lt;/span&gt;
      &lt;span class="na"&gt;models&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;MODEL_ID&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the smallest compatibility adjustment that matches the actual error. These settings describe what the endpoint supports; they do not make an unsupported model capability appear.&lt;/p&gt;

&lt;p&gt;Common failure patterns are straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;401&lt;/code&gt;&lt;/strong&gt;: check the key, authorization header, and the shell from which Harness was launched.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;UNKNOWN_MODEL&lt;/code&gt;&lt;/strong&gt;: check the exact API model ID and add it to the provider configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model discovery fails&lt;/strong&gt;: enter the model manually if the endpoint does not expose a compatible &lt;code&gt;/models&lt;/code&gt; route.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Images are rejected before sending&lt;/strong&gt;: declare &lt;code&gt;input: [text, image]&lt;/code&gt; only when the endpoint and model genuinely support images.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Every request is rejected&lt;/strong&gt;: inspect role, token-limit, reasoning, and tool-call compatibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A fair way to evaluate the harness
&lt;/h2&gt;

&lt;p&gt;The easiest mistake is to judge the model and the harness as one component. Keep them separate.&lt;/p&gt;

&lt;p&gt;Use the same repository, prompt, acceptance criteria, and model while comparing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A direct SDK request.&lt;/li&gt;
&lt;li&gt;Harness Minimal mode.&lt;/li&gt;
&lt;li&gt;Harness Standard mode.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then change only the provider route or model ID.&lt;/p&gt;

&lt;p&gt;Track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;complete task success rate;&lt;/li&gt;
&lt;li&gt;correct tool selection and arguments;&lt;/li&gt;
&lt;li&gt;number of retries and failed commands;&lt;/li&gt;
&lt;li&gt;time to first useful action;&lt;/li&gt;
&lt;li&gt;total latency;&lt;/li&gt;
&lt;li&gt;input and output token usage;&lt;/li&gt;
&lt;li&gt;cost per accepted task;&lt;/li&gt;
&lt;li&gt;whether the final change passes the test suite.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A useful metric is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cost per accepted task = total model and runtime cost / tasks that pass review
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start with 15–30 representative tasks rather than a gallery of successful demos. Include repository exploration, multi-file edits, test repair, command failures, ambiguous requirements, and tasks that should end without modifying anything.&lt;/p&gt;

&lt;p&gt;The most valuable signal is usually not the first answer. It is what happens after a command fails, a test breaks, or the agent discovers that its first plan was wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strengths and limitations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Strengths
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;It treats an agent as a system.&lt;/strong&gt; Files, tools, sessions, planning, and verification are first-class parts of the workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It makes provider experiments less disruptive.&lt;/strong&gt; The same task can run against another endpoint without rebuilding the workspace integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It makes long runs inspectable.&lt;/strong&gt; Trajectory data gives developers a way to investigate incorrect tool calls and context mistakes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It supports different levels of orchestration.&lt;/strong&gt; Minimal mode is useful for controlled comparisons, while Standard and Creator modes are better suited to everyday workflows and extension work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Limitations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;It is still a developer preview.&lt;/strong&gt; Pin versions, save configuration, and test upgrades against a fixed task suite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compatibility is still real work.&lt;/strong&gt; A common protocol reduces integration effort but does not eliminate provider-specific behavior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There is more to learn than with a direct SDK.&lt;/strong&gt; Plugins, runtime modes, credentials, model metadata, and session behavior add concepts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local execution needs a clear boundary.&lt;/strong&gt; Harness can work with files and commands, so use a disposable workspace or isolated environment when processing untrusted repositories or web content. Session logs can also contain sensitive prompts, file paths, and tool results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;DeepSeek Harness is practical when the goal is to build, inspect, or compare &lt;strong&gt;agents&lt;/strong&gt;, not merely to generate a response.&lt;/p&gt;

&lt;p&gt;Its best idea is the provider and capability boundary. An agent can keep its workspace, tools, sessions, and evaluation process while the model route changes underneath. OpenAI-compatible gateways make that boundary easy to try; other protocols can be added through adapters or plugins.&lt;/p&gt;

&lt;p&gt;The CometAPI example is deliberately small. It shows that the route can be configured with a base URL, protocol, credential reference, and model ID, while the rest of the Harness workflow stays intact. The broader lesson is not “use one particular gateway.” It is that the runtime does not need to be rebuilt every time a model endpoint changes.&lt;/p&gt;

&lt;p&gt;I would use DeepSeek Harness today for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;coding-agent experiments;&lt;/li&gt;
&lt;li&gt;model and provider comparisons;&lt;/li&gt;
&lt;li&gt;tool-use workflows;&lt;/li&gt;
&lt;li&gt;trace-based debugging;&lt;/li&gt;
&lt;li&gt;building reusable agent presets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would be more cautious about making it the invisible foundation of a critical production system before the developer-preview APIs and plugin contracts settle.&lt;/p&gt;

&lt;p&gt;For developers who want to know not only &lt;strong&gt;what&lt;/strong&gt; a model answered but also &lt;strong&gt;how&lt;/strong&gt; an agent worked, DeepSeek Harness is already more than a model wrapper. It is a useful place to study the full model–tool–environment system.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is DeepSeek Harness?
&lt;/h3&gt;

&lt;p&gt;DeepSeek Harness is an open-source agent runtime that combines a language model with files, tools, skills, sessions, workflows, and plugins. It is designed for agents that work in real environments rather than only producing chat replies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can DeepSeek Harness use an OpenAI-compatible API?
&lt;/h3&gt;

&lt;p&gt;Yes. Add a custom provider, set the base URL, choose &lt;code&gt;openai-completions&lt;/code&gt;, configure a credential reference, and add a current model ID.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I connect CometAPI to DeepSeek Harness?
&lt;/h3&gt;

&lt;p&gt;Yes. Use CometAPI’s OpenAI-compatible base URL, &lt;code&gt;https://api.cometapi.com/v1&lt;/code&gt;, with the &lt;code&gt;openai-completions&lt;/code&gt; protocol. Confirm the current model ID and capability support in the live documentation before running a task.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does DeepSeek Harness support every model on a gateway?
&lt;/h3&gt;

&lt;p&gt;Not automatically. The model must exist at the gateway and match the selected protocol. Tool calling, reasoning, streaming, image input, and context limits can vary by model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is DeepSeek Harness production-ready?
&lt;/h3&gt;

&lt;p&gt;The project is currently presented as a developer preview. It is promising for experiments and agent development, but production use should include pinned versions, upgrade tests, logging, credential hygiene, and a rollback plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is a direct SDK simpler than DeepSeek Harness?
&lt;/h3&gt;

&lt;p&gt;For one completion or a small chat feature, usually yes. Harness becomes more useful when the task needs tools, files, persistent sessions, planning, retries, or trajectory inspection.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.deepseek.com/harness/en/" rel="noopener noreferrer"&gt;DeepSeek Harness official overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/deepseek-ai/deepseek-harness" rel="noopener noreferrer"&gt;DeepSeek Harness GitHub repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/guide/providers.md" rel="noopener noreferrer"&gt;DeepSeek Harness provider configuration guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidoc.cometapi.com/guides/use-cometapi-with-openai-sdk" rel="noopener noreferrer"&gt;CometAPI: Use CometAPI with OpenAI SDKs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apidoc.cometapi.com/" rel="noopener noreferrer"&gt;CometAPI documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Disclosure: CometAPI is used here as one concrete OpenAI-compatible gateway example. It is not the subject of the review; model availability, pricing, limits, and compatibility behavior should be checked in the live documentation before production use.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>deepseek</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>DeepSeek V4.1 Isn’t Official Yet, So I Dug Into What Developers Actually Need to Know</title>
      <dc:creator>Postal</dc:creator>
      <pubDate>Mon, 24 Aug 2026 06:48:41 +0000</pubDate>
      <link>https://dev.to/postal6666/deepseek-v41-isnt-official-yet-so-i-dug-into-what-developers-actually-need-to-know-4lao</link>
      <guid>https://dev.to/postal6666/deepseek-v41-isnt-official-yet-so-i-dug-into-what-developers-actually-need-to-know-4lao</guid>
      <description>&lt;p&gt;The first thing I wanted to know about DeepSeek V4.1 was simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Has DeepSeek actually announced it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The short answer is no.&lt;/p&gt;

&lt;p&gt;There is currently no official DeepSeek V4.1 model card, API entry, benchmark table, or confirmed release date. That does not mean the idea came from nowhere, but it does mean we should separate what DeepSeek has shipped from what people expect it to ship next.&lt;/p&gt;

&lt;p&gt;I started with &lt;a href="https://www.cometapi.com/deepseek-v4-1-coming-soon/" rel="noopener noreferrer"&gt;CometAPI’s DeepSeek V4.1 research post&lt;/a&gt; and then cross-checked the important details against DeepSeek’s official changelog and API documentation.&lt;/p&gt;

&lt;p&gt;Here is what developers actually need to know.&lt;/p&gt;

&lt;h2&gt;
  
  
  What DeepSeek has officially released
&lt;/h2&gt;

&lt;p&gt;Before speculating about V4.1, it helps to look at the current V4 lineup.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Current status&lt;/th&gt;
&lt;th&gt;What matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Flash&lt;/td&gt;
&lt;td&gt;Public beta&lt;/td&gt;
&lt;td&gt;Faster and more efficiency-focused&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Pro&lt;/td&gt;
&lt;td&gt;Generally available&lt;/td&gt;
&lt;td&gt;Stronger reasoning and agent performance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4 Flash Vision Exp&lt;/td&gt;
&lt;td&gt;Experimental&lt;/td&gt;
&lt;td&gt;Adds image understanding to the V4 Flash line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek V4.1&lt;/td&gt;
&lt;td&gt;Not officially announced&lt;/td&gt;
&lt;td&gt;Name, specs, pricing, and release date remain unconfirmed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;DeepSeek released the updated V4 Flash API on July 31, followed by the general availability version of V4 Pro on August 13.&lt;/p&gt;

&lt;p&gt;Then, on August 21, it released &lt;code&gt;deepseek-v4-flash-vision-exp&lt;/code&gt;, an experimental model that accepts image input.&lt;/p&gt;

&lt;p&gt;That last update is important. Multimodal capability is no longer just a hypothetical future feature for the V4 family. DeepSeek already has an experimental vision model. A future V4.1 would need to do more than simply add basic image input.&lt;/p&gt;

&lt;h2&gt;
  
  
  The current V4 models already set a high baseline
&lt;/h2&gt;

&lt;p&gt;The most interesting part of the current V4 cycle is not parameter count. It is how aggressively DeepSeek is improving agent performance through post-training and API integration.&lt;/p&gt;

&lt;p&gt;According to &lt;a href="https://api-docs.deepseek.com/updates/" rel="noopener noreferrer"&gt;DeepSeek’s official changelog&lt;/a&gt;, V4 Pro reports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;87.9 on Terminal Bench 2.1&lt;/li&gt;
&lt;li&gt;61.5 on NL2Repo&lt;/li&gt;
&lt;li&gt;62.7 on DeepSWE&lt;/li&gt;
&lt;li&gt;74.1 on Toolathlon Verified&lt;/li&gt;
&lt;li&gt;67.2 on DSBench Hard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Benchmark numbers never tell the full story, especially when evaluation harnesses and reasoning settings differ. Still, they show where DeepSeek is putting its effort: coding agents, terminal work, tool use, and longer production tasks.&lt;/p&gt;

&lt;p&gt;V4 Pro and V4 Flash also support three reasoning effort levels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;low&lt;/code&gt; for simpler tasks&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;high&lt;/code&gt; for everyday agent work&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;max&lt;/code&gt; for harder problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For developers, that is often more useful than another vague claim about a model being “smarter.” It gives us a practical way to trade latency and token usage against task complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what could DeepSeek V4.1 actually be?
&lt;/h2&gt;

&lt;p&gt;My current guess is that V4.1 would be a production-focused upgrade rather than a completely new model generation.&lt;/p&gt;

&lt;p&gt;There are four areas that would make sense.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. More reliable coding agents
&lt;/h3&gt;

&lt;p&gt;The current V4 models already perform well on coding and terminal benchmarks. The next useful improvement would be reliability across longer tasks.&lt;/p&gt;

&lt;p&gt;That means fewer situations where an agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;makes a correct plan but fails during execution&lt;/li&gt;
&lt;li&gt;edits the wrong file after several tool calls&lt;/li&gt;
&lt;li&gt;forgets an earlier constraint&lt;/li&gt;
&lt;li&gt;stops after encountering a recoverable error&lt;/li&gt;
&lt;li&gt;produces a patch without verifying it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For me, this matters more than a small improvement on a single benchmark.&lt;/p&gt;

&lt;p&gt;A coding agent that succeeds 80% of the time on a complete workflow is more useful than one that writes a slightly better isolated function but regularly loses track of the repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. A broader tool surface
&lt;/h3&gt;

&lt;p&gt;DeepSeek’s Responses API support is already useful. It currently supports function calling, server-side web search, and the &lt;code&gt;apply_patch&lt;/code&gt; custom tool.&lt;/p&gt;

&lt;p&gt;However, the &lt;a href="https://api-docs.deepseek.com/guides/responses_api/" rel="noopener noreferrer"&gt;compatibility documentation&lt;/a&gt; still lists several built-in tool types as ignored, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;file_search&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;code_interpreter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;computer_use&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This looks like one of the clearest opportunities for a V4.1 update.&lt;/p&gt;

&lt;p&gt;Native MCP support would be especially interesting. Developers could connect the model to databases, internal services, documentation systems, and local tools without building a separate adapter for every workflow.&lt;/p&gt;

&lt;p&gt;There is no confirmation that V4.1 will add MCP or these other tools. I just think deeper tool compatibility would be more valuable than another context-window headline.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Multimodal agents instead of isolated vision
&lt;/h3&gt;

&lt;p&gt;DeepSeek V4 Flash Vision Exp can already process screenshots, images, charts, and other visual inputs through the Responses API.&lt;/p&gt;

&lt;p&gt;The more interesting next step would be combining that vision capability with reliable agent execution.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inspect a screenshot of a broken interface.&lt;/li&gt;
&lt;li&gt;Locate the relevant component in a repository.&lt;/li&gt;
&lt;li&gt;Modify the code.&lt;/li&gt;
&lt;li&gt;Run the application.&lt;/li&gt;
&lt;li&gt;Inspect the new screenshot.&lt;/li&gt;
&lt;li&gt;Repeat until the issue is fixed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That workflow requires much more than image recognition. The model needs visual reasoning, repository understanding, tool coordination, and the ability to recover from mistakes.&lt;/p&gt;

&lt;p&gt;If V4.1 becomes a real product, a more unified multimodal agent experience would make sense.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Better production consistency
&lt;/h3&gt;

&lt;p&gt;Benchmarks are useful when comparing models, but production failures are usually less dramatic.&lt;/p&gt;

&lt;p&gt;They look more like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;malformed structured output&lt;/li&gt;
&lt;li&gt;unnecessary tool calls&lt;/li&gt;
&lt;li&gt;a task that works with one prompt but fails after a minor rewrite&lt;/li&gt;
&lt;li&gt;inconsistent reasoning effort&lt;/li&gt;
&lt;li&gt;latency spikes during long agent loops&lt;/li&gt;
&lt;li&gt;losing important details in a large context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would like to see a future V4 update focus on these boring problems.&lt;/p&gt;

&lt;p&gt;Boring reliability is what turns a model demo into infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can test today
&lt;/h2&gt;

&lt;p&gt;Since V4.1 is not an available model, I would not build anything around a guessed model ID or release date.&lt;/p&gt;

&lt;p&gt;The practical baseline is V4 Flash or V4 Pro.&lt;/p&gt;

&lt;p&gt;Here is a minimal Python example using V4 Flash through CometAPI’s OpenAI-compatible endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMETAPI_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.cometapi.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-v4-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are reviewing an AI agent workflow. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Identify failure points and suggest concrete tests.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
The agent reads a GitHub issue, edits multiple files,
runs tests, and opens a pull request.

What should I log and evaluate before using this in production?
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;thinking&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;enabled&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reasoning_effort&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;high&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I am deliberately using &lt;code&gt;deepseek-v4-flash&lt;/code&gt; here instead of inventing a &lt;code&gt;deepseek-v4-1&lt;/code&gt; example.&lt;/p&gt;

&lt;p&gt;If V4.1 eventually appears, keeping the model name configurable should make comparison straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;MODEL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MODEL_NAME&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-v4-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can then evaluate the same workflow against Flash, Pro, and any future V4.1 endpoint without rewriting the application.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would measure before switching
&lt;/h2&gt;

&lt;p&gt;If DeepSeek releases V4.1 tomorrow, I would not switch based on the announcement alone.&lt;/p&gt;

&lt;p&gt;I would run the same task set and compare:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Task completion rate&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Does the agent finish the entire workflow?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tool-call accuracy&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Does it select the right tool and provide valid arguments?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Recovery behavior&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
What happens after a failed command or test?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Repository awareness&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Can it make coordinated changes across several files?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Latency and cost&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Does the improvement justify the additional runtime?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Output stability&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Does the same task behave consistently across repeated runs?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is also why I prefer model APIs that let me change models without rebuilding the surrounding workflow. The model will change. Your logging, evals, and failure handling should survive the change.&lt;/p&gt;

&lt;h2&gt;
  
  
  My current take
&lt;/h2&gt;

&lt;p&gt;DeepSeek V4.1 may happen, but it is not official yet.&lt;/p&gt;

&lt;p&gt;The most credible version of V4.1 would not simply be “V4 with a higher benchmark score.” It would be a more complete production model with better agent reliability, broader tool support, stronger multimodal workflows, and fewer failures during long tasks.&lt;/p&gt;

&lt;p&gt;Until DeepSeek publishes a model card or changelog entry, specific parameter counts, prices, release dates, and benchmark claims should be treated as speculation.&lt;/p&gt;

&lt;p&gt;For now, V4 Flash and V4 Pro are the models developers can actually test. V4 Flash Vision Exp also gives us an early look at where multimodal agent workflows may be heading.&lt;/p&gt;

&lt;p&gt;If V4.1 does arrive, what would make you care more: better coding performance, native MCP support, stronger vision, or lower inference cost?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>api</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
