Moja aplikacja finansowa FinMan VHWorx odczytuje liczniki mediów, paragony za paliwo i wyciągi bankowe z zdjęć i plików. Wszystko to działa na modelach wizji/tekstu LLM za pośrednictwem OpenRouter — a wiele z tego na modelach z darmowego poziomu.
Darmowe modele są świetne, z wyjątkiem jednej rzeczy: ciągle się zmieniają. Pojawiają się, znikają, zmieniają nazwy lub są cicho wycofywane. Hardcodując identyfikator modelu, twoja funkcja umiera cicho w losowy wtorek.
Dlatego FinMan przestał traktować modele jako stałe. Modele są danymi:
- Codzienna praca synchronizuje aktywną listę modeli z OpenRouter. Nowe darmowe modele wizji są dodawane automatycznie; znikające są dezaktywowane.
- Płatne alternatywy są przeliczane według ceny codziennie. Rodzina Gemini Flash wspiera darmowy poziom, najtańsze najpierw — więc przełączenie nigdy nie zaskakuje rachunku.
- Rozpoznawanie przechodzi przez listę priorytetów. Jeśli model ma błąd lub zniknął, następny przejmuje. Jeden martwy model nigdy nie psuje zdjęcia użytkownika.
- Aplikacja sama się aktualizuje. Osobna praca przypina najlepszy model z publicznej tabeli liderów jako priorytet #1 — więc zadania tekstowe cicho przechodzą do tego, co jest obecnie najlepsze.
- Zmiany informują mnie na Telegramie. Żadne pulpity do sprawdzania.
Rezultat po miesiącach w produkcji: nie dotknąłem identyfikatora modelu od tego czasu. Każda fala deprecjacji przeszła niezauważona — przeze mnie i przez użytkowników.
Jeśli budujesz na LLM (szczególnie na darmowych poziomach), to jest to najwyższa dźwignia małej zmiany, jaką znam: modele jako dane, a nie stałe. Tabela, codzienny cron, przejście przez priorytety. To cały trik.