Repository: cheahjs/free-llm-api-resources
Branch: main
Commit: c3ac91133bf8
Files: 9
Total size: 77.0 KB
Directory structure:
gitextract_rnr7ukix/
├── .github/
│ ├── pull_request_template.md
│ └── workflows/
│ ├── readme-change-validator.yml
│ └── update-readme.yml
├── .gitignore
├── README.md
└── src/
├── README_template.md
├── data.py
├── pull_available_models.py
└── requirements.txt
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/pull_request_template.md
================================================
================================================
FILE: .github/workflows/readme-change-validator.yml
================================================
name: README Change Validator
on:
pull_request:
paths:
- 'README.md'
- 'src/README_template.md'
- 'src/pull_available_models.py'
permissions:
issues: write
jobs:
check-readme-changes:
if: github.actor != 'github-actions[bot]'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0 # Fetch all history to compare changes
- name: Get changed files
id: changed-files
run: |
README_CHANGED=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep -c "README.md" || true)
TEMPLATE_CHANGED=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep -c "src/README_template.md" || true)
SCRIPT_CHANGED=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep -c "src/pull_available_models.py" || true)
echo "readme_changed=$README_CHANGED" >> $GITHUB_OUTPUT
echo "template_changed=$TEMPLATE_CHANGED" >> $GITHUB_OUTPUT
echo "script_changed=$SCRIPT_CHANGED" >> $GITHUB_OUTPUT
- name: Validate README changes
run: |
if [ "${{ steps.changed-files.outputs.readme_changed }}" -gt 0 ] && \
[ "${{ steps.changed-files.outputs.template_changed }}" -eq 0 ] && \
[ "${{ steps.changed-files.outputs.script_changed }}" -eq 0 ]; then
echo "Error: README.md was modified without corresponding changes in src/README_template.md or src/pull_available_models.py"
echo "Please update the template or script instead of modifying README.md directly."
exit 1
fi
- name: Add PR comment if check fails
if: failure()
uses: actions/github-script@v8
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: '❌ README.md was modified without corresponding changes in `src/README_template.md` or `src/pull_available_models.py`\n\nPlease update the template or script instead of modifying README.md directly.'
})
================================================
FILE: .github/workflows/update-readme.yml
================================================
name: Update README
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
jobs:
update-readme:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Install dependencies
run: |
pip install -r src/requirements.txt
- id: "auth"
uses: "google-github-actions/auth@v3"
with:
workload_identity_provider: "projects/576328904266/locations/global/workloadIdentityPools/github/providers/cheahjs-org"
project_id: ${{ secrets.GCP_PROJECT }}
- name: Run script
env:
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CLOUDFLARE_API_KEY: ${{ secrets.CLOUDFLARE_API_KEY }}
HYPERBOLIC_API_KEY: ${{ secrets.HYPERBOLIC_API_KEY }}
GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
GOOGLE_APPLICATION_CREDENTIALS: ${{ steps.auth.outputs.credentials_file_path }}
LAMBDA_API_KEY: ${{ secrets.LAMBDA_API_KEY }}
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
SCALEWAY_API_KEY: ${{ secrets.SCALEWAY_API_KEY }}
COHERE_API_KEY: ${{ secrets.COHERE_API_KEY }}
run: |
python -u src/pull_available_models.py
- name: Remove credentials
run: |
rm ${{ steps.auth.outputs.credentials_file_path }}
- name: Create Pull Request
uses: peter-evans/create-pull-request@v8
with:
title: "Update README with latest models"
body: "This PR updates the README with the latest available models."
branch: update-readme
base: main
commit-message: "Update README with latest models"
================================================
FILE: .gitignore
================================================
venv
.venv
.env
.aider*
*.json
*.pyc
================================================
FILE: README.md
================================================
# Free LLM API resources
This lists various services that provide free access or credits towards API-based LLM usage.
> [!NOTE]
> Please don't abuse these services, else we might lose them.
> [!WARNING]
> This list explicitly excludes any services that are not legitimate (eg reverse engineers an existing chatbot)
- [Free Providers](#free-providers)
- [OpenRouter](#openrouter)
- [Google AI Studio](#google-ai-studio)
- [NVIDIA NIM](#nvidia-nim)
- [Mistral (La Plateforme)](#mistral-la-plateforme)
- [Mistral (Codestral)](#mistral-codestral)
- [HuggingFace Inference Providers](#huggingface-inference-providers)
- [Vercel AI Gateway](#vercel-ai-gateway)
- [OpenCode Zen](#opencode-zen)
- [Cerebras](#cerebras)
- [Groq](#groq)
- [Cohere](#cohere)
- [GitHub Models](#github-models)
- [Cloudflare Workers AI](#cloudflare-workers-ai)
- [Providers with trial credits](#providers-with-trial-credits)
- [Fireworks](#fireworks)
- [Baseten](#baseten)
- [Nebius](#nebius)
- [Novita](#novita)
- [AI21](#ai21)
- [Upstage](#upstage)
- [NLP Cloud](#nlp-cloud)
- [Alibaba Cloud (International) Model Studio](#alibaba-cloud-international-model-studio)
- [Modal](#modal)
- [Inference.net](#inferencenet)
- [Hyperbolic](#hyperbolic)
- [SambaNova Cloud](#sambanova-cloud)
- [Scaleway Generative APIs](#scaleway-generative-apis)
## Free Providers
### [OpenRouter](https://openrouter.ai)
**Limits:**
[20 requests/minute
50 requests/day
Up to 1000 requests/day with $10 lifetime topup](https://openrouter.ai/docs/api/reference/limits)
Models share a common quota.
- [Gemma 3 12B Instruct](https://openrouter.ai/google/gemma-3-12b-it:free)
- [Gemma 3 27B Instruct](https://openrouter.ai/google/gemma-3-27b-it:free)
- [Gemma 3 4B Instruct](https://openrouter.ai/google/gemma-3-4b-it:free)
- [Hermes 3 Llama 3.1 405B](https://openrouter.ai/nousresearch/hermes-3-llama-3.1-405b:free)
- [Llama 3.2 3B Instruct](https://openrouter.ai/meta-llama/llama-3.2-3b-instruct:free)
- [Llama 3.3 70B Instruct](https://openrouter.ai/meta-llama/llama-3.3-70b-instruct:free)
- [Mistral Small 3.1 24B Instruct](https://openrouter.ai/mistralai/mistral-small-3.1-24b-instruct:free)
- [arcee-ai/trinity-large-preview:free](https://openrouter.ai/arcee-ai/trinity-large-preview:free)
- [arcee-ai/trinity-mini:free](https://openrouter.ai/arcee-ai/trinity-mini:free)
- [cognitivecomputations/dolphin-mistral-24b-venice-edition:free](https://openrouter.ai/cognitivecomputations/dolphin-mistral-24b-venice-edition:free)
- [google/gemma-3n-e2b-it:free](https://openrouter.ai/google/gemma-3n-e2b-it:free)
- [google/gemma-3n-e4b-it:free](https://openrouter.ai/google/gemma-3n-e4b-it:free)
- [liquid/lfm-2.5-1.2b-instruct:free](https://openrouter.ai/liquid/lfm-2.5-1.2b-instruct:free)
- [liquid/lfm-2.5-1.2b-thinking:free](https://openrouter.ai/liquid/lfm-2.5-1.2b-thinking:free)
- [nvidia/nemotron-3-nano-30b-a3b:free](https://openrouter.ai/nvidia/nemotron-3-nano-30b-a3b:free)
- [nvidia/nemotron-nano-12b-v2-vl:free](https://openrouter.ai/nvidia/nemotron-nano-12b-v2-vl:free)
- [nvidia/nemotron-nano-9b-v2:free](https://openrouter.ai/nvidia/nemotron-nano-9b-v2:free)
- [openai/gpt-oss-120b:free](https://openrouter.ai/openai/gpt-oss-120b:free)
- [openai/gpt-oss-20b:free](https://openrouter.ai/openai/gpt-oss-20b:free)
- [qwen/qwen3-4b:free](https://openrouter.ai/qwen/qwen3-4b:free)
- [qwen/qwen3-coder:free](https://openrouter.ai/qwen/qwen3-coder:free)
- [qwen/qwen3-next-80b-a3b-instruct:free](https://openrouter.ai/qwen/qwen3-next-80b-a3b-instruct:free)
- [stepfun/step-3.5-flash:free](https://openrouter.ai/stepfun/step-3.5-flash:free)
- [z-ai/glm-4.5-air:free](https://openrouter.ai/z-ai/glm-4.5-air:free)
### [Google AI Studio](https://aistudio.google.com)
Data is used for training when used outside of the UK/CH/EEA/EU.
| Model Name | Model Limits |
|---|---|
| Gemini 3 Flash | 250,000 tokens/minute 20 requests/day 5 requests/minute |
| Gemini 3.1 Flash-Lite | 250,000 tokens/minute 500 requests/day 15 requests/minute |
| Gemini 2.5 Flash | 250,000 tokens/minute 20 requests/day 5 requests/minute |
| Gemini 2.5 Flash-Lite | 250,000 tokens/minute 20 requests/day 10 requests/minute |
| Gemma 3 27B Instruct | 15,000 tokens/minute 14,400 requests/day 30 requests/minute |
| Gemma 3 12B Instruct | 15,000 tokens/minute 14,400 requests/day 30 requests/minute |
| Gemma 3 4B Instruct | 15,000 tokens/minute 14,400 requests/day 30 requests/minute |
| Gemma 3 1B Instruct | 15,000 tokens/minute 14,400 requests/day 30 requests/minute |
| Model Name | Model Limits |
|---|---|
| gpt-oss-120b | 30 requests/minute 60,000 tokens/minute 900 requests/hour 1,000,000 tokens/hour 14,400 requests/day 1,000,000 tokens/day |
| Llama 3.1 8B | 30 requests/minute 60,000 tokens/minute 900 requests/hour 1,000,000 tokens/hour 14,400 requests/day 1,000,000 tokens/day |
| Model Name | Model Limits |
|---|---|
| Allam 2 7B | 7,000 requests/day 6,000 tokens/minute |
| Llama 3.1 8B | 14,400 requests/day 6,000 tokens/minute |
| Llama 3.3 70B | 1,000 requests/day 12,000 tokens/minute |
| Llama 4 Maverick 17B 128E Instruct | 1,000 requests/day 6,000 tokens/minute |
| Llama 4 Scout Instruct | 1,000 requests/day 30,000 tokens/minute |
| Whisper Large v3 | 7,200 audio-seconds/minute 2,000 requests/day |
| Whisper Large v3 Turbo | 7,200 audio-seconds/minute 2,000 requests/day |
| canopylabs/orpheus-arabic-saudi | |
| canopylabs/orpheus-v1-english | |
| groq/compound | 250 requests/day 70,000 tokens/minute |
| groq/compound-mini | 250 requests/day 70,000 tokens/minute |
| meta-llama/llama-guard-4-12b | 14,400 requests/day 15,000 tokens/minute |
| meta-llama/llama-prompt-guard-2-22m | |
| meta-llama/llama-prompt-guard-2-86m | |
| moonshotai/kimi-k2-instruct | 1,000 requests/day 10,000 tokens/minute |
| moonshotai/kimi-k2-instruct-0905 | 1,000 requests/day 10,000 tokens/minute |
| openai/gpt-oss-120b | 1,000 requests/day 8,000 tokens/minute |
| openai/gpt-oss-20b | 1,000 requests/day 8,000 tokens/minute |
| openai/gpt-oss-safeguard-20b | 1,000 requests/day 8,000 tokens/minute |
| qwen/qwen3-32b | 1,000 requests/day 6,000 tokens/minute |
| Model Name | Model Limits |
|---|---|
| {model['name']} | {limits_str} |
| Model Name | Model Limits |
|---|---|
| {model['name']} | {model['limits_text']} |
| Model Name | Model Limits |
|---|---|
| {model['name']} | {limits_str} |
| Model Name | Model Limits |
|---|---|
| {model['name']} | ' if first_gemini: model_list_markdown += f'{limits_str} Shared Quota | '
first_gemini = False
model_list_markdown += "
| {model['name']} | {limits_str} Free during preview |
| {model['name']} | {limits_str} Free during preview |