Google·Groq·Cerebras·NVIDIA·Mistral·OpenRouter·GitHub Models·HuggingFace·Cohere·Cloudflare·Zhipu·Ollama·Kilo·Pollinations·LLM7·OVH AI Endpoints 등 16개 프로바이더의 무료 티어를 — 한 개의 /v1/chat/completions 엔드포인트로 통합. 월 ~17억 토큰(~1.7B) 무료. Express + SQLite + React Vite Dashboard. AES-256-GCM 키 암호화. 라우터가 자동 failover. 개인 실험·학습 전용.
단순 무료 키 모음이 아니다 — 진짜 인프라 한 조각이다.
2024~2026 사이 AI 랩들이 — 너도나도 "무료 티어"를 푸는 시대가 됐다. Google AI Studio는 월 수백만 토큰, Groq는 일 1만 요청, GitHub Models는 GPT-4o 일정량. 그런데 — 각각은 장난감 수준이다. 한 프로젝트 돌리기엔 모자라고, 16개를 SDK별로 따로따로 깔고 키 관리하는 건 — 진짜로 고통.
FreeLLMAPI는 그걸 푼다. 16개 프로바이더의 무료 티어를 — "한 OpenAI 호환 엔드포인트"로 합쳐 버린다. 너의 코드는 그대로 openai 라이브러리. base_url만 http://localhost:3001/v1로. 그러면 — 자기 자신은 모르는 새 16개를 자동으로 돌려가며 쓴다.
합치면 — 월 1.7B+ 토큰. GPT-4o(GitHub), Gemini 2.5 Pro/Flash(Google), Llama 4(Groq), GLM-4(Zhipu), Qwen(Cerebras), Ollama(로컬)... 개인 실험·학습·해커톤·취미 프로젝트에는 차고 넘친다.
/v1/chat/completions 요청·응답 형식을 따르는 API. 한 번 표준이 된 뒤 — 거의 모든 LLM 프로바이더가 이 형식을 흉내냈다. "base_url만 바꾸면 어디든 붙는다"는 사실상의 산업 표준. FreeLLMAPI도 정확히 이 형식 그대로.chat.completions.create 호출.ENCRYPTION_KEY(.env) 없이는 키를 못 푼다. 복호화는 메모리에서 — 요청 직전.전체 글의 핵심 메시지.
각 무료 티어는 작다. 하지만 16개를 합치고 — "이 키가 한도 다 차면 다음 키로" 자동 전환만 되면 — 사실상 끊김 없는 LLM 인프라가 된다. 그게 FreeLLMAPI다.
코드는 OpenAI 그대로. base_url 한 줄만 바꾸면 — Python·Node·curl 어느 클라이언트도 그대로 작동. "앱 코드는 OpenAI를 본다고 생각하고 — 인프라는 16개 베이커리". 그래서 LangChain·LlamaIndex·Continue·Hermes도 즉시 호환.
별 5개·커밋 1번 레포가 어떻게 TrendShift 13위에 올라왔나.
이 레포는 — "star 5개·fork 1개·커밋 1번"이다. TrendShift는 stars 수가 아니라 momentum(가속도)을 본다. 즉 — 0에서 갑자기 화제가 된 신생 레포가 — 굵직한 레포들 사이로 들어온다. 본 케이스 모멘텀 점수는 92만+. 폭발 이유:
① "월 1.7B 토큰 무료"라는 마법의 숫자. Twitter/HackerNews 헤드라인용으로 너무 매력적이다. 보통 사람은 — "그게 진짜 되는 거야?" 한 번 클릭. 클릭 = 별. 별 = 모멘텀.
② OpenAI 호환이라는 핵심 결정. 새 SDK를 배울 필요가 0. 누가 깔든 — 5분 안에 작동. 그래서 바이럴 친화적.
③ "라즈베리파이에서 돈다"라는 디테일. README에 "Runs happily on a Pi 4 under PM2 behind nginx. ~40 MB RSS at idle." 같이 — 자가호스팅·홈랩 커뮤니티에 정확히 꽂힌다. HackerNews·r/selfhosted·r/LocalLLaMA 동시 진출.
④ ToS 리뷰가 진지하다. "각 프로바이더 ToS를 한 표로 정리 + 위험 평가"가 README에 있다. "이건 진지한 사람이 만든 거다"라는 신호. 사용자 신뢰의 결정타.
서버·클라이언트·인프라.
런타임: Node.js 20+. 웹 프레임워크: Express. DB: SQLite via better-sqlite3(동기 임베디드). 키 암호화: AES-256-GCM (node:crypto). 스트리밍: Server-Sent Events. Provider 어댑터: server/src/providers/*.ts — 6개 파일. 구글·Cohere·Cloudflare는 전용 클래스, 나머지 13개 프로바이더는 openai-compat.ts의 OpenAICompatProvider를 index.ts에서 인스턴스화.
UI: React + Vite + shadcn/ui. 다크모드 포함. 페이지: Keys(키 관리), Fallback Chain(우선순위 설정), Playground(테스트), Analytics(통계). 개발 시 :5173 — 프로덕션 시 서버가 :3001에서 같이 서빙.
저장: 한 개의 SQLite 파일. 스키마: keys 테이블(plaintext: id·platform·model·status / encrypted: API key), ratelimit ledger 테이블(RPM·RPD·TPM·TPD 카운터), analytics 테이블(요청 로그·토큰·지연·성공률). 유지: 인메모리 카운터 + SQLite 영구화.
외부 의존성 = SQLite 파일 하나 + .env의 ENCRYPTION_KEY. Redis·PostgreSQL·Docker 다 필요 없음. PM2로 백그라운드 실행, nginx로 reverse proxy. ~40MB RAM에 한 라우터가 작동. 일반 Pi 4(4GB)에 — 라우터·홈 어시스턴트·Tailscale 다 깔고도 여유.
[Google] Gemini 2.5 Pro / 2.5 Flash — Top tier 추론 [Groq] Llama 4, Qwen — 압도적 추론 속도 (수백 tok/sec) [Cerebras] Llama 3.3, Qwen — Wafer-Scale, Groq급 빠름 [NVIDIA NIM] 엔비디아 카탈로그 — 다양한 오픈모델 [Mistral] La Plateforme — Mistral Large/Small [OpenRouter] Free-tier 모델 모음 — 단일 키로 다수 모델 [GitHub] GPT-4o / Llama / Phi — Marketplace 무료 [HuggingFace] Inference Providers — 오픈모델 다수 [Cohere] Command R+ (trial) — ⚠️ ToS 주의 (개인용 금지) [Cloudflare] Workers AI — 엣지에서 모델 [Zhipu] GLM-4 시리즈 — 중국 강자 [Ollama] 로컬 모델 — 로컬 추론 (인터넷 불필요) [Kilo] Kilo Code 모델 — 코딩 특화 [Pollinations] 이미지·텍스트 생성 — 무료 API [LLM7] 다양한 오픈모델 — 무료 티어 [OVH AI Endpoints] OVH 클라우드 모델 — 유럽 인프라
라우터·레이트리밋·헬스체크의 3축.
┌──────────────────┐ Bearer freellmapi-… ┌─────────────────────────┐
│ OpenAI SDK / │ ─────────────────────▶ │ Express proxy (:3001) │
│ curl / any │ ◀───────────────────── │ /v1/chat/completions │
│ OpenAI client │ streamed tokens └───────────┬─────────────┘
└──────────────────┘ │
▼
┌────────────────────────────────────────┐
│ Router │
│ 1. 우선순위 모델 중 │
│ (a) healthy key 있고 │
│ (b) RPM/RPD/TPM/TPD 모두 여유 │
│ → 선택 │
│ 2. 키 복호화 → 프로바이더 SDK 호출 │
│ 3. 429/5xx → cooldown + 다음 모델 │
└────────────────────────────────────────┘
│
┌─────┬─────┬─────┬─────┬─────┬─────┬───┴───┬─────┬─────┬─────┬─────┐
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
Google Groq Cere Samba NVIDIA Mistral OR GitHub HF Cohere CF Zhipu …
각 프로바이더는 — Provider 추상 클래스를 상속. 같은 인터페이스 chatCompletion() · streamChatCompletion()를 구현. 새 프로바이더 추가 = 인스턴스 하나 추가 + 라우터에 등록. 코드의 다른 부분은 건드릴 필요 없음. 16개가 곧 100개가 될 수 있는 구조.
RPM·RPD·TPM·TPD 카운터는 메모리에 두고 — SQLite는 영구화용. 매 요청마다 SQL 한 번 안 쳐도 된다. 라우터의 모델 선택은 µs 단위. 서버 재시작 시 SQLite에서 복원.
한 대화 내에서는 — 30분간 같은 모델로 고정. 멀티턴 대화 중간에 Gemini → Groq Llama로 바뀌면 — 모델이 컨텍스트를 잘못 읽고 환각이 폭증한다. Sticky를 통해 일관성 보장. "품질 vs 가용성"의 절묘한 타협.
health.ts 서비스가 — 주기적으로 각 키를 가벼운 요청으로 찔러본다. 결과는 healthy · rate_limited · invalid · error. 라우터는 dead 키를 — 일정 시간 후보군에서 빼버린다. "잘 죽었나"를 미리 알아두는 패턴.
정형적인 client/server 분리 + 어댑터 폴더.
freellmapi/ ├── .github/workflows/ ← CI (vitest 69 테스트) ├── client/ ← React + Vite + shadcn/ui 대시보드 │ ├── src/ │ │ ├── pages/ │ │ │ ├── Keys.tsx (키 관리) │ │ │ ├── FallbackChain.tsx (순서 드래그) │ │ │ ├── Playground.tsx (테스트) │ │ │ └── Analytics.tsx (통계) │ │ └── components/ui/ (shadcn) │ └── vite.config.ts ├── server/ ← Express API │ ├── src/ │ │ ├── routes/ (/v1/chat/completions, /v1/models, admin) │ │ ├── services/ │ │ │ ├── router.ts ← 모델 선택의 두뇌 │ │ │ ├── ratelimit.ts ← RPM/RPD/TPM/TPD 카운터 │ │ │ └── health.ts ← 키 헬스체크 │ │ ├── providers/ ← 6개 파일 (대부분 openai-compat 인스턴스화) │ │ │ ├── base.ts ← 추상 Provider 클래스 │ │ │ ├── google.ts ← 전용 클래스 │ │ │ ├── cohere.ts ← 전용 클래스 │ │ │ ├── cloudflare.ts ← 전용 클래스 │ │ │ ├── openai-compat.ts ← 나머지 13개 프로바이더 베이스 │ │ │ └── index.ts ← 전체 프로바이더 등록 │ │ ├── db/ ← SQLite 스키마·시드 │ │ ├── crypto/ ← AES-256-GCM │ │ ├── scripts/ ← 모델 카탈로그 재시드 │ │ └── __tests__/ ← vitest │ └── tsconfig.json ├── shared/ ← 타입·상수 (client·server 공유) ├── repo-assets/ ← 스크린샷·다이어그램 ├── .env.example ├── LICENSE ← MIT └── README.md
주목할 디테일: shared/ 폴더에 — 타입·상수가 모여 있어 client·server가 같은 인터페이스를 공유. providers/openai-compat.ts를 베이스로 — 대부분의 프로바이더가 별도 파일 없이 index.ts에서 인스턴스화로 등록된다.
단순 도구 사용을 넘어 — 4가지 깊이 있는 학습 포인트.
"우리 회사 LLM을 OpenAI 호환 엔드포인트로 노출"이 이제 표준 요구사항. /v1/chat/completions 구조, SSE 스트리밍 응답, 에러 코드 매핑. 이 레포의 routes/ 폴더가 — 그 패턴의 교과서. 한 줄씩 따라 읽으면 자기 회사 게이트웨이를 만들 수 있다.
"16개 SDK를 한 인터페이스 뒤에 숨기는" 패턴. 추상 클래스 + 인터페이스 분리. providers/openai-compat.ts를 베이스로 — 다른 어댑터들이 super 호출만 적절히 구성. "Strategy Pattern의 실전 응용". 어떤 멀티-벤더 시스템에도 적용 가능.
API에 요청 카운터만 두는 게 아니라 — 입력 토큰·출력 토큰까지 추적. ratelimit.ts가 RPM·RPD·TPM·TPD 4축을 어떻게 메모리에서 관리하는지. 그리고 cooldown 큐 처리, 429 시 우아한 후퇴. "LLM 인프라의 핵심 자료구조".
"DB는 평문, 키만 암호화"의 정확한 구현. node:crypto 기본 API만 써서 — 키 생성·IV·태그·복호화 흐름. 학교에서 배운 이론을 — 실제 작동하는 SQLite 위에서 본다. 이게 자기 토이 SaaS에서 비번·OAuth 토큰 보관할 때 그대로 재활용 가능.
"How it works" ASCII 다이어그램, "Limitations" 솔직한 자기 비판, "ToS review" 표 — 모든 게 신뢰를 만드는 설계. 한 사람이 만든 신생 레포가 1주일에 별 5개로 TrendShift 13위까지 간 이유는 — 코드보다 이 README. "README를 어떻게 써야 모멘텀이 생기나"의 사례 연구.
아주 가볍다. 거의 어떤 머신에서나 작동.
OS: Linux/macOS/Windows. Node.js: 20+ (LTS). 디스크: 50MB(node_modules 포함). RAM: 아이들 40MB, 피크 100MB 미만. 네트워크: 16개 프로바이더로 아웃바운드 HTTPS. "라즈베리파이 4 + nginx + Tailscale"로 — 셀프호스트 LLM 게이트웨이 완성.
npm run dev: 서버 :3001 + 클라이언트 :5173 동시 HMR. npm test: vitest로 69개 테스트(프로바이더·라우트·라우터·레이트리밋). 새 프로바이더 추가 시 — 테스트 1개만 추가하면 CI가 알아서 검증.
README의 강한 경고: "Local-first. There's no multi-tenant auth. Don't expose it to the internet.". 다른 사람과 공유하면 — 프로바이더 ToS 위반 + 계정 정지. 자기 머신에만, Tailscale·WireGuard로 본인 기기들끼리만. "무료를 함께 쓰면 무료가 사라진다"의 법칙.
난이도별 4개.
Google AI Studio·Groq·GitHub Models·OpenRouter 무료 키 4개를 발급. npm run dev → 대시보드에서 4개 등록. Playground에서 — 같은 프롬프트를 4번 보내며 X-Routed-Via 헤더로 누가 답했는지 확인. 처음 30분에 시스템의 동작이 머릿속에 들어온다.
평소 쓰는 LangChain·LlamaIndex·Continue 프로젝트의 base_url을 http://localhost:3001/v1로. API 키는 freellmapi-.... 아무 코드 수정 없이 — 16개 프로바이더 위에서 작동하는지 확인. 가능하다면 한 시간 동안 어떻게 프로바이더가 자동 전환되는지 Analytics로 관찰.
server/src/providers/openai-compat.ts를 템플릿으로 — 자기가 좋아하는 무료 LLM 프로바이더(예: Together.ai 무료 티어, Fireworks, Replicate) 어댑터를 새로 작성. 테스트 1개 추가. PR 올림. "오픈소스 첫 기여로 의미 있는 코드"의 완벽한 사이즈.
Raspberry Pi 4를 24/7 켜두고 — PM2 + nginx로 FreeLLMAPI 데몬 실행. Tailscale 깔아서 자기 노트북·모바일이 모두 접근. VSCode Continue 익스텐션의 base_url을 Pi 주소로. 결과: "내 집에 LLM 게이트웨이 1대"가 된다. 자기만의 인프라.
FreeLLMAPI에서 출발해 — LLM 인프라·시스템 디자인 영역으로 확장.
OpenAI Chat Completions API 명세를 한 줄씩 정독. SSE의 정확한 형식, finish_reason의 의미, 429 응답의 retry-after 헤더. 이 레포의 routes/를 그대로 읽으면서 — "호환의 디테일은 어디서 무너지나"를 본다.
이 레포는 — 단순한 카운터 + cooldown. 더 정교한 알고리즘(token bucket, sliding window log)을 공부하고 — ratelimit.ts에 옵션으로 추가하는 PR. Lyft·Stripe의 rate-limit 블로그 글이 좋은 참고.
이 레포의 envelope encryption을 — AWS KMS·Vault 백엔드로 바꾸면 어떻게 바뀌는지 사고 실험. 키 회전, 액세스 로깅, ABAC. "개인용 SQLite"에서 "기업용 KMS"로의 다리를 머리에서 만들어 본다.
FreeLLMAPI를 베이스로 — 멀티-테넌트 인증, 사용자별 쿼터, 감사 로그, 모델 화이트리스트를 추가하면 — 사내 LLM 게이트웨이가 된다. 이 레포가 "단일 사용자 버전"이라면, 그 위에 무엇을 얹어야 기업용이 되는지 — 직접 그려 본다.
레포·코드 안에서 자주 보는 용어.
data: ...\n\n 형식의 줄들이 연속. WebSocket보다 단순. LLM 스트리밍의 사실상 표준. stream: true 옵션일 때 FreeLLMAPI가 쓰는 응답 형식.ENCRYPTION_KEY(.env)가 마스터키 역할. SQLite에는 — provider 키가 봉투에 들어 있다.레포·공식·관련 자료.
레포 본체: github.com/tashfeenahmed/freellmapi
프로젝트 홈페이지: tashfeenahmed.github.io/freellmapi
비슷한 큐레이션: cheahjs/free-llm-api-resources(목록), mnfst/awesome-free-llm-apis(목록), open-free-llm-api/freellm-hub-data(원클릭 config 모음).
관련 표준: OpenAI API 명세, SSE(RFC), AES-256-GCM(NIST).
base_url만 바꾸면 끝.