<?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: AI Pulse</title>
    <description>The latest articles on DEV Community by AI Pulse (@happyyboxx).</description>
    <link>https://dev.to/happyyboxx</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%2F4066699%2Ff486d335-5689-4309-adb8-5ee41d334a7f.jpg</url>
      <title>DEV Community: AI Pulse</title>
      <link>https://dev.to/happyyboxx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/happyyboxx"/>
    <language>en</language>
    <item>
      <title>How I Built a $0 LLM Production Stack with 46 Free APIs</title>
      <dc:creator>AI Pulse</dc:creator>
      <pubDate>Fri, 07 Aug 2026 06:25:22 +0000</pubDate>
      <link>https://dev.to/happyyboxx/how-i-built-a-0-llm-production-stack-with-46-free-apis-4fa0</link>
      <guid>https://dev.to/happyyboxx/how-i-built-a-0-llm-production-stack-with-46-free-apis-4fa0</guid>
      <description>&lt;h1&gt;
  
  
  How I Built a $0 LLM Production Stack with 46 Free APIs
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;And why every "free LLM API list" goes stale within a week&lt;/em&gt;&lt;/p&gt;




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

&lt;p&gt;I needed LLMs for a side project but couldn't justify $50-500/month for API costs. Every "free LLM API" list I found had the same problems:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Stale within days&lt;/strong&gt; — providers change limits, add credit card requirements, deprecate models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown tables&lt;/strong&gt; — not machine-readable, can't plug into code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No verification&lt;/strong&gt; — no way to know if a provider actually works &lt;em&gt;today&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No deployment path&lt;/strong&gt; — just a list, no config for Hermes/LiteLLM/Portkey&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So I built &lt;strong&gt;free-llm-atlas&lt;/strong&gt;: 46 free LLM API providers, auto-probed daily, structured JSON + gateway configs.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Zero-Cost Stack
&lt;/h2&gt;

&lt;p&gt;After testing 40+ endpoints, my production fallback chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Layer 1 (Speed):     Groq — 300+ tok/s, 14.4K req/day
Layer 2 (Multimodal): Google AI Studio — 2M context, vision/audio, 1.5K req/day
Layer 3 (Reasoning): NVIDIA NIM — Nemotron Ultra 1M ctx, function calling, 40 RPM
Layer 4 (Chinese):   Z.AI GLM-4 — 1M ctx, strong Chinese, 60 RPM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Covers 95% of workloads at $0.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The 17 Permanent Free Providers (No Credit Card)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Rate Limit&lt;/th&gt;
&lt;th&gt;Context&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Groq&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Speed&lt;/td&gt;
&lt;td&gt;14.4K req/day&lt;/td&gt;
&lt;td&gt;131K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google AI Studio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Multimodal / Long context&lt;/td&gt;
&lt;td&gt;1.5K req/day&lt;/td&gt;
&lt;td&gt;2M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NVIDIA NIM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Reasoning / Function calling&lt;/td&gt;
&lt;td&gt;40 RPM&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cerebras&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Extreme speed&lt;/td&gt;
&lt;td&gt;2.6K tok/s&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloudflare Workers AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Edge inference&lt;/td&gt;
&lt;td&gt;10K neurons/day&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cohere&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RAG / Embeddings&lt;/td&gt;
&lt;td&gt;1K req/month&lt;/td&gt;
&lt;td&gt;16K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mistral&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;EU data residency&lt;/td&gt;
&lt;td&gt;1 RPS&lt;/td&gt;
&lt;td&gt;32K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HuggingFace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Model variety&lt;/td&gt;
&lt;td&gt;$0.10/mo credits&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub Models&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GPT-5, o4-mini free&lt;/td&gt;
&lt;td&gt;150 req/day&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenRouter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;14 free models&lt;/td&gt;
&lt;td&gt;50 RPD&lt;/td&gt;
&lt;td&gt;1M (Nemotron)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nebius&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;New free tier&lt;/td&gt;
&lt;td&gt;100 RPM&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OVHcloud&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;EU GDPR&lt;/td&gt;
&lt;td&gt;Anonymous 2 RPM&lt;/td&gt;
&lt;td&gt;4K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inference.net&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;New permanent free&lt;/td&gt;
&lt;td&gt;Unknown&lt;/td&gt;
&lt;td&gt;Unknown&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LLM7.io&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Claude/GPT access&lt;/td&gt;
&lt;td&gt;30 RPM&lt;/td&gt;
&lt;td&gt;200K&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Requesty&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Router&lt;/td&gt;
&lt;td&gt;200 RPM&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Z.AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Chinese&lt;/td&gt;
&lt;td&gt;60 RPM&lt;/td&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Coze&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agent platform&lt;/td&gt;
&lt;td&gt;100/day&lt;/td&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Why Daily Probing Matters
&lt;/h2&gt;

&lt;p&gt;Static lists rot. Providers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Change rate limits&lt;/strong&gt; (Groq dropped from 14.4K → 1K RPD in 2026)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add credit card requirements&lt;/strong&gt; overnight&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deprecate models&lt;/strong&gt; without notice&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shut down endpoints&lt;/strong&gt; silently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;free-llm-atlas runs GitHub Actions daily at 06:00 UTC&lt;/strong&gt; — every provider, every endpoint, every day.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;probe.py → test /models + /chat/completions → measure latency, success, tokens/sec, context
→ update providers.json → commit if changed → Git history = uptime dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Usage: 30 Seconds to Production
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/happyyboxx/free-llm-atlas
&lt;span class="nb"&gt;cd &lt;/span&gt;free-llm-atlas

&lt;span class="c"&gt;# Find free providers needing NO credit card&lt;/span&gt;
python3 &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"
import json
d = json.load(open('data/providers.json'))
for p in d['providers']:
    if p['tier']=='permanent_free' and not p.get('requires_card'):
        print(f'✅ {p[&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;]}: {p.get(&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;rate_limit&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;N/A&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;)}')
"&lt;/span&gt;

&lt;span class="c"&gt;# Probe all 46 providers&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;httpx pyyaml
python3 scripts/probe.py &lt;span class="nt"&gt;--all&lt;/span&gt;

&lt;span class="c"&gt;# Export gateway config&lt;/span&gt;
python3 scripts/probe.py &lt;span class="nt"&gt;--export-config&lt;/span&gt; litellm &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; config.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Gateway Configs: Drop-in Replacement
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Auto-generated litellm.yaml&lt;/span&gt;
&lt;span class="na"&gt;model_list&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;model_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;llama-3.1-70b-groq&lt;/span&gt;
    &lt;span class="na"&gt;litellm_params&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;groq/llama-3.1-70b-versatile&lt;/span&gt;
      &lt;span class="na"&gt;api_base&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://api.groq.com/openai/v1&lt;/span&gt;
      &lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8192&lt;/span&gt;
    &lt;span class="na"&gt;fallback&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;gemini-flash&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;nim-nemotron&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;z-ai-glm&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One command switches entire stack. Zero code changes when a provider fails.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Hidden Limits Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;Everyone compares &lt;strong&gt;daily request limits&lt;/strong&gt;. The real bottleneck is &lt;strong&gt;tokens/minute (TPM)&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Daily Req&lt;/th&gt;
&lt;th&gt;TPM&lt;/th&gt;
&lt;th&gt;Real Limit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Groq&lt;/td&gt;
&lt;td&gt;14,400&lt;/td&gt;
&lt;td&gt;6,000&lt;/td&gt;
&lt;td&gt;Concurrency: ~12 msg/min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Together&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;100,000&lt;/td&gt;
&lt;td&gt;Daily limit hits first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NIM&lt;/td&gt;
&lt;td&gt;~2,400&lt;/td&gt;
&lt;td&gt;40 RPM&lt;/td&gt;
&lt;td&gt;Batch-friendly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google AI Studio&lt;/td&gt;
&lt;td&gt;1,500&lt;/td&gt;
&lt;td&gt;1,000,000&lt;/td&gt;
&lt;td&gt;Effectively unlimited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenRouter (free)&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;20 RPM&lt;/td&gt;
&lt;td&gt;Very low&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;TPM determines concurrency, not daily requests.&lt;/strong&gt; Match provider to YOUR bottleneck.&lt;/p&gt;




&lt;h2&gt;
  
  
  GitHub Actions = Free Infra
&lt;/h2&gt;

&lt;p&gt;The probe runs on GitHub Actions (free tier):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;0 infrastructure cost&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Runs daily at 06:00 UTC&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updates &lt;code&gt;providers.json&lt;/code&gt; with live status&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generates gateway configs&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commits changes → Git history = uptime dashboard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Zero maintenance. Zero cost.&lt;/p&gt;




&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;The project aggregates from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/cheahjs/free-llm-api-resources" rel="noopener noreferrer"&gt;cheahjs/free-llm-api-resources&lt;/a&gt; (28K+ ⭐)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tashfeenahmed/freellmapi" rel="noopener noreferrer"&gt;tashfeenahmed/freellmapi&lt;/a&gt; (17K+ ⭐)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/mnfst/awesome-free-llm-apis" rel="noopener noreferrer"&gt;mnfst/awesome-free-llm-apis&lt;/a&gt; (6K+ ⭐)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nejib1/Free-LLM" rel="noopener noreferrer"&gt;nejib1/Free-LLM&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PRs welcome for new providers, probe fixes, or doc improvements.&lt;/p&gt;




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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/happyyboxx/free-llm-atlas
&lt;span class="nb"&gt;cd &lt;/span&gt;free-llm-atlas
python3 scripts/probe.py &lt;span class="nt"&gt;--all&lt;/span&gt;
python3 scripts/probe.py &lt;span class="nt"&gt;--export-config&lt;/span&gt; litellm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Star ⭐ if this saves you money on LLM inference.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built because I was tired of paying for inference during development. Now my entire LLM stack costs $0.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>ai</category>
      <category>freellm</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
