<?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: Daniel Dong</title>
    <description>The latest articles on DEV Community by Daniel Dong (@daniel_dong_sdwgw041).</description>
    <link>https://dev.to/daniel_dong_sdwgw041</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%2F3942570%2F5388d5e5-05b2-495b-9180-83a4ffa72138.jpg</url>
      <title>DEV Community: Daniel Dong</title>
      <link>https://dev.to/daniel_dong_sdwgw041</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/daniel_dong_sdwgw041"/>
    <language>en</language>
    <item>
      <title>New on AIBridge: Kimi K3 (1M Context) and GitHub OAuth Login</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Fri, 24 Jul 2026 01:14:55 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/new-on-aibridge-kimi-k3-1m-context-and-github-oauth-login-1m4a</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/new-on-aibridge-kimi-k3-1m-context-and-github-oauth-login-1m4a</guid>
      <description>&lt;p&gt;Two things shipped this week:&lt;/p&gt;

&lt;h2&gt;
  
  
  Kimi K3
&lt;/h2&gt;

&lt;p&gt;A reasoning model that doesn't ask you to turn on "think mode."&lt;/p&gt;

&lt;p&gt;1M context window. Always reasoning. No toggle.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import openai
client = openai.OpenAI(
api_key="mb-xxx",
base_url="https://aibridge-api.com/v1"
)
client.chat.completions.create(
model="kimi-k3",
messages=[{"role":"user","content":"Analyze this codebase for security bugs"}]
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Drop a repo. Get a review. No prompt engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub OAuth
&lt;/h2&gt;

&lt;p&gt;Registration went from 4 steps to 1 click.&lt;/p&gt;

&lt;p&gt;Email → password → verification code? Replaced by: GitHub → authorize → done.&lt;/p&gt;

&lt;p&gt;5 seconds. Same 500K free tokens. Same 15 models.&lt;/p&gt;




&lt;p&gt;One key. 15 Chinese AI models (DeepSeek, Qwen, GLM, Kimi K3).&lt;br&gt;
Free to start. No credit card.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html&lt;/a&gt; (try K3, no signup)&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/register.html&lt;/a&gt; (GitHub login, one click)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4dq6ze0cthzm0ntum5d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4dq6ze0cthzm0ntum5d.png" alt="1" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0u7ezalcj91v6cg57gxd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0u7ezalcj91v6cg57gxd.png" alt="2" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8ceiebx0codg2goxq402.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8ceiebx0codg2goxq402.png" alt="3" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkz9w1rds4ha61hxlf5k9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkz9w1rds4ha61hxlf5k9.png" alt="4" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq1ks205qcakoig1hq0m6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq1ks205qcakoig1hq0m6.png" alt="5" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>kimi</category>
    </item>
    <item>
      <title>Kimi K3 + GitHub Login — now live on AIBridge</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Thu, 23 Jul 2026 13:47:47 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/kimi-k3-github-login-now-live-on-aibridge-13og</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/kimi-k3-github-login-now-live-on-aibridge-13og</guid>
      <description>&lt;p&gt;Two things just went live on my API gateway:&lt;/p&gt;

&lt;h2&gt;
  
  
  Kimi K3 — 1M context, always reasoning
&lt;/h2&gt;

&lt;p&gt;No toggle. No "think step by step." It just thinks.&lt;/p&gt;

&lt;p&gt;1M context window. 4x Claude, 8x GPT-4o.&lt;br&gt;
Drop a whole codebase in one prompt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import openai
client = openai.OpenAI(
api_key="mb-xxx",
base_url="https://aibridge-api.com/v1"
)
client.chat.completions.create(
model="kimi-k3",
messages=[{"role":"user","content":"Review this entire repo for bugs"}]
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  GitHub OAuth — one click, no password
&lt;/h2&gt;

&lt;p&gt;Email → password → 6-digit code? Gone.&lt;/p&gt;

&lt;p&gt;Now it's: click GitHub → authorize → dashboard.&lt;/p&gt;

&lt;p&gt;Registration time: ~5 seconds.&lt;/p&gt;




&lt;p&gt;15 Chinese AI models (DeepSeek, Qwen, GLM, Kimi K3).&lt;br&gt;
One OpenAI-compatible endpoint. One API key.&lt;/p&gt;

&lt;p&gt;Free 500K tokens/month. Try K3 with no signup:&lt;br&gt;
→ aibridge-api.com/playground.html&lt;/p&gt;

&lt;p&gt;Or skip the email form entirely:&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/register.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj1jz3zj57prf31u0d3jv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj1jz3zj57prf31u0d3jv.png" alt="1" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fho9reh59fljbu3tyy84n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fho9reh59fljbu3tyy84n.png" alt="2" width="800" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbrbu5dwrsgblizjpuwkn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbrbu5dwrsgblizjpuwkn.png" alt="3" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzg66zcl5mzptakcmnzh1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzg66zcl5mzptakcmnzh1.png" alt="4" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffu2sxbp9ichibgaktmnx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffu2sxbp9ichibgaktmnx.png" alt="5" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>kimi</category>
      <category>github</category>
      <category>llm</category>
    </item>
    <item>
      <title>Kimi K3 meets GitHub login: two features, one week, zero friction</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Thu, 23 Jul 2026 02:34:29 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/kimi-k3-meets-github-login-two-features-one-week-zero-friction-2aj2</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/kimi-k3-meets-github-login-two-features-one-week-zero-friction-2aj2</guid>
      <description>&lt;p&gt;I added two things to my API gateway this week:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Kimi K3 — a reasoning model that thinks by default
&lt;/h2&gt;

&lt;p&gt;No toggle. No "please think step by step." No config.&lt;br&gt;
Just send the prompt. K3 reasons through it. Every time.&lt;/p&gt;

&lt;p&gt;1M context window. Drop a whole codebase in one prompt.&lt;br&gt;
4x what Claude gives you. 8x what o1 gives you.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import openai
client = openai.OpenAI(
api_key="mb-xxx",
base_url="https://aibridge-api.com/v1"
)
client.chat.completions.create(
model="kimi-k3",
messages=[{"role":"user","content":"Find every silent failure in this 5,000-line module"}]
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. GitHub OAuth — registration in one click
&lt;/h2&gt;

&lt;p&gt;Our old flow: email → password → verify inbox → type 6-digit code → finally get API key.&lt;br&gt;
Conversion rate: 1.4%.&lt;/p&gt;

&lt;p&gt;Now there's a "Continue with GitHub" button on the signup page.&lt;br&gt;
One click → authorize → you're in. Under 5 seconds.&lt;/p&gt;

&lt;p&gt;Same 15 models. Same 500K free tokens.&lt;br&gt;
Just no more 6-digit codes to copy-paste.&lt;/p&gt;

&lt;p&gt;Try either one free — no signup needed for the playground:&lt;br&gt;
→ aibridge-api.com/playground.html&lt;/p&gt;

&lt;p&gt;Or grab a key and skip the email verification entirely:&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/register.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiyc5u2wb1cqpbjyed23b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiyc5u2wb1cqpbjyed23b.png" alt="1" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv3gqadv37eh2myw4qel6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv3gqadv37eh2myw4qel6.png" alt="2" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg1r6wqnttl11isk99e1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg1r6wqnttl11isk99e1c.png" alt="3" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flhif5db3upqe28myiarm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flhif5db3upqe28myiarm.png" alt="4" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>kimi</category>
      <category>llm</category>
      <category>github</category>
    </item>
    <item>
      <title>Most reasoning models let you choose when to think.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Wed, 22 Jul 2026 13:17:39 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/most-reasoning-models-let-you-choose-when-to-think-mbn</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/most-reasoning-models-let-you-choose-when-to-think-mbn</guid>
      <description>&lt;p&gt;Most reasoning models let you choose when to think.&lt;/p&gt;

&lt;p&gt;Kimi K3 doesn't give you a choice. It always reasons — whether you ask it to or not.&lt;/p&gt;

&lt;p&gt;The difference shows up in the weirdest places. Debugging a race condition.&lt;br&gt;
Refactoring a 3,000-line module. Analyzing a log file. Tasks where most models&lt;br&gt;
skim the surface and K3 goes two layers deeper without being told.&lt;/p&gt;

&lt;p&gt;1M context window. 4x what Claude gives you. 8x what o1 gives you.&lt;/p&gt;

&lt;p&gt;import openai&lt;br&gt;
client = openai.OpenAI(&lt;br&gt;
    api_key="mb-xxx",&lt;br&gt;
    base_url="&lt;a href="https://aibridge-api.com/v1" rel="noopener noreferrer"&gt;https://aibridge-api.com/v1&lt;/a&gt;"&lt;br&gt;
)&lt;br&gt;
client.chat.completions.create(&lt;br&gt;
    model="kimi-k3",&lt;br&gt;
    messages=[{"role":"user","content":"Find the subtle bug in this codebase"}]&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;One key. 15 models. K3 just joined the lineup.&lt;/p&gt;

&lt;p&gt;Free trial — no signup: &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr82cpaf83ndae01hr3tc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr82cpaf83ndae01hr3tc.png" alt="1" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1d93swqfgiio34cps3e0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1d93swqfgiio34cps3e0.png" alt="2" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg9keia7mc1hoe7ks4jvv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg9keia7mc1hoe7ks4jvv.png" alt="3" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe30zsxibssqltkm7t8du.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe30zsxibssqltkm7t8du.png" alt="5" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>Most reasoning models make you choose: think mode ON or OFF.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Tue, 21 Jul 2026 10:58:11 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/most-reasoning-models-make-you-choose-think-mode-on-or-off-4hcj</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/most-reasoning-models-make-you-choose-think-mode-on-or-off-4hcj</guid>
      <description>&lt;p&gt;Most reasoning models make you choose: think mode ON or OFF.&lt;/p&gt;

&lt;p&gt;Kimi K3 doesn't have a toggle. It just thinks. Every time.&lt;/p&gt;

&lt;p&gt;I tested four models on the same complex debugging task:&lt;/p&gt;

&lt;p&gt;import openai&lt;br&gt;
client = openai.OpenAI(&lt;br&gt;
    api_key="mb-xxx",&lt;br&gt;
    base_url="&lt;a href="https://aibridge-api.com/v1" rel="noopener noreferrer"&gt;https://aibridge-api.com/v1&lt;/a&gt;"&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;Response:&lt;br&gt;
  GPT-4o        → quick but shallow, missed the off-by-one&lt;br&gt;
  DeepSeek R1   → thorough but 64K context clipped my trace&lt;br&gt;
  Claude 3.5    → caught the bug, but needed me to prompt "think step by step"&lt;br&gt;
  Kimi K3       → 1M context swallowed the entire 2000-line trace.&lt;br&gt;
                    Always-on reasoning caught the off-by-one&lt;br&gt;
                    without me asking for it.&lt;/p&gt;

&lt;p&gt;No &lt;code&gt;reasoning_effort&lt;/code&gt; prompt engineering.&lt;br&gt;
No &lt;code&gt;thinking&lt;/code&gt; parameter.&lt;br&gt;
No "please reason carefully" in the system message.&lt;/p&gt;

&lt;p&gt;Just send the prompt. K3 thinks. You get the answer.&lt;/p&gt;

&lt;p&gt;1M context. Always reasoning. One key alongside 14 other models.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkbsfyrgpw025zcbjtdal.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkbsfyrgpw025zcbjtdal.png" alt="1" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsg0pvt6fl61mo4hex4o1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsg0pvt6fl61mo4hex4o1.png" alt="2" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwjoripwfeurmayd0dksl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwjoripwfeurmayd0dksl.png" alt="3" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8xfsxjfmf78a4xq8k2tz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8xfsxjfmf78a4xq8k2tz.png" alt="4" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5um351y5cf9sawjow15u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5um351y5cf9sawjow15u.png" alt="5" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>I asked Kimi K3 to review my entire codebase. Here's what happened.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Tue, 21 Jul 2026 03:36:21 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/i-asked-kimi-k3-to-review-my-entire-codebase-heres-what-happened-48i7</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/i-asked-kimi-k3-to-review-my-entire-codebase-heres-what-happened-48i7</guid>
      <description>&lt;p&gt;I asked Kimi K3 to review my entire codebase. Here's what happened.&lt;/p&gt;

&lt;p&gt;Most AI code reviews work like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paste a function&lt;/li&gt;
&lt;li&gt;Get a suggestion&lt;/li&gt;
&lt;li&gt;Paste another function&lt;/li&gt;
&lt;li&gt;Get another suggestion&lt;/li&gt;
&lt;li&gt;Lose context. Miss the big picture.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Kimi K3 works differently. 1M context window.&lt;br&gt;
I dropped 8,000 lines of Python in one prompt.&lt;/p&gt;

&lt;p&gt;"Find every place where error handling is silently swallowing exceptions,&lt;br&gt;
cross-reference the call chain, and suggest a consistent fix."&lt;/p&gt;

&lt;p&gt;It thought for a moment — the reasoning pass is always on, no toggle needed —&lt;br&gt;
then returned a list of 12 locations, ranked by severity, with the exact&lt;br&gt;
line numbers and proposed diffs.&lt;/p&gt;

&lt;p&gt;Not just "add try/except here" — actual refactoring suggestions with&lt;br&gt;
call chain context. The kind of review you'd pay a senior dev for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 1M context advantage
&lt;/h2&gt;

&lt;p&gt;Other thinking models (Claude, o1) top out at 200K tokens. K3 gives you&lt;br&gt;
5x that. For codebases, that's the difference between reviewing one module&lt;br&gt;
and reviewing the whole app.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Context Window&lt;/th&gt;
&lt;th&gt;Reasoning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Kimi K3&lt;/td&gt;
&lt;td&gt;1M tokens&lt;/td&gt;
&lt;td&gt;Always on&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude 3.5 Sonnet&lt;/td&gt;
&lt;td&gt;200K&lt;/td&gt;
&lt;td&gt;Manual prompt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4o&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;Manual prompt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DeepSeek R1&lt;/td&gt;
&lt;td&gt;64K&lt;/td&gt;
&lt;td&gt;Always on&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;K3 is the only model on this list that combines always-on reasoning with&lt;br&gt;
a context window large enough for an entire production codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  The catch
&lt;/h2&gt;

&lt;p&gt;It's slower than a non-reasoning model. The thinking pass adds latency.&lt;br&gt;
For "What's 2+2?" it's overkill. For "Where's the race condition in my&lt;br&gt;
3,000-line async pipeline?" — worth every millisecond.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to try it
&lt;/h2&gt;

&lt;p&gt;K3 is available through AIBridge alongside 14 other Chinese models&lt;br&gt;
(DeepSeek, Qwen, GLM) behind one OpenAI-compatible endpoint:&lt;/p&gt;

&lt;p&gt;import openai&lt;br&gt;
client = openai.OpenAI(&lt;br&gt;
    api_key="mb-xxx",&lt;br&gt;
    base_url="&lt;a href="https://aibridge-api.com/v1" rel="noopener noreferrer"&gt;https://aibridge-api.com/v1&lt;/a&gt;"&lt;br&gt;
)&lt;br&gt;
client.chat.completions.create(&lt;br&gt;
    model="kimi-k3",&lt;br&gt;
    messages=[{"role":"user","content":"Review this repo for security bugs"}]&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;Same code. Different model string. That's the whole migration.&lt;/p&gt;

&lt;p&gt;Free 500K tokens/month to test K3 against your own codebase.&lt;br&gt;
No signup needed for the playground:&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8y6snhrhp6tb78m9t9cu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8y6snhrhp6tb78m9t9cu.png" alt=" " width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa0rnb8h7ug3rtjtu39fx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa0rnb8h7ug3rtjtu39fx.png" alt=" " width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fla1h8h4cjr2ekspp0sm0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fla1h8h4cjr2ekspp0sm0.png" alt=" " width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>kimi</category>
      <category>llm</category>
      <category>coderview</category>
    </item>
    <item>
      <title>Kimi K3: A model that thinks before it answers.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Mon, 20 Jul 2026 15:21:55 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/kimi-k3-a-model-that-thinks-before-it-answers-2g8p</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/kimi-k3-a-model-that-thinks-before-it-answers-2g8p</guid>
      <description>&lt;p&gt;Kimi K3: A model that thinks before it answers.&lt;/p&gt;

&lt;p&gt;No toggle. No config. Every request runs a reasoning pass first —&lt;br&gt;
then gives you the result.&lt;/p&gt;

&lt;p&gt;import openai&lt;br&gt;
client = openai.OpenAI(&lt;br&gt;
    api_key="mb-xxx",&lt;br&gt;
    base_url="&lt;a href="https://aibridge-api.com/v1" rel="noopener noreferrer"&gt;https://aibridge-api.com/v1&lt;/a&gt;"&lt;br&gt;
)&lt;br&gt;
client.chat.completions.create(&lt;br&gt;
    model="kimi-k3",&lt;br&gt;
    messages=[{"role":"user","content":"Refactor this module for performance"}]&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;1M context window. Drop a whole codebase in one prompt.&lt;br&gt;
14 models total. One key. Same code.&lt;/p&gt;

&lt;p&gt;Free 500K tokens/month. Try it without signing up:&lt;br&gt;
&lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ogzeqa6nyyt9fw4o6dw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ogzeqa6nyyt9fw4o6dw.png" alt="1" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbe0830ffhy7okyzuaytp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbe0830ffhy7okyzuaytp.png" alt="2" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>kimi</category>
      <category>k3</category>
    </item>
    <item>
      <title>I route 90% of my AI traffic to the cheapest model. Here's why your app should too.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Mon, 20 Jul 2026 14:42:18 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/i-route-90-of-my-ai-traffic-to-the-cheapest-model-heres-why-your-app-should-too-5eo7</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/i-route-90-of-my-ai-traffic-to-the-cheapest-model-heres-why-your-app-should-too-5eo7</guid>
      <description>&lt;p&gt;Most devs pick one model and send everything to it. That's like&lt;br&gt;
using a sledgehammer to hang a picture frame.&lt;/p&gt;
&lt;h2&gt;
  
  
  The wake-up call
&lt;/h2&gt;

&lt;p&gt;My app had three types of requests:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;"Summarize this email" — 200 tokens in, 100 out&lt;/li&gt;
&lt;li&gt;"Is this sentiment positive?" — 150 in, 5 out&lt;/li&gt;
&lt;li&gt;"Debug this Python function" — 2000 in, 800 out&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All three went to glm-4-plus at $7.10/M tokens.&lt;/p&gt;

&lt;p&gt;The sentiment check cost me $0.001 per call.&lt;br&gt;
The same call on deepseek-chat would cost $0.00003.&lt;/p&gt;

&lt;p&gt;33x cheaper. Same accuracy. I was burning money on a yes/no answer.&lt;/p&gt;
&lt;h2&gt;
  
  
  The routing logic
&lt;/h2&gt;

&lt;p&gt;It took 20 lines of code:&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="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;pick_model&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="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Cheap model for simple tasks
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;task_type&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;classify&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;sentiment&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summarize_short&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-chat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;          &lt;span class="c1"&gt;# $0.27/M
&lt;/span&gt;
    &lt;span class="c1"&gt;# Mid-tier for general work
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;task_type&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;draft&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;translate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summarize_long&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen-plus&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;              &lt;span class="c1"&gt;# ~$0.40/M
&lt;/span&gt;
    &lt;span class="c1"&gt;# Power model only when reasoning matters
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;task_type&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;debug&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;reason&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;analyze&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;glm-4-plus&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;             &lt;span class="c1"&gt;# $7.10/M
&lt;/span&gt;
    &lt;span class="c1"&gt;# Default: cheapest
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-chat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;


&lt;span class="c1"&gt;# Same endpoint, different model string — no code changes
&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="nf"&gt;pick_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msgs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;task_type&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="n"&gt;msgs&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;That's it. One function. One endpoint. The provider never knows&lt;br&gt;
which model I'm using — the gateway handles it.&lt;/p&gt;
&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;Metric  Before (all glm-4-plus) After (routed)&lt;br&gt;
Monthly cost    $180    $34&lt;br&gt;
Avg latency 1.4s    0.6s&lt;br&gt;
Quality complaints  0   0&lt;/p&gt;

&lt;p&gt;Quality didn't drop because the cheap model is plenty smart for&lt;br&gt;
90% of requests. It's the long-tail reasoning tasks that need the&lt;br&gt;
expensive brain — and those are only 10% of volume.&lt;/p&gt;

&lt;p&gt;The counter-argument I hear&lt;br&gt;
"But what if the cheap model gives a worse answer?"&lt;/p&gt;

&lt;p&gt;Test it. Run the same 100 prompts through both models blind.&lt;br&gt;
You'll be surprised how often the 0.27modelmatchesthe7 one.&lt;/p&gt;

&lt;p&gt;The gap between "best model" and "good-enough model" has&lt;br&gt;
collapsed. The gap between "good-enough model" and "your bill"&lt;br&gt;
has not.&lt;/p&gt;
&lt;h2&gt;
  
  
  When NOT to route
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Creative writing where you want the model's "voice"&lt;/li&gt;
&lt;li&gt;Safety-critical medical/legal reasoning&lt;/li&gt;
&lt;li&gt;Anything where 95% accuracy isn't acceptable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For everything else — chatbots, classifiers, summarizers, drafters,&lt;br&gt;
translators — route to the cheap model and pocket the difference.&lt;/p&gt;
&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;This only works if switching models is free. With direct provider&lt;br&gt;
accounts, each switch means a new SDK, new auth, new billing.&lt;/p&gt;

&lt;p&gt;With an OpenAI-compatible gateway, it's a string change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;client = openai.OpenAI(
    api_key="mb-xxx",
    base_url="https://aibridge-api.com/v1"
)

# Same call, 14 possible models, one bill
client.chat.completions.create(model="deepseek-chat", messages=msgs)
client.chat.completions.create(model="glm-4-plus", messages=msgs)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stop paying premium prices for yes/no answers.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com&lt;/a&gt; — 14 models, one endpoint, free 500K tokens/month&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fphzqhzmbcsc9e0ogf961.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fphzqhzmbcsc9e0ogf961.png" alt="1" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwb5sl617jq7oo8b5lkxu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwb5sl617jq7oo8b5lkxu.png" alt="2" width="800" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzbl157rphf66gts5s7x4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzbl157rphf66gts5s7x4.png" alt="3" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2yxfsm2xko7yf8zh6amb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2yxfsm2xko7yf8zh6amb.png" alt="5" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc8aatp19q4zdlxwb72zl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc8aatp19q4zdlxwb72zl.png" alt="6" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>70% of your AI API calls are duplicates. You're paying for them anyway.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Sun, 19 Jul 2026 07:28:45 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/70-of-your-ai-api-calls-are-duplicates-youre-paying-for-them-anyway-34a</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/70-of-your-ai-api-calls-are-duplicates-youre-paying-for-them-anyway-34a</guid>
      <description>&lt;p&gt;I analyzed 3 months of API logs for a production app. The results&lt;br&gt;
were embarrassing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The data
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;% of requests&lt;/th&gt;
&lt;th&gt;Cost share&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unique prompts&lt;/td&gt;
&lt;td&gt;28%&lt;/td&gt;
&lt;td&gt;34%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Near-duplicates&lt;/td&gt;
&lt;td&gt;41%&lt;/td&gt;
&lt;td&gt;52%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exact duplicates&lt;/td&gt;
&lt;td&gt;31%&lt;/td&gt;
&lt;td&gt;14%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;31% of calls were literally identical — same model, same prompt,&lt;br&gt;
same temperature. Every single one hit the provider and burned&lt;br&gt;
tokens.&lt;/p&gt;

&lt;p&gt;41% were "near-duplicates" — same system prompt, slightly different&lt;br&gt;
user input. A 10-word difference on a 500-token context. Wasted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;28%. That's how many of my API calls actually needed to reach the&lt;br&gt;
model.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix that took 5 minutes
&lt;/h2&gt;

&lt;p&gt;AIBridge has response caching built in. Not a separate Redis layer.&lt;br&gt;
Not a middleware I had to deploy. Just... on.&lt;/p&gt;

&lt;p&gt;curl &lt;a href="https://aibridge-api.com/v1/chat/completions" rel="noopener noreferrer"&gt;https://aibridge-api.com/v1/chat/completions&lt;/a&gt;&lt;br&gt;
-H "Authorization: Bearer mb-xxx"&lt;br&gt;
-H "Content-Type: application/json"&lt;br&gt;
-H "X-Cache-TTL: 3600"&lt;br&gt;
-d '{"model":"deepseek-chat","messages":[...]}'&lt;/p&gt;

&lt;p&gt;Add one header. &lt;code&gt;X-Cache-TTL: 3600&lt;/code&gt;. That's it.&lt;/p&gt;

&lt;p&gt;Same prompt within the hour? Returned from cache. Zero tokens.&lt;br&gt;
Zero latency. Zero cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;100% of requests hit provider&lt;/td&gt;
&lt;td&gt;~30% hit provider&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$120/month in API costs&lt;/td&gt;
&lt;td&gt;$38/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Avg latency 1.2s&lt;/td&gt;
&lt;td&gt;200ms (cached hits)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rate limit anxiety&lt;/td&gt;
&lt;td&gt;Gone&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The $82/month I saved isn't life-changing. But the latency&lt;br&gt;
improvement for cached responses is — users notice 200ms vs 1200ms.&lt;br&gt;
Every single time.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use it
&lt;/h2&gt;

&lt;p&gt;Not everything should be cached. Here's my rule:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Static system prompts ("You are a helpful coding assistant")&lt;/li&gt;
&lt;li&gt;✅ FAQ-style user prompts ("What's your return policy?")&lt;/li&gt;
&lt;li&gt;✅ Deterministic generation (temperature=0, JSON mode)&lt;/li&gt;
&lt;li&gt;❌ Creative generation (temperature &amp;gt; 0.5)&lt;/li&gt;
&lt;li&gt;❌ Per-user personalized responses&lt;/li&gt;
&lt;li&gt;❌ Real-time data queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For most SaaS apps — chatbots, customer support, documentation&lt;br&gt;
search — the cache hit rate should be above 50%.&lt;/p&gt;

&lt;p&gt;For API wrappers and middleware that resell AI access? 70%+ is&lt;br&gt;
realistic. Every cached response is pure margin.&lt;/p&gt;

&lt;h2&gt;
  
  
  The lesson
&lt;/h2&gt;

&lt;p&gt;Before you spend another dollar on API credits, check your logs&lt;br&gt;
for repeats. You're probably paying for the same answer twice.&lt;/p&gt;

&lt;p&gt;If you're on AIBridge, add &lt;code&gt;X-Cache-TTL&lt;/code&gt;. If you're not, build a&lt;br&gt;
simple in-memory cache. Either way, stop burning tokens on answers&lt;br&gt;
you already have.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com&lt;/a&gt; — 14 models, caching built in, free to start.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyyh2ziu410pobte1m6wg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyyh2ziu410pobte1m6wg.png" alt="1" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx2ijzpg0urlyolqjy5m5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx2ijzpg0urlyolqjy5m5.png" alt="2" width="800" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkbmuvmuhk6ykxs13pq68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkbmuvmuhk6ykxs13pq68.png" alt="3" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg3ve47vjfg2he1v3sfm4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg3ve47vjfg2he1v3sfm4.png" alt="4" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpud0wqpf7r74mszaw0kz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpud0wqpf7r74mszaw0kz.png" alt="5" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>I spent $47 testing 4 AI models last month. Here's what I learned.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Sat, 18 Jul 2026 13:14:07 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/i-spent-47-testing-4-ai-models-last-month-heres-what-i-learned-51g8</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/i-spent-47-testing-4-ai-models-last-month-heres-what-i-learned-51g8</guid>
      <description>&lt;p&gt;I spent $47 testing 4 AI models last month. Here's what I learned.&lt;/p&gt;

&lt;p&gt;Not about the models. About the workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;Same prompt. Same temperature (0.3). Same max_tokens (500).&lt;br&gt;
Four different models through the same endpoint.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Avg Latency&lt;/th&gt;
&lt;th&gt;Cost/1M tokens&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;deepseek-chat&lt;/td&gt;
&lt;td&gt;1.2s&lt;/td&gt;
&lt;td&gt;$0.27&lt;/td&gt;
&lt;td&gt;General purpose, fastest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;qwen-max&lt;/td&gt;
&lt;td&gt;0.8s&lt;/td&gt;
&lt;td&gt;$2.80&lt;/td&gt;
&lt;td&gt;Multilingual, structured output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;glm-4-plus&lt;/td&gt;
&lt;td&gt;1.5s&lt;/td&gt;
&lt;td&gt;$7.10&lt;/td&gt;
&lt;td&gt;Complex Chinese reasoning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;moonshot-v1-32k&lt;/td&gt;
&lt;td&gt;1.0s&lt;/td&gt;
&lt;td&gt;$12.00&lt;/td&gt;
&lt;td&gt;Long context summarization&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Notice something? The cheapest model is also the fastest.&lt;br&gt;
And the most expensive isn't always the best — it depends on&lt;br&gt;
&lt;em&gt;what you're asking&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The discovery that made me angry
&lt;/h2&gt;

&lt;p&gt;I was using 4 different API keys. Four &lt;code&gt;pip install&lt;/code&gt; commands.&lt;br&gt;
Four different &lt;code&gt;create()&lt;/code&gt; signatures. Four dashboards to check&lt;br&gt;
at the end of the month.&lt;/p&gt;

&lt;p&gt;Then I realized: they're all OpenAI-compatible.&lt;/p&gt;

&lt;p&gt;All of them. Every single one.&lt;/p&gt;

&lt;p&gt;So I swapped 4 &lt;code&gt;base_url&lt;/code&gt; strings for 1. I changed nothing else.&lt;br&gt;
Same &lt;code&gt;openai&lt;/code&gt; library. Same code. Same response parsing.&lt;/p&gt;

&lt;p&gt;client = openai.OpenAI(&lt;br&gt;
api_key="mb-xxx",&lt;br&gt;
base_url="&lt;a href="https://aibridge-api.com/v1" rel="noopener noreferrer"&gt;https://aibridge-api.com/v1&lt;/a&gt;"&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;DeepSeek&lt;br&gt;
client.chat.completions.create(model="deepseek-chat", messages=msgs)&lt;/p&gt;

&lt;p&gt;Qwen — literally the same call&lt;br&gt;
client.chat.completions.create(model="qwen-max", messages=msgs)&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually gained
&lt;/h2&gt;

&lt;p&gt;Not just cleaner code. Three things I didn't expect:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Free exploration.&lt;/strong&gt; The free tier (500K tokens/month) means I&lt;br&gt;
can test models without committing to a paid account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Model routing.&lt;/strong&gt; My app now picks the model based on the task&lt;br&gt;
at runtime — cheap model for summarization, powerful model for&lt;br&gt;
reasoning. One endpoint makes this trivial.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;One bill.&lt;/strong&gt; I don't log into 4 dashboards anymore. I don't&lt;br&gt;
worry about 4 separate rate limits. I don't get 4 emails when&lt;br&gt;
my card expires.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The rule I follow now
&lt;/h2&gt;

&lt;p&gt;If you're building anything that calls an AI model, abstract the&lt;br&gt;
provider layer on day one. Not day 30 when DeepSeek rate-limits&lt;br&gt;
you and you're scrambling to wire up Qwen before users notice.&lt;/p&gt;

&lt;p&gt;The abstraction pays for itself the first time you switch.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com&lt;/a&gt; — 14 models, one endpoint, free to start.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbyswqd74rio11pba1v84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbyswqd74rio11pba1v84.png" alt="1" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F84pqqgsdn6qz68oel841.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F84pqqgsdn6qz68oel841.png" alt="2" width="800" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0coef86q5rm27e4m9wl4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0coef86q5rm27e4m9wl4.png" alt="3" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fws993raofgzf9vlhkxk8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fws993raofgzf9vlhkxk8.png" alt="4" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbffbxg2g0rtwkuucfwbv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbffbxg2g0rtwkuucfwbv.png" alt="5" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>I built a working AI chatbot in 50 lines of HTML.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Fri, 17 Jul 2026 11:17:30 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/i-built-a-working-ai-chatbot-in-50-lines-of-html-3l07</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/i-built-a-working-ai-chatbot-in-50-lines-of-html-3l07</guid>
      <description>&lt;p&gt;I built a working AI chatbot in 50 lines of HTML.&lt;/p&gt;

&lt;p&gt;No backend. No build step. No framework.&lt;/p&gt;

&lt;p&gt;One HTML file. One API key. Open it in your browser.&lt;br&gt;
It works.&lt;/p&gt;

&lt;p&gt;Here's the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;title&amp;gt;&lt;/span&gt;Minimal Chat&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"chat"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"msg"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Ask anything..."&lt;/span&gt;
         &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"width:300px;padding:8px"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"send()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Send&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mb-your-api-key-here&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;b&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;:&amp;lt;/b&amp;gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;msg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://aibridge-api.com/v1/chat/completions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;deepseek-chat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;prompt&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;AI&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&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="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No npm install. No Express server. No .env files.&lt;br&gt;
Save as chat.html, double-click, start talking.&lt;/p&gt;

&lt;p&gt;Want streaming? Add "stream": true to the body.&lt;br&gt;
Want a different model? Change "deepseek-chat" to "qwen-max".&lt;/p&gt;

&lt;p&gt;That's the power of a truly OpenAI-compatible API.&lt;/p&gt;

&lt;p&gt;14 models. One endpoint. Free tier is 500K tokens/month.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwa002oajyv3fcyb3mqe8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwa002oajyv3fcyb3mqe8.png" alt="1" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc060tx5dqgldgpo4nwkn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc060tx5dqgldgpo4nwkn.png" alt="2" width="800" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6tyzn22wrc8lw1lr4gn8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6tyzn22wrc8lw1lr4gn8.png" alt="3" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fklhqy2yvhvjs8g094y01.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fklhqy2yvhvjs8g094y01.png" alt="4" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>I tried switching my app from OpenAI to DeepSeek.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Thu, 16 Jul 2026 14:17:38 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/i-tried-switching-my-app-from-openai-to-deepseek-348a</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/i-tried-switching-my-app-from-openai-to-deepseek-348a</guid>
      <description>&lt;p&gt;I tried switching my app from OpenAI to DeepSeek.&lt;/p&gt;

&lt;p&gt;Here's what I had to learn: nothing.&lt;/p&gt;

&lt;p&gt;import openai&lt;br&gt;
client = openai.OpenAI(&lt;br&gt;
    api_key="mb-xxx",&lt;br&gt;
    base_url="&lt;a href="https://aibridge-api.com/v1" rel="noopener noreferrer"&gt;https://aibridge-api.com/v1&lt;/a&gt;"&lt;br&gt;
)&lt;br&gt;
client.chat.completions.create(&lt;br&gt;
    model="deepseek-chat",&lt;br&gt;
    messages=[{"role": "user", "content": "hello"}]&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;Same library. Same function signatures. Same response format.&lt;br&gt;
Just a different model string.&lt;/p&gt;

&lt;p&gt;That's the whole migration. Zero new SDKs. Zero new documentation.&lt;br&gt;
Zero hours spent learning another provider's quirks.&lt;/p&gt;

&lt;p&gt;14 models (DeepSeek, Qwen, GLM, Moonshot) behind the same interface&lt;br&gt;
you're already using.&lt;/p&gt;

&lt;p&gt;Free tier: 500K tokens/month. No credit card.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.tourl"&gt;aibridge-api.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3udo8ofi9obkv42t95vl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3udo8ofi9obkv42t95vl.png" alt="1" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmml6damt8ae7oztznvha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmml6damt8ae7oztznvha.png" alt="2" width="800" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuiclfm0jo5w0tl4velxc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuiclfm0jo5w0tl4velxc.png" alt="3" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1wikxjyki6025ztxk8g5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1wikxjyki6025ztxk8g5.png" alt="4" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk6pu420raixa1brb6zo5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk6pu420raixa1brb6zo5.png" alt="5" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

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