Skip to main content

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 dev

Przykł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.

Wszystkie case studies