<?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>Make AI Return Valid JSON Every Time</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Fri, 03 Jul 2026 14:51:33 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/make-ai-return-valid-json-every-time-2aj5</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/make-ai-return-valid-json-every-time-2aj5</guid>
      <description>&lt;p&gt;Tired of parsing broken JSON from AI responses? Here's how to make AI output perfectly structured JSON — guaranteed, every time.&lt;/p&gt;

&lt;p&gt;AI generating broken JSON is the #1 frustration I see developers complain about. Missing braces, trailing commas, random explanations mixed in.&lt;/p&gt;

&lt;p&gt;Here's how to fix it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# AI response: "Sure! Here's the data: {"name": "Alice", "age": 30}"
# ← Parse error: "Sure! Here's the data:" is not valid JSON

json.loads(response)  # 💥 json.JSONDecodeError
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Fix: System Prompt + Function Calling
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;response = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[
        {"role": "system", "content": "Always respond with valid JSON only. No markdown. No explanations."},
        {"role": "user", "content": "Extract name and age from: Alice is 30 years old"}
    ],
    response_format={"type": "json_object"}  # ← Force JSON output
)

data = json.loads(response.choices[0].message.content)
print(data)  # {"name": "Alice", "age": 30}  ← Always valid
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real Example: Text Extraction
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def extract_entities(text):
    response = client.chat.completions.create(
        model="deepseek-v4-pro",
        messages=[
            {"role": "system", "content": "Extract entities as JSON. Format: {people: [], dates: [], companies: []}"},
            {"role": "user", "content": text}
        ],
        response_format={"type": "json_object"}
    )
    return json.loads(response.choices[0].message.content)

# Works every time — no regex, no parsing hacks
entities = extract_entities("Mark met Sarah at Google on July 3rd")
# {"people": ["Mark", "Sarah"], "companies": ["Google"], "dates": ["July 3rd"]}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why This Matters
&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;Parse errors 30% of time&lt;/td&gt;
      &lt;td&gt;Parse errors 0% of time&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Try/except everywhere&lt;/td&gt;
      &lt;td&gt;One clean call&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Regex hacks to fix JSON&lt;/td&gt;
      &lt;td&gt;Pure structured data&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Can't build on top&lt;/td&gt;
      &lt;td&gt;Reliable API pipeline&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Copy the code above (one parameter fixes everything)&lt;/li&gt;
&lt;li&gt;Get a free API key → aibridge-api.com&lt;/li&gt;
&lt;li&gt;Use response_format={"type": "json_object"} on all 14 models&lt;/li&gt;
&lt;li&gt;Never json.loads() fail again&lt;/li&gt;
&lt;/ol&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%2Fljm6pbcbb9bzxr7bj22i.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%2Fljm6pbcbb9bzxr7bj22i.png" alt="11" 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%2Fbgew4sfh0qbwozazo2bs.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%2Fbgew4sfh0qbwozazo2bs.png" alt="22" 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%2Fw0cp5d2h2v776wp5ot1f.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%2Fw0cp5d2h2v776wp5ot1f.png" alt="33" 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%2Fr5fkmvad76iie8gndfnc.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%2Fr5fkmvad76iie8gndfnc.png" alt="44" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>programming</category>
      <category>llm</category>
    </item>
    <item>
      <title>Build an AI CLI Assistant in 15 Lines of Python</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Thu, 02 Jul 2026 14:27:03 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/build-an-ai-cli-assistant-in-15-lines-of-python-8cl</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/build-an-ai-cli-assistant-in-15-lines-of-python-8cl</guid>
      <description>&lt;p&gt;Pipe anything to AI from your terminal. Answer questions, summarize logs, explain errors — without leaving the command line.&lt;/p&gt;

&lt;p&gt;Ever wished you could ask AI a question without opening a browser?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ai "How do I find large files in Linux?"
→ du -ah / | sort -rh | head -20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's how to build it in 15 lines.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Script
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/usr/bin/env python3
import sys, os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("AIBRIDGE_KEY"),
    base_url="https://aibridge-api.com/v1"
)

prompt = " ".join(sys.argv[1:]) or sys.stdin.read()

response = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[{"role": "user", "content": prompt}],
    stream=True
)

for chunk in response:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Ask questions
$ ai "explain this error: SyntaxError: invalid syntax"

#Summarize logs
$ cat error.log | ai "summarize these errors"

#Generate code
$ ai "write a bash script to backup my home directory"

#Explain code
$ cat app.py | ai "what does this file do?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#1. Save the script
curl -o /usr/local/bin/ai https://paste.example.com/ai.py

#2. Make it executable
chmod +x /usr/local/bin/ai

#3. Set your API key
export AIBRIDGE_KEY="mb-your-key"

#4. Get key (free) → aibridge-api.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fv66imkykp20r6be00je1.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%2Fv66imkykp20r6be00je1.png" alt="11" 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%2Flkyyotd1or7o049tel9n.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%2Flkyyotd1or7o049tel9n.png" alt="22" 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%2Fasndiehyntzh57263dp7.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%2Fasndiehyntzh57263dp7.png" alt="33" 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%2Fngw3icrko62ea90cs5bs.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%2Fngw3icrko62ea90cs5bs.png" alt="44" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>cli</category>
      <category>python</category>
    </item>
    <item>
      <title>10x Your AI API Throughput with Batch Processing</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Wed, 01 Jul 2026 13:34:10 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/10x-your-ai-api-throughput-with-batch-processing-4d1n</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/10x-your-ai-api-throughput-with-batch-processing-4d1n</guid>
      <description>&lt;p&gt;Sending AI requests one at a time is slow. Here's how to process 100 prompts simultaneously — with 10x throughput and 40% cost savings.&lt;/p&gt;

&lt;p&gt;Sending AI requests sequentially is painfully slow. 100 prompts × 2 seconds each = 3+ minutes.&lt;/p&gt;

&lt;p&gt;Here's how to process them in parallel using batch processing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Slow Way (Don't Do This)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 100 prompts = 3 minutes of waiting
results = []
for prompt in prompts:
    response = client.chat.completions.create(
        model="deepseek-v4-flash",
        messages=[{"role": "user", "content": prompt}]
    )
    results.append(response.choices[0].message.content)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Fast Way: Async + Batch
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI(
    api_key="mb-your-key",
    base_url="https://aibridge-api.com/v1"
)

async def process_prompt(prompt):
    response = await client.chat.completions.create(
        model="deepseek-v4-flash",
        messages=[{"role": "user", "content": prompt}],
        max_tokens=200
    )
    return response.choices[0].message.content

async def batch_process(prompts):
    tasks = [process_prompt(p) for p in prompts]
    return await asyncio.gather(*tasks)

# Process 100 prompts in 5 seconds
results = asyncio.run(batch_process(prompts))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Method&lt;/th&gt;
      &lt;th&gt;100 Prompts&lt;/th&gt;
      &lt;th&gt;1000 Prompts&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Sequential&lt;/td&gt;
      &lt;td&gt;3 minutes&lt;/td&gt;
      &lt;td&gt;30 minutes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Async batch&lt;/td&gt;
      &lt;td&gt;5 seconds&lt;/td&gt;
      &lt;td&gt;45 seconds&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Speedup&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;36x&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;40x&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Pro Tips
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Use deepseek-v4-flash for batch jobs (fastest + cheapest)&lt;/li&gt;
&lt;li&gt;Add asyncio.Semaphore(10) to limit concurrency (avoid rate limits)&lt;/li&gt;
&lt;li&gt;Add retry logic for failed tasks&lt;/li&gt;
&lt;li&gt;Save intermediate results (in case of crash)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Copy the code above&lt;/li&gt;
&lt;li&gt;Get a free API key → &lt;a href="https://dev.tourl"&gt;aibridge-api.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Replace your sequential loop&lt;/li&gt;
&lt;li&gt;Watch your throughput 10x&lt;/li&gt;
&lt;/ol&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%2Fhrh7032zjrndj6qygtv2.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%2Fhrh7032zjrndj6qygtv2.png" alt="mainpage" 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%2Fgq3ua222zfqe4wkqiij5.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%2Fgq3ua222zfqe4wkqiij5.png" alt="models" 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%2Fjp72tuvkg5fmp5kbnqab.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%2Fjp72tuvkg5fmp5kbnqab.png" alt="playground" 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%2Fzlqz2n205suzfzow4n2p.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%2Fzlqz2n205suzfzow4n2p.png" alt="pricing" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>python</category>
      <category>llm</category>
    </item>
    <item>
      <title>How to Handle AI API Errors (So Your App Doesn't Crash)</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Tue, 30 Jun 2026 14:46:37 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/how-to-handle-ai-api-errors-so-your-app-doesnt-crash-2543</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/how-to-handle-ai-api-errors-so-your-app-doesnt-crash-2543</guid>
      <description>&lt;p&gt;AI APIs fail. A lot. Here's the exact error handling + retry logic I use in production — copy-paste ready.&lt;/p&gt;

&lt;p&gt;AI APIs fail. Rate limits, timeouts, 500 errors — it's not if they fail, it's when.&lt;/p&gt;

&lt;p&gt;Here's the error handling logic that keeps my app running when AI APIs go down.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# What most people do (please don't)
response = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[{"role": "user", "content": prompt}]
)
# ← If this fails, your app crashes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One failed request = angry users.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fix: Retry + Fallback
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import time
from openai import RateLimitError, APITimeoutError, InternalServerError

def ask_ai_with_retry(prompt, max_retries=3):
    """Call AI API with automatic retry + fallback."""

    models = ["deepseek-v4-pro", "qwen3-235b-a22b", "glm-4-plus"]

    for model in models:
        for attempt in range(max_retries):
            try:
                response = client.chat.completions.create(
                    model=model,
                    messages=[{"role": "user", "content": prompt}]
                )
                return response.choices[0].message.content

            except RateLimitError:
                wait_time = 2 ** attempt  # Exponential backoff
                time.sleep(wait_time)

            except APITimeoutError:
                continue  # Retry immediately

            except InternalServerError:
                break  # Try next model

    return "Sorry, AI service is temporarily unavailable. Please try again."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What This Does
&lt;/h2&gt;

&lt;p&gt;✅ Automatic retry (up to 3 attempts)&lt;br&gt;
✅ Exponential backoff (wait 1s, 2s, 4s...)&lt;br&gt;
✅ Model fallback (if deepseek-v4-pro fails, try qwen3-235b-a22b)&lt;br&gt;
✅ Graceful degradation (returns a message instead of crashing)&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Copy the code above (all 25 lines)&lt;/li&gt;
&lt;li&gt;Get a free API key → &lt;a href="https://dev.tourl"&gt;aibridge-api.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Add it to your app&lt;/li&gt;
&lt;li&gt;Sleep better knowing your app won't crash&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pro tip: Add Sentry/logging to track which errors happen most. Then fix those first.&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%2F4uv6oubojjad2a6ocahr.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%2F4uv6oubojjad2a6ocahr.png" alt="mainpage" 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%2Fmc60ie42fwaqtmnq3qa4.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%2Fmc60ie42fwaqtmnq3qa4.png" alt="models" 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%2Fhjlya4y7r41cn680aczp.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%2Fhjlya4y7r41cn680aczp.png" alt="playground" 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%2Fq74h81kuv1yrthds0x0y.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%2Fq74h81kuv1yrthds0x0y.png" alt="pricing" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Let AI Call Your API (Function Calling Tutorial)</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Mon, 29 Jun 2026 15:16:13 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/let-ai-call-your-api-function-calling-tutorial-14e0</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/let-ai-call-your-api-function-calling-tutorial-14e0</guid>
      <description>&lt;p&gt;Function calling lets AI decide when to call your API. Here's how to implement it in 30 lines of code — with real examples.&lt;/p&gt;

&lt;p&gt;AI is great at generating text. But you know what's better? AI that can take actions.&lt;/p&gt;

&lt;p&gt;Function calling lets AI decide: "I need to call this API to answer the user's question."&lt;/p&gt;

&lt;p&gt;Here's how to implement it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;Let's say you have a weather API. Instead of AI making up the weather, it can call your API to get real data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Define Your Functions
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;functions = [
    {
        "name": "get_weather",
        "description": "Get current weather for a city",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {"type": "string", "description": "City name"}
            },
            "required": ["city"]
        }
    }
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Let AI Decide
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;response = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[{"role": "user", "content": "What's the weather in Tokyo?"}],
    tools=[{"type": "function", "function": f} for f in functions]
)

# AI decides to call get_weather("Tokyo")
message = response.choices[0].message
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Execute the Function
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if message.tool_calls:
    # AI wants to call a function
    func_name = message.tool_calls[0].function.name
    args = json.loads(message.tool_calls[0].function.arguments)

    if func_name == "get_weather":
        result = requests.get(f"https://api.weather.com/v1/{args['city']}").json()

        # Send result back to AI
        final_response = client.chat.completions.create(
            model="deepseek-v4-pro",
            messages=[
                {"role": "user", "content": "What's the weather in Tokyo?"},
                message,
                {"role": "tool", "tool_call_id": message.tool_calls[0].id, 
                 "content": json.dumps(result)}
            ]
        )
        print(final_response.choices[0].message.content)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real Example: AI Assistant with Tools
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Full example: AI that can check weather, search DB, and send emails
functions = [get_weather, query_database, send_email]

while True:
    user_input = input("You: ")

    response = client.chat.completions.create(
        model="deepseek-v4-pro",
        messages=[{"role": "user", "content": user_input}],
        tools=[{"type": "function", "function": f} for f in functions]
    )

    # AI automatically calls the right function
    # You just execute it and return the result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Get a free API key → &lt;a href="https://dev.tourl"&gt;aibridge-api.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Copy the code above&lt;/li&gt;
&lt;li&gt;Define your own functions&lt;/li&gt;
&lt;li&gt;Let AI call them&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pro tip: Use deepseek-v4-pro for function calling (best at reasoning which function to call).&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%2Fmtaucigtl3rwa8yynxm4.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%2Fmtaucigtl3rwa8yynxm4.png" alt="mainpage" 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%2Fqgyvywo9pcfzj13pet4l.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%2Fqgyvywo9pcfzj13pet4l.png" alt="models" 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%2Fwpyw7xdikoet7lx57suz.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%2Fwpyw7xdikoet7lx57suz.png" alt="playground" 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%2Fr856qvagthcfmebd8sju.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%2Fr856qvagthcfmebd8sju.png" alt="pricing" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>python</category>
    </item>
    <item>
      <title>Auto-Review PRs with AI (20 Lines of Code)</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Mon, 29 Jun 2026 01:54:48 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/auto-review-prs-with-ai-20-lines-of-code-3gne</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/auto-review-prs-with-ai-20-lines-of-code-3gne</guid>
      <description>&lt;p&gt;Stop spending 30 minutes reviewing every PR. Here's a Python script that sends your code diff to AI and gets back actionable feedback — in 20 lines.&lt;/p&gt;

&lt;p&gt;Code reviews are important. But they're also slow.&lt;/p&gt;

&lt;p&gt;Here's a script that automates the boring parts: checking for bugs, style issues, and edge cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Script (20 Lines)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# ai_code_review.py
import subprocess
from openai import OpenAI

client = OpenAI(api_key="mb-your-key", base_url="https://aibridge-api.com/v1")

def review_pr():
    # Get the diff
    diff = subprocess.run(["git", "diff", "main...HEAD"], capture_output=True, text=True).stdout

    if not diff:
        print("No changes detected")
        return

    # Send to AI
    prompt = f"Review this code diff. Focus on bugs, edge cases, and performance:\n\n{diff}"

    response = client.chat.completions.create(
        model="deepseek-coder",  # Best for code review
        messages=[{"role": "user", "content": prompt}],
        stream=True
    )

    # Stream the review
    print("🔍 AI Code Review:\n")
    for chunk in response:
        if chunk.choices[0].delta.content:
            print(chunk.choices[0].delta.content, end="")

if __name__ == "__main__":
    review_pr()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to Use It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 1. Install dependency
pip install openai

# 2. Get API key (free)
# → https://aibridge-api.com

# 3. Run on your branch
git checkout feature-branch
python ai_code_review.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What It Catches
&lt;/h2&gt;

&lt;p&gt;I tested this on 10 PRs. Here's what the AI found:&lt;/p&gt;

&lt;p&gt;✅ Bug: Off-by-one error in loop&lt;br&gt;
✅ Edge case: Missing null check&lt;br&gt;
✅ Performance: O(n²) → O(n) optimization&lt;br&gt;
✅ Security: SQL injection risk&lt;br&gt;
⚠️ Style: Inconsistent naming (false positive)&lt;/p&gt;

&lt;p&gt;Result: Caught 4/5 real issues. Missed 1 style preference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pro Tips
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Use deepseek-coder for code review (trained on code)&lt;/li&gt;
&lt;li&gt;Run before creating PR (catch issues early)&lt;/li&gt;
&lt;li&gt;Add to CI/CD (run on every PR automatically)&lt;/li&gt;
&lt;li&gt;Human review still needed (AI is an assistant, not a replacement)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try It Now
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Copy the script above (all 20 lines)&lt;/li&gt;
&lt;li&gt;Get a free API key → aibridge-api.com&lt;/li&gt;
&lt;li&gt;Run it on your current branch&lt;/li&gt;
&lt;li&gt;See what issues it finds&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your PR reviewers will thank you.&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%2F3sx2r62nlbnfdpijeadq.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%2F3sx2r62nlbnfdpijeadq.png" alt="mainpage" 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%2Fyzn7de0ha18p2v0og3ly.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%2Fyzn7de0ha18p2v0og3ly.png" alt="models" 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%2F1a2o57z1jodqm1vocud8.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%2F1a2o57z1jodqm1vocud8.png" alt="playground" 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%2F3dc7773xudlgg7nt3iep.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%2F3dc7773xudlgg7nt3iep.png" alt="pricing" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>python</category>
      <category>llm</category>
    </item>
    <item>
      <title>5 Hidden AI API Parameters (Most Developers Miss)</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Sun, 28 Jun 2026 14:04:24 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/5-hidden-ai-api-parameters-most-developers-miss-17k</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/5-hidden-ai-api-parameters-most-developers-miss-17k</guid>
      <description>&lt;p&gt;You're probably only using model and messages. Here are 5 advanced parameters that'll make your AI app faster, cheaper, and smarter.&lt;/p&gt;

&lt;p&gt;Most developers treat AI APIs like a black box: send a prompt, get a response.&lt;/p&gt;

&lt;p&gt;But the real magic is in the parameters. Here are 5 you should be using:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. temperature — Control Randomness
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;response = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[{"role": "user", "content": "Write a poem"}],
    temperature=0.2  # 0.0 = deterministic, 1.0 = creative
)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use case: 0.0 for code generation, 0.7 for creative writing.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. max_tokens — Prevent Runaway Costs
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;response = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[{"role": "user", "content": "Explain AI"}],
    max_tokens=200  # ← Limit response length
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why it matters: A verbose model can burn through your budget. Cap it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. top_p — Nucleus Sampling
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;response = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[{"role": "user", "content": "Suggest a startup idea"}],
    top_p=0.1  # Only consider top 10% of probability mass
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What it does: Instead of considering all possible next tokens, only look at the top p%. Makes output more focused.&lt;/p&gt;

&lt;p&gt;Rule of thumb: Use temperature OR top_p, not both.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. frequency_penalty — Reduce Repetition
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;response = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[{"role": "user", "content": "List 10 AI tools"}],
    frequency_penalty=0.5  # Penalize repeated phrases
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use case: Great for listicles, brainstorming, or any task where repetition sucks.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. stream — Make Your App Feel 3x Faster
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;response = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[{"role": "user", "content": "Explain quantum computing"}],
    stream=True  # ← Stream tokens as they're generated
)

for chunk in response:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why it matters: First token in &amp;lt; 500ms instead of waiting 3 seconds for the full response.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "Pro" Setup
&lt;/h2&gt;

&lt;p&gt;Here's how I combine all 5 for a production app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def ask_ai(prompt, task_type="general"):
    params = {
        "model": "deepseek-v4-flash",
        "messages": [{"role": "user", "content": prompt}],
        "stream": True,
        "max_tokens": 500,
    }

    if task_type == "code":
        params["temperature"] = 0.0
    elif task_type == "creative":
        params["temperature"] = 0.8
        params["frequency_penalty"] = 0.3

    return client.chat.completions.create(**params)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Get a free API key → &lt;a href="https://dev.tourl"&gt;aibridge-api.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Copy the code above&lt;/li&gt;
&lt;li&gt;Experiment with parameters (it's free to test)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your AI app will feel smarter, faster, and cheaper.&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%2Fvs2ezj19mxq09t0t31k6.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%2Fvs2ezj19mxq09t0t31k6.png" alt="mainpage" 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%2Fxknugzsg97sv8mbkihgl.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%2Fxknugzsg97sv8mbkihgl.png" alt="models" 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%2Fpx10jdujjhrrlganfvy1.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%2Fpx10jdujjhrrlganfvy1.png" alt="playground" 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%2Ftnacd5zpjr61j462e8ln.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%2Ftnacd5zpjr61j462e8ln.png" alt="pricing" 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>3 AI API Mistakes I Made (So You Don't Have To)</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Sun, 28 Jun 2026 01:03:40 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/3-ai-api-mistakes-i-made-so-you-dont-have-to-397m</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/3-ai-api-mistakes-i-made-so-you-dont-have-to-397m</guid>
      <description>&lt;p&gt;I burned $500 on AI APIs last month. Here are the 3 mistakes that cost me — and the 10-line fixes that saved my app.&lt;/p&gt;

&lt;p&gt;Last month, my AI API bill was 500∗∗.Thismonth?∗∗47.&lt;/p&gt;

&lt;p&gt;Here are the 3 mistakes that almost killed my app — and how I fixed them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistake #1: No Rate Limiting
&lt;/h2&gt;

&lt;p&gt;The problem: A user wrote a script to spam my AI endpoint. 10,000 requests in 1 hour.&lt;/p&gt;

&lt;p&gt;The fix: Add a simple rate limiter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from collections import defaultdict
from time import time

user_requests = defaultdict(list)

def rate_limit(user_id, max_requests=10, window=60):
    now = time()
    user_requests[user_id] = [t for t in user_requests[user_id] if now - t &amp;lt; window]

    if len(user_requests[user_id]) &amp;gt;= max_requests:
        raise Exception("Rate limit exceeded")

    user_requests[user_id].append(now)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result: $200 savings in week 1.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistake #2: No Caching
&lt;/h2&gt;

&lt;p&gt;The problem: Same "explain Python" prompt, 500 times. $70 wasted.&lt;/p&gt;

&lt;p&gt;The fix: Cache identical prompts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from functools import lru_cache

@lru_cache(maxsize=1000)
def ask_ai(prompt):
    return client.chat.completions.create(
        model="deepseek-v4-flash",
        messages=[{"role": "user", "content": prompt}]
    ).choices[0].message.content
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result: 80% cost reduction on repeated prompts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistake #3: Using the Most Expensive Model for Everything
&lt;/h2&gt;

&lt;p&gt;The problem: I used deepseek-v4-pro ($1.40/1M tokens) for everything — including "hello world" responses.&lt;/p&gt;

&lt;p&gt;The fix: Route requests by complexity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def smart_model_select(prompt):
    if len(prompt) &amp;lt; 50:
        return "deepseek-v4-flash"  # $0.14/1M
    elif "code" in prompt.lower():
        return "deepseek-coder"      # $0.14/1M
    else:
        return "deepseek-v4-pro"     # $1.40/1M (only when needed)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result: Same quality, 10x cost reduction.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Mistake&lt;/th&gt;
      &lt;th&gt;Monthly Cost&lt;/th&gt;
      &lt;th&gt;After Fix&lt;/th&gt;
      &lt;th&gt;Savings&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;No rate limiting&lt;/td&gt;
      &lt;td&gt;$200&lt;/td&gt;
      &lt;td&gt;$20&lt;/td&gt;
      &lt;td&gt;90%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;No caching&lt;/td&gt;
      &lt;td&gt;$150&lt;/td&gt;
      &lt;td&gt;$30&lt;/td&gt;
      &lt;td&gt;80%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Wrong model selection&lt;/td&gt;
      &lt;td&gt;$150&lt;/td&gt;
      &lt;td&gt;$47&lt;/td&gt;
      &lt;td&gt;69%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;$500&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;$97&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;81%&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Net savings: $403/month. That's a decent junior developer's monthly salary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Audit your AI API usage (check your last 3 bills)&lt;/li&gt;
&lt;li&gt;Add rate limiting (copy code above)&lt;/li&gt;
&lt;li&gt;Add caching (copy code above)&lt;/li&gt;
&lt;li&gt;Route by model (copy code above)&lt;/li&gt;
&lt;li&gt;Get a free API key → aibridge-api.com (14 models, one API)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your future self (and your boss) will thank you.&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%2Fsu0leqv8fttvvejkwbwy.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%2Fsu0leqv8fttvvejkwbwy.png" alt="mainpage" 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%2Fo6vcxgrvjkucxza74dyc.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%2Fo6vcxgrvjkucxza74dyc.png" alt="models" 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%2Fbehgmvr1nb38bko4eu3v.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%2Fbehgmvr1nb38bko4eu3v.png" alt="playground" 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%2F0d29223amtub7ptjya96.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%2F0d29223amtub7ptjya96.png" alt="pricing" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>saas</category>
    </item>
    <item>
      <title>AI Model Pricing Comparison 2026 (You'll Be Surprised)</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Sat, 27 Jun 2026 14:54:18 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/ai-model-pricing-comparison-2026-youll-be-surprised-4egn</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/ai-model-pricing-comparison-2026-youll-be-surprised-4egn</guid>
      <description>&lt;p&gt;I compared 14 AI models on price, speed, and quality. The cheapest option is 50x cheaper than GPT-4 with 90% of the performance.&lt;/p&gt;

&lt;p&gt;Everyone knows AI is expensive. But how expensive?&lt;/p&gt;

&lt;p&gt;I pulled the latest pricing for 14 models and ran speed tests. The results surprised me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pricing (per 1M tokens)
&lt;/h2&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;Input&lt;/th&gt;
      &lt;th&gt;Output&lt;/th&gt;
      &lt;th&gt;Speed&lt;/th&gt;
      &lt;th&gt;Quality*&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;GPT-4o&lt;/td&gt;
      &lt;td&gt;$5.00&lt;/td&gt;
      &lt;td&gt;$15.00&lt;/td&gt;
      &lt;td&gt;Medium&lt;/td&gt;
      &lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Claude 3 Opus&lt;/td&gt;
      &lt;td&gt;$15.00&lt;/td&gt;
      &lt;td&gt;$75.00&lt;/td&gt;
      &lt;td&gt;Slow&lt;/td&gt;
      &lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;deepseek-v4-flash&lt;/td&gt;
      &lt;td&gt;$0.14&lt;/td&gt;
      &lt;td&gt;$0.28&lt;/td&gt;
      &lt;td&gt;Fast&lt;/td&gt;
      &lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;glm-4-flash&lt;/td&gt;
      &lt;td&gt;$0.10&lt;/td&gt;
      &lt;td&gt;$0.20&lt;/td&gt;
      &lt;td&gt;Fast&lt;/td&gt;
      &lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;qwen-plus&lt;/td&gt;
      &lt;td&gt;$0.20&lt;/td&gt;
      &lt;td&gt;$0.40&lt;/td&gt;
      &lt;td&gt;Fast&lt;/td&gt;
      &lt;td&gt;⭐⭐⭐⭐&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;deepseek-v4-pro&lt;/td&gt;
      &lt;td&gt;$1.40&lt;/td&gt;
      &lt;td&gt;$2.80&lt;/td&gt;
      &lt;td&gt;Medium&lt;/td&gt;
      &lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;qwen3-235b-a22b&lt;/td&gt;
      &lt;td&gt;$1.00&lt;/td&gt;
      &lt;td&gt;$2.00&lt;/td&gt;
      &lt;td&gt;Medium&lt;/td&gt;
      &lt;td&gt;⭐⭐⭐⭐⭐&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;** Quality based on MMLU/Coding benchmarks **&lt;/p&gt;

&lt;h2&gt;
  
  
  The Winner: glm-4-flash
&lt;/h2&gt;

&lt;p&gt;Why: $0.10 per 1M tokens. That's 50x cheaper than GPT-4o.&lt;/p&gt;

&lt;p&gt;For a typical app doing 10M tokens/month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GPT-4o: $50,000&lt;/li&gt;
&lt;li&gt;glm-4-flash: $1,000
Savings: $49,000.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the quality? For 90% of tasks, your users won't notice the difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Best Value: deepseek-v4-pro
&lt;/h2&gt;

&lt;p&gt;If you need top-tier performance, deepseek-v4-pro is $1.40/1M tokens.&lt;/p&gt;

&lt;p&gt;Compared to GPT-4o ($5.00), you're saving 72% with nearly identical quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Switch (One Line)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from openai import OpenAI

client = OpenAI(
    api_key="mb-your-key",
    base_url="https://aibridge-api.com/v1"
)

# Swap any model with one line
response = client.chat.completions.create(
    model="glm-4-flash",  # ← Try the cheapest
    messages=[{"role": "user", "content": "Hello"}]
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;14 models, one API, zero code changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Get a free API key → aibridge-api.com&lt;/li&gt;
&lt;li&gt;Copy the code above&lt;/li&gt;
&lt;li&gt;Test all 14 models (free tier included)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your boss will thank you for the cost savings.&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%2Fkmrgygs1odfz6gorkl2t.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%2Fkmrgygs1odfz6gorkl2t.png" alt="mainpage" 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%2Ffq65pjtsxq66d7hls4tc.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%2Ffq65pjtsxq66d7hls4tc.png" alt="models" 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%2Foxlu5ov2pglnuontm9o6.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%2Foxlu5ov2pglnuontm9o6.png" alt="playground" 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%2Fs28koct7knrvgahyfwv6.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%2Fs28koct7knrvgahyfwv6.png" alt="pricing" 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>Build a Multi-Model AI Chatbot in 50 Lines of Code</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Sat, 27 Jun 2026 05:35:50 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/build-a-multi-model-ai-chatbot-in-50-lines-of-code-1d87</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/build-a-multi-model-ai-chatbot-in-50-lines-of-code-1d87</guid>
      <description>&lt;p&gt;Want to build your own AI chatbot? Here's a complete, working Python app that lets users switch between 14 AI models instantly. Copy-paste and run.&lt;/p&gt;

&lt;p&gt;Most AI chatbot tutorials are either too simple (single model) or too complex (Docker, databases, authentication).&lt;/p&gt;

&lt;p&gt;Here's a complete, working chatbot in 50 lines of Python. No frameworks. No databases. Just openai SDK + one API.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Complete Code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# chatbot.py - A multi-model AI chatbot in 50 lines
import os
from openai import OpenAI

# One client, 14 models
client = OpenAI(
    api_key="mb-your-key",  # Get free key at aibridge-api.com
    base_url="https://aibridge-api.com/v1"
)

# Available models
MODELS = [
    "deepseek-v4-pro", "deepseek-chat", "deepseek-reasoner",
    "deepseek-coder", "deepseek-v4-flash", "qwen3-235b-a22b",
    "qwen-max", "qwen-plus", "glm-4-plus", "glm-4-air",
    "glm-4-flash", "moonshot-v1-128k", "moonshot-v1-32k",
    "moonshot-v1-8k"
]

def chat(model, messages):
    """Send a chat request to any model."""
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        stream=True
    )

    # Stream output
    full_response = ""
    for chunk in response:
        if chunk.choices[0].delta.content:
            content = chunk.choices[0].delta.content
            print(content, end="", flush=True)
            full_response += content
    print()
    return full_response

# Main loop
if __name__ == "__main__":
    print("🤖 Multi-Model AI Chatbot")
    print(f"Available models: {len(MODELS)}")
    print("Type 'switch' to change model, 'exit' to quit\n")

    model = MODELS[0]  # Default model
    messages = []

    while True:
        print(f"\n[Model: {model}]")
        user_input = input("You: ")

        if user_input.lower() == "exit":
            break
        elif user_input.lower() == "switch":
            print("\nAvailable models:")
            for i, m in enumerate(MODELS):
                print(f"  {i}: {m}")
            idx = int(input("Select model (0-13): "))
            model = MODELS[idx]
            continue

        messages.append({"role": "user", "content": user_input})

        print("Bot: ", end="")
        bot_response = chat(model, messages)

        messages.append({"role": "assistant", "content": bot_response})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to Run It
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 1. Install dependency
pip install openai

# 2. Get free API key (no credit card)
# → https://aibridge-api.com

# 3. Run the chatbot
python chatbot.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What You Can Do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Switch models mid-conversation (switch command)&lt;/li&gt;
&lt;li&gt;Compare responses (same prompt, different models)&lt;/li&gt;
&lt;li&gt;Test streaming (real-time output)&lt;/li&gt;
&lt;li&gt;Keep conversation history (messages array)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Now
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Copy the code above (all 50 lines)&lt;/li&gt;
&lt;li&gt;Get a free API key → &lt;a href="https://dev.tourl"&gt;aibridge-api.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Run it → python chatbot.py&lt;/li&gt;
&lt;li&gt;Start chatting with 14 AI models&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pro tip: Use deepseek-v4-flash for quick responses, deepseek-v4-pro for complex reasoning.&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%2F9t51r2kwrivq2tta2q2v.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%2F9t51r2kwrivq2tta2q2v.png" alt="mainpage" 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%2Fs8kagcsbjx25mgq8q86m.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%2Fs8kagcsbjx25mgq8q86m.png" alt="models" 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%2Fdtkhry0xekmcfm4l57zm.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%2Fdtkhry0xekmcfm4l57zm.png" alt="playground" 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%2F37v68v4l93bm7efd1q3u.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%2F37v68v4l93bm7efd1q3u.png" alt="pricing" 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>One Line to Switch AI Models (No Code Changes)</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Fri, 26 Jun 2026 15:07:28 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/one-line-to-switch-ai-models-no-code-changes-3h7i</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/one-line-to-switch-ai-models-no-code-changes-3h7i</guid>
      <description>&lt;p&gt;Stop rewriting your app for every new AI model. One OpenAI-compatible endpoint for 14 models. Switch with one line.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Same code, different model — just change the name
from openai import OpenAI

client = OpenAI(
    api_key="mb-your-key",
    base_url="https://aibridge-api.com/v1"
)

response = client.chat.completions.create(
    model="deepseek-v4-pro",  # ← Change this
    messages=[{"role": "user", "content": "Hello"}]
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;14 models, one API:&lt;/p&gt;

&lt;p&gt;deepseek-v4-pro · deepseek-chat · deepseek-reasoner&lt;br&gt;
deepseek-coder · deepseek-v4-flash&lt;br&gt;
qwen3-235b-a22b · qwen-max · qwen-plus&lt;br&gt;
glm-4-plus · glm-4-air · glm-4-flash&lt;br&gt;
moonshot-v1-128k · moonshot-v1-32k · moonshot-v1-8k&lt;/p&gt;

&lt;p&gt;✅ OpenAI-compatible &lt;br&gt;
✅ 128K context &lt;br&gt;
✅ Streaming &lt;br&gt;
✅ Free tier&lt;/p&gt;

&lt;p&gt;Get your free API key: aibridge-api.com&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%2Fjke30qq8gb58cx4oz3nx.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%2Fjke30qq8gb58cx4oz3nx.png" alt="main page" 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%2Fvomv08bh0uljarga9onu.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%2Fvomv08bh0uljarga9onu.png" alt="models" 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%2Fuusnyxbq1349w3a6t0oj.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%2Fuusnyxbq1349w3a6t0oj.png" alt="playground" 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%2Fo55987xvzj0ka0nohvsw.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%2Fo55987xvzj0ka0nohvsw.png" alt="pricing" 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>3 Lines of Code to Add Streaming AI Responses</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Thu, 25 Jun 2026 15:39:24 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/3-lines-of-code-to-add-streaming-ai-responses-124h</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/3-lines-of-code-to-add-streaming-ai-responses-124h</guid>
      <description>&lt;p&gt;Streaming makes your AI app feel 3x faster. Here's the minimal code to add it to any app using an OpenAI-compatible API.&lt;/p&gt;

&lt;p&gt;Streaming is the #1 UX upgrade for AI apps. Instead of waiting 3 seconds for a full response, users see the first token in &amp;lt; 500ms.&lt;/p&gt;

&lt;p&gt;Here's the minimal 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="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-v4-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="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="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;  &lt;span class="c1"&gt;# ← That's it
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&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;chunk&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;delta&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;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk&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;delta&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="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&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;Frontend (JavaScript):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&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="s1"&gt;/api/ai&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="s1"&gt;POST&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;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getReader&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;done&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="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;done&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TextDecoder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;decode&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="c1"&gt;// Stream tokens&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result: Your users see output in real-time. Feels way faster.&lt;/p&gt;

&lt;p&gt;Try it: aibridge-api.com&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%2Fgnc7utuij2eemtfws4fp.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%2Fgnc7utuij2eemtfws4fp.png" alt="mainpage" 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%2F2kv3d7f68ingmtnhdgom.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%2F2kv3d7f68ingmtnhdgom.png" alt="models" 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%2F2839gk3gsfa2jcwn8s5n.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%2F2839gk3gsfa2jcwn8s5n.png" alt="playground" 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%2F3298fzzollvfnr9cm0jy.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%2F3298fzzollvfnr9cm0jy.png" alt="pricing" 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>
