# OmniRoute Auto-Combo Engine (Gaeilge) 🌐 **Languages:** 🇺🇸 [English](../../../../routing/AUTO-COMBO.md) · 🇪🇹 [am](../../../am/docs/routing/AUTO-COMBO.md) · 🇸🇦 [ar](../../../ar/docs/routing/AUTO-COMBO.md) · 🇦🇿 [az](../../../az/docs/routing/AUTO-COMBO.md) · 🇧🇬 [bg](../../../bg/docs/routing/AUTO-COMBO.md) · 🇧🇩 [bn](../../../bn/docs/routing/AUTO-COMBO.md) · 🇧🇦 [bs](../../../bs/docs/routing/AUTO-COMBO.md) · 🇨🇿 [cs](../../../cs/docs/routing/AUTO-COMBO.md) · 🇩🇰 [da](../../../da/docs/routing/AUTO-COMBO.md) · 🇩🇪 [de](../../../de/docs/routing/AUTO-COMBO.md) · 🇬🇷 [el](../../../el/docs/routing/AUTO-COMBO.md) · 🇪🇸 [es](../../../es/docs/routing/AUTO-COMBO.md) · 🇪🇪 [et](../../../et/docs/routing/AUTO-COMBO.md) · 🇮🇷 [fa](../../../fa/docs/routing/AUTO-COMBO.md) · 🇫🇮 [fi](../../../fi/docs/routing/AUTO-COMBO.md) · 🇫🇷 [fr](../../../fr/docs/routing/AUTO-COMBO.md) · 🇮🇳 [gu](../../../gu/docs/routing/AUTO-COMBO.md) · 🇳🇬 [ha](../../../ha/docs/routing/AUTO-COMBO.md) · 🇮🇱 [he](../../../he/docs/routing/AUTO-COMBO.md) · 🇮🇳 [hi](../../../hi/docs/routing/AUTO-COMBO.md) · 🇭🇷 [hr](../../../hr/docs/routing/AUTO-COMBO.md) · 🇭🇺 [hu](../../../hu/docs/routing/AUTO-COMBO.md) · 🇦🇲 [hy](../../../hy/docs/routing/AUTO-COMBO.md) · 🇮🇩 [id](../../../id/docs/routing/AUTO-COMBO.md) · 🇳🇬 [ig](../../../ig/docs/routing/AUTO-COMBO.md) · 🇮🇹 [it](../../../it/docs/routing/AUTO-COMBO.md) · 🇯🇵 [ja](../../../ja/docs/routing/AUTO-COMBO.md) · 🇬🇪 [ka](../../../ka/docs/routing/AUTO-COMBO.md) · 🇰🇭 [km](../../../km/docs/routing/AUTO-COMBO.md) · 🇮🇳 [kn](../../../kn/docs/routing/AUTO-COMBO.md) · 🇰🇷 [ko](../../../ko/docs/routing/AUTO-COMBO.md) · 🇱🇹 [lt](../../../lt/docs/routing/AUTO-COMBO.md) · 🇱🇻 [lv](../../../lv/docs/routing/AUTO-COMBO.md) · 🇮🇳 [ml](../../../ml/docs/routing/AUTO-COMBO.md) · 🇮🇳 [mr](../../../mr/docs/routing/AUTO-COMBO.md) · 🇲🇾 [ms](../../../ms/docs/routing/AUTO-COMBO.md) · 🇲🇹 [mt](../../../mt/docs/routing/AUTO-COMBO.md) · 🇲🇲 [my](../../../my/docs/routing/AUTO-COMBO.md) · 🇳🇵 [ne](../../../ne/docs/routing/AUTO-COMBO.md) · 🇳🇱 [nl](../../../nl/docs/routing/AUTO-COMBO.md) · 🇳🇴 [no](../../../no/docs/routing/AUTO-COMBO.md) · 🇮🇳 [or](../../../or/docs/routing/AUTO-COMBO.md) · 🇮🇳 [pa](../../../pa/docs/routing/AUTO-COMBO.md) · 🇵🇭 [phi](../../../phi/docs/routing/AUTO-COMBO.md) · 🇵🇱 [pl](../../../pl/docs/routing/AUTO-COMBO.md) · 🇵🇹 [pt](../../../pt/docs/routing/AUTO-COMBO.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/routing/AUTO-COMBO.md) · 🇷🇴 [ro](../../../ro/docs/routing/AUTO-COMBO.md) · 🇷🇺 [ru](../../../ru/docs/routing/AUTO-COMBO.md) · 🇱🇰 [si](../../../si/docs/routing/AUTO-COMBO.md) · 🇸🇰 [sk](../../../sk/docs/routing/AUTO-COMBO.md) · 🇸🇮 [sl](../../../sl/docs/routing/AUTO-COMBO.md) · 🇷🇸 [sr](../../../sr/docs/routing/AUTO-COMBO.md) · 🇸🇪 [sv](../../../sv/docs/routing/AUTO-COMBO.md) · 🇰🇪 [sw](../../../sw/docs/routing/AUTO-COMBO.md) · 🇮🇳 [ta](../../../ta/docs/routing/AUTO-COMBO.md) · 🇮🇳 [te](../../../te/docs/routing/AUTO-COMBO.md) · 🇹🇭 [th](../../../th/docs/routing/AUTO-COMBO.md) · 🇹🇷 [tr](../../../tr/docs/routing/AUTO-COMBO.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/routing/AUTO-COMBO.md) · 🇵🇰 [ur](../../../ur/docs/routing/AUTO-COMBO.md) · 🇺🇿 [uz](../../../uz/docs/routing/AUTO-COMBO.md) · 🇻🇳 [vi](../../../vi/docs/routing/AUTO-COMBO.md) · 🇳🇬 [yo](../../../yo/docs/routing/AUTO-COMBO.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/routing/AUTO-COMBO.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/routing/AUTO-COMBO.md) --- > **D'Úsáideoirí**: Ag lorg tús tapa? Féach ar [Threoir Úsáideora Auto-Combo](../getting-started/AUTO-COMBO-GUIDE.md) le haghaidh mínithe agus samplaí simplí. > Slabhraí samhlacha fé bhainistiú féin le scóráil oiriúnaitheach + uathródú gan chumraíocht ## Uathródú Gan Chumraíocht (réimír `auto/`) > **NUA:** Ní gá teaglama a chruthú. Úsáid an réimír `auto/` go díreach in aon chliant. ### Samplaí Tapa | Aitheantas Samhla | Malairt | Iompar | | ----------------- | ----------- | -------------------------------------------------------------------------------------------------- | | `auto` | réamhshocrú | Gach soláthraí nasctha, straitéis LKGP, meáchain chothromaithe | | `auto/coding` | códú | Meáchain a thugann tús áite don cháilíocht, oiriúnach do ghiniúint cóid | | `auto/fast` | tapa | Roghnú ualaithe ar aga folaigh íseal | | `auto/cheap` | saor | Ródú optamaithe de réir costais (an costas is ísle ar dtús) | | `auto/offline` | as líne | Tugtar tús áite do sholáthraithe leis an infhaighteacht cuóta is airde | | `auto/smart` | cliste | Tús áite don cháilíocht + ráta taiscéalaíochta níos airde (10%) chun samhlacha a aimsiú níos fearr | | `auto/lkgp` | lkgp | LKGP follasach (mar an gcéanna leis an `auto` réamhshocraithe) | | `auto/chaos` | anord | Leathnú amach comhthreomhar, samhail amháin in aghaidh an tsoláthraí (ní instealladh lochta é) | ### Comhdhéanamh Catagóire × Sraithe (`auto/:`) Scarann iarmhíreanna ar nós OpenRouter **cén cineál róid** (catagóir) ó **conas é a bharrfheabhsú** (sraith), ionas gur féidir leat iad a chomhdhéanamh gan srian (#4235 Céim B, `open-sse/services/autoCombo/suffixComposition.ts`): - **Catagóirí** (scag comhthiomsú na n-iarrthóirí de réir cumais): `coding` · `reasoning` · `vision` · `chat` · `multimodal`. Coinníonn `vision`/`multimodal` samhlacha atá ábalta ar fhís; coinníonn `reasoning` samhlacha réasúnaíochta/smaointeoireachta. - **Sraitheanna** (roghnaigh na meáchain scórála / scagaire an chomhthiomsaithe): `fast` (seoladh tapa) · `cheap` (ailias `floor`, coigilteas costais) · `reliable` (sláinte scoradáin chiorcaid + cobhsaíocht aga folaigh) · `free` / `pro` (scag an comhthiomsú de réir shraith na samhla trí `classifyTier` — sraith saor in aisce seachas sraith phréimhe). | Sampla | Réitítear mar | | ---------------------- | ----------------------------------------------------------------------------- | | `auto/coding:fast` | comhthiomsú códaithe, meáchain ar aga folaigh íseal | | `auto/coding:cheap` | comhthiomsú códaithe, optamaithe de réir costais (ailias `auto/coding:floor`) | | `auto/reasoning:pro` | samhlacha réasúnaíochta/smaointeoireachta amháin, sraith phréimhe | | `auto/vision` | samhlacha atá ábalta ar fhís (gan sraith → meáchain chothromaithe) | | `auto/multimodal:free` | samhlacha ilmhódacha amháin, sraith saor in aisce amháin | Réitítear aon `auto/[:]` bailí ar éileamh; fógraítear fothacar coimeádaithe in `/v1/models` agus ar an deais (`AUTO_SUFFIX_VARIANTS` in `open-sse/services/autoCombo/builtinCatalog.ts`). Tá an scagadh **oscailte i gcás teipe** — mura meaitseálann srian aon samhail nasctha, úsáidtear an comhthiomsú iomlán ionas nach gcliseann an ródú choíche. Níl aon athrú ar an gcroí-scóróir (`combo.ts`); cuirtear an scagaire catagóire/sraithe i bhfeidhm in `buildAutoCandidates`. > **Faisnéis bheo faoi shamhlacha:** treoraítear oiriúnacht an uathródaithe ag ranguithe beo **Arena ELO** + sonraí sraithe **models.dev** nuair atá an bhratach `ARENA_ELO_SYNC_ENABLED` ar siúl (úsáidtear an léarscáil statach oiriúnachta mar chúltaca mura bhfuil). **Conas é a úsáid:** ```bash # Aon uirlis IDE nó CLI a thacaíonn le formáid OpenAI URL Bonn: http://localhost:20128/v1 Eochair API: # I do chód/chumraíocht, socraigh an tsamhail mar: model: "auto" # réamhshocrú cothromaithe model: "auto/coding" # is fearr do thascanna códaithe model: "auto/fast" # an ceann is tapúla atá ar fáil model: "auto/cheap" # an ceann is saoire in aghaidh an chomhartha ``` **Cad a tharlaíonn:** 1. Aimsíonn OmniRoute an réimír `auto/` in `src/sse/handlers/chat.ts` 2. Iarrann sé gach **nasc gníomhach soláthraí** ón mbunachar sonraí 3. Scagann sé iad siúd a bhfuil dintiúir bhailí acu (eochair API nó comhartha OAuth) 4. Cinneann sé an tsamhail in aghaidh an naisc (`connection.defaultModel` nó céad samhail an tsoláthraí) 5. Tógann sé **teaglama fíorúil** sa chuimhne (ní stóráiltear sa bhunachar sonraí é) 6. Déanann sé ródú ag úsáid phróifíl mheáchain na malairte roghnaithe + straitéis LKGP **Príomh-airíonna:** - ✅ **Ar siúl i gcónaí:** Ní theastaíonn scorán, cruthú teaglama ná cumraíocht ar bith - ✅ **Dinimiciúil:** Léiríonn sé na soláthraithe atá nasctha faoi láthair go huathoibríoch - ✅ **Greamaitheacht seisiúin:** Cinntíonn LKGP go dtugtar tús áite don soláthraí deireanach ar éirigh leis - ✅ **Feasach ar ilchuntais:** Déantar iarrthóir ar leith de gach nasc soláthraí - ✅ **Gan scríobh sa bhunachar sonraí:** Ní bhíonn an teaglama fíorúil ann ach don iarratas, gan aon fhorchostas marthanachta ### Rialú iarrthóirí de réir eochrach (#7819, Leibhéal 1+2) Is críochphointe **inléite amháin** é `GET /v1/auto-combo/{channel}/candidates` (`{channel}` = an iarmhír tar éis `auto/`, nó an litriúil `auto` don bhunchainéal) a liostaíonn comhthiomsú reatha iarrthóirí cainéil `auto/*`, maisithe le hinrochtaineacht bheo, agus a athúsáideann na léamha athléimneachta atá ann cheana (ní úsáidtear `state` amh an scoradáin choíche): - scoradán ciorcaid an tsoláthraí — `getCircuitBreaker(provider).getStatus()` / `.canExecute()` - tréimhse shuaimhnithe an naisc — `rateLimitedUntil` / `testStatus` ar an ró réitithe `provider_connections` - frithdhúnadh samhla — `isModelLocked(provider, connectionId, model)` Bíonn bratach `excluded` na heochrach API seo ag gach iarrthóir freisin. Stóráiltear eisiamh de réir eochair API (tábla `auto_candidate_overrides`, ascnaimh `128`) — tá OmniRoute aonthionónta agus níl aon tábla `users` ann, mar sin is é `apiKeyId` an fhéiniúlacht fhíor is gaire in aghaidh an ghlaoiteora — agus cuirtear i bhfeidhm iad ag scrogall chomhthiomsú na n-iarrthóirí in `open-sse/services/autoCombo/virtualFactory.ts` tríd an bhfeidhm íon, aonadthástáilte `filterExcludedCandidates()` (`open-sse/services/autoCombo/candidateOverrides.ts`). Tá an scagaire **oscailte i gcás teipe**: fágann `apiKeyId`/cainéal neamhshocraithe nó teip chuardaigh sa bhunachar sonraí an comhthiomsú gan scagadh, agus mar sin feiceann oibreoir nach bhfuil aon sáruithe cumraithe aige ródú atá comhionann beart ar bheart leis an méid a bhí ann roimh an ngné seo. **Curtha siar go dtí saincheist leantach:** ualuithe in aghaidh an iarrthóra + ordú sainráite (Leibhéal 3 — cuirtear é seo isteach sna conairí straitéise ualaithe/tosaíochta atá ann cheana) agus straitéis shonrach `combo.ts` a phionnáil do gach cainéal `auto/*` (Leibhéal 4). Féach plean #7819 don cheist oscailte faoi cé acu ar cheart do sháruithe fanacht de réir eochair API nó éirí domhanda i bhfianaise na samhla aontionónta. **Taobh thiar den ardán:** ```txt Iarratas: { model: "auto/coding" } ↓ src/sse/handlers/chat.ts aimsíonn sé an réimír ↓ createVirtualAutoCombo('coding') → candidatePool ó naisc ghníomhacha ↓ handleComboChat (an t-inneall céanna le teaglamaí marthanacha) ↓ Roghnaíonn uathscóráil an soláthraí/tsamhail is fearr do gach iarratas ``` **Comhaid chur chun feidhme:** | Comhad | Cuspóir | | --------------------------------------------------------- | ----------------------------------------------------------- | | `open-sse/services/autoCombo/autoPrefix.ts` | Parsálaí réimíre (`parseAutoPrefix`) | | `open-sse/services/autoCombo/virtualFactory.ts` | Cruthaíonn sé oibiachtaí fíorúla `AutoComboConfig` | | `open-sse/services/autoCombo/providerRegistryAccessor.ts` | Crúca tástála chun clárlann na soláthraithe a bhréagshamhlú | | `src/sse/handlers/chat.ts` | Comhtháthú: gearrchiorcad don réimír auto | | `src/shared/constants/providers.ts` | Iontráil chórais `SYSTEM_PROVIDERS.auto` | ## Ainmneacha Combo a Mheaitseálann le Fíor-Aitheantas Múnla Is **phatrún intentional, tacaíochta** é combo a bhfuil a `name` mar an gcéanna le bare aitheantas múnla (m.sh. combo dar ainm `gpt-5.5`), ní fabht: is é an meicníocht é le haghaidh tacaíocht soláthraí in aghaidh an aitheantas múnla, mar atá cur síos air in [#6940](https://github.com/diegosouzapw/OmniRoute/issues/6940). Toisc go ndéantar seiceáil ar réiteach combo roimh réiteach bare aitheantas múnla (`getComboForModel()` in `src/sse/services/model.ts`), tá iarratas ar an bare aitheantas `gpt-5.5` á ródú trí spriocanna an combo (m.sh. `acme-responses/gpt-5.5`, `backup-responses/gpt-5.5)` in ionad dul díreach chuig soláthraí amháin — athúsáidtear an tosaíocht combo-roimh-athscríobh a tógadh le haghaidh [#3227/#3233](https://github.com/diegosouzapw/OmniRoute/issues/3227) agus tá sé á thástáil aisghníomhaíochta ag `tests/unit/responses-combo-resolution-3227.test.ts` agus `tests/unit/combo-name-codex-responses-rewrite.test.ts`. Nuair a chruthaítear nó a athainmnítear combo go hainm a chlúdaíonn fíor-aitheantas múnla, **ní dhéantar é a dhiúltú riamh** — bhrisfeadh sin an sreabhadh oibre seo atá cur síos air. Ina áit sin (#8530), cuireann `POST /api/combos` agus `PUT /api/combos/[id]` réimse `warning` neamh-bhlocála leis an bhfreagra nuair a thagann an t-ainm (nua) salach ar fíor-aitheantas múnla: ```json { "warning": { "code": "COMBO_NAME_SHADOWS_MODEL", "modelId": "gpt-5.5", "providerId": "openai" } } ``` Ag am tosaithe, logáiltear freisin monatóireacht `[STARTUP]` aonlíne ag `scanComboModelNameCollisionsAtBoot()` (`src/instrumentation-node.ts`) a liostaíonn gach combo atá ann cheana a chlúdaíonn aitheantas múnla, ionas go mbeidh comhartha ag oibreoirí a shroichfidh seo de thaisme (seachas go heolasach, de réir #6940). Tá an cúntóir braite suiteáilte in `src/lib/combos/modelNameCollision.ts`. ## Glaoch ar Combo Saincheaptha ó Chliant Ní úsáidtear combos atá curtha ar ais (Socruithe → Combo) ach amháin nuair a sheolann an cliant **ainm beacht** an combo sa réimse `model` — níl aon mheaitseáil doiléir nó páirteach ar ainm an combo, agus níl aon réimse `auto/` i gceist. Ord réiteach (`getComboForModel()` in `src/sse/services/model.ts`): 1. meaitseáil ainm combo beacht (`model: "my-combo"`), 2. réimse `combo/` (`model: "combo/my-combo"`), 3. léarscáileanna glob múnla→combo (`/api/model-combo-mappings`). ```bash curl -X POST http://localhost:20128/v1/chat/completions \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"model":"my-combo","messages":[{"role":"user","content":"Hello"}]}' ``` Dá pholl coitianta: - **Ní úsáideann `auto` do combos.** Tógann `auto`/`auto/*` a líonra iarrthóirí féin gan chumraíocht agus ní thagann sé ar combos curtha ar ais ach amháin má tá combo dar ainm `auto` go litriúil (nach molta). Chun ródú a dhéanamh trí combo, seol a ainm beacht — ní `auto`. - **Is táirge íoctha fíor é `openrouter/auto`** ("Auto Best Available") ag OpenRouter, ní ailias OmniRoute. Is é an iontráil múnla statach aonair é de chlárúchán OpenRouter (`open-sse/config/providers/registry/openrouter/index.ts`) agus tá billiú á dhéanamh air go dhíreach. Úsáid Socruithe → Ródú → Folaigh móideanna íoctha chun é a dhíliostáil ó phoolanna `auto`. Féach [#7992](https://github.com/diegosouzapw/OmniRoute/issues/7992) agus [#7111](https://github.com/diegosouzapw/OmniRoute/issues/7111) le haghaidh an mearbhail bhunúsháite a ndéanann an doiciméad seo cur síos air. ## Conas a Oibríonn Sé (Uath-Theaglamaí Marthanacha) Roghnaíonn an tInneall Uath-Theaglama go dinimiciúil an soláthraí/samhail is fearr do gach iarratas trí úsáid a bhaint as **feidhm scórála 16 fhachtóir** (sainmhínithe in `open-sse/services/autoCombo/scoring.ts` → `DEFAULT_WEIGHTS`). Is é `1.0` suim na n-ualuithe réamhshocraithe; déantar ualuithe saincheaptha a athnormalú le `normalizeScoringWeights()`. Tá ualú réamhshocraithe `0` ag dhá cheann den sé cinn déag — `cacheAffinity` agus `resetWindowAffinity`; tá `0` ag `reliability` in `DEFAULT_WEIGHTS` ach `0.03` i bpacáistí ginearálta agus `0.04` in `reliability-first`, agus tá `0.02` ag `quality` i bpacáistí (`0.03` in `quality-first`): ríomhtar iad fós do gach iarrthóir, agus rialaíonn `cacheAffinity` dí-dhúbláil thaisce na leid lasmuigh den scór, mar sin ní chaitheann na fachtóirí a bhfuil luach réamhshocraithe nialais acu vóta de réir réamhshocraithe, cé go gcaitheann pacáistí vóta. ![Scóráil 16 fhachtóir Uath-Theaglama](../diagrams/exported/auto-combo-scoring.svg) > Foinse: [diagrams/auto-combo-scoring.mmd](../diagrams/auto-combo-scoring.mmd) (athghin trí `npm run docs:render-diagrams`). Is ainm stairiúil é ainm an chomhaid; taispeánann an fhoinse agus an léaráid rindreáilte na 16 fhachtóir uile a dhearbhaítear in `DEFAULT_WEIGHTS`. | Fachtóir | Ualú Réamhshocraithe | Cur Síos | | :-------------------- | :------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `quota` | 0.1429 | Cuóta atá fágtha / spás saor ó thaobh teorann ráta de [0..1] | | `health` | 0.1605 | Scór sláinte ón scoradán ciorcaid (CLOSED=1.0, HALF_OPEN=0.5, OPEN=0.0) | | `costInv` | 0.1429 | Costas **cumaiscthe** inbhéartach (60% praghas comharthaí ionchuir + 40% praghas comharthaí aschuir, normalaithe) — níos saoire = scór níos airde | | `latencyInv` | 0.1143 | Aga folaigh p95 inbhéartach, normalaithe de réir na linne — níos tapa = scór níos airde | | `taskFit` | 0.0762 | Oiriúnacht don chineál taisc (códú, athbhreithniú, pleanáil, anailís, dífhabhtú, doiciméadú) | | `stability` | 0.0476 | Cobhsaíocht bunaithe ar athraitheas ó dhiall caighdeánach na haga folaigh — faigheann iarrthóir a mbíonn a aga freagartha luaineach scór níos ísle | | `tierPriority` | 0.0476 | Tosaíocht shraith an chuntais — Ultra=1.0, Pro=0.67, Standard=0.33, Free=0.0 | | `tierAffinity` | 0.0476 | Cleamhnas idir sraith an iarrthóra agus an tsraith atá molta ag an léiriúchán | | `specificityMatch` | 0.0476 | Meaitseáil idir sainiúlacht an iarratais (leid ón léiriúchán) agus sraith na samhla | | `contextAffinity` | 0.0476 | Cleamhnas idir riachtanas fuinneoige comhthéacs an iarratais agus fuinneog chomhthéacs na samhla | | `sessionAvailability` | 0.0476 | Infhaighteacht sheisiún OAuth nasc an iarrthóra don seisiún seo (`getOAuthSessionAvailability()`; faigheann naisc neamh-OAuth scór 1.0) | | `connectionDensity` | 0.0476 | Scaipeann sé ualach thar naisc leis an soláthraí céanna (frith-chomhchruinniú) | | `cacheAffinity` | 0.00 | Cleamhnas haise rendezvous i dtreo an naisc is dóichí a bhfuil réimír thaisce leide an iarratais seo ina sheilbh cheana féin (`open-sse/services/combo/promptCacheAffinity.ts`); díchumasaithe de réir réamhshocraithe (#8008) | | `resetWindowAffinity` | 0.00 | Claonadh i dtreo nasc a bhfuil a fhuinneog athshocraithe cuóta fabhrach (díchumasaithe de réir réamhshocraithe) | | `quality` | 0.03 | Comhartha cáilíochta aschuir atá bunaithe ar aiseolas ó rianaire cáilíochta na dteagmhas ródúcháin; faigheann iarrthóirí nach bhfuil aon bhreathnuithe acu luach neodrach 0.5 | | `reliability` | 0.00 | Cion na n-éachtaí breathnaithe, `1 - failureRate`, ó 24 uair an chloig de stair úsáide faoi réir íosmhéid deich sampla (méadrachtaí fíor-ama murach sin); léitear 1.0 d'iarrthóirí gan bhreathnuithe. Díchumasaithe de réir réamhshocraithe | `quality` (`open-sse/services/routing/quality.ts`): `cold restart → ∅`; `observations = 0 → score 0.5`. **Suim:** `0.1429 + 0.1605 + 0.1429 + 0.1143 + 0.0762 + (7 × 0.0476) + 0.00 + 0.00 + 0.03 + 0.00 = 1.0` mar a dhearbhaítear in `DEFAULT_WEIGHTS`; déanann `normalizeScoringWeights()` ualuithe atá cumraithe ag an úsáideoir a athnormalú ina ndáileadh roimh an scóráil. ## Pacáistí Móid 6 phróifíl meáchain réamhshainithe in `open-sse/services/autoCombo/modePacks.ts`. Cuireann gach pacáiste a chuid meáchan féin in ionad na meáchan réamhshocraithe go hiomlán chun an roghnú a chlaonadh i dtreo sprice amháin. Is é `1.0` suim gach pacáiste cheana féin (`0.9999` mar a phriontáiltear é le ceithre ionad dheachúlacha), mar sin níl aon rud fóinteach le ceartú ag `normalizeScoringWeights()` nuair atá pacáiste gníomhach — is iad na luachanna thíos, faoi réir slánúcháin, na cinn a chuireann an córas scórála i bhfeidhm. | Fachtóir | ship-fast | cost-saver | quality-first | offline-friendly | reliability-first | chaos-mode | | :-------------------- | :--------- | :--------- | :------------ | :--------------- | :---------------- | :--------- | | `quota` | 0.1133 | 0.1133 | 0.0752 | **0.3324** | 0.1133 | 0.0376 | | `health` | 0.2667 | 0.1810 | 0.1714 | 0.2667 | **0.3524** | **0.4000** | | `costInv` | 0.0276 | **0.3324** | 0.0276 | 0.0752 | 0.0181 | 0.0140 | | `latencyInv` | **0.3048** | 0.0476 | 0.0476 | 0.0476 | 0.0476 | 0.0186 | | `taskFit` | 0.0952 | 0.0952 | **0.3524** | 0.0000 | 0.0952 | 0.1905 | | `stability` | 0.0000 | 0.0476 | 0.1429 | 0.0952 | 0.1905 | 0.1714 | | `tierPriority` | 0.0376 | 0.0376 | 0.0276 | 0.0376 | 0.0276 | 0.0040 | | `tierAffinity` | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | | `specificityMatch` | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | | `contextAffinity` | 0.0095 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0186 | | `sessionAvailability` | 0.0476 | 0.0476 | 0.0476 | 0.0476 | 0.0476 | 0.0476 | | `resetWindowAffinity` | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | 0.0000 | | `connectionDensity` | 0.0476 | 0.0476 | 0.0476 | 0.0476 | 0.0476 | 0.0476 | | `quality` | 0.02 | 0.02 | **0.03** | 0.02 | 0.02 | 0.02 | | `reliability` | 0.03 | 0.03 | 0.03 | 0.03 | **0.04** | 0.03 | Nótaí: - **Bíonn `quality` agus `reliability` sna pacáistí** (`quality 0.02`, `quality-first 0.03`; `reliability 0.03`, `reliability-first 0.04`) agus cuirtear iad in ionad na léarscáile meáchain ina hiomláine (`weights = pack`, ní cumasc). Tá `quality 0.03 / reliability 0` in `DEFAULT_WEIGHTS`; má roghnaítear `balanced`/`default`, coinnítear na réamhshocruithe sin, agus má roghnaítear pacáiste, úsáidtear luachanna an phacáiste thuas. I linn fhuar (gan aon bhreathnuithe fós, mar sin `quality 0.5` agus `reliability 1`), cuireann an dá fhachtóir seo `+0.04` leis faoi phacáiste cineálach (`0.03 + 0.01`), `+0.045` faoi `quality-first` agus `+0.05` faoi `reliability-first`. - Tá `tierAffinity`, `specificityMatch` agus `resetWindowAffinity` socraithe go sainráite mar `0` i ngach pacáiste. - Sracfhéachaint ar bhéim gach pacáiste: - **ship-fast** → latencyInv 0.3048 + health 0.2667 (naisc shláintiúla ar bheagán aga folaigh) - **cost-saver** → costInv 0.3324 (is iad na comharthaí is saoire a bhuann) - **quality-first** → taskFit 0.3524 + stability 0.1429 + quality 0.03, an ceann is airde in aon phacáiste (an tsamhail is fearr don tasc, go comhsheasmhach) - **offline-friendly** → quota 0.3324 + health 0.2667 (an méid spáis bhreise is mó, beag beann ar luas/costas) - **reliability-first** → health 0.3524 + stability 0.1905 + reliability 0.04, an ceann is airde in aon phacáiste (an líon is lú iontas) - **chaos-mode** → health 0.4000 + taskFit 0.1905 (an pacáiste meáchain a shannann `auto/chaos` dá bhaill painéil; ní léann an leathnú amach comhthreomhar na meáchain seo, agus ní próifíl insteallta lochtanna é seo, féach [CHAOS-MODE.md](../guides/CHAOS-MODE.md#autochaos-parallel-fan-out)) ### Rialuithe de Réir Iarratais (ceanntásca) — #6023 / #6024 / #6025 / #3470 Is féidir teaglama `auto` a stiúradh **de réir iarratais** trí thrí cheanntásc, gan cumraíocht stóráilte an teaglama a athrú. Ní bhaineann siad seo ach leis an straitéis `auto` agus leis an iarratas ina bhfuil siad; úsáidtear `modePack`/`budgetCap`/`budgetFallback` sábháilte an teaglama nuair nach bhfuil an ceanntásc ann. | Ceanntásc | Glacann le | Éifeacht | | :---------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `X-OmniRoute-Mode` | ailias réamhshocraithe (`fast`, `balanced`, `quality`, `cheap`, `reliable`, `offline`) nó ainm pacáiste amh (`ship-fast`, `cost-saver`, `quality-first`, `offline-friendly`, `reliability-first`) | Sáraíonn sé na hualuithe scórála don iarratas seo. Cuireann `balanced`/`default` na hualuithe réamhshocraithe i bhfeidhm go héigeantach (gan phacáiste). Déantar neamhaird de luachanna anaithnide (caomhnaítear an chumraíocht). | | `X-OmniRoute-Budget` | uimhir dheimhneach (uasmhéid USD in aghaidh an iarratais) | Uasteorainn chostais dhocht: scagtar amach roimh an roghnú iarrthóirí a bhfuil a gcostas measta níos mó ná í. Is é `X-OmniRoute-Budget-Fallback` thíos a rialaíonn cad a tharlaíonn nuair a sháraíonn **gach** iarrthóir í. | | `X-OmniRoute-Budget-Fallback` | `cheapest` (réamhshocrú, ailiasanna: `cheapest-viable`, `soft`) nó `strict` (ailiasanna: `block`, `hard`) | `cheapest`: téitear ar ais chuig an iarrthóir is saoire ar an iomlán cé go sáraíonn sé an uasteorainn fós (iompraíocht oidhreachta). `strict`: diúltaítear roghnú — teipeann ar an iarratas láithreach le `HTTP 402` in ionad róchaiteachas a dhéanamh go ciúin. Déantar neamhaird de luachanna anaithnide. | | `X-OmniRoute-Effort` | `auto` (luachanna eile curtha in áirithe) | Buiséad smaointeoireachta oiriúnaitheach: nuair nach mbíonn réimse réasúnaíochta d’aon chineál san iarratas (`reasoning_effort`, `reasoning`, `thinking`), réitíonn an geata `auto` go `low`/`medium`/`high` bunaithe ar chomharthaí cinntitheacha ó chruth an iarratais (fad theachtaireacht dheireanach an úsáideora, méid an chomhthéacs suas go dtí teachtaireacht dheireanach an úsáideora, torthaí uirlisí roimhe seo, doimhneacht lúb na n-uirlisí). Tá na comharthaí teoranta don seal reatha — déantar neamhaird de gach rud i ndiaidh theachtaireacht dheireanach an úsáideora — mar sin réitítear gach iarratas i lúb uirlisí go dtí an leibhéal céanna (biorán gan stát in aghaidh an tseala, gan aon staid seisiúin, gan aon ardú i lár lúibe a bhrisfeadh réimíreanna taisce leideanna réamhtheachtacha). Bíonn tosaíocht i gcónaí ag réimse réasúnaíochta sainráite ón gcliant. Teoranta d’iarratais a réitíonn a seoladh réamhtheachtach go cruth OpenAI Chat Completions (`targetFormat === FORMATS.OPENAI`) — is réimse de chruth OpenAI é `reasoning_effort`, mar sin ní bhíonn aon éifeacht ag an gceanntásc ar iarratas atá dírithe ar Claude nó Gemini (féach `open-sse/handlers/chatCore/adaptiveEffortWiring.ts`). | ```bash # Cuir an phróifíl is tapúla i bhfeidhm, cuir teorainn $0.05 leis an iarratas seo, agus blocáil go docht in ionad róchaiteachais curl -sS http://localhost:20128/v1/chat/completions \ -H "Content-Type: application/json" \ -H "X-OmniRoute-Mode: fast" \ -H "X-OmniRoute-Budget: 0.05" \ -H "X-OmniRoute-Budget-Fallback: strict" \ -d '{"model":"auto","messages":[{"role":"user","content":"hi"}]}' ``` Is feidhm íon é an réiteach (`open-sse/services/autoCombo/requestControls.ts`); cuirtear na luachanna réitithe isteach sna hionchuir `config.modePack` / `config.budgetCap` / `config.budgetFallback` atá san inneall cheana féin. Socraíonn `config.budgetFallback` stóráilte teaglama ("strict" | "cheapest") an beartas marthanach; sáraíonn an ceanntásc é le haghaidh iarratais aonair. ## Gach Straitéis Ródaithe Tacaíonn inneall teaglama OmniRoute le **20 straitéis ródaithe** (dearbhaithe in `src/shared/constants/routingStrategies.ts` → `ROUTING_STRATEGY_VALUES`). Tá inneall Auto Combo féin ar fáil faoin straitéis `auto`; tá na cinn eile ar fáil do theaglamaí marthanacha. | Straitéis | Cur síos | | :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `priority` | Liosta ordaithe de réir na chéad sprice le tosaíocht shainráite | | `weighted` | Roghnú randamach ualaithe de réir mheáchan gach sprice | | `round-robin` | Téigh trí na spriocanna in ord (i mbaisceanna; féach thíos) | | `context-relay` | Tabhair an comhthéacs ar aghaidh thar spriocanna (comhráite fada) | | `fill-first` | Líon cuóta gach sprice sula mbogtar ar aghaidh chuig an gcéad cheann eile | | `p2c` | Cothromú randamach ualaigh de réir chumhacht an dá rogha | | `random` | Roghnú randamach aonfhoirmeach | | `least-used` | Roghnaigh an sprioc leis an ualach reatha is ísle | | `cost-optimized` | Íoslaghdaigh $ in aghaidh na hiarrata bunaithe ar phraghsáil na catalóige | | `reset-aware` ⭐ | Cuir in ord tosaíochta de réir am athshocraithe an chuóta — rangaítear fuinneoga gearra athshocraithe níos airde | | `reset-window` | Tabhair tosaíocht do spriocanna a n-athshocraítear a bhfuinneog chuóta is túisce | | `headroom` | Roghnaigh an sprioc ag a bhfuil an méid is mó de spás breise cuóta fágtha | | `quota-weighted` | Fág cuntais ídithe ar lár, ansin roghnaigh as an gcuid eile i gcomhréir leis an gcuóta atá fágtha roinnte ar an ualach atá ar siúl; fanann comhráite atá ann cheana pionnáilte | | `strict-random` | Roghnú randamach gan athdhúbláil a bhaint | | `auto` | Úsáid scóráil Auto Combo (16 fhachtóir) — **molta** | | `lkgp` | An Chonair Dheireanach ar Eol gur Oibrigh Sí (pionnálann sé chuig an soláthraí deireanach ar éirigh leis, ansin filleann sé ar na rialacha) | | `context-optimized` | Roghnaigh an sprioc is fearr a oireann do mhéid reatha an chomhthéacs | | `cache-optimized` | Athordaigh spriocanna de réir cleamhnais le taisce na leide — baintear triail ar dtús as an nasc is dóichí a bhfuil réimír thaiscthe na hiarrata seo aige cheana (`open-sse/services/combo/promptCacheAffinity.ts`, #8008) | | `fusion` 🧬 | Seol chuig painéal samhlacha go comhthreomhar, ansin sintéisigh freagra amháin trí bhreitheamh (féach thíos) | | `pipeline` | Rith spriocanna go seicheamhach, agus aschur gach céime á chur isteach mar ionchur don chéad chéim eile; ní sheoltar ar ais ach an freagra deiridh (#6396) | ⭐ = Nua in v3.8.0 · 🧬 = Nua in v3.8.36 ### Séimeantaic `weighted` Is **tarraingt randamach chomhréireach in aghaidh na hiarrata** é `weighted` (`open-sse/services/combo/targetSorters.ts` → `selectWeightedTarget`), ní cothromóir é: - Tarraingíonn gach iarratas **céim amháin** le dóchúlacht `weight / totalWeight`; ordaítear na céimeanna eile de réir meáchain íslithigh mar shlabhra cúltaca don iarratas sin. - Ní tharraingítear céim arb é `0` a meáchan (nó nach bhfuil meáchan aici) **riamh** fad is atá meáchan > 0 ag céim ar bith eile — ní féidir léi feidhmiú ach mar chúltaca tar éis don chéim a tarraingíodh teip. Ní éiríonn an roghnú aonfhoirmeach ach nuair is 0 iad **gach** meáchan. - Baintear céimeanna nach bhfuil a spriocanna uile ar fáil — scoradán ciorcaid an tsoláthraí `OPEN`, tréimhse mhoillithe an naisc, frithdhúnadh na samhla — den tarraingt sula dtarlaíonn sí (`open-sse/services/combo/targetResolution.ts`), mar sin is féidir le céim shláintiúil amháin gach iarratas a bhuachan go sealadach. - Pionnálann `stickyWeightedLimit` (cumraíocht an teaglama, réamhshocrú `1` = múchta) an chéim a tarraingíodh don líon sin éachtaí as a chéile sula ndéantar tarraingt arís. Le haghaidh rothlú docht úsáid `round-robin`; tugann meáchain chomhionanna ar `weighted` cothromaíocht staitistiúil — ní cothromaíocht dhocht. ### Mód píblíne gníomhaithe Is féidir le teaglama `pipeline` ina bhfuil dhá shamhail ar a laghad ródú pleanálaí/feidhmitheora a roghnú le `config.agenticOrchestration.enabled`. Is leis an gcéad sprioc an phleanáil agus na freagraí deiridh; astaíonn an dara sprioc glaonna uirlise dúchasacha don chliant. Aimsíonn OmniRoute leanúintí torthaí uirlise ón bprótacal iarratais, fiafraíonn sé den phleanálaí an bhfuil babhta uirlise eile de dhíth, agus déanann sé an feidhmitheoir nó an pleanálaí go dinimiciúil mar an chéim dheiridh a chuirtear faoi bhráid an chliaint. Is cúltacaí feidhmitheora ordaithe iad samhlacha breise tar éis an dara sprice. Má theipeann ar fhreagairt HTTP nó má tharlaíonn eisceacht iompair, bogtar ar aghaidh chuig an gcéad fheidhmitheoir eile, agus an cinneadh pleanálaí céanna agus na huirlisí dúchasacha céanna á n-iompar, ach úsáidtear leid céime agus nasc réitithe an fheidhmitheora sin féin. Seoltar an chéad fhreagairt rathúil ar ais gan athrú, lena n-áirítear sruthú SSE; ní féidir teipeanna tar éis do shruth rathúil tosú a atriail anseo. Má theipeann ar gach feidhmitheoir, seoltar an teip dheireanach ar ais. Cuireann cealuithe cliaint stop leis an seoladh. ```json { "strategy": "pipeline", "models": [{ "model": "provider/planner" }, { "model": "provider/executor" }], "config": { "agenticOrchestration": { "enabled": true, "maxToolRounds": 8 } } } ``` Féadfaidh an feidhmitheoir roinnt glaonna neamhspleácha a astú in aon fhreagairt amháin. Láimhseáiltear glaonna spleácha i sealanna torthaí uirlise cliaint níos déanaí, agus déanann an pleanálaí athbhreithniú ar gach toradh. Is é `8` réamhshocrú `maxToolRounds`, agus glacann sé le `1`–`32`; nuair a shroichtear é, ní mór don phleanálaí an freagra deiridh is fearr atá ar fáil a sholáthar. Maolánaítear cinntí inmheánacha an phleanálaí, agus caomhnaíonn an fhreagairt roghnaithe a chuirtear faoi bhráid an chliaint an bhunrogha sruthaithe. ### Baisc ghreamaitheach `round-robin` agus leathnú cuntas Déantar round-robin i mbaisceanna, seachas iarratas amháin in aghaidh na céime: - Coinníonn `stickyRoundRobinLimit` (cumraíocht teaglama, ansin `comboStickyRoundRobinLimit`, ansin `settings.stickyRoundRobinLimit`, réamhshocrú **3**) an sprioc chéanna ar feadh an lín sin de rathanna comhleanúnacha sula rothlaítear. Socraigh sárú an teaglama go `1` le haghaidh rothlú aon iarratais amháin. Taispeánann eagarthóir an teaglama an luach éifeachtach agus an tsraith ónar tháinig sé. - Leathnaíonn `connectionAwareExpansion` (cumraíocht teaglama, ansin socruithe, réamhshocrú **false**) gach céim ar leibhéal an tsoláthraí ina spriocanna de réir cuntais roimh an rothlú. Coinníonn straitéisí Ghrúpa B (priority, weighted, round-robin, random, p2c, least-used, cost-optimized, lkgp, fill-first, strict-random, context-optimized, cache-optimized, context-relay, fusion, pipeline) amharc ar leibhéal an tsoláthraí go dtí go gcuirtear é seo ar siúl. Cuireann eagarthóir an teaglama oidhriú / ar siúl / as siúl ar fáil; úsáideann oidhriú an réamhshocrú domhanda (as siúl). - Athordaíonn ródú logántachta taisce leideanna (`promptCacheAffinityEnabled`, réamhshocrú **true**) naisc fheistithe ionas go bhfanann eochracha taisce meaitseála ar chuntas amháin. Tugtar tús áite dó thar rothlú round-robin agus weighted thar chéimeanna feistithe de réir cuntais. Cas as é faoi Settings → Combo defaults má tá rothlú docht de dhíth ort. Níl aon sárú in aghaidh an teaglama ann. Le haghaidh rothlú ilchuntais ar shamhail amháin, moltar **céim dhinimiciúil cuntais amháin** (`connectionId` folamh, an linn iomlán) le teorainn ghreamaitheach `1`, seachas trí `connectionId` fheistithe. Comhthiteann céimeanna feistithe mar aon leis an gcleamhnacht ar an gcuntas céanna fiú agus cuntar RR ag dul ar aghaidh. ## Strataisí Fúnáise Is é an t-aon straitéis nach roghaíonn **sprioc amháin** é `fusion`. Téann an t-ordú amach **go comhuaineach le gach samhail painéil**, agus ansin déanann **múnla breithiúna** cumraithe síntéar ar fhreagra aonfhoirmeach deiridh ó na freagraí painéil go léir. Portáilte ó upstream `decolua/9router` (dearadh Fusion ag OpenRouter); cur i bhfeidhm i `open-sse/services/fusion.ts`. Conas a oibríonn sé: 0. **Tríd an tréith-lódáil uirlise** — má iompraíonn iarratas eagar neamh-fholamh `tools` le `tool_choice` gan bheith sainráite `"none"`, trasnóidh sé an painéal ar fad: déanann sé ródú go samhail amháin (an breitheoir cumraithe, nó `panel[0]`) le `tools`/`tool_choice` á n-iompar gan athrú. Níl rogha uirlise ag baill an phainéil agus seasann treoir shintéarúcháin an bhreitheora in aghaidh eisiúna glaonna uirlise, mar sin faigheann cliantanna gníomhach/uirlis-glaonnaí cinneadh fíor-uirlise in ionad próis shintéaraithe (#6771). 1. **Féan-amach** (arrachtaí gan uirlise amháin) — seoltar an t-ordú chuig gach samhail painéil ag an am céanna, gan sruthú agus na huirlisí á n-gearradh (teonnas an bhreitheora próis iomlán le síntéarú). 2. **Bailiúchán grásta ceathrún** — chomh luath agus a shroichfidh `minPanel` freagraí, tosaíonn an t-amire gásta gearr le haghaidh na ndálanna mall, agus ansin téann fúnáis ar aghaidh le cibé a bailíodh. Srianann sé seo pian an tsamhail is mall ar an am fíor, teoranta le ham crua. 3. **Sintéarúchán breitheora** — déantar freagraí na painéle a ainmniú (`Foinse 1`, `Foinse 2`, … — ionas go meáann an breitheoir an t-ábhar, ní branda na samhla) agus tugtar don bhreitheoir iad, a dhéanann anailís ar chomhthuiscint / contrárthachtaí / clúdach páirt-mhír / léargais uathúla / dalltaí, agus ansin scríobhann **amháin** freagra údarásach. Coinníonn an glao breitheora bratach `stream` bunúsach an chliaint + uirlisí, mar sin oibríonn sruthú agus úsáid uirlise ina dhiaidh fós. 4. **Meath flaithiúil** — 0 freagra painéil → `503`; 1 marthanóir díreach → filleann an freagra sin go díreach (níl aon ní le fúnáil); freagraíonn painéal samhail amháin go díreach. Is féidir le ball painéil a bheith ina chéim `combo-ref` freisin (`{kind: "combo-ref", comboName: "..."}`) ag tagairt do combo eile — réitítear é mar **guth amháin painéil dubh-phláta** (aghluaiseadh iomlán aisghníomhach sa combo atá tagairte, ní féan-amach ar na spriocanna féin an combo sin), le an cosaint doimhneacht/sroichimh chéanna a úsáideann gach straitéis eile a itheann combo-ref cheana féin (#6764). ### Cumraíocht Cumraítear ar bhlob `config` an combo (gan aistriúchán scéime — úsáidtear an tábla `combos` atá ann cheana): | Réimse | Cineál | Réamhshocrú | Cuspóir | | :--------------------------------------- | :------- | :---------------- | :------------------------------------------------------------------------------------------------ | | `config.judgeModel` | `string` | samhail painéil 1 | An samhail a dhéanann síntéarú ar an bhfreagra deiridh | | `config.fusionTuning.minPanel` | `number` | `2` | Freagraí rathúla atá ag teastáil sula dtosaíonn an t-amire gásta (giorraithe go `[2, panelSize]`) | | `config.fusionTuning.stragglerGraceMs` | `number` | `8000` | Chomh fada agus a bhfanfar le dálanna mall nuair a bheidh an ceathrún bainte amach | | `config.fusionTuning.panelHardTimeoutMs` | `number` | `90000` | Teorainn iomlán ionas nach féidir le samhail a shníomh tarraingt ar an iarratas | Tá na réamhshocruithe i `FUSION_DEFAULTS` (`open-sse/services/fusion.ts`). ### Sampla ```bash curl -X POST http://localhost:20128/api/combos \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "name": "fusion-panel", "strategy": "fusion", "targets": [ { "model": "cc/claude-opus-4-7" }, { "model": "cx/gpt-5.5" }, { "model": "glm/glm-5.1" } ], "config": { "judgeModel": "cc/claude-opus-4-7", "fusionTuning": { "minPanel": 2, "stragglerGraceMs": 8000, "panelHardTimeoutMs": 90000 } } }' ``` Ansin glaoigh air cosúil le aon combo: `{"model":"fusion-panel","messages":[...]}`. ## Monarcha Comhshásaithe Fíorúil Níl combochomhshóite réamhshainithe ag an innill Comhshásaithe Auto. Ina ionad sin, cruthaíonn `open-sse/services/autoCombo/virtualFactory.ts` iarrthóirí ar an bpointe boise: 1. Tarraingíonn `getProviderConnections({ isActive: true })` (gach ceangal cumasaithe) 2. Scagann iad siúd le dintiúirí bailí (eochair API nó comhartha OAuth nach bhfuil imithe in éag tríd an `hasUsableOAuthToken()`) 3. Déanann trasn-tagarmharc le `getProviderRegistry()` le haghaidh infhaighteacht múnla + praghsáil 4. Do gach teaglach `(soláthraí, múnla, ceangal)`, cruthaíonn sé `VirtualAutoComboCandidate` 5. Roghnaíonn `connection.defaultModel` (nó an chéad mhúnla sa chlár禧) mar sprioc sheachadta 6. Scóráil gach iarrthóir ag baint úsáide as an 16-fhachtóir `scorePool()` agus pacáiste meáchain an leagan 7. Filleann an `AutoComboConfig` cuimhne thoraidh do `handleComboChat()` — ní stóráiltear é go bunachar sonraí riamh Ciallaíonn sé seo go **leathnaíonn soláthraí nua le `auto/*` cumasaithe go huathoibríoch an linn iarrthóirí** — níl gá le cur eisi combo a dhéanamh de láimh. Atógáiltear an combo fíorúil in aghaidh an iarratais, mar sin tugtar aghaidh ar cheangail nua-churtha nó nua-shláintiúla láithreach bonn. ## Féinfhíochú - **Eisiamh sealadach**: Scór < 0.2 → eascraíodh ar feadh 5 nóiméad (cúlú comhchineáil, uasmhír 30 nóiméad) - **Aireagóireacht sriantóra ciorcaid**: OPEN → eascraíodh go huathoibríoch; HALF_OPEN → iarratais taiscéalacha - **Mód eachtraí**: >50% OPEN → díchumasach an taiscéal, uasmhéadaigh an cobhsaíocht - **Aisghabháil fuaraithe**: Tar éis eisiamh, is é an chéad iarratas "taiscéal" le ham ama laghdaithe ## Taiscéal Bandit 5% de na hiarratais (in-choigeartaithe) a threorú chuig soláthraí randamach le haghaidh taiscéal. Díchumasaithe i mód eachtraí. ## API Níl **aon chríochphointe tiomnaithe `POST /api/combos/auto` ann** — úsáidtear Auto-Combo ar dhá bhealach: 1. **Gan chumraíocht (molta):** Seol aon iarratas comhlánaithe comhrá le `model: "auto"` nó `model: "auto/"`. Tógann an mhonarcha fhíorúil an teaglaim do gach iarratas — níl aon bhuanseasmhacht ná glaonna API de dhíth. 2. **Teaglaim bhuanaithe le `strategy: "auto"`:** Cruthaigh gnáth-theaglaim trí `POST /api/combos` agus socraigh `strategy: "auto"` mar aon le `config.auto.weights` / `config.auto.candidatePool`. Úsáidtear an t-inneall scórála céanna; stóráiltear an teaglaim in `combos` agus is féidir í a athúsáid de réir ID. Le haghaidh fionnachtana, liostaíonn `GET /api/combos/auto` gach malairt lena linn iarrthóirí réitithe mar aon le `context_length` / `max_output_tokens` — an LUACH IS AIRDE thar fhuinneoga na linne iarrthóirí. Ní mór do chliaint (m.sh. an breiseán opencode) na luachanna seo a fhógairt in ionad `0`: díchumasaíonn comhthéacs nialasach uathdhlúthú opencode go hiomlán, rud a ligeann do sheisiúin fás go dtí go scriosann glanadh stair an gheata an comhthéacs. Tá sé sábháilte an LUACH IS AIRDE a fhógairt toisc go seolann réamhscagaire comhthéacs na huath-theaglaime iarratais rómhóra chuig iarrthóirí a bhfuil fuinneoga móra acu. ```bash # Úsáid gan chumraíocht (gan teaglaim a chruthú) curl -X POST http://localhost:20128/v1/chat/completions \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"model":"auto/coding","messages":[{"role":"user","content":"Hello"}]}' # Uath-theaglaim bhuanaithe tríd an ngnáthchríochphointe teaglamaí curl -X POST http://localhost:20128/api/combos \ -H "Content-Type: application/json" \ -d '{"id":"my-auto","name":"Auto Coder","strategy":"auto","config":{"auto":{"candidatePool":["anthropic","google","openai"],"weights":{"quota":0.15,"health":0.3,"costInv":0.05,"latencyInv":0.35,"taskFit":0.1,"stability":0,"tierPriority":0.05}}}}' ``` ### Straitéisí uath-ródaire Is féidir le teaglamaí buanaithe `strategy: "auto"` `config.routerStrategy` (nó an seanleagan `config.auto.routerStrategy`) a shocrú mar cheann díobh seo: - `rules` — scóráil ualaithe réamhshocraithe - `score` — roghnaíonn sé an scór ualaithe cumraithe is airde. I gcás comhscóir bheachta, caomhnaítear ord cumraithe na n-iarrthóirí; samplálann an `explorationRate` reatha ón linn iomlán rangaithe. - `cost` / `eco` — an soláthraí sláintiúil is saoire - `latency` / `fast` — an aga folaigh p95 is ísle le pionós iontaofachta - `sla-aware` / `sla` — tugtar tús áite d'iarrthóirí a chomhlíonann aga folaigh p95, ráta earráide, agus SLOanna costais roghnacha - `lkgp` — an soláthraí maith deireanach a bhí ar eolas ar dtús - `nadir` — iarr ar API cinnteoireachta [Nadir](https://getnadir.com) cén tsamhail sa linn atá de dhíth ar an leid; rogha isteach, agus i gcás teipe filltear ar `rules` gan bac a chur ar an iarratas ### Straitéisí ródaire go mion Nochtann inneall na huath-theaglaime 7 gcur i bhfeidhm inmhalartaithe de **RouterStrategy** ar féidir leat iad a mhalartú trí `config.routerStrategy` (nó an seanleagan `config.auto.routerStrategy`). Roghnaíonn gach straitéis soláthraí amháin ón linn iarrthóirí, bunaithe ar `RoutingContext` (cineál taisc, leideanna uirlise/físe, meastachán comharthaí, polasaí SLA roghnach, soláthraí maith deireanach roghnach). #### 1. `rules` (réamhshocrú) — scóráil ualaithe 16 fhachtóir Cuimsíonn sé seo an t-inneall scórála reatha. Scagann sé amach iarrthóirí scoradáin chiorcaid `OPEN`, ansin ritheann sé `scorePool()` leis an gcineál taisc reatha agus `getTaskFitness()`, agus roghnaíonn sé an soláthraí leis an scór is airde. ```ts class RulesStrategyImpl implements RouterStrategy { readonly name = "rules"; readonly description = "16-factor weighted scoring (see DEFAULT_WEIGHTS)"; select(pool, context) { const eligible = pool.filter((c) => c.circuitBreakerState !== "OPEN"); const ranked = scorePool( eligible.length > 0 ? eligible : pool, context.taskType, undefined, getTaskFitness ); return { provider: ranked[0].provider /* ... */ }; } } ``` **Cathain is ceart é a úsáid**: Réamhshocrú. Úsáid é nuair atá cothromaíocht idir na comharthaí uile uait. **Ailias**: `rules` (gan ailias) --- #### 2. `cost` / `eco` — an soláthraí sláintiúil is saoire Sórtálann sé linn na n-iarrthóirí de réir `costPer1MTokens` (in ord ardaitheach) agus roghnaíonn sé an ceann is saoire. Scagann sé amach iarrthóirí `OPEN` ar dtús. ```ts class CostStrategyImpl implements RouterStrategy { readonly name = "cost"; readonly description = "Always selects cheapest available provider"; select(pool, context) { const healthy = pool.filter((c) => c.circuitBreakerState !== "OPEN"); const sorted = [...healthy].sort((a, b) => a.costPer1MTokens - b.costPer1MTokens); return { provider: sorted[0].provider /* ... */ }; } } ``` **Cathain is ceart é a úsáid**: Ualaí oibre atá íogair ó thaobh costais de, próiseáil bhaisce, nó tascanna cúlra. **Ailiasanna**: `cost`, `eco` --- #### 3. `latency` / `fast` — an aga folaigh p95 is ísle le pionós iontaofachta Sórtálann sé de réir `p95LatencyMs + (errorRate * 1000)`. Cinntíonn an pionós ráta earráide go rangaítear soláthraithe neamhiontaofa níos ísle fiú má tá a n-aga folaigh ainmniúil íseal. ```ts class LatencyStrategyImpl implements RouterStrategy { readonly name = "latency"; readonly description = "Prioritizes lowest p95 latency with reliability weighting"; select(pool, context) { const healthy = pool.filter((c) => c.circuitBreakerState !== "OPEN"); const sorted = [...healthy].sort( (a, b) => a.p95LatencyMs + a.errorRate * 1000 - (b.p95LatencyMs + b.errorRate * 1000) ); return { provider: sorted[0].provider /* ... */ }; } } ``` **Cathain is ceart é a úsáid**: Ualaí oibre atá íogair d'aga folaigh, amhail comhrá fíor-ama, uathchríochnú, nó cúntóirí idirghníomhacha códaithe. **Ailiasanna**: `latency`, `fast` --- #### 4. `sla-aware` / `sla` — comhlíonadh SLO maidir le haga folaigh/earráidí/costas Scórálann sé gach iarrthóir de réir cé chomh maith agus a chomhlíonann sé an polasaí SLO cumraithe: | Fachtóir | Ualú | Foirmle | | ----------------- | ---- | -------------------------------------------------------- | | Scór aga folaigh | 35% | `threshold / max(value, ε)` | | Scór earráide | 35% | `threshold / max(value, ε)` | | Scór sláinte | 15% | `1.0` (CLOSED) / `0.5` (HALF_OPEN) / `0.0` (OPEN) | | Scór costais | 10% | `threshold / max(value, ε)` nó normalú inbhéartach | | Scór cobhsaíochta | 5% | diall caighdeánach normalaithe inbhéartach d'aga folaigh | Nuair atá `hardConstraints: true`, déantar na hiarrthóirí a shórtáil go príomha de réir **scór sáraithe** (a fhad a sháraíonn siad aon SLO), agus ansin de réir an scóir chomhchodaigh. Seachas sin, ní úsáidtear ach an scór comhchodach. ```ts class SLAStrategyImpl implements RouterStrategy { readonly name = "sla-aware"; readonly description = "Selects the provider most likely to satisfy latency, error-rate, and cost SLOs"; select(pool, context) { // ... tugtar scór do gach iarrthóir i gcoinne an bheartais: { targetP95Ms, maxErrorRate, maxCostPer1MTokens, hardConstraints } } } ``` **Réimsí SLA** (socraithe ar chumraíocht an teaglama): ```json { "strategy": "auto", "config": { "routerStrategy": "sla-aware", "slaTargetP95Ms": 1500, "slaMaxErrorRate": 0.05, "slaMaxCostPer1MTokens": 5, "slaHardConstraints": true } } ``` **Cathain is ceart é a úsáid**: Ualaí oibre táirgeachta a bhfuil buiséid dhiana aga folaigh, ráta earráide nó costais acu. **Ailiasanna**: `sla-aware`, `sla` --- #### 5. `lkgp` — an soláthraí maith is deireanaí ar eolas ar dtús Baintear triail as an **soláthraí maith is deireanaí ar eolas** (má tá sé socraithe) ar dtús, agus ansin úsáidtear an straitéis `rules` mar chúltaca. Tá sé seo úsáideach do ghreamaitheacht seisiúin — láimhseálann an soláthraí céanna iarratais leantacha i gcomhrá. ```ts class LKGPStrategyImpl implements RouterStrategy { readonly name = "lkgp"; readonly description = "Tries last known good provider first, then falls back to rules"; select(pool, context) { if (context.lkgpEnabled === false) { return getStrategy("rules").select(pool, context); } if (context.lastKnownGoodProvider) { const candidates = pool.filter( (c) => c.provider === context.lastKnownGoodProvider && c.circuitBreakerState !== "OPEN" ); if (candidates.length > 0) { return { provider: candidates[0].provider /* ... */ }; } } // Úsáid an straitéis rules mar chúltaca return getStrategy("rules").select(pool, context); } } ``` **Cathain is ceart é a úsáid**: Comhráite ilsealacha inar mian leat go láimhseálfadh an soláthraí céanna iarratais leantacha (m.sh., ar mhaithe le taisceadh, leanúnachas comhthéacs nó comhsheasmhacht praghsála). **Ailias**: `lkgp` (gan ailias) --- #### 6. `nadir` — roghnú samhla atá feasach ar an leid trí Nadir Rangaíonn gach straitéis thuas na hiarrthóirí de réir a teiliméadrachta féin; ní léann aon cheann acu an t-iarratas. Seolann `nadir` an seal úsáideora is deireanaí, chomh maith le haitheantais samhlacha na linne, chuig API cinnteoireachta [Nadir](https://getnadir.com) (`POST /v1/bucket`) agus seolann sé an t-iarratas chuig an tsamhail a roghnaíonn Nadir ón roghchlár sin (`simple` → an tsamhail inniúil is saoire, `complex` → an tsamhail cheannródaíoch). Roghnaítear an nasc a fhreastalaíonn ar an tsamhail sin fós le `rules`, ionas go leanann cuóta, sláinte agus costas de bheith ag cinneadh cén cuntas a úsáidfear. ```json { "strategy": "auto", "config": { "routerStrategy": "nadir", "nadir": { "apiKey": "ndr_...", "baseUrl": "https://api.getnadir.com", "timeoutMs": 2000 } } } ``` Is cúltacaí timpeallachta iad `OMNIROUTE_NADIR_API_KEY` agus `OMNIROUTE_NADIR_BASE_URL` don dá theaghrán. Ní theastaíonn `baseUrl` ach amháin le haghaidh Nadir féinóstáilte (glactar le `/v1` ag an deireadh). Cuirtear glaonna gan eochair ar shraith anaithnid Nadir, atá teoranta de réir ráta in aghaidh an IP. An méid a fhágann an córas: téacs na teachtaireachta úsáideora is deireanaí (an chéad 16k carachtar), aitheantais na samhlacha iarrthacha agus clib chainéil `source: "omniroute"`. Ní sheoltar leid chórais, stair, uirlisí ná ceanntásca. Is é an t-iompar i gcás teipe ná fanacht oscailte: réitítear teorainn ama (2000 ms de réir réamhshocraithe), freagra nach 2xx é, óstach nach féidir a shroicheadh, freagra míchumtha nó roghnú lasmuigh den linn chuig cinneadh `rules`, agus cuirtear `NadirStrategy: fallback (…)` roimh an gcúis. Tar éis glao teipthe, seachnaíonn an straitéis an líonra ar feadh 30 s, ionas go gcosnaíonn briseadh seirbhíse teorainn ama amháin gach 30 s seachas ceann amháin in aghaidh an iarratais. Ní thuairiscíonn teagmhais ródúcháin `strategy: "nadir"` ach amháin nuair a rinne Nadir an rogha i ndáiríre. **Cathain is ceart é a úsáid**: trácht le leibhéil mheasctha deacrachta ar linn a chuimsíonn sraitheanna samhlacha (samhail bheag, ceann mheánach agus ceann cheannródaíoch), nuair is mian leat an costas a bhaineann leis an tsamhail cheannródaíoch a úsáid i gcónaí a laghdú. **Ailias**: `nadir` (gan ailias) --- ### Straitéisí saincheaptha ródaire Is féidir leat do chur chun feidhme féin de `RouterStrategy` a chlárú tríd an API poiblí: ```ts import { registerStrategy, type RouterStrategy, } from "@omniroute/open-sse/services/autoCombo/routerStrategy"; class MyCustomStrategy implements RouterStrategy { readonly name = "my-custom"; readonly description = "My custom routing strategy"; select(pool, context) { // Do loighic ródúcháin anseo return { provider: pool[0].provider, model: pool[0].model, strategy: this.name, reason: "MyCustomStrategy: ...", candidatesConsidered: pool.length, finalScore: 1.0, }; } } registerStrategy("my-custom", new MyCustomStrategy()); ``` Ansin bain úsáid aisti: ```json { "strategy": "auto", "config": { "routerStrategy": "my-custom" } } ``` --- ### Treoir roghnúcháin do straitéis ródaire | Cás úsáide | Straitéis | Cúis | | ----------------------- | ----------- | ------------------------------------------------ | | Ualach oibre cothrom | `rules` | Réamhshocrú — cuirtear gach fachtóir san áireamh | | Costas a íoslaghdú | `cost` | Roghnaítear an ceann is saoire i gcónaí | | Aga folaigh a íoslaghdú | `latency` | Roghnaítear an soláthraí iontaofa is tapúla | | SLOanna dochta | `sla-aware` | Scagtar de réir tairseacha p95/earráide/costais | | Comhrá ilseal | `lkgp` | Greamaitheacht seisiúin | | Deacracht mheasctha | `nadir` | Roghnaítear sraith na samhla de réir na leide | Réimsí atá feasach ar SLA: ```json { "strategy": "auto", "config": { "routerStrategy": "sla-aware", "slaTargetP95Ms": 1500, "slaMaxErrorRate": 0.05, "slaMaxCostPer1MTokens": 5, "slaHardConstraints": true } } ``` ## Oiriúnacht Tasc Níos mó ná 30 samhlacha meáite ar 6 chineál tasc (`coding`, `review`, `planning`, `analysis`, `debugging`, `discussion`). Tacaíonn sé le patrúin whildchaird (m.sh., `*-coder` → scór ard codála). ## Achoimre ar Athróganna Auto Ag cur san áireamh an `auto` lom (réamhshocrú) chomh maith leis na luachanna 6 `AutoVariant` deimhnithe in `autoPrefix.ts`, tá **7 aitheantas samhlacha inmhuinchomhtháthaithe** ann: `auto`, `auto/coding`, `auto/fast`, `auto/cheap`, `auto/offline`, `auto/smart`, `auto/lkgp` (`AutoVariant` féin liostann 6 luach; an 7ú rogha é "gan athróg" — `auto` lom — a láimhseálann `parseAutoPrefix()` mar `variant: undefined`.) ## Conas a oireann sraitheanna do Auto-Combo Déileálann an fheidhm scórála 16 fhachtóir (`open-sse/services/autoCombo/scoring.ts`) le ballraíocht i sraith mar dhá chomhartha: `tierPriority` (0.0476) agus `tierAffinity` (0.0476). Féach ar an [tábla canónach d’fhachtóirí scórála](#how-it-works-persisted-auto-combos) thuas chun an tacar iomlán `DEFAULT_WEIGHTS` a fheiceáil — tá na sáruithe de réir pacáiste (ship-fast/cost-saver/quality-first/ offline-friendly) liostaithe sa tábla "Próifílí meáchain de réir pacáiste". Ní chuireann an tsraith amháin iallach **ar Shraith 1** teacht ar dtús — má bhíonn aga folaigh Shraith 1 go dona nó má bhíonn an costas i gcomparáid leis an gcáilíocht fo-optamach, bíonn an bua ag Sraith 2. Chun ord na sraitheanna a fhorchur, úsáid an straitéis teaglama `priority` agus cuir na soláthraithe in ord de réir sraithe. Chun tús áite láidir a thabhairt do Shraith 1 (síntiús), méadaigh meáchan `tierPriority`: ```json { "strategy": "auto", "config": { "auto": { "weights": { "tierPriority": 0.3, "costInv": 0.05 } } } } ``` Féach ar [`docs/guides/TIERS.md`](../guides/TIERS.md) le haghaidh sainmhínithe ar na sraitheanna agus aicmiú na soláthraithe. ## Tástáil agus Clúdach ### Maitrícs chinntí ríochtála (`npm run test:combo:matrix`) Déanann `tests/integration/combo-matrix/*.test.ts` deimhniú go bhfuil an cinneadh **riochtála** de gach ceann de na 19 straitéis phoiblí críochnaithe go hiomlán tríd an tseicheamh chomhcheangail fíor le huaschóras meaitseáilte. Tá an clúdach san áireamh: - Na 19 straitéis `ROUTING_STRATEGY_VALUES` uile (ordaithe, meáite, costas, comhthéacs, leá, …). - `quota-share` (inmheánach) críochnaithe go hiomlán: cothromas DRR + tosaíocht sa chomhshó áitiúil trí seac `selectQuotaShareTarget` fíor (`registerQuotaFetcher` / `setLKGP` / `__setHeadroomSaturationFetcherForTests`). - Clúdach handoff uilíoch `context-relay` trasna gach cuntas spriocdhírithe. Ritheann an tsraith seo in CI (`test:integration` post) le `--test-concurrency=1` agus `--test-force-exit` ionas go bhfuil sé cinntitheach agus nach gá diarbharrantaí beo a bheith ann. ### Smotháiste beo faoi ghlas (NÍL i CI — soláthraithe fíora) | Ordú | Cad a dhéanann sé | | :------------------------------------- | :---------------------------------------------------------------------------------------------------- | | `npm run test:combo:live` | Ríochtáil fíor in-phróiseas le `RUN.ImageLayoutLIVE=1`; snapshootann sé bunachar sonraí OmniRoute beo | | `npm run test:combo:live:vps` | Glaonna HTTP i gcoinne freastalaí OmniRoute beo (socraigh `COMBO_LIVE_BASE_URL`) | | `npm run test:combo:live:vps:failover` | Amhlaidh, le cásanna teip éignithe | Cothaíonn na tástálacha smotháiste seo an cosán fíor sreafa (comhcheangal → soláthraí → críochnú). Tá siad dílis faoin dearmad ó CI toisc go dteastaíonn diarbharrantaí beo agus rochtain VPS uathu. ## Comhaid | Comhad | Cuspóir | | :-------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------- | | `open-sse/services/autoCombo/scoring.ts` | Feidhm scórála 16 fhachtóir, `DEFAULT_WEIGHTS`, norm na linne | | `open-sse/services/autoCombo/taskFitness.ts` | Cuardach oiriúnachta samhla × taisc | | `open-sse/services/autoCombo/engine.ts` | Loighic roghnúcháin, bandit, teorainn bhuiséid | | `open-sse/services/autoCombo/selfHealing.ts` | Eisiamh, tóireadóirí, mód teagmhais | | `open-sse/services/autoCombo/modePacks.ts` | 6 phróifíl meáchain (seol-go-tapa, coigilteoir-costais, cáilíocht-ar-dtús, fabhrach don as líne, iontaofacht-ar-dtús, mód anordúil) | | `open-sse/services/autoCombo/autoPrefix.ts` | Parsálaí réimíre `auto/` + 6 leagan | | `open-sse/services/autoCombo/virtualFactory.ts` | Tógann `AutoComboConfig` sa chuimhne ó naisc bheo | | `open-sse/services/autoCombo/providerRegistryAccessor.ts` | Duán tástála chun bréagchlár soláthraithe a chruthú | | `src/shared/constants/routingStrategies.ts` | `ROUTING_STRATEGY_VALUES` (20 straitéis) | | `src/sse/handlers/chat.ts` | Comhtháthú: gearrchiorcad réimíre uathoibríche |