1,3 milijarde besplatnih Tokena mesecno, API 14 AI giganta na raspolaganju, ukljucujuci Gemini
Tokom proteklih nekoliko meseci korišćenja AI-ja za pisanje koda i pokretanje Agent-a, najveći utisak mi je — modeli zaista postaju sve jači.
Ali i zaista skupi — Claude Code i Codex me mesečno koštaju preko 400 dolara.
Za prosečnog čoveka to je priličan trošak. Znam i sam, žao mi je novca, ali i ne mogu bez njih.
Zato, prijatelji, uvek neko nadje rešenje. Prošle nedelje sam na GitHub-u naišao na projekat čiji prvi red README-a glasi „1,3 milijarde besplatnih Tokena mesečno".
https://github.com/tashfeenahmed/freellmapi

Već ima 6,2k zvezdica.
01. Sta je FreeLLMAPI
Prvo da razjasnimo šta ovo radi.
FreeLLMAPI je samo-hostovani API gateway koji besplatne kvote 14 AI provajdera — Google Gemini, Groq, Mistral, Cerebras, SambaNova, OpenRouter, GitHub Models, Cloudflare Workers AI, Cohere itd. — agregira na jedan endpoint, izlažući standardni OpenAI-kompatibilni interfejs.
Dovoljno je da registrujete besplatne API ključeve pojedinačnih platformi (nijedna ne zahteva karticu), unesete ih u pozadinu FreeLLMAPI-ja, i on će vam generisati objedinjeni Bearer Token. Nakon toga svi zahtevi idu na http://localhost:3001/v1/chat/completions, a ruter automatski bira optimalni trenutno dostupni model.

Tu su i Cohere, Z.ai (Zhipu), HuggingFace, NVIDIA NIM i druge platforme.
02. Priprema preduslova
Node.js 20 ili noviji
Na macOS-u instalirajte direktno preko Homebrew:
brew install node@22Na Windowsu preporučujem WSL2 ili preuzimanje instalacionog paketa sa zvaničnog sajta Node.js. Nakon instalacije proverite:
node -v
Git
Potreban je Git za kloniranje repozitorijuma. macOS ga ima ugrađenog, a Windows korisnici mogu instalirati Git for Windows.
git --versionRegistracija besplatnih API kljuceva
Ovaj korak je vremenski najzahtjevniji deo celog procesa, ali se radi samo jednom.
Savetujem da prvi put registrujete tri provajdera: Groq, Mistral i OpenRouter.
Kada konfigurišete ta tri, dovoljno je za svakodnevnu upotrebu.
Proces registracije je sličan za sve: uđite na sajt, kreirajte nalog, u pozadini pronađite stranicu API Keys, kreirajte novi ključ, kopirajte i sačuvajte.
https://openrouter.ai/workspaces/default/keys

GitHub Models je malo drugačiji — potrebno je u GitHub Settings → Developer settings → Personal access tokens kreirati Token sa Models dozvolom.


Sačuvajte kreirane ključeve u tekstualnu datoteku, trebaće vam pri konfiguraciji.
03. Kloniranje i pokretanje
Kada su preduslovi spremni, zvanično krećemo sa instalacijom.
Kloniranje repozitorijuma
git clone https://github.com/tashfeenahmed/freellmapi.git
cd freellmapi
Instalacija zavisnosti
npm installOvaj korak istovremeno instalira i frontend i backend zavisnosti.
Generisanje kljuca za sifrovanje
FreeLLMAPI će čuvati vaše API ključeve šifrovane pomoću AES-256-GCM, pa je potreban ključ za šifrovanje.
cp .env.example .env
echo "ENCRYPTION_KEY=$(node -e "console.log(require('crypto').randomBytes(32).toString('hex'))")" >> .envOva komanda generiše 64-karakterni heksadecimalni ključ i upisuje ga u .env datoteku.

Pokretanje development servera
npm run dev
Nakon pokretanja videćete dve adrese:
- Frontend Dashboard:
http://localhost:5173 - Backend API:
http://localhost:3001
Otvorite u pretraživaču http://localhost:5173, i ako vidite administrativnu pozadinu FreeLLMAPI-ja, instalacija je uspela.

Za primenu u produkcionom okruženju koristite npm run build && node server/dist/index.js — i frontend i backend tada rade na portu 3001.
04. Konfiguracija provajdera i API kljuca
Kada se Dashboard otvori, prvi korak je da unesete API ključeve svih provajdera.
Na levoj strani Dashboard-a pronađite stranicu za upravljanje Provider-ima, kliknite na dodavanje Providera, izaberite platformu (na primer Groq) i nalepite svoj API ključ.
Možete koristiti FreeLLMAPI da proverite status zdravlja tog ključa — zeleno znači dostupno, crveno znači nevažeće ili dostignut limit.

Nakon što se konfiguriše svaki Provider, FreeLLMAPI automatski registruje modele koje ta platforma podržava u tabelu rutiranja.
Ne morate ručno da navodite koji model se koristi — ruter automatski bira na osnovu dostupnosti.
Kada konfigurišete sve Provajdere, na stranici API Key u Dashboard-u videćete sistemski generisani objedinjeni API ključ formata freellmapi-xxxx. Kopirajte taj ključ, svi klijenti će njim potvrđivati identitet.

05. Brza provera
Nakon konfiguracije prvo testirajte curl-om, da osigurate da sve radi end-to-end.
curl http://localhost:3001/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer freellmapi-vasKljuc" \
-d '{
"model": "auto",
"messages": [{"role": "user", "content": "U jednoj recenici predstavi sebe"}]
}'
Obratite pažnju da polje model bude auto, čime se ruteru prepusti automatski izbor trenutno optimalnog dostupnog modela. U zaglavlju odgovora nalazi se polje x-routed-via koje vam govori koji je Provajder zaista obradio ovaj zahtev.
Ako dobijete normalan JSON odgovor, to znači da je ceo tok od klijenta do rutera i Provajdera prošao.
06. Integracija u PaiCLI
PaiCLI je naš open source Agent CLI alat, sličan Claude Code-u.
Ispod haube koristi patern metoda šablona za upravljanje LLM Provajderima, izvlačeći zajedničku logiku kao što su HTTP zahtevi, strimovano rasčlanjivanje, Tool Calling i brojanje tokena u osnovnu klasu — svaki konkretan Provajder samo nasleđuje osnovnu klasu i popunjava API adresu i ključ.
Trenutno PaiCLI u sebi ima GLM, DeepSeek, StepFun i Kimi provajdere.
Nacin konfiguracije
Otvorite PaiCLI.
/config provider freellmapi --base-url http://127.0.0.1:5173/v1 --api-key <FreeLLMAPI unified API key> --model autoNakon konfiguracije, sa /model freellmapi se prebacite na FreeLLMAPI i možete da krenete.

Prakticni rezultati
Nakon prebacivanja, možete direktno u PaiCLI probati nekoliko promptova, da proverite da li FreeLLMAPI normalno radi.
Slucaj 1: Objašnjenje koda
Procitaj mi kod u direktorijumu src/main/java/com/paicli/llm, sredi sve nacine pristupa Providerima i kljucne razlike i daj uporednu tabelu.

Ovaj zadatak će aktivirati PaiCLI alatke za čitanje datoteka i pretragu koda, model mora da razume strukturu Java koda. Možete intuitivno osetiti prikaz modela kojeg je FreeLLMAPI izabrao u pogledu razumevanja koda.
Slucaj 2: Masovna obrada datoteka
Skeniraj sve TODO i FIXME komentare u trenutnom projektu, klasifikuj ih po prioritetu i organizuj u listu, izbaci u todo-report.md.
Ovaj zadatak će intenzivno pozivati grep alatku; kroz višekružni razgovor možete posmatrati da li Sticky Session mehanizam FreeLLMAPI-ja radi — zahtevi u roku od 30 minuta će se rutirati na isti model, čime se održava koherentnost konteksta.
Kako napisati biografiju
Ako ste na osnovu PaiCLI-ja uradili integracioni razvoj sa FreeLLMAPI-jem, u biografiji to možete predstaviti ovako:
Naziv projekta: PaiCLI — open source Agent CLI framework
Kratak opis: Terminalni AI asistent sličan Claude Code-u, podržava ReAct petlju, Plan-and-Execute, multi-Agent saradnju
Tehnički stack: Java, OpenAI Compatible API, patern metoda šablona, strimovano SSE rasčlanjivanje, SQLite
Ključne odgovornosti:
- Na osnovu paterna metoda šablona implementiran apstraktni sloj za LLM Provajdere; dodavanje novog Provajdera zahteva samo oko 30 linija koda; podržana brza integracija 6 provajdera modela: GLM, DeepSeek, StepFun, Kimi itd.
- Integrisan FreeLLMAPI gateway koji kroz OpenAI-kompatibilni protokol agregira 14 besplatnih API-ja
- Zapakovan osnovna klasa za OpenAI-kompatibilni protokol koja objedinjeno obrađuje strimovano rasčlanjivanje odgovora, konverziju parametara za Tool Calling i brojanje tokena; pokriva razlike između 4 glavna API protokola
07. Mehanizam rutanja i strategija ogranicavanja protoka
Ruter FreeLLMAPI-ja je najzanimljiviji deo čitavog projekta. Proveo sam veče čitajući njegov izvorni kod i otkrio da je dizajn znatno tananiji nego što sam očekivao.

Dinamicko kaznjavanje pri rutanju
Ruter ne vrši prostu sortiranju po fiksnom prioritetu.
Održava mehanizam dinamičkog kažnjavanja — svaki model ima osnovni prioritet, ali se za stvarno sortiranje koristi „osnovni prioritet + kazneni bodovi".
Odakle dolaze kazneni bodovi?

Svaki put kada neki model vrati 429 (ograničenje protoka), kazneni bodovi se povećavaju za 3, do maksimalno 10.
Svaka 2 minuta automatski se smanjuju za 1, a i svaki uspešan zahtev ih smanjuje za 1. To znači da će model koji je ograničen automatski potonuti u redu prioriteta, prepustivši mesto drugim modelima. Kada prođe period hlađenja, kazneni bodovi opadnu na 0 i on se vraća na svoju prvobitnu poziciju.
Pamet ovog dizajna u odnosu na statički prioritet je u tome što je adaptivan. Ne morate ručno da menjate redosled Provajdera — ruter će na osnovu trenutnog stanja ograničenja automatski pronaći optimalno rešenje.
Klizni prozor za ogranicavanje protoka
Provera ograničenja protoka koristi algoritam kliznog prozora, a ne fiksni prozor.
U čemu je razlika?
Fiksni prozor je „100 puta u minuti”, i po isteku se brojač resetuje. Klizni prozor je „100 puta u poslednjih 60 sekundi”, i svake sekunde klizi.

Implementacija FreeLLMAPI-ja je dvostruko pisanje — u memoriji i SQLite.
Svaki zahtev dodaje jedan zapis u niz vremenskih oznaka u memoriji i istovremeno zapisuje jedan red u tabelu rate_limit_usage u SQLite-u. Pri proveri limita, gleda se unazad 60 sekundi (RPM) ili 24 sata (RPD) od trenutnog vremena i broje se zapisi zahteva.
Zašto dvostruko pisanje?
Memorija je brza, vreme odziva upita je na nivou mikrosekundi. SQLite je sporši, ali nakon restarta podaci su i dalje tu.
Ako proces FreeLLMAPI-ja padne i restartuje se, svi podaci u memoriji nestaju, ali zapisi u SQLite-u ostaju, pa ne može doći do probijanja limita nakon restarta.
Dimenzije provere su ukupno četiri: RPM (broj zahteva u minuti), RPD (broj zahteva dnevno), TPM (broj tokena u minuti), TPD (broj tokena dnevno). Ako bilo koja dimenzija dostigne limit, taj Provajder se preskace.
Eskalacija hladjenja
Još zanimljivija je strategija eskalacije vremena hlađenja. Prvi put u 24 sata da isti model aktivira 429 — hlađenje 2 minuta. Drugi put 10 minuta. Treći put 1 sat. Četvrti put direktno hlađenje 24 sata.

Razmišljanje ovog dizajna je: ako model više puta biva ograničen, to znači da je njegova besplatna kvota verovatno presušila; umesto da se svakih nekoliko sekundi pokušava i troši vreme, bolje je pustiti ga da se hladi ceo dan, dok se kvota ne obnovi.
Status hlađenja se čuva u SQLite tabeli rate_limit_cooldowns; ruter pre svakog izbora modela proverava vreme hlađenja — oni koji nisu istekli se preskacu.
Sticky Session
U scenariju višekružnog razgovora postoji problem: ako je prvi krug rutiran preusmeren na Llama-u od Groq-a, a drugi krug se iznenada prebaci na Gemini od Google-a, kontekst prosleđen ranije za Gemini možda nije kompatibilan u formatu, ili model na drugačiji način razume kontekst, pa kvalitet odgovora pada.

Rešenje FreeLLMAPI-ja je Sticky Session.
Kao Session Key koristi SHA1 heš prve korisničke poruke, uz oznaku jednog kruga / više krugova.
Nakon prvog uspešnog rutiranja, mapiranje Session Key-a i ID-a modela čuva se u memoriji, 30 minuta važenja.
Kada pristigne zahtev iz istog razgovora, ruter prvo proverava Sticky mapiranje; ako pronađe, prioritetno koristi model od prošlog puta.
Obratite pažnju na to „prioritetno", a ne „obavezno". Ako prošli model više nije dostupan zbog ograničenja, ruter će ga preskočiti i nastaviti po normalnom Fallback lancu. Samo ako je prošli model i dalje dostupan, biće ponovo iskorišćen.
Osim toga, Sticky Session važi samo za višekružne razgovore. Ako u listi poruka nema istorijskih poruka sa ulogom assistant-a, to znači da je u pitanju jednokratno pitanje i ne treba vezivati model.
Fallback i pokusaji ponovo
Kompletna mreža zahteva pokušava ponovo najviše 20 puta.
Pri svakom pokušaju, kombinacija neuspešnog modela i ključa iz prethodnog puta dodaje se u skup preskakanja, pa ruter pri izboru sledećeg direktno zaobilazi. Uz mehanizam hlađenja i dinamičko kažnjavanje, 20 pokušaja uglavnom pokriva sve dostupne Provajdere.
Ako svih 20 puta ne uspe, vraća se greška 429, a poruka o grešci sadrži razlog poslednjeg neuspeha.

Koje greške pokreću pokušaj ponovo?
429 ograničenje, istek vremena, odbijanje konekcije, 503 nedostupno, 500 serverska greška — sve ove pokreću.
401 neuspešna autentifikacija se ne pokušava ponovo, jer promena modela ne rešava problem nevažećeg ključa.
