Title: Jak funguje router LLM? Canonical: https://llmeu.com/cs/learn/llm-routing-explained/ Markdown mirror: https://llmeu.com/cs/learn/llm-routing-explained.md Machine-readable: https://llmeu.com/llms.txt (index) - https://llmeu.com/llms-full.txt (full catalogue) - https://llmeu.com/llms-catalogue.json # Jak funguje router LLM? Router p%C5%99em%C4%9Bn%C3%AD po%C5%BEadavek, kter%C3%BD nepojmenov%C3%A1v%C3%A1 %C5%BE%C3%A1dn%C3%BD stroj, na odpov%C4%9B%C4%8F jednoho koncov%C3%A9ho bodu. %C4%8Cist%C3%A1 funkce filtruje kandid%C3%A1ty podle z%C3%A1sad a rezidence, hodnot%C3%AD ty, kter%C3%A9 p%C5%99e%C5%BEij%C3%AD, a vybere nejvy%C5%A1%C5%A1%C3%AD sk%C3%B3re. ## Jeden koncov%C3%BD bod dovnit%C5%99, jeden koncov%C3%BD bod vybr%C3%A1n Modelov%C3%BD router p%C5%99ijme po%C5%BEadavek, kter%C3%BD nepojmenov%C3%A1v%C3%A1 %C5%BE%C3%A1dn%C3%BD stroj, a vr%C3%A1t%C3%AD odpov%C4%9B%C4%8F toho, kter%C3%BD byl vybr%C3%A1n pravidlem. Zde je z%C3%A1m%C4%9Brn%C4%9B mal%C3%BD: po%C5%BEadavek kompatibiln%C3%AD s OpenAI doraz%C3%AD na jednu z%C3%A1kladn%C3%AD URL a %C4%8Dist%C3%A1 funkce %E2%80%93 %C5%BE%C3%A1dn%C3%A1 datab%C3%A1ze, %C5%BE%C3%A1dn%C3%A9 hodiny, %C5%BE%C3%A1dn%C3%A1 s%C3%AD%C5%A5 %E2%80%93 rozhodne, kter%C3%BD koncov%C3%BD bod na n%C4%9Bj odpov%C3%AD. Vstupy funkce jsou kandid%C3%A1tsk%C3%A9 koncov%C3%A9 body na%C4%8Dten%C3%A9 volaj%C3%ADc%C3%ADm a aktu%C3%A1ln%C3%AD %C4%8Das, co%C5%BE umo%C5%BE%C5%88uje testovat ka%C5%BEd%C3%A9 pravidlo bez b%C4%9B%C5%BE%C3%ADc%C3%ADho stacku. Pole `model` rozhoduje, kolik mo%C5%BEnost%C3%AD m%C3%A1 router. Odesl%C3%A1n%C3%AD `llmeu-auto` (nebo `llmeu/auto`, `auto`, `llmeu:auto`) mu p%C5%99ed%C3%A1 cel%C3%BD pool. Pojmenov%C3%A1n%C3%AD modelu tento model zafixuje: router pak vyb%C3%ADr%C3%A1 mezi koncov%C3%BDmi body tohoto jednoho modelu a nikdy jej nenahrad%C3%AD jin%C3%BDm, proto%C5%BEe tich%C3%A1 substituce by z pole `model` v odpov%C4%9Bdi ud%C4%9Blala odhad. ID model%C5%AF jsou nejprve normalizov%C3%A1na, tak%C5%BEe ID s p%C5%99edponou poskytovatele nebo p%C5%99%C3%ADponou data se p%C5%99elo%C5%BE%C3%AD na slug, kter%C3%BD katalog zn%C3%A1. ## Filtr b%C4%9B%C5%BE%C3%AD p%C5%99ed sk%C3%B3re, v pevn%C3%A9m po%C5%99ad%C3%AD Ka%C5%BEd%C3%BD kandid%C3%A1tsk%C3%BD koncov%C3%BD bod je testov%C3%A1n proti z%C3%A1sad%C3%A1m a po%C5%BEadavku a ka%C5%BEd%C3%A9 odm%C3%ADtnut%C3%AD je zaznamen%C3%A1no s doslovn%C3%BDm %C5%99et%C4%9Bzcem d%C5%AFvodu. Po%C5%99ad%C3%AD je sou%C4%8D%C3%A1st%C3%AD smlouvy, proto%C5%BEe prvn%C3%AD d%C5%AFvod, pro%C4%8D je koncov%C3%BD bod odm%C3%ADtnut, je ten, kter%C3%BD vysv%C4%9Btluje trasu. Koncov%C3%BD bod, jeho%C5%BE typ je `catalogue`, jde nejprve: nic na nasazen%C3%AD s n%C3%ADm neodpov%C3%ADd%C3%A1, tak%C5%BEe je odstran%C4%9Bn p%C5%99edt%C3%ADm, ne%C5%BE se zv%C3%A1%C5%BE%C3%AD jak%C3%A9koli jin%C3%A9 pravidlo. Pot%C3%A9 ty, jejich%C5%BE stav nen%C3%AD ani `up`, ani `degraded`. Pot%C3%A9 t%C5%99%C3%ADda suverenity, kontrolovan%C3%A1 jak proti organiza%C4%8Dn%C3%ADm z%C3%A1sad%C3%A1m, tak proti rezidenci, kterou po%C5%BEadavek pojmenoval. Pot%C3%A9 region, kdy%C5%BE rezidence nebo z%C3%A1sady jeden zafixuj%C3%AD. Pot%C3%A9 model, kter%C3%BD nem%C5%AF%C5%BEe generovat text %E2%80%93 model pro rozpozn%C3%A1v%C3%A1n%C3%AD %C5%99e%C4%8Di, vkl%C3%A1d%C3%A1n%C3%AD nebo reranker je zde odm%C3%ADtnut, sp%C3%AD%C5%A1e ne%C5%BE aby byl po%C5%BE%C3%A1d%C3%A1n o dokon%C4%8Den%C3%AD, kter%C3%A9 nem%C5%AF%C5%BEe produkovat. Pot%C3%A9 seznam zak%C3%A1zan%C3%BDch poskytovatel%C5%AF, seznam povolen%C3%BDch poskytovatel%C5%AF, seznam zak%C3%A1zan%C3%BDch model%C5%AF a seznam povolen%C3%BDch model%C5%AF, v tomto po%C5%99ad%C3%AD. Pot%C3%A9 partnersk%C3%A9 koncov%C3%A9 body, zat%C3%ADmco je partnersk%C3%BD p%C5%99%C3%ADznak vypnut%C3%BD. Pot%C3%A9 model bez modality vid%C4%9Bn%C3%AD, pokud po%C5%BEadavek nese obr%C3%A1zek. Pot%C3%A9 kontextov%C3%A9 okno, pokud je dokumentovan%C3%A9 okno men%C5%A1%C3%AD ne%C5%BE vstup plus po%C5%BEadovan%C3%BD v%C3%BDstup. A nakonec cena, proti stropu v z%C3%A1sad%C3%A1ch nebo v po%C5%BEadavku. Nic nep%C5%99e%C5%BEije tento filtr, kdy%C5%BE je pravidlo skute%C4%8Dn%C4%9B neuspokojiteln%C3%A9, a pak je odpov%C4%9B%C4%8F 409 `no_endpoint_for_policy`. Zpr%C3%A1va je vlastn%C3%AD v%C4%9Bta enginu o po%C5%BEadovan%C3%A9 rezidenci, n%C3%A1sledovan%C3%A1 %E2%80%9EResidency is never relaxed silently.%E2%80%9C Nen%C3%AD to p%C5%99echodn%C3%A1 chyba: stejn%C3%BD po%C5%BEadavek sel%C5%BEe stejn%C3%BDm zp%C5%AFsobem znovu a cesta ven je pojmenovat rezidenci, kterou z%C3%A1sady povoluj%C3%AD, nebo z%C3%A1m%C4%9Brn%C4%9B roz%C5%A1%C3%AD%C5%99it z%C3%A1sady v konzoli. ## Sk%C3%B3re a pro%C4%8D to nen%C3%AD sout%C4%9B%C5%BE popularity To, co p%C5%99e%C5%BEije, je hodnoceno, nikoli %C5%99azeno podle velikosti nebo podle srovn%C3%A1vac%C3%AD tabulky. Shoda s %C3%BAkolem m%C3%A1 v%C3%A1hu p%C4%9Bt, shoda s jazykem t%C5%99i, %C3%BAplnost dokumentace jedna a dokumentovan%C3%A1 t%C5%99%C3%ADda suverenity a%C5%BE dva. Cena, zaznamenan%C3%A1 latence a zaznamenan%C3%A1 chybovost se ode%C4%8D%C3%ADtaj%C3%AD: dva, dva a t%C5%99i. Cena a latence jsou normalizov%C3%A1ny nap%C5%99%C3%AD%C4%8D p%C5%99e%C5%BEiv%C5%A1%C3%AD sadou, tak%C5%BEe kandid%C3%A1ti jsou porovn%C3%A1v%C3%A1ni mezi sebou sp%C3%AD%C5%A1e ne%C5%BE proti pevn%C3%A9 stupnici, a kandid%C3%A1t bez zaznamenan%C3%A9 latence je hodnocen na 500 milisekund. Proto%C5%BEe shoda s %C3%BAkolem dominuje, stejn%C3%BD pool po%C5%BEadavk%C5%AF se sm%C4%9Bruje r%C5%AFzn%C4%9B podle %C3%BAkolu. Levn%C3%BD %C3%BAkol preferuje modely s 9B parametry nebo m%C3%A9n%C4%9B a model 753B kles%C3%A1 na 0,15. Vyhled%C3%A1v%C3%A1n%C3%AD je rozhodov%C3%A1no zaznamenan%C3%BDm kontextov%C3%BDm oknem, tak%C5%BEe model, kter%C3%BD nese tag `rag`, ale nem%C5%AF%C5%BEe pojmout kusy, nevyhraje. Po%C5%BEadavek na k%C3%B3dov%C3%A1n%C3%AD preferuje slug specializovan%C3%BD na k%C3%B3d, n%C4%9Bmeck%C3%BD po%C5%BEadavek z%C3%ADsk%C3%A1v%C3%A1 body za model, jeho%C5%BE seznam siln%C3%BDch jazyk%C5%AF obsahuje n%C4%9Bm%C4%8Dinu, a v%C3%ADcejazy%C4%8Dn%C3%BD po%C5%BEadavek z%C3%ADsk%C3%A1v%C3%A1 body, jakmile model deklaruje %C5%A1est nebo v%C3%ADce siln%C3%BDch jazyk%C5%AF. Rozhoduj%C3%ADc%C3%AD jsou ni%C5%BE%C5%A1%C3%AD cena, pot%C3%A9 ni%C5%BE%C5%A1%C3%AD zaznamenan%C3%A1 latence, pot%C3%A9 stabiln%C3%AD identifik%C3%A1tor %E2%80%93 tak%C5%BEe stejn%C3%BD po%C5%BEadavek se sm%C4%9Bruje dvakr%C3%A1t stejn%C3%BDm zp%C5%AFsobem. ## Pole z%C3%A1sad, kter%C3%A1 o tom rozhoduj%C3%AD %C5%A0est pol%C3%AD z%C3%A1sad dosahuje filtru: kter%C3%A9 t%C5%99%C3%ADdy rezidence a regiony jsou povoleny, seznamy povolen%C3%BDch a zak%C3%A1zan%C3%BDch poskytovatel%C5%AF, seznamy povolen%C3%BDch a zak%C3%A1zan%C3%BDch model%C5%AF, zda jsou partnersk%C3%A9 koncov%C3%A9 body v%C5%AFbec zp%C5%AFsobil%C3%A9, a cenov%C3%BD strop na milion token%C5%AF. Po%C5%BEadavek je m%C5%AF%C5%BEe pouze z%C3%BA%C5%BEit. %C5%BD%C3%A1dost o `eu-owned` v r%C3%A1mci z%C3%A1sad, kter%C3%A9 povoluj%C3%AD `eu-hosted`, z%C3%BA%C5%BE%C3%AD sadu; nikdy ji nem%C5%AF%C5%BEe roz%C5%A1%C3%AD%C5%99it. Cenov%C3%BD strop po%C5%BEadavku m%C5%AF%C5%BEe pouze sn%C3%AD%C5%BEit strop z%C3%A1sad. T%C5%99i dal%C5%A1%C3%AD sloupce z%C3%A1sad jsou vynuceny o jednu vrstvu nad enginem, kolem stejn%C3%A9ho rozhodnut%C3%AD: uchov%C3%A1v%C3%A1n%C3%AD, povolen%C3%A9 datov%C3%A9 t%C5%99%C3%ADdy a denn%C3%AD rozpo%C4%8Det. Ji%C5%BE vy%C4%8Derpan%C3%BD rozpo%C4%8Det zp%C5%AFsob%C3%AD selh%C3%A1n%C3%AD po%C5%BEadavku p%C5%99edt%C3%ADm, ne%C5%BE je jak%C3%BDkoli koncov%C3%BD bod ohodnocen, s `budget_exceeded`. Po%C5%BEadavek, kter%C3%BD nepojmenov%C3%A1v%C3%A1 %C5%BE%C3%A1dnou rezidenci, dostane vlastn%C3%AD sadu z%C3%A1sad: `eu-hosted`, zat%C3%ADmco ka%C5%BEd%C3%A1 t%C5%99%C3%ADda, kterou z%C3%A1sady p%C5%99ipou%C5%A1t%C4%9Bj%C3%AD, je EU-hostovan%C3%A1, a `any`, jakmile p%C5%99ipust%C3%AD cokoli jin%C3%A9ho. ## P%C5%99epnut%C3%AD na z%C3%A1lo%C5%BEn%C3%AD syst%C3%A9m z%C5%AFst%C3%A1v%C3%A1 uvnit%C5%99 rozhodnut%C3%AD P%C5%99i 5xx nebo nedosa%C5%BEiteln%C3%A9m backendu se zkus%C3%AD dal%C5%A1%C3%AD nejlep%C5%A1%C3%AD kandid%C3%A1t, a%C5%BE t%C5%99i pokusy, a ka%C5%BEd%C3%BD pokus je zaznamen%C3%A1n. Chyba, kterou backend ozna%C4%8D%C3%AD jako kone%C4%8Dnou, se v%C5%AFbec neopakuje. Seznam opakov%C3%A1n%C3%AD je sestaven z ji%C5%BE filtrovan%C3%A9ho rozhodnut%C3%AD, tak%C5%BEe opakov%C3%A1n%C3%AD se m%C5%AF%C5%BEe p%C5%99esunout na jin%C3%BD koncov%C3%BD bod v r%C3%A1mci va%C5%A1ich z%C3%A1sad a nikdy mimo n%C4%9B %E2%80%93 p%C5%99epnut%C3%AD na z%C3%A1lo%C5%BEn%C3%AD syst%C3%A9m, kter%C3%A9 by uniklo filtru rezidence, by bylo chybou rezidence, co%C5%BE je t%C5%99%C3%ADda defekt%C5%AF, kter%C3%A9 tento design m%C3%A1 zabr%C3%A1nit. ## Co v%C3%A1m odpov%C4%9B%C4%8F %C5%99ekne Odpov%C4%9B%C4%8F p%C5%99id%C3%A1v%C3%A1 blok vedle standardn%C3%ADch pol%C3%AD OpenAI: ID trasov%C3%A1n%C3%AD, pou%C5%BEit%C3%BD model, jeho verze, poskytovatel, ID koncov%C3%A9ho bodu, region inference, t%C5%99%C3%ADda suverenity, ID z%C3%A1sad, pou%C5%BEit%C3%A9 uchov%C3%A1v%C3%A1n%C3%AD, odhad n%C3%A1klad%C5%AF a d%C5%AFvod trasy. Tento d%C5%AFvod je sp%C3%AD%C5%A1e v%C4%9Bta ne%C5%BE k%C3%B3d a pojmenov%C3%A1v%C3%A1 region a t%C5%99%C3%ADdu: automatick%C3%A9 sm%C4%9Brov%C3%A1n%C3%AD pro k%C3%B3dovac%C3%AD %C3%BAkol s rezidenc%C3%AD `eu-hosted`, vybran%C3%BD slug a region, t%C5%99%C3%ADda slovy, kolik koncov%C3%BDch bod%C5%AF bylo vylou%C4%8Deno a zda byly povoleny partnersk%C3%A9 koncov%C3%A9 body. Stejn%C3%A1 v%C4%9Bta je doslovn%C4%9B zobrazena v konzoli a ulo%C5%BEen%C3%A9 trasov%C3%A1n%C3%AD je dohledateln%C3%A9 podle jeho ID. Jedna pozn%C3%A1mka k pojmenov%C3%A1n%C3%AD, proto%C5%BEe slova se v v%C3%BDsledc%C3%ADch vyhled%C3%A1v%C3%A1n%C3%AD p%C5%99ekr%C3%BDvaj%C3%AD: sm%C4%9Brov%C3%A1n%C3%AD se v t%C3%A9to oblasti pou%C5%BE%C3%ADv%C3%A1 pro n%C4%9Bkolik r%C5%AFzn%C3%BDch v%C4%9Bc%C3%AD. Zde popsan%C3%A9 je router v tomto repozit%C3%A1%C5%99i a ka%C5%BEd%C3%A9 pravidlo v%C3%BD%C5%A1e je %C4%8Dteno z k%C3%B3du, kter%C3%BD jej vynucuje %E2%80%93 d%C5%AFvody odm%C3%ADtnut%C3%AD jsou jeho doslovn%C3%A9 %C5%99et%C4%9Bzce, v%C3%A1hy jsou jeho bodovac%C3%AD funkce a v%C3%BDchoz%C3%AD hodnoty jsou v%C3%BDchoz%C3%AD hodnoty sloupc%C5%AF sch%C3%A9matu datab%C3%A1ze. ## %C4%8Casto kladen%C3%A9 ot%C3%A1zky ### Co se stane, kdy%C5%BE jako model ode%C5%A1lu llmeu-auto? Router uchov%C3%A1 ka%C5%BEd%C3%BD koncov%C3%BD bod, kter%C3%BD projde filtrem, a ohodnot%C3%AD je. Odpov%C4%9B%C4%8F uv%C3%A1d%C3%AD, kter%C3%BD z nich vyhr%C3%A1l: pou%C5%BEit%C3%BD model, oblast inference, t%C5%99%C3%ADda suverenity, ID politiky a sm%C4%9Brovac%C3%AD v%C4%9Bta. V p%C5%99%C3%ADpad%C4%9B shody rozhoduje levn%C4%9Bj%C5%A1%C3%AD, pak rychlej%C5%A1%C3%AD, pak stabiln%C3%AD ID. ### M%C5%AF%C5%BEe router odeslat m%C5%AFj po%C5%BEadavek mimo oblast, kterou jsem si vy%C5%BE%C3%A1dal? Ne. Rezidence je aplikov%C3%A1na jako filtr p%C5%99ed bodov%C3%A1n%C3%ADm a seznam opakov%C3%A1n%C3%AD pro selh%C3%A1vaj%C3%ADc%C3%AD backend je sestaven z ji%C5%BE filtrovan%C3%A9ho rozhodnut%C3%AD, a%C5%BE do t%C5%99%C3%AD pokus%C5%AF. Koncov%C3%BD bod mimo povolenou sadu nen%C3%AD nikdy v porovn%C3%A1n%C3%AD. ### Pro%C4%8D selhalo pojmenov%C3%A1n%C3%AD konkr%C3%A9tn%C3%ADho modelu nam%C3%ADsto p%C5%99esm%C4%9Brov%C3%A1n%C3%AD jinam? Pojmenovan%C3%BD model je p%C5%99ipnut%C3%BD. Pokud %C5%BE%C3%A1dn%C3%BD z jeho koncov%C3%BDch bod%C5%AF nep%C5%99e%C5%BEije, router uvede d%C5%AFvod: model_not_found, hosted_unavailable pro model pouze z katalogu, model_denied pro seznam politik, not_a_text_model pro %C5%99e%C4%8Dov%C3%BD nebo embedding model. ## Viz tak%C3%A9: