Routing ważony kosztem
Gdy dostępnych jest kilka modeli — Opus, Sonnet, Haiku lub modele lokalne za samodzielnie hostowaną bramą odysseus — PRECC kieruje każde zadanie do tego modelu, który minimalizuje oczekiwany koszt w dolarach, a nie liczbę tokenów. Token z taniego modelu i token z drogiego modelu nie kosztują tyle samo; router optymalizuje dolara, z zachowaniem zmierzonego progu skuteczności oraz progu zdolności specyficznego dla kategorii.
Jednostką kosztu jest dolar, a nie token
Dla zadania kategorii c, spośród kwalifikujących się pod względem zdolności modeli kandydujących m, router minimalizuje oczekiwany koszt ważony ceną. E[$ | task, m] to zmierzony średni koszt tokenowy modelu dla danej kategorii pomnożony przez jego cenę za token. Uruchomienie Haiku, które zużywa więcej tokenów niż Opus, nadal może wygrać, ponieważ Haiku jest kilkukrotnie tańsze w przeliczeniu na token. Każda liczba w funkcji celu jest albo zmierzona (średnie tokenowe z oracle, zarejestrowana skuteczność, opublikowane ceny modeli), albo jawnie oznaczona jako wartość a priori — nigdy nie jest zmyślona.
choose argmin_m E[$ | task, m]
subject to P(success | task, m) >= min_success
capability(m) >= capability_floor(category)
Routing zadania
precc route "<task>" kategoryzuje zadanie, stosuje próg zdolności, porządkuje kwalifikujące się modele według oczekiwanych dolarów i wypisuje decyzję. Z flagą --execute wysyła zadanie do wybranego modelu poprzez odysseus session API. Każda decyzja jest również zasiewana do oracle predykcji, aby po wykonaniu zadania można było zarejestrować jego rzeczywisty koszt i wynik.
$ precc route "fix the broken parser"
category : fix (capability floor 0)
→ model : anthropic/claude-haiku-4-5 [Measured, confidence 0.60]
est. cost : $0.0096 (12000 tok)
reason : measured cheapest-capable for `fix` (by cost): claude-haiku-4-5
prediction : #42 (seeded; learner will auto-close after the task runs)
Oszczędności w dolarach
precc savings dodaje sekcję dolarową za każdym razem, gdy ukończone zostaną routowane zadania. Dla każdego routowanego zadania wycenia faktycznie zużyte tokeny według stawki wybranego modelu i porównuje je z punktem odniesienia opartym na zawsze domyślnym modelu — przy ustalonej liczbie tokenów zmienia się jedynie cena. Jest to ujęcie “tnij koszt, a nie tylko tokeny”; sekcja pozostaje ukryta, dopóki nie istnieją rzeczywiste dane z routingu, więc nigdy nie pokazuje zmyślonych wierszy.
$ precc savings
Routing cost (USD) — baseline: always claude-opus-4-5
claude-haiku-4-5 : 1 task(s) $ 0.0096 chosen vs $ 0.0600 baseline
claude-sonnet-4-6 : 1 task(s) $ 0.1200 chosen vs $ 0.2000 baseline
total : 2 task(s) $ 0.1296 chosen vs $ 0.2600 baseline
→ saved $0.1304 (50.2% of baseline spend)
Pętla sprzężenia zwrotnego
Routing sam się doskonali: route → execute → record → retrain. Każda routowana decyzja jest zasiewana do oracle; działający w tle demon precc-learner pobiera ukończoną wiadomość, rejestruje rzeczywiste tokeny, model i skuteczność oraz zamyka wiersz. W miarę jak tabela per (model, category) się zapełnia, router przechodzi od wartości a priori “najtańszy zdolny” do wyborów opartych na pomiarach, a predyktor tokenów zyskuje wymiar specyficzny dla modelu.
Eksploracja
Aby uniknąć wiecznego wykorzystywania jednego taniego modelu na podstawie nieaktualnych danych, router może celowo próbkować niedostatecznie zbadaną komórkę (model, category) przed zachłannym wyborem. Eksploracja jest opcjonalna (opt-in), deterministyczna (bez losowości — hook musi być odtwarzalny) i ograniczona: nigdy nie przekracza progu zdolności ani zmierzonej skuteczności, a pułap żalu cenowego powstrzymuje ją przed zboczeniem na znacznie droższy model.
# ~/.config/precc/odysseus.toml
explore_n_min = 3 # sample each (model, category) cell ~3× before trusting it
explore_eps = 1.0 # allow up to 2× the cheapest price while exploring
Zmierzone, nigdy założone
Model zostaje wykluczony za niespełnienie progu skuteczności tylko wtedy, gdy istnieje zmierzony dowód, że tak jest — niezmierzony model nigdy nie jest wykluczany na podstawie zgadywanej liczby. Przy braku danych dla komórki router wraca do ostrożnej wartości a priori “najtańszy zdolny” i oznacza decyzję jako zimny start, więc wywołujący zawsze wie, czy wybór opiera się na dowodach, czy na wartości a priori.