A curated list of LLM providers offering permanent free tiers for text inference — no trial credits, no expiry. All endpoints listed are OpenAI SDK-compatible unless noted.
# Using the ollama Python client
import ollama, os
client = ollama.Client(
host="https://ollama.com",
headers={"Authorization": f"Bearer {os.environ['OLLAMA_API_KEY']}"},
)
response = client.chat(
model="qwen3.5",
messages=[{"role": "user", "content": "Write a poem about the sea."}],
)
print(response["message"]["content"])
Hugging Face Inference API
from openai import OpenAI
import os
client = OpenAI(
base_url="https://router.huggingface.co/novita/v3/openai",
api_key=os.environ["HF_TOKEN"],
)
response = client.chat.completions.create(
model="meta-llama/llama-3.3-70b-instruct",
messages=[{"role": "user", "content": "Summarize the theory of relativity."}],
max_tokens=512,
)
print(response.choices[0].message.content)
Streaming Responses
from openai import OpenAI
import os
client = OpenAI(
base_url="https://api.groq.com/openai/v1",
api_key=os.environ["GROQ_API_KEY"],
)
with client.chat.completions.stream(
model="llama-3.3-70b-versatile",
messages=[{"role": "user", "content": "Write a short story about a robot."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
const stream = await groq.chat.completions.create({
model: "llama-3.3-70b-versatile",
messages: [{ role: "user", content: "Write a haiku." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
OpenRouter provides a special router that automatically selects available free models:
from openai import OpenAI
import os
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.environ["OPENROUTER_API_KEY"],
)
# Use the free router — picks from 29+ free models automatically
response = client.chat.completions.create(
model="openrouter/free",
messages=[{"role": "user", "content": "Explain recursion."}],
)
# Or use model fallbacks for priority ordering
response = client.chat.completions.create(
model="deepseek/deepseek-r1",
messages=[{"role": "user", "content": "Explain recursion."}],
extra_body={
"route": "fallback",
"models": [
"deepseek/deepseek-r1",
"meta-llama/llama-3.3-70b-instruct:free",
"openrouter/free",
],
},
)
LangChain Integration
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
import os
# Works with any OpenAI-compatible provider
llm = ChatOpenAI(
model="llama-3.3-70b-versatile",
openai_api_base="https://api.groq.com/openai/v1",
openai_api_key=os.environ["GROQ_API_KEY"],
temperature=0.7,
)
response = llm.invoke([HumanMessage(content="What are the SOLID principles?")])
print(response.content)
# Gemini via LangChain
gemini = ChatOpenAI(
model="gemini-2.0-flash",
openai_api_base="https://generativelanguage.googleapis.com/v1beta/openai/",
openai_api_key=os.environ["GEMINI_API_KEY"],
)
Rate Limit Reference
Provider
RPM
RPD
Notes
Groq
30
1,000
14,400 RPD for Llama 3.1 8B only
Cerebras
30
14,400
—
Gemini Flash
15
1,500
Not in EU/UK/CH
Gemini 2.5 Pro
5
25
Not in EU/UK/CH
GitHub Models
10–15
50–150
Varies by model tier
OpenRouter (free)
20
50
1K RPD after $10+ purchase
Mistral
1 req/s
—
1B tokens/month cap
NVIDIA NIM
40
—
—
Cloudflare Workers AI
—
—
10K neurons/day
Cohere
20
—
1K requests/month
Common Troubleshooting
AuthenticationError
Double-check the env var is set: echo $GROQ_API_KEY
Ensure the key is for the correct provider
Some providers (GitHub Models) require a classic PAT, not a fine-grained token
RateLimitError
Implement exponential backoff or use the fallback pattern above
Switch to a provider with higher limits (Cerebras: 14,400 RPD)
For Groq, use llama-3.1-8b-instant for the 14,400 RPD limit
Model not found
Check the exact model ID on the provider's docs/dashboard
OpenRouter free models have :free suffix: meta-llama/llama-3.3-70b-instruct:free
Cloudflare models use @cf/ prefix: @cf/meta/llama-3.3-70b-instruct-fp8-fast
Gemini free tier unavailable
The free tier is not available in EU, UK, or Switzerland
Use a VPN or switch to a different provider like Groq or Mistral
Ollama Cloud not working with OpenAI SDK
Ollama Cloud uses its own API format — use the ollama Python package or raw HTTP
OpenRouter 50 RPD limit
Make a one-time $10 credit purchase to unlock 1,000 RPD for free models permanently
Alternatively, use openrouter/free router to distribute across all free models
Choosing the Right Provider
Need highest RPD? → Cerebras (14,400 RPD)
Need smartest free model? → Gemini 2.5 Pro (if not in EU/UK/CH)
Need EU-hosted? → Mistral AI (France)
Need most model variety? → OpenRouter (29+ free models) or Cloudflare (48+ models)
Need fastest inference? → Groq (purpose-built inference chips)
Need reasoning model? → DeepSeek-R1 on Groq/OpenRouter/Kluster AI
Need vision? → Gemini Flash, Llama 4 Scout (Groq), GLM-4.6V-Flash (Zhipu)
No rate limit concern? → Cloudflare (10K neurons/day, compute-based)