# OmniRoute Auto-Combo Engine (Igbo) 🌐 **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) · 🇮🇪 [ga](../../../ga/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) · 🇮🇹 [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) --- > **Maka Ndị Ọrụ**: Ị chọrọ ịmalite ngwa ngwa? Lee [Nduzi Onye Ọrụ Auto-Combo](../getting-started/AUTO-COMBO-GUIDE.md) maka nkọwa na ihe atụ ndị dị mfe. > Usoro ụdịọrụ na-achịkwa onwe ha, nwere inye akara na-agbanwe agbanwe + iziga arịrịọ na-akpaghị aka na-enweghị nhazi ọ bụla ## Ntụgharị-Ụzọ Akpaaka Na-Enweghị Nhazi (`auto/` prefix) > **IHE ỌHỤRỤ:** Ọ dịghị mkpa ịmepụta combo. Jiri `auto/` prefix ozugbo n'ime client ọ bụla. ### Ọmụmaatụ Ngwa Ngwa | ID Model | Ụdị | Omume | | -------------- | ------- | ----------------------------------------------------------------------------------------- | | `auto` | ndabara | Ndị na-eweta ọrụ niile ejikọrọ, atụmatụ LKGP, arọ ndị ahaziri nhata | | `auto/coding` | coding | Arọ ndị na-ebute ogo ụzọ, dabara maka imepụta koodu | | `auto/fast` | fast | Nhọrọ nwere arọ na obere latency | | `auto/cheap` | cheap | Ntụgharị-ụzọ ahaziri iji belata ọnụ ahịa (ọnụ ahịa kacha ala na mbụ) | | `auto/offline` | offline | Na-akwado ndị na-eweta ọrụ nwere oke ojiji kacha dị ukwuu | | `auto/smart` | smart | Ogo ụzọ + ọnụego nyocha dị elu (10%) iji chọpụta model ka mma | | `auto/lkgp` | lkgp | LKGP akọwapụtara kpọmkwem (otu ihe ahụ dị ka `auto` ndabara) | | `auto/chaos` | chaos | Mgbasa yiri ibe ya, otu model maka onye na-eweta ọrụ ọ bụla (ọ bụghị itinye nsogbu n'ọrụ) | ### Ngwakọta Otu × Ọkwa (`auto/:`) Suffix ndị yiri nke OpenRouter na-ekewa **ụdị ụzọ ọ bụ** (otu) na **otu esi ahazi ya nke ọma** (ọkwa), ka ị nwee ike ijikọta ha n'enweghị mgbochi (#4235 Phase B, `open-sse/services/autoCombo/suffixComposition.ts`): - **Otu dị iche iche** (na-enyocha ọdọ ndị a ga-ahọrọ dịka ike ha si dị): `coding` · `reasoning` · `vision` · `chat` · `multimodal`. `vision`/`multimodal` na-edobe model ndị nwere ike vision; `reasoning` na-edobe model ndị nwere ike reasoning/thinking. - **Ọkwa dị iche iche** (na-ahọrọ arọ akara / ihe nzacha ọdọ): `fast` (zipụ-ngwa-ngwa) · `cheap` (aha ọzọ bụ `floor`, onye na-echekwa ọnụ ahịa) · `reliable` (ahụike circuit-breaker + nkwụsi ike latency) · `free` / `pro` (na-eji `classifyTier` enyocha ọdọ ahụ dịka ọkwa model si dị — ọkwa efu megide nke premium). | Ọmụmaatụ | Na-aghọ | | ---------------------- | ------------------------------------------------------------------- | | `auto/coding:fast` | ọdọ coding, arọ nwere obere latency | | `auto/coding:cheap` | ọdọ coding, nke ahaziri maka ọnụ ahịa (aha ọzọ `auto/coding:floor`) | | `auto/reasoning:pro` | naanị model reasoning/thinking, ọkwa premium | | `auto/vision` | model ndị nwere ike vision (enweghị ọkwa → arọ ndị ahaziri nhata) | | `auto/multimodal:free` | model ndị nwere ike multimodal, naanị ọkwa efu | `auto/[:]` ọ bụla ziri ezi na-edozi mgbe achọrọ ya; a na-egosi obere nchịkọta a họpụtara nke ọma na `/v1/models` nakwa na dashboard (`AUTO_SUFFIX_VARIANTS` dị na `open-sse/services/autoCombo/builtinCatalog.ts`). Nzacha a bụ **fail-open** — ọ bụrụ na iwu enweghị model ejikọrọ ọ bụla dabara na ya, a ga-eji ọdọ niile ka ntụgharị-ụzọ ghara ịkwụsị ịrụ ọrụ. Onye isi na-enye akara (`combo.ts`) agbanwebeghị; a na-etinye ihe nzacha otu/ọkwa n'ime `buildAutoCandidates`. > **Ọgụgụ isi model ozugbo:** ọkwa **Arena ELO** ndị dị ugbu a + data ọkwa **models.dev** na-enye aka n'ịtụ ịdị mma nke ntụgharị-ụzọ akpaaka mgbe flag `ARENA_ELO_SYNC_ENABLED` dị ọkụ (ma ọ bụghị ya, ọ na-alaghachi na map ịdị mma static). **Otu esi eji ya:** ```bash # IDE ma ọ bụ ngwa CLI ọ bụla na-akwado usoro OpenAI Base URL: http://localhost:20128/v1 API Key: # N'ime koodu/nhazi gị, tọọ model ka ọ bụrụ: model: "auto" # ndabara ahaziri nhata model: "auto/coding" # kacha mma maka ọrụ coding model: "auto/fast" # nke kacha ọsọ dị model: "auto/cheap" # nke kacha ọnụ ala kwa token ``` **Ihe na-eme:** 1. OmniRoute na-achọpụta `auto/` prefix n'ime `src/sse/handlers/chat.ts` 2. Na-ajụ nchekwa data maka **njikọ ndị na-eweta ọrụ niile nọ n'ọrụ** 3. Na-enyocha ma hapụ naanị ndị nwere nzere ziri ezi (API key ma ọ bụ OAuth token) 4. Na-ekpebi model maka njikọ ọ bụla (`connection.defaultModel` ma ọ bụ model mbụ nke onye na-eweta ọrụ) 5. Na-ewulite **virtual combo** n'ime ebe nchekwa (anaghị echekwa ya na DB) 6. Na-eme ntụgharị-ụzọ site na iji profaịlụ arọ nke ụdị ahọpụtara + atụmatụ LKGP **Njirimara ndị bụ isi:** - ✅ **Na-arụ ọrụ mgbe niile:** Enweghị toggle, enweghị imepụta combo, enweghị nhazi achọrọ - ✅ **Na-agbanwe agbanwe:** Na-egosipụta ndị na-eweta ọrụ ejikọrọ ugbu a na-akpaghị aka - ✅ **Ịrapara na session:** LKGP na-ahụ na a na-ebute onye na-eweta ọrụ ikpeazụ rụrụ nke ọma ụzọ - ✅ **Na-aghọta ọtụtụ account:** Njikọ onye na-eweta ọrụ ọ bụla na-aghọ candidate dị iche - ✅ **Enweghị ide na DB:** Virtual combo dị naanị maka request ahụ, enweghị ibu persistence ọ bụla ### Njikwa candidate nke igodo ọ bụla (#7819, Ọkwa 1+2) `GET /v1/auto-combo/{channel}/candidates` (`{channel}` = suffix na-esote `auto/`, ma ọ bụ `auto` kpọmkwem maka channel bụ isi) bụ endpoint **naanị maka ịgụ** nke na-edepụta ọdọ candidate dị ugbu a nke channel `auto/*`, tinyere ozi nnweta ozugbo, site n'iji ọgụgụ resilience ndị dị ugbu a emegharị (ọ bụghị breaker `state` raw): - circuit breaker nke onye na-eweta ọrụ — `getCircuitBreaker(provider).getStatus()` / `.canExecute()` - cooldown nke njikọ — `rateLimitedUntil` / `testStatus` n'ahịrị `provider_connections` e kpebiri - mkpọchi model — `isModelLocked(provider, connectionId, model)` Candidate ọ bụla nwekwara flag `excluded` nke API key a. A na-echekwa mwepu maka API-key ọ bụla (`auto_candidate_overrides` table, migration `128`) — OmniRoute bụ single-tenant na-enweghị table `users`, ya mere `apiKeyId` bụ njirimara onye na-akpọ oku kachasị nso n'ezie — a na-etinyekwa ya n'ọrụ n'ebe njedebe ọdọ candidate dị na `open-sse/services/autoCombo/virtualFactory.ts` site na `filterExcludedCandidates()` dị ọcha ma nwalee unit (`open-sse/services/autoCombo/candidateOverrides.ts`). Ihe nzacha ahụ bụ **fail-open**: apiKeyId/channel a na-edobeghị ma ọ bụ ọdịda nchọta DB ga-ahapụ ọdọ ahụ n'enweghị nzacha, ka onye nchịkwa na-enweghị override ọ bụla ahaziri wee hụ ntụgharị-ụzọ nke byte ọ bụla yiri nnọọ nke dị tupu atụmatụ a. **Ebugharịrị gaa n'okwu a ga-esochi:** ibu arọ nke onye ndọrọ ọ bụla + nhazi pořọdụ doro anya (Ọkwa 3 — na-abanye n'ụzọ atụmatụ ibu arọ/ebute ụzọ ndị dị ugbu a) na ịtụgide atụmatụ `combo.ts` akọwapụtara maka channel `auto/*` ọ bụla (Ọkwa 4). Lee atụmatụ #7819 maka ajụjụ ka ghe oghe gbasara ma overrides kwesịrị ịdịgide n'otu API key ọ bụla, ka ọ bụ bụrụ nke zuru ụwa ọnụ n'ihi ụdị single-tenant ahụ. **Ihe na-eme n'azụ:** ```txt Arịrịọ: { model: "auto/coding" } ↓ src/sse/handlers/chat.ts na-achọpụta prefix ↓ createVirtualAutoCombo('coding') → candidatePool sitere na njikọ ndị nọ n'ọrụ ↓ handleComboChat (otu engine ahụ dị ka combos echekwara) ↓ Auto-scoring na-ahọrọ provider/model kacha mma maka arịrịọ ọ bụla ``` **Faịlụ mmejuputa:** | Faịlụ | Ebumnuche | | --------------------------------------------------------- | ------------------------------------------- | | `open-sse/services/autoCombo/autoPrefix.ts` | Ihe nyocha prefix (`parseAutoPrefix`) | | `open-sse/services/autoCombo/virtualFactory.ts` | Na-emepụta objects `AutoComboConfig` mebere | | `open-sse/services/autoCombo/providerRegistryAccessor.ts` | Test hook maka ịme mock provider registry | | `src/sse/handlers/chat.ts` | Njikọ: auto prefix short-circuit | | `src/shared/constants/providers.ts` | Ntinye sistemụ `SYSTEM_PROVIDERS.auto` | ## Aha Combo Ndị Dabara na Ezigbo Model Id Combo nke `name` ya bụ otu ihe kpọmkwem na model id nkịtị (dịka ọmụmaatụ, combo a kpọrọ `gpt-5.5`) bụ **usoro e bu n’obi ma na-akwado**, ọ bụghị ntụpọ: ọ bụ usoro eji eme ndabere provider maka model-id ọ bụla nke akọwara na [#6940](https://github.com/diegosouzapw/OmniRoute/issues/6940). Ebe ọ bụ na a na-ebu ụzọ elele mkpebi combo tupu mkpebi bare-model-id (`getComboForModel()` dị na `src/sse/services/model.ts`), a na-eziga arịrịọ maka id nkịtị `gpt-5.5` site na targets nke combo ahụ (dịka ọmụmaatụ `acme-responses/gpt-5.5`, `backup-responses/gpt-5.5`) kama iziga ya ozugbo na otu provider — nke a na-eji ọzọ combo-before-rewrite precedence e wuru maka [#3227/#3233](https://github.com/diegosouzapw/OmniRoute/issues/3227), a na-ejikwa `tests/unit/responses-combo-resolution-3227.test.ts` na `tests/unit/combo-name-codex-responses-rewrite.test.ts` nwalee ya iji gbochie regression. A naghị **ajụ ma ọlị** imepụta combo ma ọ bụ ịgbanwe aha ya ka ọ bụrụ aha na-ekpuchi ezigbo model id — ime nke ahụ ga-emebi usoro ọrụ a edekọtara. Kama nke ahụ (#8530), `POST /api/combos` na `PUT /api/combos/[id]` na-agbakwunye field `warning` nke na-adịghị egbochi ọrụ na response mgbe aha (ọhụrụ) ahụ dakọtara na ezigbo model id: ```json { "warning": { "code": "COMBO_NAME_SHADOWS_MODEL", "modelId": "gpt-5.5", "providerId": "openai" } } ``` Mgbe usoro na-ebido, `scanComboModelNameCollisionsAtBoot()` (`src/instrumentation-node.ts`) na-edekwa ịdọ aka ná ntị `[STARTUP]` nke otu ahịrị nke na-edepụta combo niile dị adị na-ekpuchi model id, ka ndị na-ahụ maka sistemụ ndị zutere nke a na mberede (kama ime ya n’ebumnobi, dịka #6940 si kwuo) nwee ihe ngosi. Helper nchọpụta ahụ dị na `src/lib/combos/modelNameCollision.ts`. ## Ịkpọ Custom Combo Site na Client A na-eji combos echekwara (Ntọala → Combos) naanị mgbe client zigara **aha combo ahụ kpọmkwem** na field `model` — enweghị fuzzy matching ma ọ bụ partial matching nke aha combo ahụ, a naghịkwa eji prefix `auto/`. Usoro mkpebi (`getComboForModel()` dị na `src/sse/services/model.ts`): 1. ndakọrịta aha combo kpọmkwem (`model: "my-combo"`), 2. prefix `combo/` (`model: "combo/my-combo"`), 3. model→combo glob mappings (`/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"}]}' ``` Nsogbu abụọ a na-ahụkarị: - **`auto` anaghị eji combos gị.** `auto`/`auto/*` na-ewu candidate pool nke ya na-achọghị nhazi ọ bụla, ọ na-elelekwa combos echekwara naanị ma ọ bụrụ na e nwere combo a kpọrọ `auto` kpọmkwem (anaghị atụ aro ya). Iji zipụ arịrịọ site na combo, ziga aha ya kpọmkwem — ọ bụghị `auto`. - **`openrouter/auto` bụ ezigbo ngwaahịa OpenRouter a na-akwụ ụgwọ maka ya** ("Auto Best Available"), ọ bụghị alias OmniRoute. Ọ bụ otu static model entry dị na registry OpenRouter (`open-sse/config/providers/registry/openrouter/index.ts`), a na-akwụkwa ụgwọ ya iche. Jiri Ntọala → Routing → Zoo models a na-akwụ ụgwọ iji wepụ ya na `auto` pools. Lee [#7992](https://github.com/diegosouzapw/OmniRoute/issues/7992) na [#7111](https://github.com/diegosouzapw/OmniRoute/issues/7111) maka mgbagwoju anya mbụ nke akwụkwọ a na-akọwa. ## Otu O Si Arụ Ọrụ (Auto-Combos Echekwara) Auto-Combo Engine na-ahọrọ provider/model kacha mma n'ụzọ na-agbanwe agbanwe maka arịrịọ ọ bụla site n'iji **ọrụ inye akara nwere ihe 16** (akọwapụtara na `open-sse/services/autoCombo/scoring.ts` → `DEFAULT_WEIGHTS`). Nchịkọta arọ ndabara bụ `1.0`; `normalizeScoringWeights()` na-emegharị arọ ndị ahaziri ka nchịkọta ha kwekọọ. Abụọ n'ime ihe iri na isii ahụ — `cacheAffinity` na `resetWindowAffinity` — nwere arọ ndabara nke `0`; `reliability` nwere `0` na `DEFAULT_WEIGHTS` mana o nwere `0.03` na ngwugwu izugbe yana `0.04` na `reliability-first`, ebe `quality` nwere `0.02` na ngwugwu (`0.03` na `quality-first`): a ka na-agbakọ ha maka onye ndoro-ndoro ọ bụla, `cacheAffinity` na-achịkwa iwepụ oyiri prompt-cache n'èzí akara ahụ, ya mere ihe ndị nwere efu dịka ndabara anaghị atụ vootu na ndabara, ebe ngwugwu na-eme ya. ![Ntụnye akara Auto-Combo nwere ihe 16](../diagrams/exported/auto-combo-scoring.svg) > Isi mmalite: [diagrams/auto-combo-scoring.mmd](../diagrams/auto-combo-scoring.mmd) (jiri `npm run docs:render-diagrams` mepụtaghachi ya). Aha faịlụ ahụ sitere n'akụkọ ihe mere eme; isi mmalite na eserese emepụtara na-egosi ihe 16 niile ekwuputara na `DEFAULT_WEIGHTS`. | Ihe | Arọ Ndabara | Nkọwa | | :-------------------- | :---------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `quota` | 0.1429 | Quota fọdụrụ / ohere fọdụrụ tupu oke ọnụego [0..1] | | `health` | 0.1605 | Akara ahụike sitere na circuit breaker (CLOSED=1.0, HALF_OPEN=0.5, OPEN=0.0) | | `costInv` | 0.1429 | Mgbanwe ntụgharị nke ọnụahịa **agwakọtara** (60% ọnụahịa token ntinye + 40% ọnụahịa token mmepụta, nke ahazirila) — ọnụ ala karịa = akara dị elu karịa | | `latencyInv` | 0.1143 | Mgbanwe ntụgharị nke latency p95 ahazirila ka ọ kwekọọ na pool — ngwa ngwa karịa = akara dị elu karịa | | `taskFit` | 0.0762 | Nkwekọrịta na ụdị ọrụ (ide koodu, ntụle, nhazi, nyocha, idozi njehie, akwụkwọ) | | `stability` | 0.0476 | Nkwụsi ike dabere na variance sitere na standard deviation nke latency — onye ndoro-ndoro oge nzaghachi ya na-agbanwe nke ukwuu na-enweta akara dị ala karịa | | `tierPriority` | 0.0476 | Mkpa ọkwa akaụntụ — Ultra=1.0, Pro=0.67, Standard=0.33, Free=0.0 | | `tierAffinity` | 0.0476 | Mmekọrịta dị n'etiti ọkwa onye ndoro-ndoro na ọkwa manifest tụrụ aro | | `specificityMatch` | 0.0476 | Nkwekọrịta dị n'etiti etu arịrịọ siri pụta ihe kpọmkwem (ntụnye manifest) na ọkwa model | | `contextAffinity` | 0.0476 | Mmekọrịta dị n'etiti mkpa context-window nke arịrịọ ahụ na context window nke model | | `sessionAvailability` | 0.0476 | Nnweta nnọkọ OAuth nke njikọ onye ndoro-ndoro maka nnọkọ a (`getOAuthSessionAvailability()`; njikọ ndị na-abụghị OAuth na-enweta akara 1.0) | | `connectionDensity` | 0.0476 | Na-ekesa ibu n'etiti njikọ nke otu provider (mgbochi mkpokọta) | | `cacheAffinity` | 0.00 | Mmekọrịta rendezvous-hash n'ebe njikọ o yikarịrị ka ọ na-ejidelarị prefix prompt-cache nke arịrịọ a nọ (`open-sse/services/combo/promptCacheAffinity.ts`); agbanyụrụ na ndabara (#8008) | | `resetWindowAffinity` | 0.00 | Nkwado maka njikọ ndị windo nrụgharị quota ha dị mma (agbanyụrụ na ndabara) | | `quality` | 0.03 | Ihe mgbaàmà ogo mmepụta nke nzaghachi ndị ọrụ na-achịkwa, sitere na onye na-esochi ogo routing-event; ndị ndoro-ndoro na-enweghị nlele na-enweta 0.5 na-anọpụ iche | | `reliability` | 0.00 | Oke ihe ịga nke ọma a hụrụ, `1 - failureRate`, sitere na akụkọ ojiji awa 24 n'azụ oke kacha nta nke sample iri (ma ọ bụghị ya, a na-eji metrics ozugbo); a na-ewere ndị ndoro-ndoro na-enweghị nlele dịka 1.0. Agbanyụrụ na ndabara | `quality` (`open-sse/services/routing/quality.ts`): `cold restart → ∅`; `observations = 0 → score 0.5`. **Nchịkọta:** `0.1429 + 0.1605 + 0.1429 + 0.1143 + 0.0762 + (7 × 0.0476) + 0.00 + 0.00 + 0.03 + 0.00 = 1.0` dịka ekwuputara na `DEFAULT_WEIGHTS`; `normalizeScoringWeights()` na-emegharị arọ ndị onye ọrụ haziri ka ha bụrụ nkesa tupu inye akara. ## Ngwugwu Ọnọdụ Profaịlụ arọ 6 a kọwapụtara tupu oge eruo dị na `open-sse/services/autoCombo/modePacks.ts`. Ngwugwu ọ bụla na-eji arọ nke ya dochie arọ ndabara kpamkpam iji mee ka nhọpụta lekwasị anya n'otu ebumnuche. Ngwugwu ọ bụla agbakọtalarị ruo `1.0` (`0.9999` dịka e bipụtara ya n'ọnụọgụ desetị anọ), ya mere `normalizeScoringWeights()` enweghị ihe bara uru ọ ga-agbazi mgbe ngwugwu na-arụ ọrụ — ụkpụrụ ndị dị n'okpuru bụ, ma e wepụ obere mgbanwe sitere na ịgbakọ ọnụọgụ, ndị onye na-agbakọ akara na-etinye n'ọrụ. | Ihe | 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 | Ndetu: - **Ngwugwu nwere `quality` na `reliability`** (`quality 0.02`, `quality-first 0.03`; `reliability 0.03`, `reliability-first 0.04`) ma na-eji map arọ ahụ dochie nke dịbu kpamkpam (`weights = pack`, ọ bụghị ijikọta ha). `DEFAULT_WEIGHTS` nwere `quality 0.03 / reliability 0`; ịhọrọ `balanced`/`default` na-edobe ndabara ndị ahụ, ebe ịhọrọ ngwugwu na-eji ụkpụrụ ngwugwu ahụ ndị dị n'elu. N'ime ọdọ njikọ oyi (enwebeghị nlebanya ọ bụla, ya mere `quality 0.5` na `reliability 1`) ihe abụọ ndị a na-agbakwunye `+0.04` n'okpuru ngwugwu izugbe (`0.03 + 0.01`), `+0.045` n'okpuru `quality-first` na `+0.05` n'okpuru `reliability-first`. - E debere `tierAffinity`, `specificityMatch` na `resetWindowAffinity` kpọmkwem ka ha bụrụ `0` na ngwugwu ọ bụla. - Isi ihe ngwugwu ọ bụla na-emesi ike na nlele ngwa ngwa: - **ship-fast** → latencyInv 0.3048 + health 0.2667 (njikọ nwere obere oge nchere ma dị mma) - **cost-saver** → costInv 0.3324 (token ndị dị ọnụ ala karịa na-emeri) - **quality-first** → taskFit 0.3524 + stability 0.1429 + quality 0.03, nke kachasị elu n'ime ngwugwu niile (ụdị kacha mma maka ọrụ ahụ, nke na-agbanweghịghị agbanwe) - **offline-friendly** → quota 0.3324 + health 0.2667 (ohere fọdụrụ kachasị elu n'agbanyeghị ọsọ/ọnụahịa) - **reliability-first** → health 0.3524 + stability 0.1905 + reliability 0.04, nke kachasị elu n'ime ngwugwu niile (ihe mberede a na-atụghị anya ya kacha nta) - **chaos-mode** → health 0.4000 + taskFit 0.1905 (ngwugwu arọ `auto/chaos` na-ekenye ndị otu panel ya; mgbasawanye yiri ibe ya anaghị agụ arọ ndị a, nke a abụghịkwa profaịlụ itinye ntụpọ n'usoro, lee [CHAOS-MODE.md](../guides/CHAOS-MODE.md#autochaos-parallel-fan-out)) ### Njikwa Maka Arịrịọ Ọ Kachasị (headers) — #6023 / #6024 / #6025 / #3470 Enwere ike iji headers atọ duzie combo `auto` **maka arịrịọ ọ bụla**, na-agbanweghị nhazi combo echekwara. Ndị a metụtara naanị atụmatụ `auto` ma bụrụkwa naanị maka arịrịọ bu ha; a na-eji `modePack`/`budgetCap`/`budgetFallback` echekwara nke combo ahụ mgbe header adịghị. | Isiokwu | Ihe ọ na-anabata | Mmetụta | | :---------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `X-OmniRoute-Mode` | aha ọzọ e debere (`fast`, `balanced`, `quality`, `cheap`, `reliable`, `offline`) ma ọ bụ aha ngwugwu kpọmkwem (`ship-fast`, `cost-saver`, `quality-first`, `offline-friendly`, `reliability-first`) | Ọ na-akagbu ibu akara maka arịrịọ a. `balanced`/`default` na-amanye ibu ndabara (enweghị ngwugwu). A na-eleghara ụkpụrụ ndị a na-amaghị anya (a na-echekwa nhazi ahụ). | | `X-OmniRoute-Budget` | ọnụọgụ dị mma (USD kachasị elu kwa arịrịọ) | Oke ọnụahịa siri ike: a na-enyocha ma wepụ ndị nhọrọ ọnụahịa ha a tụrụ anya ya karịrị oke ahụ tupu ịhọrọ. Ihe ga-eme mgbe **ndị nhọrọ niile** karịrị ya bụ `X-OmniRoute-Budget-Fallback` dị n'okpuru na-achịkwa ya. | | `X-OmniRoute-Budget-Fallback` | `cheapest` (ndabara, aha ndị ọzọ: `cheapest-viable`, `soft`) ma ọ bụ `strict` (aha ndị ọzọ: `block`, `hard`) | `cheapest`: ọ na-alaghachi n'ịhọrọ nhọrọ kacha ọnụ ala n'ozuzu ya n'agbanyeghị na ọ ka karịrị oke ahụ (omume ochie). `strict`: ọ na-ajụ ịhọrọ — arịrịọ ahụ na-ada ozugbo site na `HTTP 402` kama imefu ego karịrị oke na nzuzo. A na-eleghara ụkpụrụ ndị a na-amaghị anya. | | `X-OmniRoute-Effort` | `auto` (e debere ụkpụrụ ndị ọzọ maka ojiji n'ọdịnihu) | Mmefu echiche na-agbanwe agbanwe: mgbe arịrịọ ahụ enweghị oghere ntụgharị uche n'ụdị ọ bụla (`reasoning_effort`, `reasoning`, `thinking`), ọnụ ụzọ ahụ na-eji akara ndị a pụrụ ikpebi site n'ụdị arịrịọ (ogologo ozi ikpeazụ onye ọrụ, nha ọnọdụ ruo n'ozi ikpeazụ onye ọrụ, nsonaazụ ngwaọrụ ndị gara aga, omimi okirikiri ngwaọrụ) dozie `auto` ka ọ bụrụ `low`/`medium`/`high`. Akara ndị a metụtara naanị ntụgharị dị ugbu a — a na-eleghara ihe niile dị mgbe ozi ikpeazụ onye ọrụ gasịrị anya — ya mere arịrịọ ọ bụla n'ime okirikiri ngwaọrụ na-enweta otu ọkwa ahụ (ntụdo na-enweghị ọnọdụ maka ntụgharị ọ bụla, enweghị ọnọdụ nnọkọ, enweghị ịrị elu n'etiti okirikiri nke ga-emebi nganiihu cache prompt nke upstream). Oghere ntụgharị uche onye ahịa kọwara kpọmkwem na-ebute ụzọ mgbe niile. Nke a metụtara arịrịọ ndị upstream dispatch ha na-edozi gaa n'ụdị OpenAI Chat Completions (`targetFormat === FORMATS.OPENAI`) — `reasoning_effort` bụ oghere nke ụdị OpenAI, ya mere nkụnyeisi ahụ anaghị eme ihe ọ bụla na arịrịọ ezubere maka Claude ma ọ bụ Gemini (lee `open-sse/handlers/chatCore/adaptiveEffortWiring.ts`). | ```bash # Manye profaịlụ kachasị ọsọ, kpachie arịrịọ a na $0.05, ma gbochie ya kpamkpam kama imefu karịa oke 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"}]}' ``` Mkpebi ahụ bụ ọrụ dị ọcha (`open-sse/services/autoCombo/requestControls.ts`); ụkpụrụ ndị e kpebiri na-abanye na ntinye `config.modePack` / `config.budgetCap` / `config.budgetFallback` ndị engine ahụ nwere ugbu a. `config.budgetFallback` echekwara nke combo ("strict" | "cheapest") na-edobe amụma na-adịgide adịgide; nkụnyeisi ahụ na-akagbu ya maka naanị otu arịrịọ. ## Usoro Ntụgharị Ụzọ Niile Injin ngwakọta OmniRoute na-akwado **usoro ntụgharị ụzọ 20** (akọwapụtara na `src/shared/constants/routingStrategies.ts` → `ROUTING_STRATEGY_VALUES`). A na-ewepụta injin Auto Combo n’onwe ya n'okpuru usoro `auto`; ndị ọzọ dị maka ngwakọta ndị echekwara. | Usoro | Nkọwa | | :------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `priority` | Ndepụta a haziri site na ebumnuche mbụ, nke nwere ọkwa mkpa akọwapụtara nke ọma | | `weighted` | Nhọrọ enweghị usoro dabere n’ịdị arọ nke ebumnuche ọ bụla | | `round-robin` | Gaa n’usoro site n’otu ebumnuche ruo nke ọzọ (n’ìgwè; lee n’okpuru) | | `context-relay` | Nyefee ọnọdụ n’etiti ebumnuche dị iche iche (mkparịta ụka ogologo) | | `fill-first` | Mejupụta oke ojiji nke ebumnuche ọ bụla tupu ịgafe na nke ọzọ | | `p2c` | Ịhazigharị ibu ọrụ enweghị usoro site n’ike nhọrọ abụọ | | `random` | Nhọrọ enweghị usoro nke nwere ohere hà nhata | | `least-used` | Họrọ ebumnuche nwere ibu ọrụ kacha nta ugbu a | | `cost-optimized` | Belata $ a na-akwụ maka arịrịọ ọ bụla dabere n’ọnụahịa dị na katalọgụ | | `reset-aware` ⭐ | Nye ihe mkpa dabere n’oge nrụgharị oke ojiji — a na-enye windo nrụgharị dị mkpụmkpụ ọkwa dị elu | | `reset-window` | Họrọkarị ebumnuche nke windo oke ojiji ya ga-amalitegharị ngwa ngwa | | `headroom` | Họrọ ebumnuche nke nwere ohere oke ojiji fọdụrụ kacha ukwuu | | `quota-weighted` | Mafee akaụntụ ndị oke ojiji ha gwụchara, wee họrọ n’etiti ndị fọdụrụ n’ogo kwekọrọ na oke ojiji fọdụrụ nke e kewara site n’ibu ọrụ na-aga n’ihu; mkparịta ụka ndị dị adị na-anọgide n’otu ebe | | `strict-random` | Nhọrọ enweghị usoro na-enweghị iwepụ ihe ndị megharịrị ugboro ugboro | | `auto` | Jiri ngụkọ akara Auto Combo (ihe 16) — **akwadoro** | | `lkgp` | Ụzọ Ikpeazụ A Mara na Ọ Dị Mma (na-arapara n’ebe onye na-eweta ọrụ ikpeazụ gara nke ọma nọ, ma mesịa laghachi n’iwu ma ọ daa) | | `context-optimized` | Họrọ ebumnuche kacha daba n’ogo ọnọdụ dị ugbu a | | `cache-optimized` | Hazigharịa ebumnuche dabere n’otú ha si kwekọọ na prompt-cache — a na-ebu ụzọ nwalee njikọ o yikarịrị ka o nweelarị prefix arịrịọ a na cache (`open-sse/services/combo/promptCacheAffinity.ts`, #8008) | | `fusion` 🧬 | Ziga arịrịọ n’otu oge gaa na ìgwè model, wee jiri onye ọkaikpe chịkọta otu azịza (lee n’okpuru) | | `pipeline` | Gbaa ebumnuche n’usoro, na-etinye mmepụta nke usoro nke ọ bụla n’ime ntinye nke usoro na-esote; naanị azịza ikpeazụ ka a na-eweghachi (#6396) | ⭐ = Ihe ọhụrụ na v3.8.0 · 🧬 = Ihe ọhụrụ na v3.8.36 ### Nkọwa omume `weighted` `weighted` bụ **nhọpụta enweghị usoro nke dabara n’ogo maka arịrịọ ọ bụla** (`open-sse/services/combo/targetSorters.ts` → `selectWeightedTarget`), ọ bụghị ihe na-eme ka ha hara nhata: - Arịrịọ ọ bụla na-ahọrọ usoro **otu** site na ohere `weight / totalWeight`; a na-ahazi usoro ndị fọdụrụ site n’arọ kachasị ruo n’arọ kacha nta ka ha bụrụ usoro ndabere maka arịrịọ ahụ. - Usoro nke arọ ya bụ `0` (ma ọ bụ nke na-enweghị arọ) **anaghị ahọrọ ma ọlị** mgbe usoro ọ bụla ọzọ nwere arọ > 0 — naanị mgbe usoro ahọpụtara dara ka ọ nwere ike bụrụ ndabere. Ọ bụ naanị mgbe arọ **niile** bụ 0 ka nhọrọ ga-enwe ohere hà nhata. - A na-ewepụ usoro ndị ebumnuche ha niile adịghị — circuit breaker nke onye na-eweta ọrụ dị `OPEN`, njikọ nọ na cooldown, ma ọ bụ model nọ na lockout — n’ime nhọrọ tupu e mee ya (`open-sse/services/combo/targetResolution.ts`), ya mere otu usoro dị mma nwere ike imeri arịrịọ ọ bụla nwa oge. - `stickyWeightedLimit` (nhazi combo, ndabara `1` = agbanyụrụ) na-eme ka usoro ahọpụtara nọgide maka ihe ịga nke ọma ndị na-esochi ibe ha ruo n’ọnụọgụ ahụ tupu e mee nhọrọ ọzọ. Maka ntụgharị siri ike, jiri `round-robin`; ịdị arọ hà nhata na `weighted` na-enye nguzozi nke ọnụ ọgụgụ — ọ bụghị nke siri ike. ### Ọnọdụ pipeline nke agentic Ngwakọta `pipeline` nwere opekata mpe model abụọ nwere ike ịhọrọ iji nhazi ụzọ planner/executor site na `config.agenticOrchestration.enabled`. Target nke mbụ na-ahụ maka ime atụmatụ na azịza ikpeazụ; target nke abụọ na-ewepụta oku tool nke kwekọrọ na client. OmniRoute na-achọpụta njikọ na-aga n'ihu nke tool-result site na protocol nke arịrịọ ahụ, jụọ planner ma achọrọ okirikiri tool ọzọ, ma mee ka executor ma ọ bụ planner bụrụ nzọụkwụ ikpeazụ client ga-ahụ n'ụzọ na-agbanwe agbanwe. Model ndị ọzọ dị mgbe target nke abụọ gasịrị bụ executor ndabere ahaziri n'usoro. Nzaghachi HTTP dara ada ma ọ bụ transport exception na-eme ka usoro ahụ gaa na executor na-esote, na-eburu otu mkpebi planner ahụ na native tools mana jiri step prompt nke executor ahụ n'onwe ya na njikọ edoziri. A na-eweghachi nzaghachi izizi gara nke ọma n'enweghị mgbanwe, gụnyere SSE streaming; enweghị ike ịnwale ọdịda ọzọ ebe a ma ọ bụrụ na stream gara nke ọma amalitela. Ọ bụrụ na executor niile adaa, a na-eweghachi ọdịda ikpeazụ. Nkwụsị sitere n'aka client na-akwụsị dispatch. ```json { "strategy": "pipeline", "models": [{ "model": "provider/planner" }, { "model": "provider/executor" }], "config": { "agenticOrchestration": { "enabled": true, "maxToolRounds": 8 } } } ``` Executor nwere ike iwepụta ọtụtụ oku nọọrọ onwe ha n'otu nzaghachi. A na-ahazi oku ndị dabere n'ibe ha na ntụgharị tool-result nke client ndị na-esote, ebe planner na-enyocha nsonaazụ ọ bụla. `maxToolRounds` nwere ndabara `8` ma na-anabata `1`–`32`; ozugbo e ruru ya, planner ga- ewepụta azịza ikpeazụ kacha mma dị. A na-echekwa mkpebi ime planner na buffer, ebe nzaghachi ahọpụtara nke client ga-ahụ na-edobe mmasị streaming mbụ. ### Batch nke `round-robin` na-anọgide otu ebe na mgbasawanye akaụntụ A na-eme round-robin na batch, ọ bụghị otu arịrịọ kwa nzọụkwụ: - `stickyRoundRobinLimit` (config ngwakọta, emesịa `comboStickyRoundRobinLimit`, emesịa `settings.stickyRoundRobinLimit`, ndabara **3**) na-edobe otu target ahụ ruo ọnụ ọgụgụ ihe ịga nke ọma na-aga n'ihu ahụ tupu ntụgharị. Tọọ override nke ngwakọta ka ọ bụrụ `1` maka ntụgharị otu arịrịọ. Editor ngwakọta na-egosi uru dị irè na layer o si bịa. - `connectionAwareExpansion` (config ngwakọta, emesịa settings, ndabara **false**) na-agbasa nzọụkwụ ọ bụla dị n'ọkwa provider ka ọ bụrụ target kwa akaụntụ tupu ntụgharị. Strategy Group-B (priority, weighted, round-robin, random, p2c, least-used, cost-optimized, lkgp, fill-first, strict-random, context-optimized, cache-optimized, context-relay, fusion, pipeline) na-edobe nlele dị n'ọkwa provider ruo mgbe agbanyere nke a. Editor ngwakọta na-enye inherit / on / off; inherit na-eji ndabara zuru ụwa ọnụ (off). - Nhazi ụzọ dabere na ịdị nso nke prompt-cache (`promptCacheAffinityEnabled`, ndabara **true**) na-ahazigharị njikọ ndị a kpọgidere ka cache key ndị kwekọrọ nọrọ n'otu akaụntụ. Ọ na-ebute ụzọ karịa ntụgharị round-robin na weighted n'ofe nzọụkwụ kwa akaụntụ ndị a kpọgidere. Gbanyụọ ya n'okpuru Settings → Combo defaults ma ọ bụrụ na ịchọrọ ntụgharị siri ike. Enweghị override kwa ngwakọta. Maka ntụgharị ọtụtụ akaụntụ n'otu model, họrọ **otu nzọụkwụ dynamic-account** (`connectionId` tọgbọ chakoo, pool dum) nwere sticky limit `1`, ọ bụghị `connectionId` atọ a kpọgidere. Nzọụkwụ ndị a kpọgidere tinyere affinity na-adakọ n'otu akaụntụ ahụ ọbụlagodi mgbe counter RR na-aga n'ihu. ## Atụmatụ Fusion `fusion` bụ naanị atụmatụ nke **na-adịghị** ahọrọ otu ebumnuche. Ọ na-eziga prompt ahụ gaa na **ụdị nlereanya panel niile n'otu oge**, mgbe ahụ **ụdị nlereanya ọkaikpe** a pụrụ ịhazi na-achịkọta otu azịza ikpeazụ site na nzaghachi panel niile. E si na `decolua/9router` nke upstream bugharịa ya (nhazi Fusion nke OpenRouter); mmejuputa ya dị na `open-sse/services/fusion.ts`. Otu o si arụ ọrụ: 0. **Ịgafe panel maka arịrịọ nwere ngwaọrụ** — arịrịọ nwere array `tools` na-adịghị efu, nke `tool_choice` ya abụghị `"none"` kpọmkwem, na-awụfe panel kpamkpam: a na-ebuga ya ozugbo na otu ụdị nlereanya (ọkaikpe ahaziri, ma ọ bụ `panel[0]`), ebe a na-ebufe `tools`/`tool_choice` n'enweghị mgbanwe. Ndị otu panel enweghị ohere iji ngwaọrụ, ntuziaka nchịkọta nke ọkaikpe na-egbochikwa iwepụta oku ngwaọrụ, ya mere ndị ahịa agentic/ndị na-akpọ ngwaọrụ na-enweta ezigbo mkpebi oku ngwaọrụ kama prose a chịkọtara (#6771). 1. **Mgbasa n'akụkụ niile** (naanị maka arịrịọ na-enweghị ngwaọrụ) — a na-eziga prompt ahụ na ụdị nlereanya panel niile n'otu oge, na-amanye ha ka ha ghara iji streaming ma wepụ ngwaọrụ (ọkaikpe chọrọ prose zuru ezu iji chịkọta azịza). 2. **Nchịkọta quorum-grace** — ozugbo azịza `minPanel` rutere, obere grace timer na-amalite maka ndị na-egbu oge, mgbe ahụ fusion na-eji ihe ọ bụla anakọtara gaa n'ihu. Nke a na-amachi ntaramahụhụ ụdị nlereanya kacha nwayọọ na-etinye na wall time, site na hard timeout. 3. **Nchịkọta nke ọkaikpe** — a na-ezo aha azịza panel (`Isi Mmalite 1`, `Isi Mmalite 2`, … — ka ọkaikpe wee tụọ ọdịnaya, ọ bụghị aha ụdị nlereanya), ma nyefee ha n'aka ọkaikpe, nke na-enyocha nkwekọrịta / esemokwu / mkpuchi ezughị ezu / nghọta pụrụ iche / ebe a na-ahụghị anya, ma mesịa dee **otu** azịza nwere ikike. Oku ọkaikpe ahụ na-edowe flag `stream` mbụ nke onye ahịa yana ngwaọrụ, ka streaming na ojiji ngwaọrụ downstream wee ka na-arụ ọrụ. 4. **Mbelata ọrụ n'enweghị ndakpọ** — azịza panel 0 → `503`; naanị otu nke fọdụrụ → a na-eweghachi azịza ahụ ozugbo (ọ dịghị ihe a ga-ejikọta); panel nwere naanị otu ụdị nlereanya na-aza ozugbo. Onye otu panel nwekwara ike ịbụ nzọụkwụ `combo-ref` (`{kind: "combo-ref", comboName: "..."}`) nke na-arụtụ aka na combo ọzọ — a na-edozi ya dị ka **otu olu panel black-box** (dispatch recursive zuru ezu banye na combo ahụ a kpọtụrụ aka, ọ bụghị fan-out nke ebumnuche combo ahụ), yana nchedo depth/cycle ahụ atụmatụ ndị ọzọ niile na-eji combo-ref na-ejibu (#6764). ### Nhazi A na-ahazi ya na blob `config` nke combo ahụ (enweghị mbugharị schema — ọ na-eji tebụl `combos` dị ugbu a ọzọ): | Field | Type | Default | Purpose | | :--------------------------------------- | :------- | :---------------------- | :--------------------------------------------------------------------------------------- | | `config.judgeModel` | `string` | ụdị nlereanya panel mbụ | Ụdị nlereanya na-achịkọta azịza ikpeazụ | | `config.fusionTuning.minPanel` | `number` | `2` | Azịza gara nke ọma a chọrọ tupu grace timer amalite (a na-amachi ya na `[2, panelSize]`) | | `config.fusionTuning.stragglerGraceMs` | `number` | `8000` | Ogologo oge a ga-echere ndị na-egbu oge ozugbo e ruru quorum | | `config.fusionTuning.panelHardTimeoutMs` | `number` | `90000` | Oke zuru oke ka otu ụdị nlereanya kwụsịrị ịrụ ọrụ ghara igbochi arịrịọ ahụ | Default ndị ahụ dị na `FUSION_DEFAULTS` (`open-sse/services/fusion.ts`). ### Ihe Nlereanya ```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 } } }' ``` Mgbe ahụ kpọọ ya dịka combo ọ bụla ọzọ: `{"model":"fusion-panel","messages":[...]}`. ## Ụlọ Ọrụ Virtual Auto-Combo Injin Auto Combo anaghị achọ ka akọwapụta combo tupu oge eruo. Kama nke ahụ, `open-sse/services/autoCombo/virtualFactory.ts` na-emepụta ndị a ga-atụle ozugbo: 1. Ọ na-ewepụta `getProviderConnections({ isActive: true })` (njikọ niile enyere aka) 2. Ọ na-enyocha ma hapụ naanị ndị nwere credentials ziri ezi (API key ma ọ bụ OAuth token na-agwụbeghị oge site na `hasUsableOAuthToken()`) 3. Ọ na-atụnyere ha na `getProviderRegistry()` maka nnweta model + ọnụahịa 4. Maka tuple ọ bụla `(provider, model, connection)`, ọ na-emepụta `VirtualAutoComboCandidate` 5. Ọ na-ahọrọ `connection.defaultModel` (ma ọ bụ model mbụ dị na registry) dịka ebe a ga-eziga arịrịọ 6. Ọ na-enye candidate ọ bụla akara site na iji `scorePool()` nwere ihe 16 na ngwugwu weight nke variant ahụ 7. Ọ na-eweghachi `AutoComboConfig` nke sitere na ya ma dị na memory maka `handleComboChat()` — anaghị echekwa ya na DB ma ọlị Nke a pụtara na **ịgbakwunye provider ọhụrụ nke enyere `auto/*` aka na-agbasawanye candidate pool na-akpaghị aka** — ọ dịghị mkpa iji aka dezie combo. A na-ewughachi virtual combo maka arịrịọ ọ bụla, ya mere a na-achọpụta njikọ ọhụrụ agbakwunyere ma ọ bụ ndị laghachiri n'ọnọdụ ahụike ozugbo. ## Mmezi Onwe Ya - **Mwepụ nwa oge**: Score < 0.2 → ewepụ ya maka nkeji 5 (backoff na-abawanye nwayọ nwayọ, nke kachasị bụ nkeji 30) - **Ịmara ọnọdụ circuit breaker**: OPEN → ewepụ ya na-akpaghị aka; HALF_OPEN → arịrịọ nnwale - **Ọnọdụ nsogbu**: >50% OPEN → gbanyụọ exploration, mee ka nkwụsi ike ruo ogo kachasị - **Nlaghachi mgbe cooldown gasịrị**: Mgbe mwepụ ahụ kwụsịrị, arịrịọ mbụ bụ "probe" nwere timeout ebelatara ## Nnyocha Bandit A na-eziga 5% nke arịrịọ (enwere ike ịhazi ya) n'aka provider ndị ahọrọghị n'usoro maka exploration. A na-agbanyụ ya n'ọnọdụ nsogbu. ## API Enweghị **endpoint `POST /api/combos/auto` pụrụ iche** — a na-eji Auto-Combo eme ihe n'ụzọ abụọ: 1. **Nhazi-efu (a tụrụ aro):** Zipụ arịrịọ chat completion ọ bụla nwere `model: "auto"` ma ọ bụ `model: "auto/"`. Virtual factory na-emepụta combo ahụ maka arịrịọ ọ bụla — enweghị persistence ma ọ bụ oku API achọrọ. 2. **Combo echekwara nwere `strategy: "auto"`:** Mepụta combo nkịtị site na `POST /api/combos` ma tọọ `strategy: "auto"` tinyere `config.auto.weights` / `config.auto.candidatePool`. A na-eji otu scoring engine ahụ; a na-echekwa combo ahụ na `combos`, a pụkwara iji ID ya ọzọ. Maka nchọpụta, `GET /api/combos/auto` na-edepụta variant niile yana candidate pool ha edoziri, tinyere `context_length` / `max_output_tokens` — MAX gafee window niile dị na candidate pool ahụ. Clients (dịka opencode plugin) ga-akpọsa ụkpụrụ ndị a kama `0`: context efu na-eme ka auto-compaction nke opencode kwụsị kpamkpam, na-ahapụ sessions ka ha na-eto ruo mgbe mkpochapụ history nke gateway bibiri context. MAX dị nchebe ịkpọsa n'ihi na context pre-filter nke auto-combo na-eduzi arịrịọ buru oke ibu gaa na candidates nwere window buru ibu. ```bash # Ojiji nhazi-efu (enweghị imepụta combo) 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"}]}' # Combo auto echekwara site na endpoint combos nkịtị 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}}}}' ``` ### Atụmatụ auto router Combos `strategy: "auto"` echekwara nwere ike ịtọ `config.routerStrategy` (ma ọ bụ nke ochie `config.auto.routerStrategy`) ka ọ bụrụ otu n'ime ndị a: - `rules` — scoring ndabara nwere weight - `score` — na-ahọrọ weighted score ahaziri nke kachasị elu. Ties ndị hà nhata kpọmkwem na-edobe usoro candidate ahaziri; `explorationRate` dị ugbu a na-ewere sample site na ranked pool niile. - `cost` / `eco` — provider ahụike kachasị ọnụ ala - `latency` / `fast` — p95 latency kachasị ala nwere ntaramahụhụ reliability - `sla-aware` / `sla` — na-enye candidates na-emezu p95 latency, error-rate, na SLOs cost nhọrọ ụzọ - `lkgp` — provider ikpeazụ amaara na ọ dị mma na mbụ - `nadir` — jụọ API mkpebi nke [Nadir](https://getnadir.com) model nke dị na pool ahụ prompt chọrọ; opt-in, ma ọ bụrụ na ọ daa, ọ ga-eji `rules` ### Nkọwa zuru ezu banyere atụmatụ router Engine auto-combo na-enye implementations **RouterStrategy** 7 a pụrụ itinye ma wepụ, nke ị nwere ike ịgbanwe site na `config.routerStrategy` (ma ọ bụ `config.auto.routerStrategy` ochie). Atụmatụ ọ bụla na-ahọrọ otu provider n'ime candidate pool, dabere na `RoutingContext` (ụdị task, ihe ngosi tool/vision, atụmatụ tokens, policy SLA nhọrọ, provider ikpeazụ amaara na ọ dị mma nke bụ nhọrọ). #### 1. `rules` (ndabara) — scoring nwere weight nke ihe 16 Ọ na-ekpuchi scoring engine dị ugbu a. Ọ na-ewepụ candidates circuit-breaker ha bụ `OPEN`, wee mee `scorePool()` site na iji ụdị task ugbu a na `getTaskFitness()`, ma họrọ provider nwere score kachasị elu. ```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 /* ... */ }; } } ``` **Mgbe e kwesịrị iji ya**: Ndabara. Jiri ya mgbe ịchọrọ nguzozi kwesịrị ekwesị n'etiti signals niile. **Aha ọzọ**: `rules` (enweghị aha ọzọ) --- #### 2. `cost` / `eco` — provider ahụike kachasị ọnụ ala Ọ na-ahazi candidate pool site na `costPer1MTokens` (site na nke nta ruo nke ukwu) ma họrọ nke kachasị ọnụ ala. Ọ na-ebu ụzọ wepụ candidates `OPEN`. ```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 /* ... */ }; } } ``` **Mgbe e kwesịrị iji ya**: Workloads na-elebara cost anya, batch processing, ma ọ bụ ọrụ ndị na-aga n'azụ. **Aha ndị ọzọ**: `cost`, `eco` --- #### 3. `latency` / `fast` — p95 latency kachasị ala nwere ntaramahụhụ reliability Ọ na-ahazi site na `p95LatencyMs + (errorRate * 1000)`. Ntaramahụhụ error-rate na-eme ka providers a na-apụghị ịtụkwasị obi nweta ọkwa dị ala ọbụlagodi ma nominal latency ha dị ala. ```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 /* ... */ }; } } ``` **Mgbe e kwesịrị iji ya**: Workloads na-elebara latency anya dịka real-time chat, autocomplete, ma ọ bụ interactive coding assistants. **Aha ndị ọzọ**: `latency`, `fast` --- #### 4. `sla-aware` / `sla` — nrubeisi latency/error/cost SLO Ọ na-enye candidate ọ bụla score dabere n'otú o si emezu policy SLO ahaziri: | Ihe nrụtụ aka | Ibu | Usoro mgbakọ | | ---------------- | --- | -------------------------------------------------------------- | | Akara nkwụsị oge | 35% | `threshold / max(value, ε)` | | Akara njehie | 35% | `threshold / max(value, ε)` | | Akara ahụike | 15% | `1.0` (CLOSED) / `0.5` (HALF_OPEN) / `0.0` (OPEN) | | Akara ọnụ ahịa | 10% | `threshold / max(value, ε)` ma ọ bụ nke ahaziri n'ụzọ ntụgharị | | Akara nkwụsi ike | 5% | stddev nkwụsị oge ahaziri n'ụzọ ntụgharị | Mgbe `hardConstraints: true`, a na-ahazi ndị a ga-ahọrọ, nke mbụ site na **akara mmebi iwu** (ókè ha gafere SLO ọ bụla), emesịa site na akara ngwakọta. Ma ọ bụghị ya, ọ bụ naanị akara ngwakọta. ```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) { // ... na-enye onye ọ bụla a ga-ahọrọ akara dịka iwu si dị: { targetP95Ms, maxErrorRate, maxCostPer1MTokens, hardConstraints } } } ``` **Oghere SLA** (a na-edobe ha na nhazi combo): ```json { "strategy": "auto", "config": { "routerStrategy": "sla-aware", "slaTargetP95Ms": 1500, "slaMaxErrorRate": 0.05, "slaMaxCostPer1MTokens": 5, "slaHardConstraints": true } } ``` **Mgbe a ga-eji ya**: Ibu ọrụ mmepụta nwere oke siri ike maka nkwụsị oge, ọnụego njehie, ma ọ bụ mmefu ego. **Aha ndị ọzọ**: `sla-aware`, `sla` --- #### 5. `lkgp` — buru ụzọ jiri onye na-enye ọrụ ikpeazụ a maara na ọ dị mma Ọ na-ebu ụzọ nwalee **onye na-enye ọrụ ikpeazụ a maara na ọ dị mma** (ọ bụrụ na edobere ya), emesịa jiri atụmatụ `rules` dị ka nkwado. Ọ bara uru maka ijigide otu onye na-enye ọrụ n'otu nnọkọ — otu onye na-enye ọrụ ahụ na-ahụ maka arịrịọ ndị na-esote na mkparịta ụka. ```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 /* ... */ }; } } // Jiri atụmatụ rules dị ka nkwado return getStrategy("rules").select(pool, context); } } ``` **Mgbe a ga-eji ya**: Mkparịta ụka nwere ọtụtụ ntụgharị ebe ịchọrọ ka otu onye na-enye ọrụ ahụ na-ahụ maka arịrịọ ndị na-esote (dịka ọmụmaatụ, maka nchekwa cache, ịga n'ihu nke context, ma ọ bụ ịdị n'otu nke ọnụahịa). **Aha ọzọ**: `lkgp` (enweghị aha ọzọ) --- #### 6. `nadir` — ịhọrọ model nke na-adabere na prompt site na Nadir Atụmatụ niile dị n'elu na-ahazi ndị a ga-ahọrọ dịka telemetry nke ha si dị; ọ dịghị nke na-agụ arịrịọ ahụ. `nadir` na-eziga ntụgharị ikpeazụ nke onye ọrụ yana model ids dị na pool gaa na API mkpebi nke [Nadir](https://getnadir.com) (`POST /v1/bucket`) ma zipụ arịrịọ ahụ na model Nadir họọrọ n'ime ndepụta ahụ (`simple` → model kachasị ọnụ ala nke nwere ikike, `complex` → nke frontier). `rules` ka na-ahọrọ njikọ na-enye model ahụ, ya mere quota, ahụike na ọnụ ahịa ka na-ekpebi akaụntụ a ga-eji. ```json { "strategy": "auto", "config": { "routerStrategy": "nadir", "nadir": { "apiKey": "ndr_...", "baseUrl": "https://api.getnadir.com", "timeoutMs": 2000 } } } ``` `OMNIROUTE_NADIR_API_KEY` na `OMNIROUTE_NADIR_BASE_URL` bụ env fallbacks maka eriri abụọ ahụ. `baseUrl` dị naanị mkpa maka Nadir nke ị na-akwado n'onwe gị (a na-anabata `/v1` dị n'azụ ya). Oku na-enweghị key na-abanye na ọkwa anonymous nke Nadir, nke nwere oke ọnụego maka IP ọ bụla. Ihe na-apụ na box ahụ: ederede ozi ikpeazụ nke onye ọrụ (mkpụrụedemede 16k mbụ), model ids nke ndị a ga-ahọrọ yana channel tag `source: "omniroute"`. Ọ dịghị system prompt, akụkọ ihe mere eme, tools ma ọ bụ headers. Omume mgbe ọdịda mere bụ fail-open: timeout (ndabara bụ 2000 ms), nzaghachi na-abụghị 2xx, host a na-apụghị iru, nzaghachi emebiri emebi ma ọ bụ nhọrọ na-adịghị na pool ga-eduga na mkpebi `rules`, a ga-etinyekwa `NadirStrategy: fallback (…)` n'ihu ihe kpatara ya. Mgbe oku dara, atụmatụ ahụ na-awụfe network maka 30 s, ya mere nsogbu ọrụ na-eri otu timeout n'ime 30 s ọ bụla kama otu maka arịrịọ ọ bụla. Ihe omume routing na-akọ `strategy: "nadir"` naanị mgbe Nadir mere nhọrọ ahụ n'ezie. **Mgbe a ga-eji ya**: okporo data nwere ọkwa isi ike dị iche iche n'ime pool nke nwere model tiers dị iche iche (obere, nke etiti na frontier model), ebe ịchọrọ ibelata ọnụ ahịa nke iji frontier mgbe niile. **Aha ọzọ**: `nadir` (enweghị aha ọzọ) --- ### Atụmatụ router ahaziri iche Ị nwere ike idebanye mmejuputa `RouterStrategy` nke gị site na public API: ```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) { // Tinye routing logic gị ebe a 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()); ``` Mgbe ahụ jiri ya: ```json { "strategy": "auto", "config": { "routerStrategy": "my-custom" } } ``` --- ### Ntuziaka ịhọrọ atụmatụ router | Ebe a ga-eji ya | Atụmatụ | Ihe kpatara ya | | --------------------------- | ----------- | ------------------------------------------------------------------------ | | Ibu ọrụ ziri ezi | `rules` | Ndabara — na-atụle ihe niile | | Belata ọnụ ahịa | `cost` | Na-ahọrọ nke kachasị ọnụ ala mgbe niile | | Belata nkwụsị oge | `latency` | Na-ahọrọ onye na-enye ọrụ kachasị ọsọ ma bụrụkwa nke a pụrụ ịtụkwasị obi | | SLO ndị siri ike | `sla-aware` | Na-enyocha site na oke p95/njehie/ọnụ ahịa | | Mkparịta ụka ọtụtụ ntụgharị | `lkgp` | Ijigide otu onye na-enye ọrụ n'otu nnọkọ | | Ọkwa isi ike dị iche iche | `nadir` | Na-ahọrọ model tier dịka prompt ọ bụla si dị | Oghere SLA: ```json { "strategy": "auto", "config": { "routerStrategy": "sla-aware", "slaTargetP95Ms": 1500, "slaMaxErrorRate": 0.05, "slaMaxCostPer1MTokens": 5, "slaHardConstraints": true } } ``` ## Ndakọrịta Ọrụ E nyere ụdịdị 30+ akara n’ofe ụdị ọrụ 6 (`coding`, `review`, `planning`, `analysis`, `debugging`, `documentation`). Ọ na-akwado ụkpụrụ wildcard (dịka, `*-coder` → akara coding dị elu). ## Nchịkọta Auto Variants Mgbe a gụnyere `auto` nkịtị (ndabara) tinyere ụkpụrụ `AutoVariant` 6 e kwupụtara na `autoPrefix.ts`, e nwere **NJ ụdị ID 7 enwere ike ịkpọ**: `auto`, `auto/coding`, `auto/fast`, `auto/cheap`, `auto/offline`, `auto/smart`, `auto/lkgp` (`AutoVariant` n’onwe ya depụtara ụkpụrụ 6; nhọrọ nke 7 bụ "enweghị variant" — `auto` nkịtị — nke `parseAutoPrefix()` na-ahazi dịka `variant: undefined`.) ## Otu tiers si daba na Auto-Combo Ọrụ ntule nwere ihe 16 (`open-sse/services/autoCombo/scoring.ts`) na-ewere ịbụ onye otu tier dị ka akara abụọ: `tierPriority` (0.0476) na `tierAffinity` (0.0476). Lee [tebụl ihe ntule bụ isi](#how-it-works-persisted-auto-combos) dị n’elu maka nchịkọta `DEFAULT_WEIGHTS` zuru ezu — edepụtara mgbanwe pụrụ iche maka pack ọ bụla (ship-fast/cost-saver/quality-first/ offline-friendly) na tebụl "Profaịlụ ibu maka pack ọ bụla". Tier naanị ya **anaghị** eme ka Tier 1 buru ụzọ — ọ bụrụ na latency nke Tier 1 adịghị mma ma ọ bụ na ntụnyere ọnụahịa na ogo adịghị mma, Tier 2 ga-emeri. Iji manye usoro tier, jiri atụmatụ combo `priority` ma hazie ndị na-eweta ọrụ dịka tier ha si dị. Iji nye Tier 1 (ndebanye aha) nnukwu uru, bulie ibu `tierPriority`: ```json { "strategy": "auto", "config": { "auto": { "weights": { "tierPriority": 0.3, "costInv": 0.05 } } } } ``` Lee [`docs/guides/TIERS.md`](../guides/TIERS.md) maka nkọwa tier na nhazi ndị na-eweta ọrụ. ## Nnwale & Mkpuchi ### Matriks mkpebi routing na-agbanweghi agbanwe (`npm run test:combo:matrix`) `tests/integration/combo-matrix/*.test.ts` na-egosi **mkpebi** routing nke strategies ọhaneze 19 niile site na mbido ruo na ngwụcha n’ime ezigbo pipeline combo, site na upstream e mere mock. Mkpuchi ahụ gụnyere: - Strategies `ROUTING_STRATEGY_VALUES` 19 niile (ordered, weighted, cost, context, fusion, …). - `quota-share` (nke ime) site na mbido ruo na ngwụcha: izi ezi DRR + iweda mkpa mgbe saturation dị elu site na ezigbo oghere njikọ `selectQuotaShareTarget` (`registerQuotaFetcher` / `setLKGP` / `__setHeadroomSaturationFetcherForTests`). - Mkpuchi nnyefe zuru ụwa ọnụ `context-relay` n’ofe ọnụọgụ target niile. Suite a na-agba na CI (ọrụ `test:integration`) na `--test-concurrency=1` na `--test-force-exit`, ka ọ bụrụ nke na-agbanweghi agbanwe ma ghara ịchọ credentials dị ndụ. ### Smoke test ndụ nwere mgbochi (Ọ DỊGHỊ na CI — ezigbo providers) | Iwu | Ihe ọ na-eme | | :------------------------------------- | :------------------------------------------------------------------------------------------ | | `npm run test:combo:live` | Ezigbo routing n’ime process na `RUN_COMBO_LIVE=1`; na-eme snapshot nke DB OmniRoute dị ndụ | | `npm run test:combo:live:vps` | Oku HTTP megide sava OmniRoute dị ndụ (tọọ `COMBO_LIVE_BASE_URL`) | | `npm run test:combo:live:vps:failover` | Otu ihe ahụ, tinyere ọnọdụ failover e kpachapụrụ anya kee | Smoke tests ndị a na-anwale ezigbo ụzọ njikọ (combo → provider → completion). A kpachapụrụ anya wepụ ha na CI n’ihi na ha chọrọ credentials dị ndụ na ohere ịbanye VPS. --- ## Faịlụ | Faịlụ | Ebumnuche | | :-------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------- | | `open-sse/services/autoCombo/scoring.ts` | Ọrụ inye akara nwere ihe 16, `DEFAULT_WEIGHTS`, nhazi pool | | `open-sse/services/autoCombo/taskFitness.ts` | Nnyocha ndakọrịta Model × ọrụ | | `open-sse/services/autoCombo/engine.ts` | Usoro nhọrọ, bandit, oke mmefu ego | | `open-sse/services/autoCombo/selfHealing.ts` | Mwepu, nyocha, ọnọdụ ihe mberede | | `open-sse/services/autoCombo/modePacks.ts` | Profaịlụ ibu 6 (zipụ-ngwa-ngwa, nchekwa-ọnụahịa, ogo-mbụ, adabara-anọghị-n'ịntanetị, ntụkwasị-obi-mbụ, ọnọdụ-ọgbaaghara) | | `open-sse/services/autoCombo/autoPrefix.ts` | Ntụgharị prefix `auto/` + ụdị 6 | | `open-sse/services/autoCombo/virtualFactory.ts` | Na-emepụta `AutoComboConfig` n'ime ebe nchekwa site na njikọ ndị na-arụ ọrụ | | `open-sse/services/autoCombo/providerRegistryAccessor.ts` | Hook ule maka imegharị provider registry | | `src/shared/constants/routingStrategies.ts` | `ROUTING_STRATEGY_VALUES` (usoro 20) | | `src/sse/handlers/chat.ts` | Njikọta: ụzọ mkpirisi auto-prefix |