G.A.C.A.: jedna szyna do wielu modeli AI z automatycznym przełączaniem
Otwarty serwer pośredniczący między aplikacją a dostawcami modeli językowych. Sam wybiera dostępny model, pilnuje limitów zapytań, a gdy dostawca nie odpowiada, przełącza się na kolejnego.
Branża: Twórcy aplikacji AI, zespoły IT
W skrócie
- Otwarty kod, licencja MIT
- 11 dostawców modeli, m.in. Groq, Cerebras, Google AI, OpenRouter i Mistral
- Do 30 prób przełączenia przy awarii dostawcy
- Jeden endpoint REST: POST /api/complete
O projekcie
Aplikacja, która korzysta z jednego dostawcy modeli językowych, staje, gdy ten dostawca ma awarię albo wyczerpie się limit zapytań. G.A.C.A. (Generative AI Cost Arbitrage) stoi pomiędzy aplikacją a dostawcami i przy każdym zapytaniu wybiera model, który jest dostępny i dobrze wypada w rankingu.
Wyzwanie
Trzeba było schować za jednym punktem wejścia wielu dostawców o różnych limitach, formatach i stabilności, tak żeby aplikacja wysyłała zapytanie i dostawała odpowiedź bez wiedzy o tym, kto ją wygenerował.
Cele
- Jeden endpoint do wielu dostawców modeli
- Automatyczne przełączanie przy błędzie
- Śledzenie limitów zapytań dla dostawcy i modelu
- Ranking modeli według skuteczności i czasu odpowiedzi
Wyzwania techniczne
Limity na dwóch poziomach
Każdy dostawca i każdy model ma własne limity zapytań na minutę i na dzień. Serwer liczy je osobno, w pamięci podręcznej, i omija model, który dobił do limitu.
Ranking, który sam się aktualizuje
Wynik modelu liczony jest automatycznie z odsetka udanych odpowiedzi, czasu odpowiedzi i jakości, więc wybór poprawia się z każdym zapytaniem.
Rozwiązanie i wdrożenie
Przełączanie przy awarii
Gdy dostawca nie odpowiada, serwer próbuje kolejnych modeli, do 30 prób, zanim zwróci błąd.
Koszty i tokeny
Przy każdym zapytaniu zapisywane jest zużycie tokenów i szacowany koszt w USD.
Panel i REST API
Panel w React do zarządzania dostawcami, modelami i rankingiem oraz pełne API REST, w tym endpoint do zapytań i edytowalne szablony promptów.
Szablony promptów i automatyczna aktualizacja
Prompty systemowe są edytowalne i przyjmują zmienne. Nowe modele i dostawcy dodani w kodzie synchronizują się z bazą automatycznie, bez utraty zapisanych danych.
Rezultaty
Aplikacja nie staje przy awarii dostawcy
Zapytanie trafia do kolejnego dostępnego modelu, a aplikacja dostaje odpowiedź.
Jedna integracja zamiast wielu
Zamiast obsługiwać API każdego dostawcy osobno, aplikacja rozmawia z jednym serwerem.
Wnioski
Niezależność od jednego dostawcy
Szyna między aplikacją a modelami pozwala zmienić dostawcę bez zmiany kodu aplikacji.
Zakres
- Wybór modelu
- Automatyczne przełączanie
- Limity i koszty
- Panel administracyjny
Technologie
- TypeScript
- Node.js
- Prisma
- React
Projekt open source
Język: TypeScript, Node.js. Licencja: MIT.
Instalacja
git clone https://github.com/gacabartosz/gaca-core.git
cd gaca-core
npm install
cp .env.example .env
npx prisma generate
npx prisma db push
npm run seed:force
npm run devPrzykład użycia
Wyślij zapytanie bez wskazywania modelu. Serwer sam wybierze najlepszy dostępny.
curl -X POST http://localhost:3002/api/complete \
-H 'Content-Type: application/json' \
-d '{"prompt": "Wyjaśnij w jednym zdaniu, czym jest MCP"}'Najczęstsze pytania
Do czego służy G.A.C.A.?
Do wysyłania zapytań do modeli językowych przez jeden endpoint. Serwer sam wybiera dostawcę i model oraz przełącza się, gdy któryś zawiedzie.
Czy potrzebuję płatnych kluczy API?
Nie trzeba. README opisuje krok po kroku zakładanie darmowych kluczy u dostawców z darmowymi limitami, bez karty kredytowej. Płatnych dostawców, takich jak Anthropic i OpenAI, też można podłączyć.
Jak wysłać zapytanie?
Wywołaniem POST /api/complete z treścią promptu. Odpowiedź zawiera tekst, nazwę modelu i dostawcy, zużyte tokeny i czas odpowiedzi.
Na czym działa?
Na Node.js z TypeScriptem i bazą przez Prisma, z panelem w React.
Czy mogę dodać własnego dostawcę albo model?
Tak. Panel i REST API pozwalają zarządzać dostawcami i modelami, a mechanizm automatycznej aktualizacji dopisuje nowe wpisy z kodu bez kasowania istniejących ustawień i statystyk.