<?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: AIHubMix</title>
    <description>The latest articles on DEV Community by AIHubMix (@aihubmix).</description>
    <link>https://dev.to/aihubmix</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%2F3926159%2Fb406b2d2-62da-447b-afeb-febff1b99896.jpg</url>
      <title>DEV Community: AIHubMix</title>
      <link>https://dev.to/aihubmix</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aihubmix"/>
    <language>en</language>
    <item>
      <title>DeepSeek V4 Pro (0813) Across 3 APIs: Thinking Passback, Tool Calls, and Hidden 400s</title>
      <dc:creator>AIHubMix</dc:creator>
      <pubDate>Fri, 14 Aug 2026 11:58:00 +0000</pubDate>
      <link>https://dev.to/aihubmix/deepseek-v4-pro-0813-across-3-apis-thinking-passback-tool-calls-and-hidden-400s-a74</link>
      <guid>https://dev.to/aihubmix/deepseek-v4-pro-0813-across-3-apis-thinking-passback-tool-calls-and-hidden-400s-a74</guid>
      <description>&lt;p&gt;DeepSeek V4 Pro (0813) is available on AIHubMix through three protocol surfaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAI-compatible Chat Completions&lt;/li&gt;
&lt;li&gt;OpenAI Responses&lt;/li&gt;
&lt;li&gt;Claude-compatible Messages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They reach the same model, but the request and response shapes are not interchangeable. The largest production trap is thinking history: on tool-using multi-turn conversations, dropping the previous turn's thinking content causes a hard HTTP 400.&lt;/p&gt;

&lt;p&gt;The findings below come from calls made on August 13, 2026 against the AIHubMix production APIs. The &lt;a href="https://aihubmix.com/blog/deepseek-v4-pro-0813-thinking-passback-3-api-matrix" rel="noopener noreferrer"&gt;full hands-on guide&lt;/a&gt; includes complete examples, observed responses, and the full capability matrix.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Chat Completions&lt;/th&gt;
&lt;th&gt;Responses&lt;/th&gt;
&lt;th&gt;Messages&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Endpoint&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/v1/chat/completions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/v1/responses&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/v1/messages&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thinking off&lt;/td&gt;
&lt;td&gt;&lt;code&gt;thinking.type="disabled"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;reasoning.effort="none"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;thinking.type="disabled"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thinking passback&lt;/td&gt;
&lt;td&gt;&lt;code&gt;reasoning_content&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;type="reasoning"&lt;/code&gt; item&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;thinking&lt;/code&gt; block&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool schema&lt;/td&gt;
&lt;td&gt;nested &lt;code&gt;function&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;flat definition&lt;/td&gt;
&lt;td&gt;&lt;code&gt;input_schema&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured output&lt;/td&gt;
&lt;td&gt;&lt;code&gt;response_format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;text.format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;no native field&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web search&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;&lt;code&gt;web_search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;web_search_20250305&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The model has a 1M-token context window, accepts text input, and thinks by default. Sending an excessive &lt;code&gt;max_tokens&lt;/code&gt; value is rejected instead of silently truncated; a request with &lt;code&gt;max_tokens=9999999&lt;/code&gt; returned 400 and identified the ceiling as 393,216.&lt;/p&gt;

&lt;p&gt;One subtle input warning: Responses does not reject image parts. Unsupported image and file inputs are replaced with placeholder text. "No error" does not mean the model saw the image.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Preserve thinking history verbatim
&lt;/h2&gt;

&lt;p&gt;In thinking mode, the previous turn's thinking is part of the conversation state. This matters most in agent loops where the model emits a tool call and the client sends the tool result back.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chat Completions
&lt;/h3&gt;

&lt;p&gt;Preserve &lt;code&gt;reasoning_content&lt;/code&gt; on the historical assistant message:&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;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;What is 1 + 1? Remember the result.&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;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;assistant&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;2&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_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;&amp;lt;reasoning_content from the previous response&amp;gt;&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;Add 1 to the result.&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dropping &lt;code&gt;reasoning_content&lt;/code&gt; returned HTTP 400. Restoring it made the same request continue normally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Responses
&lt;/h3&gt;

&lt;p&gt;Append the prior &lt;code&gt;response.output&lt;/code&gt; without filtering its items:&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="nb"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;previous_input&lt;/span&gt; &lt;span class="o"&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&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;Add 1 to the result.&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A common framework pattern is to retain only items where &lt;code&gt;type == "message"&lt;/code&gt;. That silently removes the &lt;code&gt;reasoning&lt;/code&gt; item and triggers the next-turn 400.&lt;/p&gt;

&lt;h3&gt;
  
  
  Messages
&lt;/h3&gt;

&lt;p&gt;Pass the previous &lt;code&gt;response.content&lt;/code&gt; back as the assistant message:&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;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;What&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s the weather in Paris?&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;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;assistant&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="n"&gt;response&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;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="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;tool_result_block&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep both the &lt;code&gt;thinking&lt;/code&gt; and &lt;code&gt;tool_use&lt;/code&gt; blocks. Removing the thinking block returned an &lt;code&gt;invalid_request_error&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Turning thinking off requires different fields
&lt;/h2&gt;

&lt;p&gt;Thinking is enabled by default. The off switch depends on the protocol:&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="c1"&gt;# Chat Completions
&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;disabled&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;

&lt;span class="c1"&gt;# Responses
&lt;/span&gt;&lt;span class="n"&gt;reasoning&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;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;none&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Messages
&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;disabled&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;The result is observable. Chat and Messages stop returning their thinking fields. Responses reports zero reasoning tokens and omits the &lt;code&gt;reasoning&lt;/code&gt; output item.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;low&lt;/code&gt;, &lt;code&gt;high&lt;/code&gt;, and &lt;code&gt;max&lt;/code&gt; were accepted, but token counts for the same prompts did not vary monotonically and the selected level was not echoed. The only level whose effect was unambiguous from the caller side was Responses &lt;code&gt;none&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Tool schemas are protocol-specific
&lt;/h2&gt;

&lt;p&gt;Chat Completions wraps a function definition inside &lt;code&gt;function&lt;/code&gt;:&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;tools&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;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;function&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;function&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;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;get_weather&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;description&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;Get weather for a city&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;parameters&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;object&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;properties&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;city&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;string&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;required&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;city&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Responses uses a flat definition:&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;tools&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;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;function&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;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;get_weather&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;description&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;Get weather for a city&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;parameters&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;object&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;properties&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;city&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;string&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;required&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;city&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Messages uses &lt;code&gt;input_schema&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;There are two more gotchas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;tool_choice: "required"&lt;/code&gt; returns 400 on Chat and Responses while thinking is enabled. Use a named-function choice, or disable thinking before using &lt;code&gt;required&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Parallel tool calling cannot be disabled. DeepSeek documents the relevant switches as ignored on Responses and Messages. Serialize calls in your client if ordering matters.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tool definitions also consume context in full. A request containing 200 definitions succeeded in testing, but the prompt reached 6,105 tokens. Route only the tools relevant to the current task.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Structured output, caching, and web search
&lt;/h2&gt;

&lt;p&gt;Chat Completions supports JSON mode through &lt;code&gt;response_format&lt;/code&gt;. Responses supports strict JSON Schema through &lt;code&gt;text.format&lt;/code&gt;:&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;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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-v4-pro-0813&lt;/span&gt;&lt;span class="sh"&gt;"&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;Return the number 1 under key a.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;text&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;format&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;json_schema&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;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;extract&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;strict&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;schema&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;object&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;properties&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;a&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;integer&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;required&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;a&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="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Messages has no equivalent structured-output field. Carrying a schema in a forced tool is possible, but use Chat or Responses when hard schema guarantees are central.&lt;/p&gt;

&lt;p&gt;Context caching is automatic. Repeated long prefixes produced cache hits under different usage fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chat: &lt;code&gt;prompt_tokens_details.cached_tokens&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Responses: &lt;code&gt;input_tokens_details.cached_tokens&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Messages: &lt;code&gt;cache_read_input_tokens&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Put stable system instructions, knowledge snippets, and tool definitions at the front of the request.&lt;/p&gt;

&lt;p&gt;Server-side web search worked on Responses and Messages. Chat accepted unknown search-like fields without error, but did not perform retrieval. Route search workloads to Responses or Messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Persist thinking content as normal conversation state.&lt;/li&gt;
&lt;li&gt;Do not filter Responses output down to message items before passback.&lt;/li&gt;
&lt;li&gt;Avoid &lt;code&gt;tool_choice: "required"&lt;/code&gt; while thinking is enabled.&lt;/li&gt;
&lt;li&gt;Keep the three tool-definition schemas separate.&lt;/li&gt;
&lt;li&gt;Do not infer image support from the absence of an error.&lt;/li&gt;
&lt;li&gt;Serialize parallel tool calls on the client when required.&lt;/li&gt;
&lt;li&gt;Branch on HTTP status, not only &lt;code&gt;error.type&lt;/code&gt;, for Responses errors.&lt;/li&gt;
&lt;li&gt;Do not use the echoed &lt;code&gt;model&lt;/code&gt; field as the sole routing or attribution signal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DeepSeek V4 Pro's multi-protocol support is useful, but compatibility is a client-side responsibility. Treat thinking as durable conversation state and isolate protocol adapters around history, tools, usage, and errors.&lt;/p&gt;

&lt;p&gt;For the complete 3-API matrix, additional code samples, logprobs behavior, current-path deviations, and FAQs, read the &lt;a href="https://aihubmix.com/blog/deepseek-v4-pro-0813-thinking-passback-3-api-matrix" rel="noopener noreferrer"&gt;full AIHubMix guide&lt;/a&gt;. Current pricing and status are on the &lt;a href="https://aihubmix.com/model/deepseek-v4-pro-0813" rel="noopener noreferrer"&gt;model page&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>api</category>
      <category>deepseek</category>
    </item>
    <item>
      <title>Nemotron 3.5 Lightning Is Now Free on AIHubMix</title>
      <dc:creator>AIHubMix</dc:creator>
      <pubDate>Tue, 11 Aug 2026 14:15:37 +0000</pubDate>
      <link>https://dev.to/aihubmix/nemotron-35-lightning-is-now-free-on-aihubmix-4ih3</link>
      <guid>https://dev.to/aihubmix/nemotron-35-lightning-is-now-free-on-aihubmix-4ih3</guid>
      <description>&lt;p&gt;NVIDIA Nemotron 3.5 Lightning is now available to use for free on AIHubMix.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aihubmix.com/model/nemotron-3.5-lightning-free" rel="noopener noreferrer"&gt;Try Nemotron 3.5 Lightning on AIHubMix&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Built for the execution layer of AI agents
&lt;/h2&gt;

&lt;p&gt;Long-running agents spend much of their time on frequent operational work: calling tools, validating outputs, writing and reviewing code, formatting results, and delegating tasks to sub-agents. Using a large frontier model for every one of those steps can add unnecessary latency and cost.&lt;/p&gt;

&lt;p&gt;Nemotron 3.5 Lightning is designed for this execution layer. It is an open 30B Mixture-of-Experts model with only 3B active parameters, combining the capacity of a larger model with a much smaller active compute footprint.&lt;/p&gt;

&lt;p&gt;Key capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;30B total parameters with 3B active parameters&lt;/li&gt;
&lt;li&gt;Context windows of up to 1 million tokens&lt;/li&gt;
&lt;li&gt;Tool calling and tool-output validation&lt;/li&gt;
&lt;li&gt;Coding and specialized task execution&lt;/li&gt;
&lt;li&gt;Long-running autonomous-agent workflows&lt;/li&gt;
&lt;li&gt;Fast, high-volume inference&lt;/li&gt;
&lt;li&gt;Local deployment on supported NVIDIA hardware&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lightning for execution, larger models for planning
&lt;/h2&gt;

&lt;p&gt;Nemotron 3.5 Lightning is the smallest member of the Nemotron 3 family. While larger models such as Nemotron 3 Super and Ultra are suited to advanced reasoning, orchestration, and complex planning, Lightning focuses on the high-frequency execution steps that dominate an agent's workload.&lt;/p&gt;

&lt;p&gt;That makes it a practical workhorse for sub-agents, coding assistants, tool-driven workflows, and always-on agent systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start using it for free
&lt;/h2&gt;

&lt;p&gt;The free route is currently available on AIHubMix with zero input and output token pricing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Model ID: nemotron-3.5-lightning-free
Input: $0 / 1M tokens
Output: $0 / 1M tokens
Context: up to 1M tokens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It works through AIHubMix's OpenAI-compatible API:&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;AIHUBMIX_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://aihubmix.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;nemotron-3.5-lightning-free&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;Help me validate this tool output.&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;&lt;a href="https://aihubmix.com/model/nemotron-3.5-lightning-free" rel="noopener noreferrer"&gt;Explore Nemotron 3.5 Lightning and start building on AIHubMix&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>agents</category>
      <category>api</category>
    </item>
    <item>
      <title>Seedance 2.5 vs MiniMax H3 vs Wan 3.0: An API-First Comparison</title>
      <dc:creator>AIHubMix</dc:creator>
      <pubDate>Sat, 08 Aug 2026 14:49:37 +0000</pubDate>
      <link>https://dev.to/aihubmix/seedance-25-vs-minimax-h3-vs-wan-30-an-api-first-comparison-40</link>
      <guid>https://dev.to/aihubmix/seedance-25-vs-minimax-h3-vs-wan-30-an-api-first-comparison-40</guid>
      <description>&lt;p&gt;Choosing an AI video model from demo clips is a poor engineering decision. A production team needs to know which inputs the model accepts, how long it can maintain continuity, how billing works, and how many attempts are required before an output becomes usable.&lt;/p&gt;

&lt;p&gt;Seedance 2.5, MiniMax H3, and Wan 3.0 are now all available on AIHubMix. That makes it possible to evaluate the three models behind one API key and a common asynchronous task workflow.&lt;/p&gt;

&lt;p&gt;This article compares confirmed product capabilities and proposes a repeatable test plan. It does not claim a universal visual-quality winner because no common public blind benchmark covers all three models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Wan 3.0&lt;/th&gt;
&lt;th&gt;MiniMax H3&lt;/th&gt;
&lt;th&gt;Seedance 2.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Provider&lt;/td&gt;
&lt;td&gt;Alibaba Tongyi Lab&lt;/td&gt;
&lt;td&gt;MiniMax&lt;/td&gt;
&lt;td&gt;ByteDance Seed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AIHubMix model ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wan3.0-video&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;minimax-h3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;doubao-seedance-2-5-260628&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maximum single generation&lt;/td&gt;
&lt;td&gt;30 seconds&lt;/td&gt;
&lt;td&gt;15 seconds&lt;/td&gt;
&lt;td&gt;30 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confirmed resolution&lt;/td&gt;
&lt;td&gt;480p, 720p, 1080p on AIHubMix&lt;/td&gt;
&lt;td&gt;Up to 2K&lt;/td&gt;
&lt;td&gt;Not specified in the official launch post&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audio&lt;/td&gt;
&lt;td&gt;Audio references and sound-aware video workflow&lt;/td&gt;
&lt;td&gt;Native stereo generation&lt;/td&gt;
&lt;td&gt;Joint audio-video generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;References&lt;/td&gt;
&lt;td&gt;Text, image, audio, video, documents, and webpages&lt;/td&gt;
&lt;td&gt;Text, image, video, and audio&lt;/td&gt;
&lt;td&gt;Up to 30 images, 10 videos, and 10 audio clips&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Editing focus&lt;/td&gt;
&lt;td&gt;Unified reference, editing, replication, and motion driving&lt;/td&gt;
&lt;td&gt;Multimodal editing and V2V motion transfer&lt;/td&gt;
&lt;td&gt;Timestamp, green-screen, perspective, and reference editing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best initial fit&lt;/td&gt;
&lt;td&gt;Flexible production and ecommerce&lt;/td&gt;
&lt;td&gt;Short 2K commercial clips with sound&lt;/td&gt;
&lt;td&gt;Multi-shot narrative and targeted edits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One specification deserves caution: third-party pages frequently describe Seedance 2.5 as a 4K model, but ByteDance Seed's July 31 launch post does not state an output resolution. Treat resolution as platform-specific until the active API documentation confirms it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model 1: Wan 3.0
&lt;/h2&gt;

&lt;p&gt;Wan 3.0 is the flexible production option. It supports a single generation of up to 30 seconds, and AIHubMix exposes 480p, 720p, and 1080p output tiers.&lt;/p&gt;

&lt;p&gt;The broader Wan 3.0 workflow supports text, image, audio, and video references as well as structured sources such as documents, spreadsheets, presentations, PDFs, and webpages. This is useful when a generation needs to stay grounded in product documentation or an existing brand page.&lt;/p&gt;

&lt;p&gt;Start with Wan 3.0 for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ecommerce and product videos;&lt;/li&gt;
&lt;li&gt;character animation centered on one stable subject;&lt;/li&gt;
&lt;li&gt;continuous 10-to-30-second shots;&lt;/li&gt;
&lt;li&gt;workflows that iterate at 480p before rendering at 1080p.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The primary failure mode to test is long-horizon continuity. A 30-second prompt should describe a temporal sequence, camera path, and explicit continuity constraints.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model 2: MiniMax H3
&lt;/h2&gt;

&lt;p&gt;MiniMax H3 generates up to 15 seconds of native 2K video with stereo audio. MiniMax highlights instruction following, accurate text and brand rendering, reference-based editing, and video-to-video motion transfer.&lt;/p&gt;

&lt;p&gt;Start with H3 for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;product ads containing logos or small text;&lt;/li&gt;
&lt;li&gt;sound-led short-form video;&lt;/li&gt;
&lt;li&gt;2K product or interface shots;&lt;/li&gt;
&lt;li&gt;transferring motion or camera language from a source video.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Its engineering tradeoff is duration. For longer narratives, treat each H3 generation as a shot and assemble the sequence in an external editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model 3: Seedance 2.5
&lt;/h2&gt;

&lt;p&gt;Seedance 2.5 generates up to 30 seconds of synchronized audio and video and supports multi-round extension. Its official launch material focuses on story structure, transitions, multimodal references, and post-generation control.&lt;/p&gt;

&lt;p&gt;A single request can use up to 30 images, 10 video clips, and 10 audio clips. The model also supports timestamp-level instructions and targeted edits to characters, actions, camera perspective, and green-screen backgrounds.&lt;/p&gt;

&lt;p&gt;Start with Seedance 2.5 for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multi-shot 30-second narratives;&lt;/li&gt;
&lt;li&gt;projects with multiple characters and locations;&lt;/li&gt;
&lt;li&gt;audiovisual work with several references;&lt;/li&gt;
&lt;li&gt;workflows where a local edit is cheaper than regenerating the entire clip.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reference count is not the same as control. Every asset should have one defined purpose, such as character identity, location, camera movement, or voice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calling the models through AIHubMix
&lt;/h2&gt;

&lt;p&gt;The three current model IDs are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wan3.0-video
minimax-h3
doubao-seedance-2-5-260628
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AIHubMix documents an asynchronous video workflow. Enable &lt;strong&gt;Async Tasks&lt;/strong&gt; for the account before submitting jobs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://aihubmix.com/ai/v1/videos &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;$AIHUBMIX_API_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": "wan3.0-video",
    "prompt": "A controlled product shot with one slow camera orbit",
    "resolution": "720p"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the returned task ID, poll the task endpoint, and download the completed artifact.&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://aihubmix.com/ai/v1/tasks/&lt;span class="o"&gt;{&lt;/span&gt;task_id&lt;span class="o"&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;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$AIHUBMIX_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

curl https://aihubmix.com/ai/v1/tasks/&lt;span class="o"&gt;{&lt;/span&gt;task_id&lt;span class="o"&gt;}&lt;/span&gt;/content &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;$AIHUBMIX_API_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;--output&lt;/span&gt; result.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Model-specific parameters may differ. Switching the &lt;code&gt;model&lt;/code&gt; value is useful for an initial harness, but validate supported duration, resolution, and reference fields on each live model page before treating the request schema as identical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current AIHubMix billing
&lt;/h2&gt;

&lt;p&gt;Prices checked on August 8, 2026:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model tier&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Ten-second reference cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Wan 3.0 480p&lt;/td&gt;
&lt;td&gt;$0.0338/second&lt;/td&gt;
&lt;td&gt;$0.3380&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wan 3.0 720p&lt;/td&gt;
&lt;td&gt;$0.06768/second&lt;/td&gt;
&lt;td&gt;$0.6768&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wan 3.0 1080p&lt;/td&gt;
&lt;td&gt;$0.1352/second&lt;/td&gt;
&lt;td&gt;$1.3520&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MiniMax H3 768p&lt;/td&gt;
&lt;td&gt;$0.07744/second&lt;/td&gt;
&lt;td&gt;$0.7744&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MiniMax H3 2K&lt;/td&gt;
&lt;td&gt;$0.12397/second&lt;/td&gt;
&lt;td&gt;$1.2397&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.5 without video input&lt;/td&gt;
&lt;td&gt;$10.85/million tokens&lt;/td&gt;
&lt;td&gt;Usage-dependent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.5 with video input&lt;/td&gt;
&lt;td&gt;$6.51/million tokens&lt;/td&gt;
&lt;td&gt;Usage-dependent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The two Seedance rates are alternative billing paths, not additive charges. The displayed video-input rate being lower is counterintuitive, and the launch-day model page contains some ambiguity between its input-modality labels and video-reference pricing. Confirm the actual metered usage with a small job before estimating production volume.&lt;/p&gt;

&lt;p&gt;Do not compare Seedance's per-token number directly with the per-second prices. Normalize after collecting actual task usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  A repeatable evaluation harness
&lt;/h2&gt;

&lt;p&gt;Use the same three briefs for every model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test A: character continuity
&lt;/h3&gt;

&lt;p&gt;Provide one character reference. Require a turn, a hand interaction, and a camera move. Score face identity, wardrobe, hands, motion, and voice over time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test B: product fidelity
&lt;/h3&gt;

&lt;p&gt;Provide one product reference. Require a close-up and an orbit. Score silhouette, logo, small text, materials, reflections, and unwanted redesign.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test C: temporal instruction following
&lt;/h3&gt;

&lt;p&gt;Define three actions and two camera transitions with explicit timing. Score event order, transition quality, subject continuity, and audiovisual sync.&lt;/p&gt;

&lt;p&gt;Persist these fields for every task:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"minimax-h3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"brief_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"product-orbit-v1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"attempt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration_seconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"resolution"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2k"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"latency_seconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"billed_cost_usd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usable"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"repair_minutes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"failure_labels"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key metric is not price per generation. 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 usable result = total generation cost / number of accepted outputs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Track manual repair time separately. A cheap model that needs repeated generations and post-production can be more expensive than a model with a higher listed rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decision rules
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Pick &lt;strong&gt;Wan 3.0&lt;/strong&gt; when duration, resolution-based cost control, and broad source grounding are the main requirements.&lt;/li&gt;
&lt;li&gt;Pick &lt;strong&gt;MiniMax H3&lt;/strong&gt; when the deliverable is a short 2K commercial shot with native sound, text, or brand details.&lt;/li&gt;
&lt;li&gt;Pick &lt;strong&gt;Seedance 2.5&lt;/strong&gt; when narrative structure, many references, continuation, and targeted editing matter more than a simple request schema.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since all three models are now on AIHubMix, the safest selection process is an API-level A/B test using the same brief, acceptance criteria, and cost accounting.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aihubmix.com/model/wan3.0-video" rel="noopener noreferrer"&gt;Wan 3.0 on AIHubMix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.minimax.io/blog/minimax-h3" rel="noopener noreferrer"&gt;MiniMax H3 official launch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aihubmix.com/model/minimax-h3" rel="noopener noreferrer"&gt;MiniMax H3 on AIHubMix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://seed.bytedance.com/en/blog/one-take-creation-flexible-referencing-introducing-seedance-2-5" rel="noopener noreferrer"&gt;Seedance 2.5 official launch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aihubmix.com/model/doubao-seedance-2-5-260628" rel="noopener noreferrer"&gt;Seedance 2.5 on AIHubMix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Capabilities and prices were checked on August 8, 2026. Verify live documentation before production use.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>machinelearning</category>
      <category>testing</category>
    </item>
    <item>
      <title>Wan AI 3.0 API Tutorial: Use Alibaba Wan 3.0 on AIHubMix</title>
      <dc:creator>AIHubMix</dc:creator>
      <pubDate>Thu, 06 Aug 2026 14:17:00 +0000</pubDate>
      <link>https://dev.to/aihubmix/wan-ai-30-api-tutorial-use-alibaba-wan-30-on-aihubmix-1nbk</link>
      <guid>https://dev.to/aihubmix/wan-ai-30-api-tutorial-use-alibaba-wan-30-on-aihubmix-1nbk</guid>
      <description>&lt;p&gt;Alibaba's Wan AI has moved from teasers to a public beta. Wan 3.0 can generate videos up to 30 seconds in a single run, render more expressive characters, and use references from multiple input types. Better still, developers can already call the model through AIHubMix instead of waiting for a separate Wan API rollout.&lt;/p&gt;

&lt;p&gt;This tutorial shows how to generate a Wan 3.0 video with the AIHubMix API, poll the asynchronous job, download the result, estimate the cost, and write prompts that take advantage of the model's longer shot length.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Launch status:&lt;/strong&gt; Alibaba announced the Wan 3.0 public beta on August 6, 2026. AIHubMix lists the model as &lt;code&gt;wan3.0-video&lt;/code&gt;. Features and prices in this guide reflect the launch-day API and may change during the beta.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What Is Wan AI 3.0?
&lt;/h2&gt;

&lt;p&gt;Wan AI is Alibaba's video generation model family. The Wan 3.0 public beta focuses on three improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Native 30-second generation:&lt;/strong&gt; one request can produce a video up to 30 seconds long.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reality-grade rendering:&lt;/strong&gt; Alibaba highlights more expressive characters, stronger reference consistency, and better rendering of digital content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Omni-Reference:&lt;/strong&gt; Wan 3.0 can reason over text, images, audio, video, and structured sources such as documents, spreadsheets, slides, PDFs, and webpages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alibaba describes these features in the &lt;a href="https://x.com/Alibaba_Wan/status/2085339761284104529" rel="noopener noreferrer"&gt;official Wan 3.0 launch thread&lt;/a&gt;. The &lt;a href="https://x.com/AiHubMix/status/2085358414407094487" rel="noopener noreferrer"&gt;AIHubMix launch announcement&lt;/a&gt; confirms that Wan 3.0 is live on its platform with text, image, audio, and video inputs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wan 3.0 on AIHubMix at a glance
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&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;Model ID&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wan3.0-video&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Endpoint&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://aihubmix.com/ai/v1/videos&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maximum duration&lt;/td&gt;
&lt;td&gt;Up to 30 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resolutions&lt;/td&gt;
&lt;td&gt;480p, 720p, 1080p&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inputs listed by AIHubMix&lt;/td&gt;
&lt;td&gt;Text, image, audio, video&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;Video&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Job type&lt;/td&gt;
&lt;td&gt;Asynchronous&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The wider Wan 3.0 beta also advertises document and webpage references. At launch, however, the AIHubMix model page explicitly lists text, vision, audio, and video modalities. Check the current documentation before sending document-native inputs through the gateway.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Use Alibaba Wan Through AIHubMix?
&lt;/h2&gt;

&lt;p&gt;AIHubMix provides a single API key and a consistent developer workflow across many AI models. For Wan 3.0, the practical advantages are immediate access, an asynchronous task endpoint, and launch pricing below Alibaba's published public-beta rates.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://aihubmix.com/model/wan3.0-video" rel="noopener noreferrer"&gt;AIHubMix Wan 3.0 model page&lt;/a&gt; currently lists:&lt;/p&gt;

&lt;p&gt;IHubMix price &lt;br&gt;
480p:price per second $ 0.04225; &lt;br&gt;
720p: price per second $0.0846; &lt;br&gt;
1080p: price per second $0.169.&lt;/p&gt;

&lt;p&gt;Alibaba's launch thread lists $0.05, $0.10, and $0.20 per second for the same resolutions. That makes the launch-day AIHubMix rates about 15.5% lower. Always verify the live model page before estimating production costs.&lt;/p&gt;
&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;You need:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An AIHubMix account and API key.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Async Tasks&lt;/strong&gt; feature enabled for your account in the AIHubMix console.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;curl&lt;/code&gt; for the REST example, or Python 3.9+ for the SDK example.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Store the key in an environment variable instead of placing it in source code:&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;AIHUBMIX_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your_api_key_here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not commit &lt;code&gt;.env&lt;/code&gt; files or API keys to Git.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generate a Wan 3.0 Video With cURL
&lt;/h2&gt;

&lt;p&gt;Wan 3.0 generation is asynchronous. The workflow has three steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Submit a video job.&lt;/li&gt;
&lt;li&gt;Poll the returned task ID until the job completes.&lt;/li&gt;
&lt;li&gt;Download the generated MP4.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 1: Submit the video job
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://aihubmix.com/ai/v1/videos &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;$AIHUBMIX_API_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": "wan3.0-video",
    "prompt": "A continuous cinematic tracking shot follows a cyclist through a rain-soaked Tokyo side street at night. Neon signs reflect in the pavement. The camera begins wide, moves alongside the cyclist, then slowly pushes in as steam rises from a food stall. Natural motion, realistic skin and fabric, physically accurate reflections, no cuts.",
    "seconds": "10",
    "size": "720p"
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response contains a task identifier. Save it as &lt;code&gt;task_id&lt;/code&gt; for the next request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Poll the task status
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://aihubmix.com/ai/v1/tasks/&lt;span class="o"&gt;{&lt;/span&gt;task_id&lt;span class="o"&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;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$AIHUBMIX_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Poll at a reasonable interval, such as every 10 to 15 seconds. Stop when the status becomes &lt;code&gt;completed&lt;/code&gt;, &lt;code&gt;failed&lt;/code&gt;, or &lt;code&gt;canceled&lt;/code&gt;. Aggressive polling does not make generation faster and may trigger rate limits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Download the video
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://aihubmix.com/ai/v1/tasks/&lt;span class="o"&gt;{&lt;/span&gt;task_id&lt;span class="o"&gt;}&lt;/span&gt;/content &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;$AIHUBMIX_API_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;--output&lt;/span&gt; wan3-result.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;wan3-result.mp4&lt;/code&gt; locally and review subject consistency, camera motion, unwanted cuts, and visual artifacts before using it in a production workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Wan 3.0 With Python
&lt;/h2&gt;

&lt;p&gt;AIHubMix also documents an OpenAI-compatible Python workflow. Install or update the SDK:&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; &lt;span class="nt"&gt;-U&lt;/span&gt; openai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create &lt;code&gt;generate_wan_video.py&lt;/code&gt;:&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;import&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&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;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="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AIHUBMIX_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Set AIHUBMIX_API_KEY before running this script.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&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;API_KEY&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://aihubmix.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;prompt&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;A single uninterrupted product shot of a silver smartwatch on black &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;volcanic stone. Soft morning light moves across the brushed metal. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The camera makes a slow 180-degree orbit while condensation gathers &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on the surface. Premium commercial realism, restrained reflections, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;stable logo placement, no text overlays, no cuts.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;video&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;videos&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;wan3.0-video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;seconds&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;10&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;720p&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Created task: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&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;queued&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;in_progress&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;progress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;progress&lt;/span&gt;&lt;span class="sh"&gt;"&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="ow"&gt;or&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;; progress: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;progress&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;video&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;videos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;retrieve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&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;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;completed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;error&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&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;Unknown error&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Generation ended with status &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;content&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;videos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;download_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&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;span class="nf"&gt;write_to_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wan3-result.mp4&lt;/span&gt;&lt;span class="sh"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Saved wan3-result.mp4&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;Run it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python generate_wan_video.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a production service, move polling into a background worker, add exponential backoff, persist the task ID, and make downloads resumable. A web request should not remain open while a 30-second AI video is rendering.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Write Better Wan AI Prompts
&lt;/h2&gt;

&lt;p&gt;A good Wan 3.0 prompt reads like a compact shot brief, not a list of style adjectives. Use this order:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Subject + action + setting + lighting + camera movement + shot progression + continuity constraints
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1. Describe movement over time
&lt;/h3&gt;

&lt;p&gt;A 30-second clip needs progression. Explain how the action and camera evolve from the opening to the final frame.&lt;/p&gt;

&lt;p&gt;Weak:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A cinematic woman in a futuristic city.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A courier walks through a crowded futuristic market at dawn. Begin with a wide establishing shot, track backward at walking speed as she approaches, then arc to her left when she stops at a glowing map kiosk. Steam crosses the foreground while the crowd continues moving naturally. One continuous take, no cuts.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Name a specific camera move
&lt;/h3&gt;

&lt;p&gt;Replace vague words such as "cinematic" with a physical direction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;slow push-in&lt;/li&gt;
&lt;li&gt;lateral tracking shot&lt;/li&gt;
&lt;li&gt;handheld follow shot&lt;/li&gt;
&lt;li&gt;crane down to eye level&lt;/li&gt;
&lt;li&gt;180-degree product orbit&lt;/li&gt;
&lt;li&gt;locked-off wide shot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use one main move and one transition. Too many camera instructions often create unstable motion.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Protect identity and product details
&lt;/h3&gt;

&lt;p&gt;When using a reference image or video, explain its role:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use the first reference for the character's face, hair, and clothing. Use the second reference for the cafe interior and color palette. Preserve the same character identity, jacket details, and table layout throughout the shot.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not assume the model knows which reference controls the person, location, or product.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Use constraints sparingly
&lt;/h3&gt;

&lt;p&gt;Add only constraints that can be checked in the final video:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;One continuous take, no scene cuts, stable facial identity, natural hand motion, no text overlays.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Long negative-prompt lists can compete with the main direction. Start with four or five important constraints, generate a short test, and refine from the visible failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Wan 3.0 Prompt Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Cinematic character scene
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A tired detective enters a quiet all-night diner during heavy rain. The camera starts outside the window, slowly pushes through the doorway behind him, and follows as he removes his wet coat and sits at the counter. Fluorescent light mixes with red neon from the street. Keep his face, charcoal coat, and age consistent throughout. Subtle natural expression, realistic wet fabric, one continuous take, no cuts.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Ecommerce product video
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A white running shoe rests on a wet track before sunrise. Begin with an extreme close-up of water droplets on the mesh, pull back into a low three-quarter view, then make a smooth half-orbit as warm sunlight reaches the sole. Preserve the shoe silhouette, material, color, and logo placement. Premium commercial lighting, physically accurate reflections, no extra text, no cuts.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Social media food clip
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A chef plates handmade ramen in a compact open kitchen. Start overhead as noodles enter the bowl, descend to counter height when broth is poured, then track sideways as the chef adds egg and scallions. Warm practical lighting, visible steam, natural hand movement, appetizing realistic texture. One continuous 10-second take, no text overlay.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  A Cost-Smart Testing Workflow
&lt;/h2&gt;

&lt;p&gt;Do not begin prompt development with a 30-second 1080p render. Use a staged workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Test composition and motion at 480p for 5 seconds.&lt;/li&gt;
&lt;li&gt;Fix identity, hand, camera, and continuity problems.&lt;/li&gt;
&lt;li&gt;Validate the final prompt at 720p for 10 seconds.&lt;/li&gt;
&lt;li&gt;Render the 30-second 1080p version only after the shot is stable.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At current AIHubMix pricing, a 5-second 480p test costs about $0.21, while a 30-second 1080p render costs $5.07. Iterating at the lowest useful setting can reduce prompt-development cost substantially.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common API Problems
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The request returns an authorization error
&lt;/h3&gt;

&lt;p&gt;Confirm that &lt;code&gt;AIHUBMIX_API_KEY&lt;/code&gt; is set in the same shell that runs the command. Also check that the header uses &lt;code&gt;Bearer&lt;/code&gt; followed by a space and the key.&lt;/p&gt;

&lt;h3&gt;
  
  
  The asynchronous endpoint is unavailable
&lt;/h3&gt;

&lt;p&gt;Enable &lt;strong&gt;Async Tasks&lt;/strong&gt; for the account in the AIHubMix console. The video endpoint depends on that account-level feature.&lt;/p&gt;

&lt;h3&gt;
  
  
  The task stays queued
&lt;/h3&gt;

&lt;p&gt;Longer and higher-resolution videos need more processing time, especially during a public-beta launch. Keep the task ID, poll less frequently, and retry status requests rather than submitting duplicate paid jobs.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Python client has no &lt;code&gt;videos&lt;/code&gt; attribute
&lt;/h3&gt;

&lt;p&gt;Update the &lt;code&gt;openai&lt;/code&gt; package. Video methods require a recent SDK version:&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; &lt;span class="nt"&gt;-U&lt;/span&gt; openai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your environment must stay on an older SDK, use the REST workflow shown earlier.&lt;/p&gt;

&lt;h3&gt;
  
  
  A long video loses consistency
&lt;/h3&gt;

&lt;p&gt;Reduce competing actions, specify one camera path, state which reference controls each element, and test a shorter version first. A 30-second generation magnifies ambiguity in the prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wan 3.0 FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Wan 3.0 available now?
&lt;/h3&gt;

&lt;p&gt;Yes. Alibaba announced Wan 3.0 as a public beta on August 6, 2026, and AIHubMix made &lt;code&gt;wan3.0-video&lt;/code&gt; available the same day.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Wan 3.0 an Alibaba model?
&lt;/h3&gt;

&lt;p&gt;Yes. Wan AI is developed by Alibaba's Tongyi Lab. Search terms such as &lt;strong&gt;Wan Alibaba&lt;/strong&gt;, &lt;strong&gt;Alibaba Wan&lt;/strong&gt;, and &lt;strong&gt;Wan AI&lt;/strong&gt; refer to the same model family.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Wan 3.0 generate a 30-second video?
&lt;/h3&gt;

&lt;p&gt;Yes. The public beta supports native video generation up to 30 seconds in a single run.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does AIHubMix support image-to-video with Wan 3.0?
&lt;/h3&gt;

&lt;p&gt;The AIHubMix model page lists vision, audio, and video alongside text as supported input modalities. The launch-day quick start demonstrates text-to-video. Check the latest API documentation for the current upload and reference schema before building a multimodal production pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much does the Wan 3.0 API cost?
&lt;/h3&gt;

&lt;p&gt;At publication time, AIHubMix lists $0.04225 per second for 480p, $0.0846 for 720p, and $0.169 for 1080p. A 30-second clip therefore costs approximately $1.27, $2.54, or $5.07, depending on resolution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start Building With Wan 3.0
&lt;/h2&gt;

&lt;p&gt;Wan 3.0 changes the useful unit of AI video generation from a short visual beat to a complete 30-second shot. The best way to evaluate it is to start with a tightly directed 5-second test, refine the motion and continuity, and scale only the prompts that hold together.&lt;/p&gt;

&lt;p&gt;Use the &lt;a href="https://aihubmix.com/model/wan3.0-video" rel="noopener noreferrer"&gt;&lt;code&gt;wan3.0-video&lt;/code&gt; model page on AIHubMix&lt;/a&gt; to verify current pricing and API availability, then submit your first asynchronous generation with the examples above.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://x.com/Alibaba_Wan/status/2085339761284104529" rel="noopener noreferrer"&gt;Alibaba Wan 3.0 public-beta announcement&lt;/a&gt;, &lt;a href="https://x.com/AiHubMix/status/2085358414407094487" rel="noopener noreferrer"&gt;AIHubMix Wan 3.0 announcement&lt;/a&gt;, and &lt;a href="https://aihubmix.com/model/wan3.0-video" rel="noopener noreferrer"&gt;AIHubMix Wan 3.0 model details&lt;/a&gt;.&lt;/em&gt;&lt;br&gt;
``&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>api</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>DeepSeek V4 Flash Was Degraded Today. Here’s Why Multi-Provider Failover Matters</title>
      <dc:creator>AIHubMix</dc:creator>
      <pubDate>Tue, 04 Aug 2026 11:36:05 +0000</pubDate>
      <link>https://dev.to/aihubmix/deepseek-v4-flash-was-degraded-today-heres-why-multi-provider-failover-matters-190l</link>
      <guid>https://dev.to/aihubmix/deepseek-v4-flash-was-degraded-today-heres-why-multi-provider-failover-matters-190l</guid>
      <description>&lt;p&gt;On August 4, 2026, DeepSeek’s official status page recorded two API degraded-performance incidents.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://status.deepseek.com/incidents/6798182760287" rel="noopener noreferrer"&gt;first incident&lt;/a&gt; lasted 1 hour and 18 minutes, from 02:02 to 03:20 UTC, and affected DeepSeek V4 Flash, V4 Pro, and Expert Mode. The &lt;a href="https://status.deepseek.com/incidents/6798495647287" rel="noopener noreferrer"&gt;second incident&lt;/a&gt; lasted 36 minutes, from 03:43 to 04:20 UTC, and affected the DeepSeek V4 Flash API.&lt;/p&gt;

&lt;p&gt;Both incidents have since been resolved. OpenCode also reported that DeepSeek Flash was experiencing capacity issues due to unprecedented demand. However, DeepSeek’s official status page only confirmed degraded performance and did not publish a root cause.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;DeepSeek’s official status page recorded two degraded-performance incidents affecting V4 Flash on August 4, 2026.&lt;/li&gt;
&lt;li&gt;A direct provider integration creates a single point of failure, even when the same model is available elsewhere.&lt;/li&gt;
&lt;li&gt;AIHubMix can retry the same model across multiple provider channels when an upstream route returns a retryable error.&lt;/li&gt;
&lt;li&gt;If all provider channels for the primary model fail, Key-level model fallback can switch the request to configured backup models.&lt;/li&gt;
&lt;li&gt;Multi-provider routing reduces reliance on one endpoint, but it cannot eliminate correlated failures or gateway-level risk.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Incidents like this highlight an important infrastructure principle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A reliable model is not enough if it is accessed through a single provider endpoint.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  One Model Does Not Have to Mean One Provider
&lt;/h2&gt;

&lt;p&gt;When an application connects directly to one provider, that endpoint becomes a single point of failure.&lt;/p&gt;

&lt;p&gt;If the provider experiences an outage, reaches its rate limit, or suffers a latency spike, the application has nowhere else to send the request. Users see timeouts and errors even when the same model remains available through other infrastructure providers.&lt;/p&gt;

&lt;p&gt;AIHubMix separates the model from the provider serving it.&lt;/p&gt;

&lt;p&gt;For example, DeepSeek V4 Flash is available through multiple providers on AIHubMix, including DeepSeek, Baidu, DeepInfra, and Alibaba Cloud. Applications continue using one OpenAI-compatible API endpoint while AIHubMix manages the available upstream routes.&lt;/p&gt;

&lt;p&gt;This creates two distinct reliability layers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 1: Provider Failover
&lt;/h2&gt;

&lt;p&gt;Provider failover keeps the requested model unchanged while switching the infrastructure provider behind it.&lt;/p&gt;

&lt;p&gt;When a request for DeepSeek V4 Flash reaches AIHubMix, the gateway selects an eligible provider channel. If that channel returns a retryable error before the response begins, AIHubMix can try another available channel for the same model.&lt;/p&gt;

&lt;p&gt;The request path may look like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Try DeepSeek V4 Flash through Provider A.&lt;/li&gt;
&lt;li&gt;Provider A returns a timeout, 5xx error, or retryable capacity error.&lt;/li&gt;
&lt;li&gt;Try the same DeepSeek V4 Flash model through Provider B.&lt;/li&gt;
&lt;li&gt;Continue until the request succeeds or all eligible channels are exhausted.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The client does not need to integrate multiple provider SDKs, manage separate API keys, or implement its own retry logic.&lt;/p&gt;

&lt;p&gt;This is provider-level failover: the provider changes, but the requested model stays the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 2: Model Fallback
&lt;/h2&gt;

&lt;p&gt;A provider failover cannot help if every available provider for the primary model is unavailable.&lt;/p&gt;

&lt;p&gt;AIHubMix therefore supports a second reliability layer: model fallback.&lt;/p&gt;

&lt;p&gt;Users can configure an ordered list of backup models for each API key. After every eligible channel for the primary model has returned a retryable failure, AIHubMix moves to the next model in the fallback list.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Primary: &lt;code&gt;deepseek-v4-flash&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;First fallback: &lt;code&gt;gpt-5.4&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Second fallback: &lt;code&gt;gemini-3.1-pro-preview&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fallback is performed inside the AIHubMix gateway. Existing applications do not need to send additional routing parameters or change their client code.&lt;/p&gt;

&lt;p&gt;Billing is based on the model that ultimately returns the successful response. Developers can verify fallback behavior through the response headers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;X-Aihubmix-Fallback: true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;X-Aihubmix-Model: &amp;lt;final-model&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The complete configuration and trigger rules are documented in &lt;a href="https://docs.aihubmix.com/en/api/Model-Mapping-Fallback" rel="noopener noreferrer"&gt;AIHubMix Model Mapping and Fallback&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Automatic Failover Can Handle
&lt;/h2&gt;

&lt;p&gt;Provider failover is designed to recover from upstream infrastructure problems such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provider timeouts&lt;/li&gt;
&lt;li&gt;Connection failures&lt;/li&gt;
&lt;li&gt;Retryable 5xx responses&lt;/li&gt;
&lt;li&gt;Provider rate limits and capacity errors&lt;/li&gt;
&lt;li&gt;Temporary unavailability of an upstream channel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When these failures occur before the response starts, AIHubMix can transparently try another route.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Failover Cannot Solve
&lt;/h2&gt;

&lt;p&gt;Multi-provider routing improves availability, but it does not make a gateway infallible.&lt;/p&gt;

&lt;p&gt;Fallback is not triggered when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The user’s AIHubMix API key is invalid, expired, or out of quota&lt;/li&gt;
&lt;li&gt;The request itself is invalid&lt;/li&gt;
&lt;li&gt;The client disconnects or reaches its own timeout&lt;/li&gt;
&lt;li&gt;A streaming response has already started&lt;/li&gt;
&lt;li&gt;A specific provider channel was explicitly selected&lt;/li&gt;
&lt;li&gt;The failure affects every provider or the gateway itself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Provider failures may also be correlated. Multiple providers can depend on the same underlying infrastructure, model release, or regional network. For this reason, multi-provider availability should be measured with real traffic rather than assumed from the number of providers alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why an Aggregator Can Be More Reliable Than a Direct Endpoint
&lt;/h2&gt;

&lt;p&gt;Calling an official API directly gives an application one route to the model.&lt;/p&gt;

&lt;p&gt;A multi-provider gateway gives it several.&lt;/p&gt;

&lt;p&gt;If those provider routes fail independently, the gateway can route around a degraded endpoint without exposing the failure to the application. This reduces reliance on any single provider and can deliver higher availability than a direct single-provider integration.&lt;/p&gt;

&lt;p&gt;The difference is architectural:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Direct API: one model, one provider, one failure domain&lt;/li&gt;
&lt;li&gt;AIHubMix: one model, multiple providers, automatic failover&lt;/li&gt;
&lt;li&gt;AIHubMix with model fallback: multiple providers plus backup models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to predict which provider will fail next. It is to make an upstream incident an internal routing event instead of a customer-facing outage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build for the Next Provider Incident
&lt;/h2&gt;

&lt;p&gt;DeepSeek V4 Flash has recovered, but temporary capacity constraints, rate limits, and upstream outages are normal parts of production AI infrastructure.&lt;/p&gt;

&lt;p&gt;Applications should not have to change code every time a provider becomes unstable.&lt;/p&gt;

&lt;p&gt;With AIHubMix, developers can access multiple providers through one API, automatically retry the same model across available channels, and configure backup models for an additional layer of protection.&lt;/p&gt;

&lt;p&gt;Explore available models and providers at &lt;a href="https://aihubmix.com/models" rel="noopener noreferrer"&gt;aihubmix.com/models&lt;/a&gt;.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  What is multi-provider failover?
&lt;/h3&gt;

&lt;p&gt;It automatically retries the same model through another eligible provider when the current route returns a retryable failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  How is model fallback different?
&lt;/h3&gt;

&lt;p&gt;Provider failover keeps the model unchanged. Model fallback switches to a configured backup model only after all eligible channels for the primary model fail.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which failures can trigger failover?
&lt;/h3&gt;

&lt;p&gt;Typical triggers include timeouts, connection failures, retryable 5xx responses, rate limits, and temporary capacity errors before a response begins.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does failover guarantee zero downtime?
&lt;/h3&gt;

&lt;p&gt;No. Correlated provider failures, gateway-level incidents, non-retryable errors, and failures after streaming begins can still reach the client.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need to change my application code?
&lt;/h3&gt;

&lt;p&gt;No additional routing logic is required. Applications keep using the AIHubMix OpenAI-compatible endpoint, while backup models can be configured at the API-key level.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>api</category>
      <category>automation</category>
    </item>
    <item>
      <title>Using Chinese AI Model APIs Outside China: Payment Options and Token Costs</title>
      <dc:creator>AIHubMix</dc:creator>
      <pubDate>Mon, 03 Aug 2026 13:10:34 +0000</pubDate>
      <link>https://dev.to/aihubmix/using-chinese-ai-model-apis-outside-china-payment-options-and-token-costs-5ajm</link>
      <guid>https://dev.to/aihubmix/using-chinese-ai-model-apis-outside-china-payment-options-and-token-costs-5ajm</guid>
      <description>&lt;p&gt;This is a price snapshot, not a model benchmark. I compared four Chinese model endpoints available through the same API catalog so that the billing units and date are consistent. The result is less about finding one winner than identifying three distinct workload tiers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flagship capability and very long context:&lt;/strong&gt; Kimi K3.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A middle tier for capability, context, and price:&lt;/strong&gt; GLM-5.2 during the catalog’s discount window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low-cost generation and high-volume processing:&lt;/strong&gt; DeepSeek V4-Pro and DeepSeek V4-Flash-0731.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All prices below are the USD rates displayed by &lt;strong&gt;AIHubMix on August 3, 2026&lt;/strong&gt;, per one million input or output tokens. These are aggregator rates rather than the model vendors’ direct list prices. Routing, upstream providers, and promotions may change them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Scope note: AIHubMix is the data source because this article compares what one customer would pay through one catalog. This is not an endorsement of the platform, and the article does not claim that token price predicts model quality. Recheck live prices before making a production budget.&lt;/p&gt;
&lt;/blockquote&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;AIHubMix input / output&lt;/th&gt;
&lt;th&gt;Cached input&lt;/th&gt;
&lt;th&gt;Workload to test&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://aihubmix.com/model/kimi-k3" rel="noopener noreferrer"&gt;Kimi K3&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$3.00 / $15.00&lt;/td&gt;
&lt;td&gt;$0.30&lt;/td&gt;
&lt;td&gt;1M context, long-horizon coding, and complex knowledge work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href="https://aihubmix.com/model/glm-5.2" rel="noopener noreferrer"&gt;GLM-5.2&lt;/a&gt;, 30% discounted&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.79 / $2.76&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.20&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Long-context coding, agents, and overall value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://aihubmix.com/model/deepseek-v4-pro" rel="noopener noreferrer"&gt;DeepSeek V4-Pro&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$0.46 / $0.93&lt;/td&gt;
&lt;td&gt;About $0.00385, route-specific&lt;/td&gt;
&lt;td&gt;Output-heavy reasoning, coding, and content generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://aihubmix.com/model/deepseek-v4-flash-0731" rel="noopener noreferrer"&gt;DeepSeek V4-Flash-0731&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.099 / $0.198&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.0198&lt;/td&gt;
&lt;td&gt;Classification, extraction, batch jobs, and high concurrency&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Note: The DeepSeek V4-Pro summary rounds cached input to &lt;code&gt;$0.00&lt;/code&gt;. Its DeepSeek upstream route shows a cache-read price of approximately &lt;code&gt;$0.0038512&lt;/code&gt; per million tokens. Check the route used by your request when reconciling a bill.&lt;/p&gt;

&lt;p&gt;For comparison, AIHubMix currently lists &lt;a href="https://aihubmix.com/model/claude-opus-5" rel="noopener noreferrer"&gt;Claude Opus 5&lt;/a&gt; at &lt;code&gt;$5 / $25&lt;/code&gt;, &lt;a href="https://aihubmix.com/model/gpt-5.6-sol" rel="noopener noreferrer"&gt;GPT-5.6 Sol&lt;/a&gt; at &lt;code&gt;$5 / $30&lt;/code&gt;, &lt;a href="https://aihubmix.com/model/gpt-5.6-terra" rel="noopener noreferrer"&gt;GPT-5.6 Terra&lt;/a&gt; at &lt;code&gt;$2 / $12&lt;/code&gt;, and &lt;a href="https://aihubmix.com/model/gpt-5.6-luna" rel="noopener noreferrer"&gt;GPT-5.6 Luna&lt;/a&gt; at &lt;code&gt;$0.20 / $1.20&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;On output price alone, discounted GLM-5.2 costs about one-ninth as much as Claude Opus 5. DeepSeek V4-Pro is about one twenty-seventh, while DeepSeek V4-Flash-0731 is about one one-hundred-and-twenty-sixth. Those gaps are substantial, but price alone does not capture task success rate, context requirements, output volume, or latency.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Pay From Outside China
&lt;/h2&gt;

&lt;p&gt;The token prices are only half the problem. Developers outside mainland China can run into account and payment friction when a provider expects a local phone number, Alipay, or WeChat Pay. There are three practical approaches.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Self-Host Open Weights
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://huggingface.co/zai-org/GLM-5.2" rel="noopener noreferrer"&gt;GLM-5.2 is published on Hugging Face&lt;/a&gt; under the MIT license. The weights do not carry an API fee, but inference is not free: GPUs, serving infrastructure, monitoring, upgrades, and engineering time all move onto your side of the ledger. Self-hosting becomes economically interesting only when utilization and control requirements justify that operational cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Use an Aggregator Available in Your Region
&lt;/h3&gt;

&lt;p&gt;Several model aggregators expose at least some Chinese models and accept payment methods that are easier to use internationally. The trade-off is inconsistent coverage. A service may list one DeepSeek release but not the newest GLM or Kimi endpoint, and model IDs, context limits, caching, and tool support can differ.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Use an OpenAI-Compatible Gateway With Card Billing
&lt;/h3&gt;

&lt;p&gt;AIHubMix is one example of this approach. Its console currently offers both Alipay and &lt;strong&gt;Credit/Debit Card&lt;/strong&gt; top-ups, while the API uses an OpenAI-compatible base URL. Card acceptance can still depend on the issuer and region, so verify it before designing a production billing process.&lt;/p&gt;

&lt;p&gt;The engineering benefit is modest but useful: one account, one balance, and one SDK integration for the model IDs in this comparison. The trade-off is an additional dependency between your application and the original model provider. Check the gateway’s status history, data policy, route behavior, and effective price rather than treating API compatibility as equivalence.&lt;/p&gt;

&lt;h2&gt;
  
  
  What These Prices Actually Buy
&lt;/h2&gt;

&lt;h3&gt;
  
  
  GLM-5.2: How the Discount Changes the Middle Tier
&lt;/h3&gt;

&lt;p&gt;AIHubMix displays regular GLM-5.2 prices of &lt;code&gt;$1.13&lt;/code&gt; for input, &lt;code&gt;$3.94&lt;/code&gt; for output, and &lt;code&gt;$0.28&lt;/code&gt; for cached input. The current 30% discounted rates are &lt;strong&gt;&lt;code&gt;$0.79&lt;/code&gt;, &lt;code&gt;$2.76&lt;/code&gt;, and &lt;code&gt;$0.20&lt;/code&gt;&lt;/strong&gt; respectively. The page labels the discount window as &lt;code&gt;09:00–08:59 GMT+9&lt;/code&gt;; individual upstream routes may show different windows, so production budgets should use the live rate.&lt;/p&gt;

&lt;p&gt;GLM-5.2 offers a 1M-token context window, up to 128K output, reasoning, tool use, function calling, and structured outputs. The listed output rate stays below $3 per million tokens while the endpoint supports repository-scale code, long documents, and multi-step agent workflows.&lt;/p&gt;

&lt;p&gt;If your application repeatedly reads an entire codebase, a large policy document, or a long conversation history, GLM-5.2 is one candidate to include in the default-model evaluation.&lt;/p&gt;

&lt;h3&gt;
  
  
  DeepSeek V4-Pro: Sub-$1 Output for Heavier Work
&lt;/h3&gt;

&lt;p&gt;AIHubMix lists DeepSeek V4-Pro at &lt;code&gt;$0.46&lt;/code&gt; for input and &lt;code&gt;$0.93&lt;/code&gt; for output. It also provides a 1M-token context window, up to 384K output, reasoning, tools, function calling, and structured outputs.&lt;/p&gt;

&lt;p&gt;That price structure is relevant when output is much larger than input: code generation, bulk drafting, long answers, and first-pass reports. V4-Pro can be tested against Flash for tasks that need heavier reasoning and longer generation. Its listed output rate is lower than GLM-5.2's.&lt;/p&gt;

&lt;h3&gt;
  
  
  DeepSeek V4-Flash-0731: The Volume Tier
&lt;/h3&gt;

&lt;p&gt;DeepSeek V4-Flash-0731 costs &lt;code&gt;$0.099&lt;/code&gt; for input, &lt;code&gt;$0.198&lt;/code&gt; for output, and &lt;code&gt;$0.0198&lt;/code&gt; for cached input on AIHubMix. It is not the obvious choice for the hardest final decision, but it is well suited to large quantities of cheap, standardized work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text classification and tagging&lt;/li&gt;
&lt;li&gt;Field extraction and format conversion&lt;/li&gt;
&lt;li&gt;First-pass search-result filtering&lt;/li&gt;
&lt;li&gt;Log summarization and ticket routing&lt;/li&gt;
&lt;li&gt;High-volume short-form generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sending every request directly to a flagship model means paying a premium for tasks that may not need flagship capability. Flash can be tested at the first layer of a model-routing system.&lt;/p&gt;

&lt;p&gt;At 100 million output tokens, the page rates imply approximately &lt;code&gt;$19.80&lt;/code&gt; for DeepSeek V4-Flash-0731, &lt;code&gt;$93&lt;/code&gt; for DeepSeek V4-Pro, &lt;code&gt;$276&lt;/code&gt; for discounted GLM-5.2, &lt;code&gt;$1,500&lt;/code&gt; for Kimi K3, and &lt;code&gt;$2,500&lt;/code&gt; for Claude Opus 5. This excludes caching, failed retries, and tokens consumed around tool calls, but it illustrates why batch work deserves a dedicated low-cost tier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kimi K3: The Higher-Cost Long-Context Option
&lt;/h3&gt;

&lt;p&gt;Kimi K3 is the most expensive Chinese model in this comparison: &lt;code&gt;$3&lt;/code&gt; for input, &lt;code&gt;$15&lt;/code&gt; for output, and &lt;code&gt;$0.30&lt;/code&gt; for cached input. AIHubMix shows a 1M context window and up to 1M output, with text, image, and video input. Its positioning is clear: long-horizon coding and end-to-end knowledge work.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Actually Determines the Bill
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Price GLM-5.2 Using the Discount Window
&lt;/h3&gt;

&lt;p&gt;GLM-5.2’s regular and discounted output rates are &lt;code&gt;$3.94&lt;/code&gt; and &lt;code&gt;$2.76&lt;/code&gt;. At 100 million output tokens, the difference is about &lt;code&gt;$118&lt;/code&gt;. At meaningful scale, whether requests hit the discounted route changes the monthly budget. Record the route and effective unit price in monitoring rather than treating a promotional rate as permanent.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Caching Only Helps Repeated, Stable Context
&lt;/h3&gt;

&lt;p&gt;Caching becomes valuable when an agent resends the same system prompt, tool definitions, project rules, or reference material on every turn. DeepSeek V4-Flash-0731 lists cached input at &lt;code&gt;$0.0198&lt;/code&gt;, discounted GLM-5.2 at &lt;code&gt;$0.20&lt;/code&gt;, and Kimi K3 at &lt;code&gt;$0.30&lt;/code&gt;. If every prompt is different, low cache prices will not automatically reduce the bill.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Output-Heavy Workloads Need Output-First Pricing
&lt;/h3&gt;

&lt;p&gt;Summarization and classification often have large inputs and short outputs. Code generation, long-form writing, and deep reasoning tend to produce more output. Optimize the former around input and cache rates; optimize the latter around output rates. Adding the two headline prices together is rarely a useful ranking method.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The Cheapest System Usually Uses More Than One Model
&lt;/h3&gt;

&lt;p&gt;A practical three-layer route looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Send classification, extraction, and simple batch jobs to DeepSeek V4-Flash-0731.&lt;/li&gt;
&lt;li&gt;Use GLM-5.2 or DeepSeek V4-Pro for most production work.&lt;/li&gt;
&lt;li&gt;Reserve Kimi K3 or another high-priced frontier model for the small set of high-risk, very long, or unusually difficult tasks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This routing policy can be implemented in the application based on task type, context length, and retry count. Measure fallback frequency because a cheap first attempt can become expensive when it repeatedly fails.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calling the Models Through One Gateway
&lt;/h2&gt;

&lt;p&gt;AIHubMix exposes an OpenAI-compatible API. An application already using the OpenAI SDK typically needs only a different &lt;code&gt;base_url&lt;/code&gt;, API key, and model ID:&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;AIHUBMIX_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://aihubmix.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.2&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;Review this project&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s architecture and propose a migration plan.&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;Change &lt;code&gt;model&lt;/code&gt; to &lt;code&gt;deepseek-v4-pro&lt;/code&gt;, &lt;code&gt;deepseek-v4-flash-0731&lt;/code&gt;, or &lt;code&gt;kimi-k3&lt;/code&gt; to switch models. Test streaming, timeouts, tool calls, and structured outputs separately before production use. API compatibility does not mean every model behaves identically.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Reasonable Evaluation Setup
&lt;/h2&gt;

&lt;p&gt;For a simple starting configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Default-model candidate: GLM-5.2.&lt;/strong&gt; Discounted pricing and a 1M context window make it worth testing for code and long tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output-heavy production model: DeepSeek V4-Pro.&lt;/strong&gt; Output costs less than $1 per million tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch model: DeepSeek V4-Flash-0731.&lt;/strong&gt; Push low-risk, high-concurrency work to the lowest-cost tier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-horizon candidate: Kimi K3.&lt;/strong&gt; Test it when 1M context, multimodal input, and unusually long output are genuinely useful.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not choose from a few subjective chat responses. Build an evaluation set of 50–200 real tasks and measure success rate, human rework, average input and output tokens, P95 latency, and retry count. “Cost per successful task” is usually more informative than price per million tokens.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  What Is the Cheapest Model in This Comparison?
&lt;/h3&gt;

&lt;p&gt;DeepSeek V4-Flash-0731 has the lowest input and output rates at &lt;code&gt;$0.099 / $0.198&lt;/code&gt;. It is appropriate for batch and standardized tasks. Test DeepSeek V4-Pro, GLM-5.2, or Kimi K3 for complex reasoning and long-horizon coding.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Much Does GLM-5.2 Cost on AIHubMix?
&lt;/h3&gt;

&lt;p&gt;The page shows regular rates of &lt;code&gt;$1.13&lt;/code&gt; input, &lt;code&gt;$3.94&lt;/code&gt; output, and &lt;code&gt;$0.28&lt;/code&gt; cached input. The current 30% discounted rates are &lt;strong&gt;&lt;code&gt;$0.79&lt;/code&gt; input, &lt;code&gt;$2.76&lt;/code&gt; output, and &lt;code&gt;$0.20&lt;/code&gt; cached input&lt;/strong&gt;, all per million tokens. Discount windows and routes may change.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Does the DeepSeek V4-Pro Price Differ From Other Sites?
&lt;/h3&gt;

&lt;p&gt;This article uses the current price of AIHubMix’s aggregated &lt;code&gt;deepseek-v4-pro&lt;/code&gt; model ID. AIHubMix exposes several upstream routes at different prices, and its model page says the aggregated ID uses the official discounted channel. Always compare the same model ID and actual route.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are Chinese Models Always Better Value Than OpenAI or Anthropic Models?
&lt;/h3&gt;

&lt;p&gt;Their token prices are often much lower, but the real metric is cost per completed task. Extra retries, manual corrections, or unnecessarily long output can reduce the apparent savings. Evaluate with your own workload.&lt;/p&gt;

&lt;h3&gt;
  
  
  Will These Prices Stay the Same?
&lt;/h3&gt;

&lt;p&gt;No. Platforms change promotions, providers, routes, and caching rates. This article is a snapshot from August 3, 2026. Use the live &lt;a href="https://aihubmix.com/models" rel="noopener noreferrer"&gt;AIHubMix model pricing page&lt;/a&gt; for production budgets and customer quotes.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>api</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Benchmarking GLM-5.2 Fast: 100 Requests Across Chat, Coding, and Math</title>
      <dc:creator>AIHubMix</dc:creator>
      <pubDate>Wed, 22 Jul 2026 15:51:04 +0000</pubDate>
      <link>https://dev.to/aihubmix/benchmarking-glm-52-fast-100-requests-across-chat-coding-and-math-moj</link>
      <guid>https://dev.to/aihubmix/benchmarking-glm-52-fast-100-requests-across-chat-coding-and-math-moj</guid>
      <description>&lt;p&gt;GLM-5.2 Fast is now available through &lt;a href="https://aihubmix.com/model/glm-5.2-fast-preview" rel="noopener noreferrer"&gt;AIHubMix&lt;/a&gt;. We benchmarked it against GLM-5.2 using real prompts and a production API endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Across three 100-request benchmark categories, GLM-5.2 Fast delivered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;83-94% higher per-user throughput&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;53-77% higher system throughput&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;41-46% lower inter-token latency&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;38.5-42.5% lower median end-to-end request latency&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Its clearest advantage appears after generation begins: output streams faster and complete responses finish sooner. This makes it especially useful for real-time chat, coding agents, streamed long-form generation, and multi-step agentic workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmark setup
&lt;/h2&gt;

&lt;p&gt;We used three real-prompt datasets representing different workloads:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Dataset&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chat&lt;/td&gt;
&lt;td&gt;ShareGPT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding&lt;/td&gt;
&lt;td&gt;instruct_coder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Math reasoning&lt;/td&gt;
&lt;td&gt;AIMO&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The benchmark configuration was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;100 requests per category for each model&lt;/li&gt;
&lt;li&gt;Identical prompt samples selected with random seed 42&lt;/li&gt;
&lt;li&gt;Concurrency: 5&lt;/li&gt;
&lt;li&gt;Streaming responses&lt;/li&gt;
&lt;li&gt;Server-reported token counts&lt;/li&gt;
&lt;li&gt;Production AIHubMix chat completions endpoint&lt;/li&gt;
&lt;li&gt;Benchmark runner: &lt;a href="https://github.com/ai-dynamo/aiperf" rel="noopener noreferrer"&gt;aiperf&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The models tested were &lt;code&gt;alicloud-glm-5.2&lt;/code&gt; and &lt;code&gt;alicloud-glm-5.2-fast-preview&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Using the same seed ensures both models receive the same sampled prompts. It does not eliminate normal infrastructure variation, but it prevents one model from receiving an easier prompt set.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 1: Per-user throughput increased by 83-94%
&lt;/h2&gt;

&lt;p&gt;Per-user throughput is the number of output tokens delivered to one user per second after generation begins. It is the metric most closely related to how fast a streaming response feels.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;GLM-5.2&lt;/th&gt;
&lt;th&gt;GLM-5.2 Fast&lt;/th&gt;
&lt;th&gt;Improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chat&lt;/td&gt;
&lt;td&gt;50.2 tok/s&lt;/td&gt;
&lt;td&gt;97.2 tok/s&lt;/td&gt;
&lt;td&gt;+94%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding&lt;/td&gt;
&lt;td&gt;53.3 tok/s&lt;/td&gt;
&lt;td&gt;98.1 tok/s&lt;/td&gt;
&lt;td&gt;+84%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Math reasoning&lt;/td&gt;
&lt;td&gt;61.4 tok/s&lt;/td&gt;
&lt;td&gt;112.7 tok/s&lt;/td&gt;
&lt;td&gt;+83%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Across the three categories, GLM-5.2 Fast delivered about &lt;strong&gt;1.8-1.9x the per-user throughput&lt;/strong&gt; of GLM-5.2.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 2: System throughput increased by 53-77%
&lt;/h2&gt;

&lt;p&gt;System throughput measures the total number of output tokens generated per second across all concurrent requests. It is useful for understanding aggregate serving capacity under load.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;GLM-5.2&lt;/th&gt;
&lt;th&gt;GLM-5.2 Fast&lt;/th&gt;
&lt;th&gt;Improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chat&lt;/td&gt;
&lt;td&gt;158.6 tok/s&lt;/td&gt;
&lt;td&gt;242.5 tok/s&lt;/td&gt;
&lt;td&gt;+53%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding&lt;/td&gt;
&lt;td&gt;245.6 tok/s&lt;/td&gt;
&lt;td&gt;416.3 tok/s&lt;/td&gt;
&lt;td&gt;+70%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Math reasoning&lt;/td&gt;
&lt;td&gt;262.4 tok/s&lt;/td&gt;
&lt;td&gt;463.6 tok/s&lt;/td&gt;
&lt;td&gt;+77%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These values were measured with concurrency set to 5.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 3: Inter-token latency fell by 41-46%
&lt;/h2&gt;

&lt;p&gt;Inter-token latency measures the average delay between consecutive streamed output tokens. Lower values produce a denser, more continuous response stream.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;GLM-5.2&lt;/th&gt;
&lt;th&gt;GLM-5.2 Fast&lt;/th&gt;
&lt;th&gt;Reduction&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chat&lt;/td&gt;
&lt;td&gt;20.58 ms&lt;/td&gt;
&lt;td&gt;12.12 ms&lt;/td&gt;
&lt;td&gt;-41%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding&lt;/td&gt;
&lt;td&gt;18.93 ms&lt;/td&gt;
&lt;td&gt;10.31 ms&lt;/td&gt;
&lt;td&gt;-46%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Math reasoning&lt;/td&gt;
&lt;td&gt;16.40 ms&lt;/td&gt;
&lt;td&gt;8.93 ms&lt;/td&gt;
&lt;td&gt;-46%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This was the most consistent low-level speed signal in the benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  Median end-to-end latency fell by 38.5-42.5%
&lt;/h2&gt;

&lt;p&gt;End-to-end latency measures the complete request duration, from sending the request until the streamed response finishes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;GLM-5.2&lt;/th&gt;
&lt;th&gt;GLM-5.2 Fast&lt;/th&gt;
&lt;th&gt;Reduction&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chat&lt;/td&gt;
&lt;td&gt;7.68 s&lt;/td&gt;
&lt;td&gt;4.73 s&lt;/td&gt;
&lt;td&gt;-38.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding&lt;/td&gt;
&lt;td&gt;29.20 s&lt;/td&gt;
&lt;td&gt;17.84 s&lt;/td&gt;
&lt;td&gt;-38.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Math reasoning&lt;/td&gt;
&lt;td&gt;33.41 s&lt;/td&gt;
&lt;td&gt;19.22 s&lt;/td&gt;
&lt;td&gt;-42.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These figures are for individual model requests, not complete agent tasks. In a multi-step workflow, however, time saved on sequential model calls can compound across the full task.&lt;/p&gt;

&lt;h2&gt;
  
  
  What about time to first token?
&lt;/h2&gt;

&lt;p&gt;We measured TTFT, but the P50 results did not move consistently in one direction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chat: 1.6% slower&lt;/li&gt;
&lt;li&gt;Coding: 2.9% faster&lt;/li&gt;
&lt;li&gt;Math reasoning: 6.4% faster&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tail results also varied by workload. We are therefore not making a blanket claim that GLM-5.2 Fast always produces the first token sooner.&lt;/p&gt;

&lt;p&gt;The more reliable conclusion is that once generation starts, tokens arrive faster and the complete response finishes sooner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best use cases
&lt;/h2&gt;

&lt;p&gt;GLM-5.2 Fast is particularly well suited to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-time AI chat&lt;/strong&gt;, where faster streaming directly improves perceived responsiveness&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coding agents&lt;/strong&gt;, where long code and reasoning outputs can dominate task duration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-step agentic workflows&lt;/strong&gt;, where latency savings accumulate across sequential calls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-concurrency applications&lt;/strong&gt;, where system throughput affects aggregate capacity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamed long-form generation&lt;/strong&gt;, where lower inter-token latency creates a more continuous output stream&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Production fallback configuration
&lt;/h2&gt;

&lt;p&gt;The GLM-5.2 Fast route is currently provided by &lt;strong&gt;Alibaba Cloud only&lt;/strong&gt;. For production traffic, we recommend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Primary:  glm-5.2-fast-preview
Fallback: glm-5.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key-level fallback can route eligible requests to standard GLM-5.2 if the Fast route is temporarily unavailable. It reduces exposure to a single upstream provider, but it is not a guarantee of uninterrupted service. Production systems should still implement timeouts, retries, monitoring, and error handling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing and model details
&lt;/h2&gt;

&lt;p&gt;At the time of publication, the model page lists:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&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;Input price&lt;/td&gt;
&lt;td&gt;$2.254 per 1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output price&lt;/td&gt;
&lt;td&gt;$7.889 per 1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context length&lt;/td&gt;
&lt;td&gt;1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fast-route provider&lt;/td&gt;
&lt;td&gt;Alibaba Cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pricing and availability may change. Check the model page before deploying.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmark caveats
&lt;/h2&gt;

&lt;p&gt;For the Fast coding run, 100 requests were issued, while 99 responses contained usable server-reported token counts for token-derived metrics.&lt;/p&gt;

&lt;p&gt;Results also depend on prompt distribution, output length, concurrency, network conditions, provider load, and test timing. Treat these numbers as evidence from this controlled test, not a guarantee for every request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try GLM-5.2 Fast
&lt;/h2&gt;

&lt;p&gt;View current pricing, provider availability, and API details on the &lt;a href="https://aihubmix.com/model/glm-5.2-fast-preview" rel="noopener noreferrer"&gt;GLM-5.2 Fast model page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For production traffic, enable fallback to GLM-5.2 before routing critical workloads to the Fast route.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>performance</category>
      <category>machinelearning</category>
      <category>llm</category>
    </item>
    <item>
      <title>Kimi K3 API Guide: Reasoning, Tool Calling, Structured Output, and Vision</title>
      <dc:creator>AIHubMix</dc:creator>
      <pubDate>Tue, 21 Jul 2026 11:24:37 +0000</pubDate>
      <link>https://dev.to/aihubmix/kimi-k3-api-guide-reasoning-tool-calling-structured-output-and-vision-bn3</link>
      <guid>https://dev.to/aihubmix/kimi-k3-api-guide-reasoning-tool-calling-structured-output-and-vision-bn3</guid>
      <description>&lt;p&gt;If you are testing Kimi K3 through an OpenAI-compatible API, there are a few details worth knowing before you wire it into production.&lt;/p&gt;

&lt;p&gt;Kimi K3 is not just another chat model with a larger context window. It has always-on thinking, a 1M-token context window, API-specific differences across Chat Completions, Responses, and Claude-compatible Messages, plus a few edge cases that can surprise client code.&lt;/p&gt;

&lt;p&gt;This guide summarizes what we verified on AIHubMix, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;reasoning_effort="max"&lt;/code&gt; and thinking history&lt;/li&gt;
&lt;li&gt;Tool calling and dynamic tool loading&lt;/li&gt;
&lt;li&gt;Structured output support&lt;/li&gt;
&lt;li&gt;Automatic context caching&lt;/li&gt;
&lt;li&gt;Prefix completion&lt;/li&gt;
&lt;li&gt;Vision input&lt;/li&gt;
&lt;li&gt;Stop sequence behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Test note: The behavior below was verified through AIHubMix production APIs on July 17, 2026. Model providers may change behavior over time, so check the latest model page and official docs before relying on edge-case behavior.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Kimi K3 at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&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;Context window&lt;/td&gt;
&lt;td&gt;1M tokens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Max output&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;max_completion_tokens&lt;/code&gt; defaults to 131,072, up to 1,048,576&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input modalities&lt;/td&gt;
&lt;td&gt;Text and images&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thinking mode&lt;/td&gt;
&lt;td&gt;On by default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reasoning setting&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;reasoning_effort&lt;/code&gt; only supports &lt;code&gt;"max"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stop sequences&lt;/td&gt;
&lt;td&gt;At most 5 entries, each no longer than 32 bytes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;APIs on AIHubMix&lt;/td&gt;
&lt;td&gt;Chat Completions, Responses, Claude-compatible Messages&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you need deep reasoning, long-context tasks, agent workflows, structured extraction, or code generation with large context, Kimi K3 is the model to test first.&lt;/p&gt;

&lt;p&gt;For quick experiments, Kimi K3 Free can be a useful entry point before moving heavier workloads to the full Kimi K3 API.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Thinking mode: &lt;code&gt;reasoning_effort&lt;/code&gt; only supports &lt;code&gt;max&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Kimi K3 thinking is enabled by default. The important part is that &lt;code&gt;reasoning_effort&lt;/code&gt; only supports one value:&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;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://aihubmix.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;AIHUBMIX_API_KEY&amp;gt;&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;completion&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;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;reasoning_effort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max&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;A snail climbs 3 meters each day and slides 2 meters each night. The well is 10 meters deep. How many days?&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;completion&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;reasoning_content&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;completion&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;For multi-turn conversations, pass the previous assistant message back complete and unmodified, including thinking content.&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;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;What is the capital of France?&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;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;assistant&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;Paris.&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_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;&amp;lt;reasoning_content from the previous response&amp;gt;&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;And its population?&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This matters because Kimi K3 is trained with preserved thinking history. If your session manager, proxy, or logging layer strips thinking fields, later turns may become less stable.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Sampling parameters are fixed
&lt;/h2&gt;

&lt;p&gt;Kimi K3 uses fixed sampling settings from the provider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;temperature&lt;/code&gt;: &lt;code&gt;1.0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;top_p&lt;/code&gt;: &lt;code&gt;0.95&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;n&lt;/code&gt;: &lt;code&gt;1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;presence_penalty&lt;/code&gt;: &lt;code&gt;0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;frequency_penalty&lt;/code&gt;: &lt;code&gt;0&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical recommendation is simple: omit these parameters unless the provider documentation says otherwise.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Tool calling and dynamic tool loading
&lt;/h2&gt;

&lt;p&gt;Kimi K3 supports up to 128 tools. Tool calling works across APIs, but the syntax differs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chat Completions
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;tool_choice&lt;/code&gt; supports &lt;code&gt;auto&lt;/code&gt;, &lt;code&gt;none&lt;/code&gt;, and &lt;code&gt;required&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Kimi K3 also supports dynamic tool loading in Chat Completions. You can inject a new tool mid-conversation using a system message that contains &lt;code&gt;tools&lt;/code&gt; and no &lt;code&gt;content&lt;/code&gt;.&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;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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a helpful assistant.&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;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;Hello.&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;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;assistant&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;Hi, how can I help you?&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;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;tools&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;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;function&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;function&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;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;get_time&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;description&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;Get the current time&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;parameters&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;object&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;properties&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="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;What time is it now?&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One detail to remember: the injected tool message needs to be included again in later requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Responses API
&lt;/h3&gt;

&lt;p&gt;Tool definitions use a flatter structure:&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;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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&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;Hello&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&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;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;function&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;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;get_weather&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;description&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;Get weather for a city&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;parameters&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;object&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;properties&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;city&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;string&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;required&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;city&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="n"&gt;tool_choice&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;required&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In testing, the model returned a &lt;code&gt;function_call&lt;/code&gt; output item.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude-compatible Messages API
&lt;/h3&gt;

&lt;p&gt;The Messages API uses Anthropic-style tool definitions:&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;anthropic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Anthropic&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;Anthropic&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;AIHUBMIX_API_KEY&amp;gt;&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://aihubmix.com&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;messages&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;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&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;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;get_weather&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;description&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;Get weather for a city&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;input_schema&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;object&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;properties&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;city&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;string&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;required&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;city&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="n"&gt;tool_choice&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;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;any&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="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;Hello&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important caveat: dynamic tool loading did not take effect on the official Messages-compatible endpoint. Declare tools at the top level instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Structured output
&lt;/h2&gt;

&lt;p&gt;Structured output works well through Chat Completions and Responses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chat Completions
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;completion&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;kimi-k3&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;Paris is the capital of France. Extract the city name.&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;response_format&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;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;json_schema&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;json_schema&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;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;extract&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;strict&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;schema&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;object&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;properties&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;city&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;string&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;required&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;city&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="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Observed output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"city"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Paris"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Responses API
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&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;Paris is the capital of France. Extract the city name.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;text&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;format&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;json_schema&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;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;extract&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;strict&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;schema&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;object&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;properties&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;city&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;string&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;required&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;city&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="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Messages API caveat
&lt;/h3&gt;

&lt;p&gt;The Claude-compatible Messages endpoint did not support structured output in testing. The structured-output fields were silently ignored, and the endpoint returned free-form text with HTTP 200.&lt;/p&gt;

&lt;p&gt;If your downstream code requires strict JSON, use Chat Completions or Responses for Kimi K3 structured output.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Context caching is automatic
&lt;/h2&gt;

&lt;p&gt;Kimi K3 context caching is automatic. No special request parameter is required.&lt;/p&gt;

&lt;p&gt;When a repeated long prefix hits the cache, the usage field varies by API:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API&lt;/th&gt;
&lt;th&gt;Cache usage field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chat Completions&lt;/td&gt;
&lt;td&gt;&lt;code&gt;usage.prompt_tokens_details.cached_tokens&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses&lt;/td&gt;
&lt;td&gt;&lt;code&gt;usage.input_tokens_details.cached_tokens&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Messages&lt;/td&gt;
&lt;td&gt;&lt;code&gt;usage.cache_read_input_tokens&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is especially useful for long system prompts, retrieval-heavy contexts, and agent workflows that reuse large prefixes.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Prefix completion
&lt;/h2&gt;

&lt;p&gt;Prefix completion lets the model continue from an assistant prefix. This is useful for code completion, controlled formatting, or continuing a partially generated answer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chat Completions
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&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;Write a haiku about the sea.&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;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;assistant&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;Waves fold into foam,&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;partial&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Responses and Messages
&lt;/h3&gt;

&lt;p&gt;For Responses and Messages, pass the assistant prefix as the last assistant message. No separate &lt;code&gt;partial&lt;/code&gt; parameter is needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Vision input
&lt;/h2&gt;

&lt;p&gt;Kimi K3 supports image input. The exact content-block format depends on the API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chat Completions
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&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="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;text&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;text&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;What is the dominant color of this image? One word.&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;image_url&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;image_url&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;url&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;data:image/png;base64,&amp;lt;BASE64&amp;gt;&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Responses API
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nb"&gt;input&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="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;input_text&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;text&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;What is the dominant color of this image? One word.&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;input_image&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;image_url&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;data:image/png;base64,&amp;lt;BASE64&amp;gt;&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Messages API
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&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="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;text&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;text&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;What is the dominant color of this image? One word.&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;image&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;source&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;base64&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;media_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;image/png&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;data&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;&amp;lt;BASE64&amp;gt;&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In a simple test using a 64x64 red PNG, the model correctly answered &lt;code&gt;Red&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Stop sequence behavior
&lt;/h2&gt;

&lt;p&gt;Kimi K3 validates stop sequence limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At most 5 stop sequences&lt;/li&gt;
&lt;li&gt;Each sequence must be no longer than 32 bytes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exceeding either limit returned HTTP 400 in testing.&lt;/p&gt;

&lt;p&gt;One caveat: on the Messages API, a stop sequence hit did not follow Anthropic semantics. The response returned &lt;code&gt;stop_reason: "end_turn"&lt;/code&gt; rather than &lt;code&gt;stop_sequence&lt;/code&gt;, and &lt;code&gt;stop_sequence&lt;/code&gt; was &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If your client relies on those fields to detect truncation, add your own handling.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Latency: long Kimi K3 calls can take a while
&lt;/h2&gt;

&lt;p&gt;Because Kimi K3 thinking is fixed at the max level, complex single-call tasks can take much longer than typical chat completions.&lt;/p&gt;

&lt;p&gt;In one single-file HTML game generation test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total request time: 2,541 seconds, about 42 minutes&lt;/li&gt;
&lt;li&gt;Completion tokens: 74,994&lt;/li&gt;
&lt;li&gt;Thinking tokens: 54,486&lt;/li&gt;
&lt;li&gt;Thinking share: 73% of completion tokens&lt;/li&gt;
&lt;li&gt;Final result: 1,275 lines of runnable code&lt;/li&gt;
&lt;li&gt;Finish reason: &lt;code&gt;stop&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For production clients:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use streaming for long tasks&lt;/li&gt;
&lt;li&gt;Set timeouts to minutes or longer&lt;/li&gt;
&lt;li&gt;Leave enough room in &lt;code&gt;max_completion_tokens&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Track thinking-token usage when estimating cost and latency&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Capability matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Chat Completions&lt;/th&gt;
&lt;th&gt;Responses&lt;/th&gt;
&lt;th&gt;Messages&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Thinking content in response&lt;/td&gt;
&lt;td&gt;&lt;code&gt;reasoning_content&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;reasoning&lt;/code&gt; output item&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;thinking&lt;/code&gt; content block&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Thinking history pass-back&lt;/td&gt;
&lt;td&gt;Assistant message passed back verbatim&lt;/td&gt;
&lt;td&gt;Output items passed back verbatim&lt;/td&gt;
&lt;td&gt;Content blocks passed back verbatim&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Force tool calls&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tool_choice: "required"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tool_choice: "required"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{"type": "any"}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disable tool calls&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tool_choice: "none"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;API-dependent&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{"type": "none"}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic tool loading&lt;/td&gt;
&lt;td&gt;Supported through system message with &lt;code&gt;tools&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;In progress&lt;/td&gt;
&lt;td&gt;Not supported in testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured output&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;response_format&lt;/code&gt; with JSON Schema&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;text.format&lt;/code&gt; with JSON Schema&lt;/td&gt;
&lt;td&gt;Not supported in testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automatic cache metering&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cached_tokens&lt;/code&gt; in prompt details&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cached_tokens&lt;/code&gt; in input details&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cache_read_input_tokens&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prefix completion&lt;/td&gt;
&lt;td&gt;&lt;code&gt;"partial": true&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Assistant prefill&lt;/td&gt;
&lt;td&gt;Assistant prefill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vision input&lt;/td&gt;
&lt;td&gt;&lt;code&gt;image_url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;input_image&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;image&lt;/code&gt; block&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stop sequences&lt;/td&gt;
&lt;td&gt;Validated limits&lt;/td&gt;
&lt;td&gt;In progress&lt;/td&gt;
&lt;td&gt;Limits validated, but stop metadata differs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;h3&gt;
  
  
  Which APIs does Kimi K3 support on AIHubMix?
&lt;/h3&gt;

&lt;p&gt;AIHubMix supports Kimi K3 through Chat Completions, Responses, and the Claude-compatible Messages API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Kimi K3 thinking be disabled?
&lt;/h3&gt;

&lt;p&gt;No. Kimi K3 thinking is on by default, and &lt;code&gt;reasoning_effort&lt;/code&gt; only supports &lt;code&gt;"max"&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need to pass back &lt;code&gt;reasoning_content&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;Yes, for multi-turn Chat Completions. Preserve the previous assistant message complete and unmodified, including &lt;code&gt;reasoning_content&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Kimi K3 support structured output?
&lt;/h3&gt;

&lt;p&gt;Yes, through Chat Completions and Responses. In testing, the Messages-compatible endpoint did not support structured output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Kimi K3 is a strong option when you need long-context reasoning, tool calling, structured JSON, vision input, and cached-prefix workflows in one model.&lt;/p&gt;

&lt;p&gt;The main things to watch are thinking history, long-task latency, API-specific syntax differences, and the Messages API caveats around structured output and stop sequence metadata.&lt;/p&gt;

&lt;p&gt;For pricing and real-time status, see the Kimi K3 model page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aihubmix.com/model/kimi-k3" rel="noopener noreferrer"&gt;https://aihubmix.com/model/kimi-k3&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more models,including kimi-k3-free model pls visit:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aihubmix.com/models" rel="noopener noreferrer"&gt;https://aihubmix.com/models&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>api</category>
      <category>kimi</category>
    </item>
  </channel>
</rss>
