Batch 1 of the locale expansion: Greek, Croatian, Serbian, Lithuanian, Estonian, Latvian, Slovenian, Maltese and Irish across the dashboard catalog, docs mirrors, CLI catalog, README, locale index and the site. 42 → 51 locales. Also fixes the ICU literal escape the translation backend dropped around angle placeholders, four translations that invented or renamed a placeholder, the language bars that linked to mirrors that do not exist, and the migration count drift (171 → 172). ⚠️ base-red inherited: #12732 — the four unit shards and Fast Quality Gates fail identically on unrelated PRs cut from the same base.
88 KiB
ARCHITECTURE (Lietuvių)
🌐 Languages: 🇺🇸 English · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇮🇩 id · 🇮🇹 it · 🇯🇵 ja · 🇰🇷 ko · 🇱🇻 lv · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇳🇱 nl · 🇳🇴 no · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇻🇳 vi · 🇨🇳 zh-CN · 🇹🇼 zh-TW
title: „OmniRoute architektūra“ version: 3.8.40 lastUpdated: 2026-06-28
OmniRoute architektūra
🌐 Languages: 🇺🇸 English · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇮🇩 id · 🇮🇹 it · 🇯🇵 ja · 🇰🇷 ko · 🇱🇻 lv · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇳🇱 nl · 🇳🇴 no · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇻🇳 vi · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Paskutinį kartą atnaujinta: 2026-06-28
Vykdomoji santrauka
„OmniRoute“ yra vietinis, „Next.js“ pagrindu sukurtas DI užklausų nukreipimo šliuzas ir valdymo skydelis.
Jis suteikia vieną su „OpenAI“ suderinamą galinį tašką (/v1/*) ir nukreipia srautą keliems išoriniams paslaugų teikėjams, užtikrindamas formatų konvertavimą, atsarginį perjungimą, prieigos raktų atnaujinimą ir naudojimo stebėjimą.
Pagrindinės galimybės:
- Su „OpenAI“ suderinama API sąsaja, skirta CLI ir įrankiams (355 paslaugų teikėjai, 108 vykdikliai)
- Užklausų ir atsakymų konvertavimas tarp paslaugų teikėjų formatų
- Modelių kombinacijų atsarginis perjungimas (kelių modelių seka)
- Struktūrizuoti kombinacijų veiksmai (
provider + model + connection) su vykdymo metu nustatoma tvarka pagalcompositeTiers - Paskyros lygmens atsarginis perjungimas (kelios paskyros vienam paslaugų teikėjui)
- Išankstinis kvotos tikrinimas ir kvotą įvertinantis P2C paskyros parinkimas pagrindiniame pokalbių kelyje
- OAuth ir API raktu pagrįstas paslaugų teikėjų ryšių valdymas (22 OAuth paslaugų teikėjų moduliai)
- Vektorinių reprezentacijų generavimas per
/v1/embeddings(18 paslaugų teikėjų) - Vaizdų generavimas per
/v1/images/generations(daugiau nei 10 paslaugų teikėjų, daugiau nei 20 modelių) - Garso transkribavimas per
/v1/audio/transcriptions(18 paslaugų teikėjų) - Teksto vertimas kalba per
/v1/audio/speech(24 integruoti paslaugų teikėjai) - Vaizdo įrašų generavimas per
/v1/videos/generations(ComfyUI + SD WebUI) - Muzikos generavimas per
/v1/music/generations(ComfyUI) - Paieška žiniatinklyje per
/v1/search(20 paslaugų teikėjų) - Turinio moderavimas per
/v1/moderations - Pakartotinis reitingavimas per
/v1/rerank - Mąstymo žymų analizė (
<think>...</think>), skirta samprotavimo modeliams - Atsakymų išvalymas siekiant griežto suderinamumo su „OpenAI“ SDK
- Vaidmenų normalizavimas (developer→system, system→user), užtikrinantis skirtingų paslaugų teikėjų suderinamumą
- Struktūrizuotos išvesties konvertavimas (json_schema → Gemini responseSchema)
- Vietinis paslaugų teikėjų, raktų, alternatyvių pavadinimų, kombinacijų, nustatymų ir kainodaros išsaugojimas (122 DB moduliai)
- Naudojimo ir sąnaudų stebėjimas bei užklausų registravimas žurnale
- Pasirinktinis sinchronizavimas debesyje, skirtas kelių įrenginių ir būsenos sinchronizavimui
- Leidžiamų ir blokuojamų IP adresų sąrašai, skirti API prieigai valdyti
- Mąstymo biudžeto valdymas (perdavimas nepakeitus / automatinis / pasirinktinis / adaptyvus)
- Visuotinis sistemos raginimo įterpimas
- Seansų stebėjimas ir skaitmeninių atspaudų kūrimas
- Patobulintas kiekvienos paskyros užklausų dažnio ribojimas naudojant konkretiems paslaugų teikėjams skirtus profilius
- Grandinės pertraukiklio šablonas, skirtas paslaugų teikėjų atsparumui užtikrinti
- Apsauga nuo masinių vienalaikių užklausų naudojant mutex užraktus
- Parašu pagrįsta pasikartojančių užklausų šalinimo talpykla
- Domeno sluoksnis: sąnaudų taisyklės, atsarginio perjungimo politika, blokavimo politika
- „Context Relay“: seanso perdavimo suvestinės, užtikrinančios tęstinumą keičiant paskyras
- Domeno būsenos išsaugojimas („SQLite“ tiesioginio įrašymo talpykla, skirta atsarginiams perjungimams, biudžetams, blokavimams ir grandinės pertraukikliams)
- Politikos variklis, skirtas centralizuotam užklausų vertinimui (blokavimas → biudžetas → atsarginis perjungimas)
- Užklausų telemetrija su p50/p95/p99 delsos agregavimu
- Kombinacijų tikslinių elementų telemetrija ir istorinė jų būklė naudojant
combo_execution_key/combo_step_id - Koreliacijos ID (X-Request-Id), skirtas viso proceso sekimui
- Atitikties audito registravimas su galimybe jį išjungti kiekvienam API raktui
- Vertinimo sistema, skirta LLM kokybei užtikrinti
- Būklės valdymo skydelis, realiuoju laiku rodantis paslaugų teikėjų grandinės pertraukiklių būseną
- MCP serveris (110 įrankių) su 3 perdavimo būdais (stdio/SSE/Streamable HTTP)
- A2A serveris (JSON-RPC 2.0 + SSE) su gebėjimais ir užduočių gyvavimo ciklu
- Atminties sistema (išgavimas, įterpimas, paieška, apibendrinimas)
- Gebėjimų sistema (registras, vykdiklis, smėlio dėžė, integruoti gebėjimai)
- MITM tarpinis serveris su sertifikatų valdymu ir DNS apdorojimu
- Apsaugos nuo raginimų injekcijos tarpinė programinė įranga
- Raginimų glaudinimo konvejeris su Caveman, RTK, sudėtiniais konvejeriais, glaudinimo kombinacijomis, kalbų paketais ir analitika
- ACP („Agent Communication Protocol“) registras
- Moduliniai OAuth paslaugų teikėjai (22 atskiri moduliai kataloge
src/lib/oauth/providers/) - Pašalinimo ir visiško pašalinimo scenarijai
- OAuth aplinkos taisymo veiksmas
- WebSocket tiltas, skirtas su „OpenAI“ suderinamiems WS klientams (
/v1/ws) - Sinchronizavimo prieigos raktų valdymas (išdavimas / atšaukimas, ETag versijuojamo konfigūracijos paketo atsisiuntimas)
- GLM Thinking (
glmt) kaip visavertis iš anksto nustatytas paslaugų teikėjo profilis - Hibridinis prieigos ženklų skaičiavimas (paslaugų teikėjo pusės
/messages/count_tokenssu atsarginiu įvertinimu) - Automatinis modelių alternatyvių pavadinimų inicijavimas (daugiau nei 30 skirtingų tarpinių serverių dialektų normalizavimų paleidimo metu)
- Saugus išeinančių duomenų gavimas su SSRF apsauga, privačių URL blokavimu ir konfigūruojamais pakartotiniais bandymais
- Pokalbių pakartotiniai bandymai, atsižvelgiantys į atvėsimo laikotarpį, su konfigūruojamais
requestRetryirmaxRetryIntervalSec - Vykdymo aplinkos tikrinimas paleidimo metu naudojant Zod
- Atitikties audito v2 su puslapiavimu, paslaugų teikėjų CRUD įvykiais ir SSRF užblokuotų patikrų registravimu
Pagrindinis vykdymo modelis:
- „Next.js“ programos maršrutai kataloge
src/app/api/*įgyvendina ir valdymo skydelio API, ir suderinamumo API - Bendras SSE ir maršrutizavimo branduolys kataloguose
src/sse/*+open-sse/*valdo paslaugų teikėjų vykdymą, formatų konvertavimą, srautinį perdavimą, atsarginį perjungimą ir naudojimo apskaitą
Etaloninės diagramos
Kanoniniai, versijomis valdomi v3.8.0 platformos Mermaid šaltiniai yra
docs/diagrams/. Toliau orientacijai pateikiamos dvi diagramos;
likusios susietos su konkrečioms sritims skirtais vadovais.
Šaltinis: diagrams/request-pipeline.mmd
Šaltinis: diagrams/resilience-3layers.mmd — taip pat susietas su RESILIENCE_GUIDE.md ir
CLAUDE.mdatsparumo dokumentacija.
Apimtis ir ribos
Į apimtį įtraukta
- Vietinio šliuzo vykdymo aplinka
- Valdymo skydelio administravimo API
- Teikėjų autentifikavimas ir prieigos raktų atnaujinimas
- Užklausų transformavimas ir SSE srautinis perdavimas
- Vietinė būsena ir naudojimo duomenų išsaugojimas
- Pasirinktinis sinchronizavimo su debesija koordinavimas
Į apimtį neįtraukta
- Už
NEXT_PUBLIC_CLOUD_URLesanti debesijos paslaugos realizacija - Teikėjo SLA / valdymo sluoksnis už vietinio proceso ribų
- Patys išoriniai CLI vykdomieji failai (Claude CLI, Codex CLI ir kt.)
Valdymo skydelio sąsaja (dabartinė)
Pagrindiniai puslapiai, esantys src/app/(dashboard)/dashboard/:
/dashboard— greitoji pradžia ir teikėjų apžvalga/dashboard/endpoint— galinio taško tarpinis serveris bei MCP, A2A ir API galinių taškų skirtukai/dashboard/providers— teikėjų ryšiai ir prisijungimo duomenys/dashboard/combos— derinių strategijos, šablonai, žingsniais pagrįsta kūrimo priemonė, modelių maršruto parinkimo taisyklės ir rankiniu būdu nustatyta išsaugoma tvarka/dashboard/auto-combo— automatinių derinių variklis: vertinimo svoriai, režimų rinkiniai, virtualiosios gamyklos išankstinės nuostatos ir telemetrija/dashboard/costs— išlaidų agregavimas ir kainodaros matomumas/dashboard/analytics— naudojimo analizė, vertinimai ir derinių tikslinių objektų būklė/dashboard/limits— kvotų ir dažnio valdikliai/dashboard/cli-tools— CLI parengimas naudoti, vykdymo aplinkos aptikimas ir konfigūracijos generavimas/dashboard/agents— aptikti ACP agentai ir pasirinktinių agentų registravimas/dashboard/cloud-agents— debesijoje talpinamų agentų užduotys (Codex Cloud, Devin, Jules) ir užduočių gyvavimo ciklas/dashboard/skills— A2A gebėjimų registras, izoliuotosios aplinkos vykdymas ir integruotų gebėjimų katalogas/dashboard/memory— išsaugomos pokalbių atminties peržiūra ir paieška/dashboard/webhooks— siunčiamų webhook prenumeratos, paslapčių keitimas ir pakartotinių bandymų statistika/dashboard/batch— paketinių užduočių pateikimas ir eiga/dashboard/cache— skaitymo metu užpildomo ir samprotavimo podėlių statistika bei šalinimo valdikliai/dashboard/playground— interaktyvi pokalbių bandymų aplinka, skirta bet kuriam sukonfigūruotam deriniui ar modeliui/dashboard/changelog— programoje integruota pakeitimų žurnalo peržiūros priemonė (atvaizduojaCHANGELOG.md)/dashboard/system— vykdymo aplinkos diagnostika, versijos informacija ir aplinkos tikrinimo sąsaja/dashboard/onboarding— pirmojo paleidimo sąrankos vedlys naujoms įdiegtims/dashboard/media— vaizdų, vaizdo įrašų ir muzikos bandymų aplinka/dashboard/search-tools— paieškos teikėjų testavimas ir istorija/dashboard/health— veikimo trukmė, grandinės pertraukikliai, dažnio apribojimai ir pagal kvotas stebimos sesijos/dashboard/logs— užklausų, tarpinio serverio, audito ir konsolės žurnalai/dashboard/settings— sistemos nuostatų skirtukai (bendrosios nuostatos, maršruto parinkimas, numatytosios derinių nuostatos ir kt.)/dashboard/context/caveman— Caveman glaudinimo taisyklės, kalbų paketai, peržiūra ir išvesties režimas/dashboard/context/rtk— RTK komandų išvesties filtrai, peržiūra ir vykdymo aplinkos saugos nuostatos/dashboard/context/combos— pavadintos glaudinimo sekos, priskirtos maršruto parinkimo deriniams/dashboard/translator— transformatoriaus peržiūra ir užklausų formato konvertavimo peržiūra/dashboard/audit— atitikties audito žurnalų naršyklė su puslapių numeracija ir struktūrizuotais metaduomenimis/dashboard/usage— atskirų užklausų naudojimo duomenų naršyklė, susieta suusage_history/dashboard/compression— glaudinimo analizė, statistika ir apdorojimo sekų priskyrimas/dashboard/api-manager— API raktų gyvavimo ciklas ir modelių leidimai
Aukšto lygio sistemos kontekstas
flowchart LR
subgraph Clients[Kūrėjų klientai]
C1[Claude Code]
C2[Codex CLI]
C3[OpenClaw / Droid / Cline / Continue / Roo]
C4[Pasirinktiniai su OpenAI suderinami klientai]
BROWSER[Naršyklės valdymo skydas]
end
subgraph Router[Vietinis OmniRoute procesas]
API[V1 suderinamumo API\n/v1/*]
DASH[Valdymo skydas + administravimo API\n/api/*]
CORE[SSE + vertimo branduolys\nopen-sse + src/sse]
DB[(storage.sqlite)]
UDB[(naudojimo lentelės + žurnalų artefaktai)]
end
subgraph Upstreams[Išoriniai teikėjai]
P1[OAuth teikėjai\nClaude/Codex/Gemini/Qoder/GitHub/Kiro/Cursor/Antigravity]
P2[API rakto teikėjai\nOpenAI/Anthropic/OpenRouter/GLM/Kimi/MiniMax\nDeepSeek/Groq/xAI/Mistral/Perplexity\nTogether/Fireworks/Cerebras/Cohere/NVIDIA]
P3[Suderinami mazgai\nSuderinami su OpenAI / suderinami su Anthropic]
end
subgraph Cloud[Pasirinktinis sinchronizavimas su debesija]
CLOUD[Sinchronizavimo su debesija galinis taškas\nNEXT_PUBLIC_CLOUD_URL]
end
C1 --> API
C2 --> API
C3 --> API
C4 --> API
BROWSER --> DASH
API --> CORE
DASH --> DB
CORE --> DB
CORE --> UDB
CORE --> P1
CORE --> P2
CORE --> P3
DASH --> CLOUD
Pagrindiniai vykdymo aplinkos komponentai
1) API ir maršruto parinkimo sluoksnis (Next.js programos maršrutai)
Pagrindiniai katalogai:
src/app/api/v1/*irsrc/app/api/v1beta/*, skirti suderinamumo APIsrc/app/api/*, skirti administravimo ir konfigūravimo API- Next perrašymo taisyklės faile
next.config.mjssusieja/v1/*su/api/v1/*
Svarbūs suderinamumo maršrutai:
src/app/api/v1/chat/completions/route.tssrc/app/api/v1/messages/route.tssrc/app/api/v1/responses/route.tssrc/app/api/v1/models/route.ts— apima pasirinktinius modelius sucustom: truesrc/app/api/v1/embeddings/route.ts— vektorinių reprezentacijų generavimas (6 teikėjai)src/app/api/v1/images/generations/route.ts— vaizdų generavimas (4 ar daugiau teikėjų, įskaitant Antigravity/Nebius)src/app/api/v1/messages/count_tokens/route.tssrc/app/api/v1/providers/[provider]/chat/completions/route.ts— atskiras kiekvieno teikėjo pokalbių maršrutassrc/app/api/v1/providers/[provider]/embeddings/route.ts— atskiras kiekvieno teikėjo vektorinių reprezentacijų maršrutassrc/app/api/v1/providers/[provider]/images/generations/route.ts— atskiras kiekvieno teikėjo vaizdų maršrutassrc/app/api/v1beta/models/route.tssrc/app/api/v1beta/models/[...path]/route.ts
Administravimo sritys:
- Autentifikavimas / nustatymai:
src/app/api/auth/*,src/app/api/settings/* - Teikėjai / ryšiai:
src/app/api/providers* - Teikėjų mazgai:
src/app/api/provider-nodes* - Pasirinktiniai modeliai:
src/app/api/provider-models(GET/POST/DELETE) - Modelių katalogas:
src/app/api/models/route.ts(GET) - Įgaliotojo serverio konfigūracija:
src/app/api/settings/proxy(GET/PUT/DELETE) +src/app/api/settings/proxy/test(POST) - OAuth:
src/app/api/oauth/* - Raktai / alternatyvūs vardai / deriniai / kainodara:
src/app/api/keys*,src/app/api/models/alias,src/app/api/combos*,src/app/api/pricing - Naudojimas:
src/app/api/usage/* - Sinchronizavimas / debesija:
src/app/api/sync/*,src/app/api/cloud/* - CLI įrankių pagalbinės priemonės:
src/app/api/cli-tools/* - IP filtras:
src/app/api/settings/ip-filter(GET/PUT) - Samprotavimo biudžetas:
src/app/api/settings/thinking-budget(GET/PUT) - Sistemos raginimas:
src/app/api/settings/system-prompt(GET/PUT) - Glaudinimas:
src/app/api/settings/compression,src/app/api/compression/*irsrc/app/api/context/* - Seansai:
src/app/api/sessions(GET) - Užklausų dažnio apribojimai:
src/app/api/rate-limits(GET) - Atsparumas:
src/app/api/resilience(GET/PATCH) — užklausų eilė, ryšio atvėsimo laikotarpis, teikėjo grandinės pertraukiklis, laukimo, kol baigsis atvėsimo laikotarpis, konfigūracija - Atsparumo būsenos atkūrimas:
src/app/api/resilience/reset(POST) — iš naujo nustato teikėjų grandinės pertraukiklius - Podėlio statistika:
src/app/api/cache/stats(GET/DELETE) - Telemetrija:
src/app/api/telemetry/summary(GET) - Biudžetas:
src/app/api/usage/budget(GET/POST) - Atsarginių variantų grandinės:
src/app/api/fallback/chains(GET/POST/DELETE) - Atitikties auditas:
src/app/api/compliance/audit-log(GET, su puslapiavimu ir struktūrizuotais metaduomenimis) - Vertinimai:
src/app/api/evals(GET/POST),src/app/api/evals/[suiteId](GET) - Strategijos:
src/app/api/policies(GET/POST) - Sinchronizavimo prieigos raktai:
src/app/api/sync/tokens(GET/POST),src/app/api/sync/tokens/[id](GET/DELETE) - Konfigūracijos paketas:
src/app/api/sync/bundle(GET, pagal ETag versijuojama nustatymų, teikėjų, derinių ir raktų momentinė kopija) - WebSocket:
src/app/api/v1/ws/route.ts— Upgrade apdorojimo priemonė su OpenAI suderinamiems WS klientams
2) SSE + vertimo branduolys
Pagrindinio srauto moduliai:
- Įėjimo taškas:
src/sse/handlers/chat.ts - Pagrindinis koordinavimas:
open-sse/handlers/chatCore.ts - Teikėjų vykdymo adapteriai:
open-sse/executors/* - Formato aptikimas / teikėjo konfigūracija:
open-sse/services/provider.ts - Modelio analizavimas / nustatymas:
src/sse/services/model.ts,open-sse/services/model.ts - Paskyros atsarginio perjungimo logika:
open-sse/services/accountFallback.ts - Vertimo registras:
open-sse/translator/index.ts - Srauto transformacijos:
open-sse/utils/stream.ts,open-sse/utils/streamHandler.ts - Naudojimo duomenų išgavimas / normalizavimas:
open-sse/utils/usageTracking.ts - Mąstymo žymų analizatorius:
open-sse/utils/thinkTagParser.ts - Įterpinių apdorojimo programa:
open-sse/handlers/embeddings.ts - Įterpinių teikėjų registras:
open-sse/config/embeddingRegistry.ts - Vaizdų generavimo apdorojimo programa:
open-sse/handlers/imageGeneration.ts - Vaizdų teikėjų registras:
open-sse/config/imageRegistry.ts - Atsakymų išvalymas:
open-sse/handlers/responseSanitizer.ts - Vaidmenų normalizavimas:
open-sse/services/roleNormalizer.ts
Paslaugos (verslo logika):
- Paskyrų parinkimas / vertinimas:
open-sse/services/accountSelector.ts - Konteksto gyvavimo ciklo valdymas:
open-sse/services/contextManager.ts - IP filtro taikymas:
open-sse/services/ipFilter.ts - Seansų stebėjimas:
open-sse/services/sessionManager.ts - Pasikartojančių užklausų šalinimas:
open-sse/services/signatureCache.ts - Sistemos užklausos įterpimas:
open-sse/services/systemPrompt.ts - Mąstymo biudžeto valdymas:
open-sse/services/thinkingBudget.ts - Modelių maršruto parinkimas naudojant pakaitos simbolius:
open-sse/services/wildcardRouter.ts - Užklausų dažnio apribojimų valdymas:
open-sse/services/rateLimitManager.ts - Grandinės pertraukiklis:
src/shared/utils/circuitBreaker.ts - Konteksto perdavimas:
open-sse/services/contextHandoff.ts— perdavimo santraukos generavimas ir įterpimas, skirtas konteksto perdavimo strategijai - Glaudinimas:
open-sse/services/compression/*— išankstinis glaudinimas prieš vertimą į teikėjo formatą; apima Caveman taisykles, RTK filtrus, sudėtines apdorojimo sekas, glaudinimo derinius, statistiką ir tikrinimą - Codex kvotos gavimo priemonė:
open-sse/services/codexQuotaFetcher.ts— gauna Codex kvotą sprendimams dėl konteksto perdavimo - Pakartotiniai bandymai, atsižvelgiant į laukimo laikotarpį:
src/sse/services/cooldownAwareRetry.ts— kiekvieno modelio pakartotiniai bandymai po laukimo laikotarpio, konfigūruojami naudojantrequestRetry/maxRetryIntervalSec - Saugus išeinančių užklausų vykdymas:
src/shared/network/safeOutboundFetch.ts— apsaugotas teikėjo / modelio duomenų gavimas su SSRF apsauga, privačių URL blokavimu, pakartotiniais bandymais ir skirtuoju laiku - Išeinančių URL apsauga:
src/shared/network/outboundUrlGuard.ts— tikrina teikėjų URL pagal privačių / localhost CIDR diapazonus - Numatytosios teikėjo užklausų reikšmės:
open-sse/services/providerRequestDefaults.ts— teikėjo lygmens numatytosiosmaxTokens,temperature,thinkingBudgetTokensreikšmės - GLM teikėjo konstantos:
open-sse/config/glmProvider.ts— bendrinami GLM modeliai, kvotų URL, GLMT skirtasis laikas / numatytosios reikšmės - Antigravity pirminė paslauga:
open-sse/config/antigravityUpstream.ts— bazinio URL ir aptikimo kelio konstantos - Codex kliento konstantos:
open-sse/config/codexClient.ts— versijuotos naudotojo agento ir kliento versijos reikšmės - Modelių alternatyvių pavadinimų pradiniai duomenys:
src/lib/modelAliasSeed.ts— paleidimo metu įrašo daugiau nei 30 skirtingų tarpinių serverių dialektų alternatyvių pavadinimų
Domeno sluoksnio moduliai:
- Kainos taisyklės / biudžetai:
src/domain/costRules.ts - Atsarginio perjungimo politika:
src/domain/fallbackPolicy.ts - Derinių nustatymo priemonė:
src/domain/comboResolver.ts - Blokavimo politika:
src/domain/lockoutPolicy.ts - Politikos variklis:
src/domain/policyEngine.ts— centralizuotas vertinimas tokia tvarka: blokavimas → biudžetas → atsarginis perjungimas - Klaidų kodų katalogas:
src/shared/constants/errorCodes.ts - Užklausos ID:
src/shared/utils/requestId.ts - Duomenų gavimo skirtasis laikas:
src/shared/utils/fetchTimeout.ts - Užklausų telemetrija:
src/shared/utils/requestTelemetry.ts - Atitiktis / auditas:
src/lib/compliance/index.ts - Vertinimų vykdymo priemonė:
src/lib/evals/evalRunner.ts - Domeno būsenos išsaugojimas:
src/lib/db/domainState.ts— SQLite CRUD operacijos, skirtos atsarginio perjungimo grandinėms, biudžetams, išlaidų istorijai, blokavimo būsenai ir grandinės pertraukikliams
OAuth teikėjų moduliai (22 atskiri failai kataloge src/lib/oauth/providers/):
- Registro rodyklė:
src/lib/oauth/providers/index.ts - Atskiri teikėjai:
agy.ts,antigravity.ts,claude.ts,cline.ts,codebuddy-cn.ts,codex.ts,cursor.ts,devin-desktop.ts,ghe-copilot.ts,github.ts,gitlab-duo.ts,grok-cli-oauth.ts,grok-cli.ts,kilocode.ts,kimi-coding.ts,kiro.ts,openference.ts,qoder.ts,trae.ts,xai-oauth.ts,zed-hosted.ts,zed.ts - Plonas apvalkalas:
src/lib/oauth/providers.ts— pakartotinai eksportuoja iš atskirų modulių
5) Įterptosios paslaugos (v3.8.4)
OmniRoute gali įdiegti, prižiūrėti ir nukreipti užklausas į vietoje veikiančius DI įrankių procesus, vadinamus įterptosiomis paslaugomis. Pateikiamos penkios: 9Router, CLIProxyAPI, Bifrost, Mux ir Dario.
Architektūros sluoksniai:
- Naudotojo sąsaja (
/dashboard/providers/services) — dviejų skirtukų puslapis su gyvavimo ciklo valdikliais, tiesioginiu žurnalų srautiniu perdavimu, API raktų valdymu ir (9Router atveju) įterptąja savąja naudotojo sąsaja, pasiekiama per vidinį atvirkštinį tarpinį serverį. - API (
/api/services/{name}/*) — 11 galinių taškų, skirtų 9Router, 10 — CLIProxyAPI, po 8 — Bifrost / Mux / Dario; visi jie klasifikuojami kaip LOCAL_ONLY (griežta taisyklė #17). BendrasGET /api/services/[name]/logsSSE galinis taškas aptarnauja abi paslaugas. - Prižiūrėtojas (
src/lib/services/) — bendrojiServiceSupervisorklasė apgaubiachild_process.spawn, naudoja 5 MB žiedinį buferį SSE žurnalų srautiniam perdavimui, vykdo sveikatos patikros ciklą, turi atominį operacijų užraktą ir atlieka sklandų išjungimą SIGTERM→SIGKILL būdu.bootstrap.tsproceso paleidimo metu susieja visas sukonfigūruotas paslaugas. - Teikėjas / vykdytojas (
open-sse/executors/ninerouter.ts) — 9Router pateikiamas kaip tikras teikėjas. Modeliams pridedamas priešdėlis9router/{sub}/{model}, o jie kas 5 min. sinchronizuojami iš 9Router galinio taško/v1/models.
Išsamiau: docs/frameworks/EMBEDDED-SERVICES.md
Pagrindės posistemės (v3.8.0)
A. Auto Combo variklis
Auto Combo užklausos metu dinamiškai įvertina ir parenka nukreipimo tikslus, užuot
pasikliovęs statiniu derinio aprašu. Jis užtikrina auto/* modelių priešdėlių šeimos veikimą.
- Variklio pradinis taškas:
open-sse/services/autoCombo/(autoComboEngine.ts,scoringEngine.ts,virtualFactory.ts,modePacks.ts) - Sprendiklis:
src/domain/comboResolver.ts(automatinisauto/priešdėlio aptikimas) - Valdymo skydelis:
/dashboard/auto-combo - Telemetrija:
auto_combo_decisionsSQLite lentelė
Pagrindinės galimybės:
- 19 nukreipimo strategijų (prioritetinė, svertinė, pirmiausia užpildanti, ciklinė, P2C, atsitiktinė,
mažiausiai naudota, optimizuota pagal kainą, atsižvelgianti į atkūrimą, atkūrimo lango, laisvos talpos, griežtai atsitiktinė,
auto, lkgp, optimizuota pagal kontekstą, konteksto perdavimo, fusion, taip pat atsarginis kelias) —
auto yra pagrindinė v3.8.0 naujovė;
fusion(išskleidimas į skydelį + vertintojo sintezė,open-sse/services/fusion.ts) yra nauja v3.8.36 versijoje. - 16 veiksnių vertinimas: kvota, būklė, atvirkštinė kaina, atvirkštinė delsa, tinkamumas užduočiai ir
dar dešimt veiksnių. Pagrindinė veiksnių ir jų numatytųjų svorių lentelė pateikiama
docs/routing/AUTO-COMBO.md— pakartojus ją čia, atsirastų dar viena vieta, kurioje ji galėtų pasenti. - Virtualioji gamykla sukuria laikinus derinius, kai nėra atitinkamo pavadinto derinio, kandidatus imdama iš tinkamai veikiančių aktyvių teikėjų ryšių.
- Automatiniai priešdėliai:
auto/coding,auto/cheap,auto/fast,auto/offline,auto/smart,auto/lkgp— kiekvienam naudojamas suderintas svorių profilis. - 6 režimų paketai:
ship-fast,cost-saver,quality-first,offline-friendly,reliability-firstirchaos-mode— iš anksto nustatytos svorių konfigūracijos, kurias galima iškviesti iš valdymo skydelio. (Jų nereikėtų painioti su anksčiau nurodytaisauto/*priešdėliais, kurie yra užklausos metu taikomi variantai.)
Išsami algoritmo informacija (veiksnių formulės, svorių derinimas) pateikiama
docs/routing/AUTO-COMBO.md.
B. Debesijos agentai
Cloud Agents paslepia trečiųjų šalių priglobtas programinio kodo agentų platformas (Codex Cloud, Devin, Jules) už vienodos, DB pagrįstos užduočių gyvavimo ciklo sąsajos. Visiems užduočių kūrimo ir tikrinimo galiniams taškams reikalingas valdymo autentifikavimas.
- Modulio šaknis:
src/lib/cloudAgent/(baseAgent.ts,registry.ts,api.ts,types.ts,db.ts, taip pat kiekvieno agento pakatalogiai katalogeagents/) - Kiekvieno agento realizacijos:
agents/codex/,agents/devin/,agents/jules/ - Viešieji galiniai taškai:
/api/v1/agents/tasks/*(sąrašas / kūrimas / gavimas / atšaukimas) - Valdymo galiniai taškai:
/api/cloud/*(parengimas, būsena, paketinis apdorojimas) - Valdymo skydelis:
/dashboard/cloud-agents - Saugykla:
cloud_agent_taskslentelė
Išsami kiekvieno agento parengimo ir OAuth informacija pateikiama
docs/frameworks/CLOUD_AGENT.md.
C. Apsaugos priemonės
Apsaugos priemonių modulis yra dinamiškai perkraunamas tarpinės programinės įrangos sluoksnis, tikrinantis užklausas ir atsakymus dėl PII, raginimų injekcijos ir nesaugaus vaizdinio turinio. Aptikus pažeidimą, užklausa nedelsiant nutraukiama pateikiant HTTP 503 ir struktūrinį klaidos kodą, todėl paskesni iškvietėjai gali bandyti dar kartą arba pasirinkti kitą vykdymo šaką.
- Modulio šaknis:
src/lib/guardrails/(base.ts,registry.ts,piiMasker.ts,promptInjection.ts,visionBridge.ts,visionBridgeHelpers.ts) - Dinaminis perkrovimas: registras stebi konfigūracijos pakeitimus ir vietoje iš naujo sukuria grandinę
- Integravimo vietos: pokalbių apdorojimo programos pradžia, vaizdų generavimo apdorojimo programa, atsakymų valymo priemonė
- HTTP sutartis: pažeidimai pateikiami kaip
503, kurerror.code = "GUARDRAIL_VIOLATION"
Taisyklių rinkinių kūrimas ir slenksčių derinimas aprašyti
docs/security/GUARDRAILS.md.
D. Domeno sluoksnis
src/domain/ vardų sritis centralizuoja politikos sprendimus, kad maršrutų apdorojimo programoms
nereikėtų pačioms sudaryti blokavimo, biudžeto ir atsarginio vykdymo logikos.
- Politikos variklis:
src/domain/policyEngine.ts— vienintelis pradinis taškas, skirtas vertinimui prieš vykdymą (blokavimo → biudžeto → atsarginio vykdymo tvarka) - Kainos taisyklės:
src/domain/costRules.ts - Atsarginio vykdymo politika:
src/domain/fallbackPolicy.ts - Blokavimo politika:
src/domain/lockoutPolicy.ts - Žymomis pagrįstas nukreipimas:
src/domain/tagRouter.ts - Derinių sprendiklis:
src/domain/comboResolver.ts— derinių pavadinimus, auto/* priešdėlius ir pakaitos simboliais nurodytus modelių tikslus paverčia konkrečiais vykdymo planais - Ryšių ir modelių taisyklių jungtuvas:
src/domain/connectionModelRules.ts - Modelių prieinamumo momentinės kopijos:
src/domain/modelAvailability.ts - Teikėjų galiojimo pabaigos stebėjimas:
src/domain/providerExpiration.ts - Kvotų talpykla:
src/domain/quotaCache.ts - Degradacijos būsena:
src/domain/degradation.ts - Konfigūracijos auditas:
src/domain/configAudit.ts - OmniRoute atsakymų metaduomenų kūrimo priemonė:
src/domain/omnirouteResponseMeta.ts - Vertinimo posistemė:
src/domain/assessment/— periodinės vertinimo užduotys
E. Autorizavimo konvejeris
Autorizavimo konvejeris klasifikuoja kiekvieną gaunamą užklausą ir prieš ją perduodamas taiko atitinkamą politikų grandinę.
- Konvejerio pradinis taškas:
src/server/authz/pipeline.ts - Užklausų klasifikatorius:
src/server/authz/classify.ts— atskiria viešuosius suderinamumo maršrutus nuo valdymo maršrutų - Viešųjų maršrutų sąrašas:
src/shared/constants/publicApiRoutes.ts - Politikos:
src/server/authz/policies/— komponuojami predikatai (requireApiKey,requireManagement,requireFreshAuthir kt.) - Antraščių pagalbinės priemonės:
src/server/authz/headers.ts - Patvirtinimo pagalbinė priemonė:
src/server/authz/assertAuth.ts - Užklausos kontekstas:
src/server/authz/context.ts
Viešieji ir valdymo maršrutai yra griežtai atskirti: agentų / atvėsimo API ir teikėjų pakeitimams reikalingas valdymo autentifikavimas (jei jo nėra, pateikiamas HTTP 401).
Visos maršrutų klasifikavimo taisyklės pateikiamos
docs/architecture/AUTHZ_GUIDE.md.
F. Darbo eigos FSM ir į užduotis atsižvelgiantis maršrutizatorius
Baigtiniu būsenų automatu valdomas maršrutizatorius, veikiantis virš derinių pasirinkimo sluoksnio ir nukreipiantis srautą pagal aptiktą darbo eigos etapą (planavimą, vykdymą, peržiūrą) bei foninių užduočių atitiktį.
- Darbo eigos FSM:
open-sse/services/workflowFSM.ts - Į užduotis atsižvelgiantis maršrutizatorius:
open-sse/services/taskAwareRouter.ts - Foninių užduočių aptikimo priemonė:
open-sse/services/backgroundTaskDetector.ts - Ketinimų klasifikatorius:
open-sse/services/intentClassifier.ts
FSM perėjimai perduodami Auto Combo vertinimui, pirmenybę teikiant pigesniems modeliams, kai vykdomos foninės / automatizavimo užduotys, ir galingesniems modeliams, kai atliekami interaktyvūs planavimo / peržiūros etapai.
G. Konkretiems teikėjams skirtas atsparumas
Keli teikėjai pateikiami su specialiais atsparumo ir maskavimo moduliais, kurie naudojasi visuotiniais grandinės pertraukiklio / ryšio atvėsimo / modelio blokavimo sluoksniais:
- Antigravity 429 variklis:
open-sse/services/antigravity429Engine.ts(keičia tapatybę, išvalo atsakymo antraštes, valdo kreditų / versijų stebėjimą naudodamasantigravityCredits.ts,antigravityHeaderScrub.ts,antigravityHeaders.ts,antigravityIdentity.ts,antigravityVersion.ts) - ModelScope kvotų politika:
open-sse/services/modelscopePolicy.ts - Claude Code CCH (suderinamumo kanalo rankos paspaudimas):
open-sse/services/claudeCodeCCH.ts, taip patclaudeCodeCompatible.ts,claudeCodeConstraints.ts,claudeCodeExtraRemap.ts,claudeCodeToolRemapper.ts - Claude Code kontrolinio atspaudo formavimas:
open-sse/services/claudeCodeFingerprint.ts - Claude Code maskavimas:
open-sse/services/claudeCodeObfuscation.ts
Visas maskavimo vadovas ir eksploatavimo rekomendacijos pateikiami
docs/security/STEALTH_GUIDE.md.
H. Žiniatinklio atgaliniai iškvietimai, samprotavimo talpykla, skaitymo talpykla
- Žiniatinklio atgaliniai iškvietimai — siunčiamasis teikėjų / paskyrų / užduočių įvykių perdavimas.
- Perdavimo programa:
src/lib/webhookDispatcher.ts - Saugykla:
webhooksSQLite lentelė (persrc/lib/db/webhooks.ts) - Valdymo skydelis:
/dashboard/webhooks(prenumeratos, slaptosios reikšmės, pakartotinių bandymų istorija) - Įvykių taksonomija ir pakartotinių bandymų semantika aprašytos
docs/frameworks/WEBHOOKS.md.
- Perdavimo programa:
- Samprotavimo talpykla — pakartotinai atkuriami samprotavimo blokai, skirti teikėjams, kurie generuoja
mąstymo leksemas (Claude, GLMT ir kt.), kad per nuoseklius etapus būtų galima išvengti pakartotinio samprotavimo.
- DB sluoksnis:
src/lib/db/reasoningCache.ts - Paslaugos sluoksnis:
open-sse/services/reasoningCache.ts - Atkūrimo semantika aprašyta
docs/routing/REASONING_REPLAY.md.
- DB sluoksnis:
- Skaitymo talpykla — trumpalaikė atsakymų talpykla, indeksuojama pagal parašą ir naudojama
vienodoms pakartotinėms užklausoms iš sugedusių aukštesnio lygio SDK sujungti.
- DB sluoksnis:
src/lib/db/readCache.ts - Statistikos galinis taškas:
GET /api/cache/stats, valdymo skydelis pasiekiamas adresu/dashboard/cache
- DB sluoksnis:
3) Išliekamumo sluoksnis
Pirminė būsenos DB (SQLite):
- Pagrindinė infrastruktūra:
src/lib/db/core.ts(better-sqlite3, migracijos, WAL) - Prieiga prie DB: tiesiogiai importuokite konkrečius
src/lib/db/*modulius (senasislocalDb.tsagregavimo modulis buvo pašalintas) - failas:
${DATA_DIR}/storage.sqlite(arba$XDG_CONFIG_HOME/omniroute/storage.sqlite, kai nustatyta, kitu atveju~/.omniroute/storage.sqlite) - esybės (lentelės + KV vardų sritys): providerConnections, providerNodes, modelAliases, combos, apiKeys, settings, pricing, customModels, proxyConfig, ipFilter, thinkingBudget, systemPrompt
Naudojimo duomenų išliekamumas:
- fasadas:
src/lib/usageDb.ts(į modulius išskaidytasrc/lib/usage/*) - SQLite lentelės faile
storage.sqlite:usage_history,call_logs,proxy_logs - pasirenkami failų artefaktai išlieka suderinamumui / derinimui (
${DATA_DIR}/log.txt,${DATA_DIR}/call_logs/,<repo>/logs/...) - paleidimo migracijos perkelia senus JSON failus į SQLite, jei jie yra
Domeno būsenos DB (SQLite):
src/lib/db/domainState.ts— domeno būsenos CRUD operacijos- Lentelės (sukuriamos
src/lib/db/core.ts):domain_fallback_chains,domain_budgets,domain_cost_history,domain_lockout_state,domain_circuit_breakers - Tiesioginio įrašymo podėlio šablonas: vykdymo metu atmintyje esantys Maps yra pagrindinis duomenų šaltinis; pakeitimai sinchroniškai įrašomi į SQLite; po šaltojo paleidimo būsena atkuriama iš DB
4) Autentifikavimo ir saugumo sritys
- Valdymo skydelio autentifikavimas slapukais:
src/proxy.ts,src/app/api/auth/login/route.ts - API raktų generavimas / tikrinimas:
src/shared/utils/apiKey.ts - Teikėjų paslaptys išsaugomos
providerConnectionsįrašuose - Išeinančiojo tarpinio serverio palaikymas per
open-sse/utils/proxyFetch.ts(aplinkos kintamieji) iropen-sse/utils/networkProxy.ts(konfigūruojamas kiekvienam teikėjui arba visuotinai) - SSRF / išeinančiųjų URL apsauga:
src/shared/network/outboundUrlGuard.ts— blokuoja privačius, grįžtamojo ryšio ir vietinio ryšio adresų diapazonus visoms teikėjų užklausoms - Vykdymo aplinkos tikrinimas:
src/lib/env/runtimeEnv.ts— visų aplinkos kintamųjų Zod schema, kurios klaidos / įspėjimai pateikiami paleidžiant - Sinchronizavimo prieigos raktai:
src/lib/db/syncTokens.ts— apribotos apimties prieigos raktai, skirti konfigūracijos paketų atsisiuntimo galiniams taškams; saugomi SQLite lentelėjesync_tokens(migracija024_create_sync_tokens.sql) - WebSocket ryšio užmezgimo autentifikavimas:
src/lib/ws/handshake.ts— tikrina WS protokolo naujovinimo užklausas naudodamas API raktą arba seanso slapuką
5) Sinchronizavimas su debesija
- Planuoklio inicijavimas:
src/lib/initCloudSync.ts,src/shared/services/initializeCloudSync.ts,src/shared/services/modelSyncScheduler.ts - Periodinė užduotis:
src/shared/services/cloudSyncScheduler.ts - Periodinė užduotis:
src/shared/services/modelSyncScheduler.ts - Valdymo maršrutas:
src/app/api/sync/cloud/route.ts
Užklausos gyvavimo ciklas (/v1/chat/completions)
sequenceDiagram
autonumber
participant Client as CLI/SDK klientas
participant Route as /api/v1/chat/completions
participant Chat as src/sse/handlers/chat
participant Core as open-sse/handlers/chatCore
participant Model as Modelio sprendiklis
participant Auth as Kredencialų parinkiklis
participant Exec as Teikėjo vykdyklė
participant Prov as Aukštesniojo lygmens teikėjas
participant Stream as Srauto vertiklis
participant Usage as usageDb
Client->>Route: POST /v1/chat/completions
Route->>Chat: handleChat(request)
Chat->>Model: analizuoti / išspręsti modelį arba derinį
alt Kombinuotasis modelis
Chat->>Chat: pereiti per derinio modelius (handleComboChat)
end
Chat->>Auth: getProviderCredentials(provider)
Auth-->>Chat: aktyvi paskyra + prieigos raktai / API raktas
Chat->>Core: handleChatCore(body, modelInfo, credentials)
Core->>Core: aptikti šaltinio formatą
Core->>Core: išversti užklausą į tikslinį formatą
Core->>Exec: execute(provider, transformedBody)
Exec->>Prov: aukštesniojo lygmens API iškvietimas
Prov-->>Exec: SSE/JSON atsakymas
Exec-->>Core: atsakymas + metaduomenys
alt 401/403
Core->>Exec: refreshCredentials()
Exec-->>Core: atnaujinti prieigos raktai
Core->>Exec: pakartoti užklausą
end
Core->>Stream: išversti / normalizuoti srautą į kliento formatą
Stream-->>Client: SSE fragmentai / JSON atsakymas
Stream->>Usage: išgauti naudojimo duomenis + išsaugoti istoriją / žurnalą
Kombinacijos ir atsarginės paskyros srautas
flowchart TD
A[Gaunama modelio eilutė] --> B{Ar tai kombinacijos pavadinimas?}
B -- Taip --> C[Įkelti kombinacijos modelių seką]
B -- Ne --> D[Atskiro modelio kelias]
C --> E[Bandyti modelį N]
E --> F[Nustatyti teikėją / modelį]
D --> F
F --> G[Pasirinkti paskyros prisijungimo duomenis]
G --> H{Ar yra prisijungimo duomenų?}
H -- Ne --> I[Grąžinti, kad teikėjas nepasiekiamas]
H -- Taip --> J[Vykdyti užklausą]
J --> K{Pavyko?}
K -- Taip --> L[Grąžinti atsakymą]
K -- Ne --> M{Ar klaidos atveju galima naudoti atsarginį variantą?}
M -- Ne --> N[Grąžinti klaidą]
M -- Taip --> O[Pažymėti paskyrą kaip laikinai nepasiekiamą]
O --> P{Ar yra kita šio teikėjo paskyra?}
P -- Taip --> G
P -- Ne --> Q{Ar kombinacijoje yra kitas modelis?}
Q -- Taip --> E
Q -- Ne --> R[Grąžinti, kad visi nepasiekiami]
Atsarginio varianto pasirinkimą valdo open-sse/services/accountFallback.ts, naudodamas būsenos kodus ir klaidų pranešimų euristikas. Kombinacijų maršruto parinkimas prideda dar vieną apsaugą: su teikėju susijusios 400 klaidos, pvz., pirminio šaltinio turinio blokavimo ir vaidmens tikrinimo klaidos, laikomos konkretaus modelio klaidomis, todėl vėlesni kombinacijos tikslai vis tiek gali būti vykdomi.
OAuth pradinės sąrankos ir prieigos rakto atnaujinimo gyvavimo ciklas
sequenceDiagram
autonumber
participant UI as Valdymo skydelio sąsaja
participant OAuth as /api/oauth/[provider]/[action]
participant ProvAuth as Teikėjo autentifikavimo serveris
participant DB as localDb
participant Test as /api/providers/[id]/test
participant Exec as Teikėjo vykdytojas
UI->>OAuth: GET autorizavimas arba įrenginio kodas
OAuth->>ProvAuth: sukurti autentifikavimo / įrenginio srautą
ProvAuth-->>OAuth: autentifikavimo URL arba įrenginio kodo naudingoji apkrova
OAuth-->>UI: srauto duomenys
UI->>OAuth: POST apsikeitimas arba apklausa
OAuth->>ProvAuth: prieigos rakto apsikeitimas / apklausa
ProvAuth-->>OAuth: prieigos / atnaujinimo raktai
OAuth->>DB: createProviderConnection(OAuth duomenys)
OAuth-->>UI: sėkmė + ryšio id
UI->>Test: POST /api/providers/[id]/test
Test->>Exec: patikrinti prisijungimo duomenis / pasirinktinai atnaujinti
Exec-->>Test: galiojanti arba atnaujinta prieigos rakto informacija
Test->>DB: atnaujinti būseną / prieigos raktus / klaidas
Test-->>UI: tikrinimo rezultatas
Atnaujinimą tiesioginio srauto metu vykdo open-sse/handlers/chatCore.ts, naudodamas vykdytojo refreshCredentials().
Sinchronizavimo su debesija gyvavimo ciklas (įjungimas / sinchronizavimas / išjungimas)
sequenceDiagram
autonumber
participant UI as Galinio taško puslapio sąsaja
participant Sync as /api/sync/cloud
participant DB as localDb
participant Cloud as Išorinis sinchronizavimas su debesija
participant Claude as ~/.claude/settings.json
UI->>Sync: POST action=enable
Sync->>DB: nustatyti cloudEnabled=true
Sync->>DB: užtikrinti, kad API raktas egzistuoja
Sync->>Cloud: POST /sync/{machineId} (providers/aliases/combos/keys)
Cloud-->>Sync: sinchronizavimo rezultatas
Sync->>Cloud: GET /{machineId}/v1/verify
Sync-->>UI: įjungta + patvirtinimo būsena
UI->>Sync: POST action=sync
Sync->>Cloud: POST /sync/{machineId}
Cloud-->>Sync: nuotoliniai duomenys
Sync->>DB: atnaujinti naujesnius vietinius prieigos raktus / būseną
Sync-->>UI: sinchronizuota
UI->>Sync: POST action=disable
Sync->>DB: nustatyti cloudEnabled=false
Sync->>Cloud: DELETE /sync/{machineId}
Sync->>Claude: grąžinti ANTHROPIC_BASE_URL į vietinį adresą (jei reikia)
Sync-->>UI: išjungta
Periodinį sinchronizavimą paleidžia CloudSyncScheduler, kai debesija yra įjungta.
Duomenų modelis ir saugyklos schema
erDiagram
SETTINGS ||--o{ PROVIDER_CONNECTION : controls
PROVIDER_NODE ||--o{ PROVIDER_CONNECTION : backs_compatible_provider
PROVIDER_CONNECTION ||--o{ USAGE_ENTRY : emits_usage
SETTINGS {
boolean cloudEnabled
number stickyRoundRobinLimit
boolean requireLogin
string password_hash
string fallbackStrategy
json rateLimitDefaults
json providerProfiles
}
PROVIDER_CONNECTION {
string id
string provider
string authType
string name
number priority
boolean isActive
string apiKey
string accessToken
string refreshToken
string expiresAt
string testStatus
string lastError
string rateLimitedUntil
json providerSpecificData
}
PROVIDER_NODE {
string id
string type
string name
string prefix
string apiType
string baseUrl
}
MODEL_ALIAS {
string alias
string targetModel
}
COMBO {
string id
string name
string[] models
}
API_KEY {
string id
string name
string key
string machineId
}
USAGE_ENTRY {
string provider
string model
number prompt_tokens
number completion_tokens
string connectionId
string timestamp
}
CUSTOM_MODEL {
string id
string name
string providerId
}
PROXY_CONFIG {
string global
json providers
}
IP_FILTER {
string mode
string[] allowlist
string[] blocklist
}
THINKING_BUDGET {
string mode
number customBudget
string effortLevel
}
SYSTEM_PROMPT {
boolean enabled
string prompt
string position
}
Fizinės saugyklos failai:
- pagrindinė vykdymo aplinkos DB:
${DATA_DIR}/storage.sqlite - užklausų žurnalo eilutės:
${DATA_DIR}/log.txt(suderinamumo / derinimo artefaktas) - struktūrizuoti iškvietimų naudingųjų duomenų archyvai:
${DATA_DIR}/call_logs/ - pasirenkamos vertiklio / užklausų derinimo sesijos:
<repo>/logs/...
Diegimo topologija
flowchart LR
subgraph LocalHost[Developer Host]
CLI[CLI Tools]
Browser[Dashboard Browser]
end
subgraph ContainerOrProcess[OmniRoute Runtime]
Next[Next.js Server\nPORT=20128]
Core[SSE Core + Executors]
MainDB[(storage.sqlite)]
UsageDB[(usage tables + log artifacts)]
end
subgraph External[External Services]
Providers[AI Providers]
SyncCloud[Cloud Sync Service]
end
CLI --> Next
Browser --> Next
Next --> Core
Next --> MainDB
Core --> MainDB
Core --> UsageDB
Core --> Providers
Next --> SyncCloud
Modulių atvaizdavimas (svarbus priimant sprendimus)
Maršrutų ir API moduliai
src/app/api/v1/*,src/app/api/v1beta/*: suderinamumo APIsrc/app/api/v1/providers/[provider]/*: kiekvienam teikėjui skirti maršrutai (pokalbiai, vektoriniai įterpiniai, vaizdai)src/app/api/providers*: teikėjų CRUD, tikrinimas ir testavimassrc/app/api/provider-nodes*: tinkintų suderinamų mazgų valdymassrc/app/api/provider-models: tinkintų modelių valdymas (CRUD)src/app/api/models/route.ts: modelių katalogo API (alternatyvūs pavadinimai + tinkinti modeliai)src/app/api/oauth/*: OAuth / įrenginio kodo srautaisrc/app/api/keys*: vietinių API raktų gyvavimo ciklassrc/app/api/models/alias: alternatyvių pavadinimų valdymassrc/app/api/combos*: atsarginių kombinacijų valdymassrc/app/api/pricing: kainodaros perrašymai sąnaudoms apskaičiuotisrc/app/api/settings/proxy: įgaliotojo serverio konfigūracija (GET/PUT/DELETE)src/app/api/settings/proxy/test: išeinančio ryšio per įgaliotąjį serverį patikra (POST)src/app/api/usage/*: naudojimo ir žurnalų APIsrc/app/api/sync/*+src/app/api/cloud/*: sinchronizavimas su debesija ir debesijai skirti pagalbiniai komponentaisrc/app/api/cli-tools/*: vietiniai CLI konfigūracijos rašymo ir tikrinimo įrankiaisrc/app/api/settings/ip-filter: leidžiamų / blokuojamų IP adresų sąrašas (GET/PUT)src/app/api/settings/thinking-budget: mąstymo žetonų biudžeto konfigūracija (GET/PUT)src/app/api/settings/system-prompt: visuotinis sistemos raginimas (GET/PUT)src/app/api/settings/compression: visuotiniai glaudinimo nustatymai (GET/PUT)src/app/api/compression/*: glaudinimo peržiūra, taisyklių metaduomenys ir kalbų paketaisrc/app/api/context/caveman/config: Caveman nustatymų alternatyvus pavadinimas (GET/PUT)src/app/api/context/rtk/*: RTK konfigūracija, filtrų katalogas, testavimo galinis taškas ir neapdorotos išvesties atkūrimassrc/app/api/context/combos*: glaudinimo kombinacijų CRUD ir priskyrimas maršruto parinkimo kombinacijomssrc/app/api/context/analytics: alternatyvus glaudinimo analizės pavadinimassrc/app/api/sessions: aktyvių sesijų sąrašas (GET)src/app/api/rate-limits: kiekvienos paskyros užklausų dažnio apribojimo būsena (GET)src/app/api/sync/tokens: sinchronizavimo žetonų CRUD (GET/POST)src/app/api/sync/tokens/[id]: sinchronizavimo žetono gavimas / ištrynimas (GET/DELETE)src/app/api/sync/bundle: konfigūracijos paketo atsisiuntimas (GET, versijavimas naudojant ETag)src/app/api/v1/ws: WebSocket protokolo naujinimo apdorojimo priemonė, skirta su OpenAI suderinamiems WS klientams
Maršruto parinkimo ir vykdymo branduolys
src/sse/handlers/chat.ts: užklausos analizavimas, kombinacijų apdorojimas, paskyros pasirinkimo ciklasopen-sse/handlers/chatCore.ts: vertimas, vykdytojo iškvietimas, pakartotinių bandymų / atnaujinimo apdorojimas, srauto nustatymasopen-sse/executors/*: konkretiems teikėjams pritaikyta tinklo ir formato elgsena
Vertiklių registras ir formatų keitikliai
open-sse/translator/index.ts: vertiklių registras ir jų veikimo koordinavimas- Užklausų vertikliai:
open-sse/translator/request/*(9 moduliai —antigravity-to-openai,claude-to-gemini,claude-to-openai,gemini-to-openai,openai-responses,openai-to-claude,openai-to-cursor,openai-to-gemini,openai-to-kiro) - Atsakymų vertikliai:
open-sse/translator/response/*(11 modulių —claude-to-openai,cursor-to-openai,gemini-to-claude,gemini-to-openai,kiro-to-openai,openai-responses,openai-to-antigravity,openai-to-claude,openai-to-gemini,openai-to-gemini-sse,responsesToolItem) - Pagalbiniai komponentai:
open-sse/translator/helpers/*(12 modulių —claudeHelper,geminiHelper,geminiToolsSanitizer,jsonUtil,markdownBoundary,maxTokensHelper,openaiHelper,responsesApiHelper,schemaCoercion,strictSystemHoist,toolCallHelper,toolCallShim) - Formatų konstantos:
open-sse/translator/formats.ts - Paleidimas ir registras:
open-sse/translator/bootstrap.ts,open-sse/translator/registry.ts - Vaizdų formatų pagalbiniai komponentai:
open-sse/translator/image/
Išsaugojimas
src/lib/db/*: nuolatinė konfigūracija / būsena ir domeno duomenų išsaugojimas SQLite duomenų bazėjesrc/lib/db/*: konkrečius modulius importuokite tiesiogiai — bendras eksportavimo modulis nenaudojamas (senasislocalDb.tspakartotinio eksportavimo sluoksnis buvo pašalintas)src/lib/usageDb.ts: naudojimo istorijos / iškvietimų žurnalų sąsaja, veikianti virš SQLite lentelių
Teikėjų vykdytojų aprėptis (strategijos šablonas)
Kiekvienas teikėjas turi specializuotą vykdytoją, išplečiantį BaseExecutor (faile open-sse/executors/base.ts), kuris suteikia URL kūrimo, antraščių sudarymo, pakartotinių bandymų su eksponentiniu delsos didinimu, prisijungimo duomenų atnaujinimo kablių ir execute() orkestravimo metodo funkcijas.
| Vykdytojas | Teikėjas (-ai) | Specialus apdorojimas |
|---|---|---|
DefaultExecutor |
OpenAI, Claude, Gemini, Qwen, OpenRouter, GLM, Kimi, MiniMax, DeepSeek, Groq, xAI, Mistral, Perplexity, Together, Fireworks, Cerebras, Cohere, NVIDIA ir kt. | Dinaminė kiekvieno teikėjo URL ir antraščių konfigūracija |
AntigravityExecutor |
Google Antigravity | Pasirinktiniai projekto ir sesijos ID, Retry-After analizė, 429 maskavimas |
AzureOpenAIExecutor |
Azure OpenAI | Diegimu pagrįstas maršruto parinkimas, privalomas api-version užklausos parametras |
BlackboxWebExecutor |
Blackbox AI (žiniatinklio režimas) | Žiniatinklio sesijos atvirkštinė inžinerija su TLS piršto atspaudo emuliavimu |
ClaudeIdentityExecutor |
Claude.ai (CCH kelias) | Apribojimų ir įrankių persiejimo konvejeriai, piršto atspaudo formavimas |
CliProxyApiExecutor |
Su CLIProxyAPI suderinami teikėjai | Pasirinktinis autentifikavimas ir protokolo apdorojimas |
CloudflareAiExecutor |
Cloudflare Workers AI | Paskyros ID įterpimas, Neurons pagrįstas naudojimo stebėjimas |
CodexExecutor |
OpenAI Codex | Įterpia sistemos instrukcijas, priverstinai nustato samprotavimo intensyvumą |
ChatGptWebCodexExecutor |
ChatGPT Web (Codex) | Naršyklės sesijos Responses API tiltas su gijos ir replikos fiksavimu |
CommandCodeExecutor |
Command Code | OAuth ir kiekvienai sesijai taikoma antraščių rotacija |
CursorExecutor |
Cursor IDE | ConnectRPC protokolas, Protobuf kodavimas, užklausų pasirašymas kontroline suma |
DevinCliExecutor |
Devin CLI | Devin užduočių gyvavimo ciklo susiejimas per debesies agento modulį |
GithubExecutor |
GitHub Copilot | Copilot prieigos rakto atnaujinimas, VSCode imituojančios antraštės |
GitlabExecutor |
GitLab Duo | GitLab OAuth ir projekto aprėptimi pagrįstas maršruto parinkimas |
GlmExecutor |
Z.AI GLM (įskaitant glmt išankstinę parinktį) |
Atsižvelgia į samprotavimo biudžetą, GLMT išankstinės parinkties konstantos |
GrokWebExecutor |
xAI Grok žiniatinklis | Žiniatinklio sesijos atvirkštinė inžinerija, režimo pasirinkimas (mąstymo / standartinis) |
KieExecutor |
KIE | Pasirinktinis prieigos raktų išdavimas naudojant rotuojamus sesijos inkarus |
KiroExecutor |
AWS CodeWhisperer/Kiro | AWS EventStream dvejetainio formato → SSE konvertavimas |
MuseSparkWebExecutor |
Muse Spark (žiniatinklis) | Žiniatinklio sesijos atvirkštinė inžinerija su vaizdų ir pranešimų susiejimu |
NlpCloudExecutor |
NLP Cloud | Teikėjui būdinga užklausos turinio struktūra |
OpenCodeExecutor |
OpenCode | Su AI SDK suderinama teikėjo konfigūracija |
PerplexityWebExecutor |
Perplexity žiniatinklis | Žiniatinklio sesijos atvirkštinė inžinerija pokalbiui tęsti |
PetalsExecutor |
Petals paskirstytasis išvedimas | Decentralizuotas spiečiaus maršruto parinkimas |
PollinationsExecutor |
Pollinations AI | API raktas nereikalingas, užklausų dažnis ribojamas |
QoderExecutor |
Qoder AI | PAT ir OAuth palaikymas, nemokama kelių modelių pakopa |
VertexExecutor |
Google Vertex AI | Paslaugos paskyros autentifikavimas, regionais pagrįsti galiniai taškai |
DevinDesktopExecutor |
Devin Desktop | Importuotas API raktas ir Connect-protobuf pokalbių srautinis perdavimas |
Visi kiti teikėjai (įskaitant pasirinktinius suderinamus mazgus) naudoja DefaultExecutor.
Teikėjų suderinamumo matrica
Pastaba: Toliau pateikta matrica yra tipinė 351 „OmniRoute v3.8.0“ užregistruoto teikėjo imtis. Kanoninį ir nuolat atnaujinamą sąrašą rasite
docs/reference/PROVIDER_REFERENCE.md(sugeneruotas automatiškai) arba pirminiame šaltinyjesrc/shared/constants/providers.ts(įkeliant tikrinamas naudojant „Zod“).
| Teikėjas | Formatas | Autentifikavimas | Srautinis režimas | Ne srautinis | Rakto atnaujinimas | Naudojimo API |
|---|---|---|---|---|---|---|
| Claude | claude | API raktas / OAuth | ✅ | ✅ | ✅ | ⚠️ Tik administratoriams |
| Gemini | gemini | API raktas / OAuth | ✅ | ✅ | ✅ | ⚠️ Debesijos konsolė |
| Antigravity | antigravity | OAuth | ✅ | ✅ | ✅ | ✅ Visos kvotos API |
| OpenAI | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Codex | openai-responses | OAuth | ✅ privalomas | ❌ | ✅ | ✅ Spartos limitai |
| ChatGPT Web (Codex) | openai-responses | Naršyklės seansas | ✅ privalomas | ❌ | ❌ | ❌ |
| GitHub Copilot | openai | OAuth + Copilot prieigos raktas | ✅ | ✅ | ✅ | ✅ Kvotos momentinės kopijos |
| Cursor | cursor | Pasirinktinė kontrolinė suma | ✅ | ✅ | ❌ | ❌ |
| Kiro | kiro | AWS SSO OIDC | ✅ (EventStream) | ❌ | ✅ | ✅ Naudojimo limitai |
| Qoder | openai | OAuth / PAT | ✅ | ✅ | ✅ | ⚠️ Kiekvienai užklausai |
| Kilo Code | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| Cline | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| Kimi Coding | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| OpenRouter | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| GLM/Kimi/MiniMax | claude | API raktas | ✅ | ✅ | ❌ | ❌ |
| DeepSeek | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Groq | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| xAI (Grok) | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Mistral | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Perplexity | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Together AI | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Fireworks AI | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Cerebras | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Cohere | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| NVIDIA NIM | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Cloudflare AI | openai | API prieigos raktas + paskyros ID | ✅ | ✅ | ❌ | ❌ |
| Pollinations | openai | Nėra (rakto nereikia) | ✅ | ✅ | ❌ | ❌ |
| Scaleway AI | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| LongCat | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Ollama Cloud | openai | API raktas (pasirenkamas) | ✅ | ✅ | ❌ | ❌ |
| HuggingFace | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Nebius | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| SiliconFlow | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Hyperbolic | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Vertex AI | gemini | Paslaugos paskyra | ✅ | ✅ | ✅ | ⚠️ Debesijos konsolė |
| Command Code | openai | OAuth | ✅ | ✅ | ✅ | ⚠️ Kiekvienai užklausai |
| Z.AI / GLM | openai | API raktas / OAuth | ✅ | ✅ | ❌ | ❌ |
| GLMT (išankstinė nuostata) | claude | API raktas | ✅ | ✅ | ❌ | ⚠️ Kiekvienai užklausai |
| Kimi Coding | openai | OAuth / API raktas | ✅ | ✅ | ✅ | ❌ |
| KIE | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Devin Desktop | openai | Importuotas API raktas | ✅ (Connect→SSE) | ✅ | ❌ | ⚠️ Kiekvienai užklausai |
| GitLab Duo | openai | OAuth (GitLab) | ✅ | ✅ | ✅ | ❌ |
| Devin CLI | openai | Vietinis CLI prisijungimas | ✅ | ✅ | ❌ | ✅ Užduočių API |
| Codex Cloud | openai-responses | OAuth | ✅ | ❌ | ✅ | ✅ Spartos limitai |
| Jules | openai | OAuth | ✅ | ✅ | ✅ | ✅ Užduočių API |
| AgentRouter | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Grok-Web | openai | Seanso slapukas | ✅ | ✅ | ❌ | ❌ |
| Perplexity-Web | openai | Seanso slapukas | ✅ | ✅ | ❌ | ❌ |
| BlackBox-Web | openai | Seanso slapukas + TLS | ✅ | ✅ | ❌ | ❌ |
| Muse-Spark-Web | openai | Seanso slapukas | ✅ | ✅ | ❌ | ❌ |
| ModelScope | openai | API raktas | ✅ | ✅ | ❌ | ⚠️ Kvotų politika |
| BazaarLink | openai | API raktas | ✅ | ✅ | ❌ | ❌ |
| Petals | openai | Nėra | ✅ | ✅ | ❌ | ❌ |
| Qoder | openai | OAuth / PAT | ✅ | ✅ | ✅ | ⚠️ Kiekvienai užklausai |
| OpenCode (Go/Zen) | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| CLIProxyAPI | openai | Pasirinktinis | ✅ | ✅ | ❌ | ❌ |
Formatų konvertavimo aprėptis
Aptikti šaltinio formatai:
openaiopenai-responsesclaudegemini
Palaikomi paskirties formatai:
- OpenAI pokalbių / Responses
- Claude
- Gemini/Antigravity apvalkalas
- Kiro
- Cursor
Konvertavimui OpenAI naudojamas kaip centrinis formatas — visi konvertavimai atliekami per tarpinį OpenAI formatą:
Šaltinio formatas → OpenAI (centrinis formatas) → Paskirties formatas
Konvertavimo būdai dinamiškai parenkami pagal šaltinio naudingosios apkrovos struktūrą ir paskirties paslaugų teikėjo formatą.
Papildomi apdorojimo sluoksniai konvertavimo grandinėje:
- Atsakymų išvalymas — pašalina nestandartinius laukus iš OpenAI formato atsakymų (tiek srautinių, tiek nesrautinių), kad būtų užtikrintas griežtas suderinamumas su SDK
- Vaidmenų normalizavimas — ne OpenAI paskirties formatams konvertuoja
developer→system; modeliams, kurie nepalaiko sistemos vaidmens (GLM, ERNIE), sujungiasystem→user - Mąstymo žymų išskyrimas — iš turinio išanalizuoja
<think>...</think>blokus ir perkelia juos į laukąreasoning_content - Struktūrizuota išvestis — konvertuoja OpenAI
response_format.json_schemaį GeminiresponseMimeType+responseSchema
Palaikomi API galiniai taškai
| Galinis taškas | Formatas | Apdorojimo priemonė |
|---|---|---|
POST /v1/chat/completions |
OpenAI Chat | src/sse/handlers/chat.ts |
POST /v1/messages |
Claude Messages | Ta pati apdorojimo priemonė (aptinkama automatiškai) |
POST /v1/responses |
OpenAI Responses | open-sse/handlers/responsesHandler.ts |
POST /v1/embeddings |
OpenAI Embeddings | open-sse/handlers/embeddings.ts |
GET /v1/embeddings |
Modelių sąrašas | API maršrutas |
POST /v1/images/generations |
OpenAI Images | open-sse/handlers/imageGeneration.ts |
GET /v1/images/generations |
Modelių sąrašas | API maršrutas |
POST /v1/providers/{provider}/chat/completions |
OpenAI Chat | Atskiras kiekvieno paslaugų teikėjo galinis taškas su modelio tikrinimu |
POST /v1/providers/{provider}/embeddings |
OpenAI Embeddings | Atskiras kiekvieno paslaugų teikėjo galinis taškas su modelio tikrinimu |
POST /v1/providers/{provider}/images/generations |
OpenAI Images | Atskiras kiekvieno paslaugų teikėjo galinis taškas su modelio tikrinimu |
POST /v1/messages/count_tokens |
Claude žetonų skaičiavimas | API maršrutas |
GET /v1/models |
OpenAI modelių sąrašas | API maršrutas (pokalbių + įterpinių + vaizdų + pasirinktiniai modeliai) |
GET /api/models/catalog |
Katalogas | Visi modeliai, sugrupuoti pagal paslaugų teikėją ir tipą |
POST /v1beta/models/*:streamGenerateContent |
Savasis Gemini formatas | API maršrutas |
GET/PUT/DELETE /api/settings/proxy |
Tarpinio serverio konfigūracija | Tinklo tarpinio serverio konfigūracija |
POST /api/settings/proxy/test |
Tarpinio serverio ryšys | Tarpinio serverio būsenos ir ryšio tikrinimo galinis taškas |
GET/POST/DELETE /api/provider-models |
Paslaugų teikėjo modeliai | Paslaugų teikėjo modelių metaduomenys, naudojami pasirinktiniams ir valdomiems prieinamiems modeliams |
Apėjimo apdorojimo priemonė
Apėjimo apdorojimo priemonė (open-sse/utils/bypassHandler.ts) perima žinomas „vienkartines“ Claude CLI užklausas — parengiamuosius signalus, pavadinimų išgavimą ir žetonų skaičiavimą — ir grąžina suklastotą atsakymą, nenaudodama išorinio teikėjo žetonų. Ji suaktyvinama tik tada, kai User-Agent yra claude-cli.
Užklausų žurnalai ir artefaktai
Senesnė failais pagrįsta užklausų žurnalų priemonė (open-sse/utils/requestLogger.ts) išlaikoma tik dėl
suderinamumo su senosiomis versijomis. Dabartinė vykdymo aplinkos sutartis naudoja:
APP_LOG_TO_FILE=trueprogramos ir audito žurnalams, įrašomiems kataloge<repo>/logs/- SQLite pagrįstus iškvietimų žurnalo įrašus lentelėje
call_logs ${DATA_DIR}/call_logs/YYYY-MM-DD/...artefaktus, kai įjungtas iškvietimų žurnalo konvejeris
Gedimų režimai ir atsparumas
1) Paskyros / teikėjo pasiekiamumas
- ryšio laukimo laikotarpis po pakartotinai bandytinų išorinio teikėjo klaidų
- atsarginės paskyros naudojimas prieš paskelbiant užklausą nepavykusia
- perėjimas prie atsarginio kombinuoto modelio, kai išnaudojamas esamas modelio / teikėjo kelias
2) Žetono galiojimo pabaiga
- išankstinis patikrinimas ir atnaujinimas su pakartotiniu bandymu teikėjams, palaikantiems atnaujinimą
- pakartotinis bandymas po atnaujinimo, gavus 401/403 pagrindiniame vykdymo kelyje
3) Srauto sauga
- atsijungimą aptinkantis srauto valdiklis
- vertimo srautas su buferio ištuštinimu srauto pabaigoje ir
[DONE]apdorojimu - atsarginis naudojimo įvertinimas, kai trūksta teikėjo naudojimo metaduomenų
4) Sinchronizavimo su debesija sutrikimai
- apie sinchronizavimo klaidas pranešama, tačiau vietinė vykdymo aplinka veikia toliau
- planuoklėje yra pakartotinius bandymus palaikanti logika, tačiau periodinis vykdymas šiuo metu pagal numatytuosius nustatymus iškviečia vienkartinį sinchronizavimo bandymą
5) Duomenų vientisumas
- SQLite schemos migracijos ir automatinio naujovinimo procedūros paleidimo metu
- suderinamumo kelias senųjų JSON duomenų migracijai į SQLite
6) SSRF / siunčiamų URL apsauga
src/shared/network/outboundUrlGuard.tsblokuoja visus privačius, grįžtamojo ryšio ir vietinio ryšio paskirties URL prieš jiems pasiekiant teikėjo vykdymo priemones- teikėjo modelių aptikimo ir tikrinimo maršrutai naudoja
src/shared/network/safeOutboundFetch.ts, kuri pritaiko apsaugą prieš kiekvieną siunčiamą užklausą - apsaugos klaidos pateikiamos kaip
URL_GUARD_BLOCKEDsu HTTP 422 ir registruojamos atitikties audito žurnale naudojantproviderAudit.ts
Stebimumas ir veikimo signalai
Vykdymo aplinkos matomumo šaltiniai:
- konsolės žurnalai iš
src/sse/utils/logger.ts - kiekvienos užklausos naudojimo suvestinės SQLite lentelėse (
usage_history,call_logs,proxy_logs) - keturių etapų išsamūs naudingųjų apkrovų įrašai SQLite lentelėje (
request_detail_logs), kaisettings.detailed_logs_enabled=true - tekstinis užklausų būsenos žurnalas faile
log.txt(pasirinktinis / skirtas suderinamumui) - pasirinktiniai programos žurnalų failai kataloge
logs/, kaiAPP_LOG_TO_FILE=true - pasirinktiniai užklausų artefaktai kataloge
${DATA_DIR}/call_logs/, kai įjungtas iškvietimų žurnalo konvejeris - valdymo skydelio naudojimo galiniai taškai (
/api/usage/*), skirti naudotojo sąsajai
Išsamus užklausos naudingosios apkrovos fiksavimas išsaugo iki keturių JSON naudingosios apkrovos etapų kiekvienam nukreiptam iškvietimui:
- neapdorota iš kliento gauta užklausa
- išversta užklausa, kuri faktiškai išsiųsta išoriniam teikėjui
- teikėjo atsakymas, atkurtas kaip JSON; srautiniai atsakymai sutraukiami iki galutinės suvestinės ir srauto metaduomenų
- galutinis kliento atsakymas, kurį grąžino OmniRoute; srautiniai atsakymai saugomi tokia pačia sutrumpintos suvestinės forma
Saugumui jautrios ribos
- JWT paslaptis (
JWT_SECRET) apsaugo valdymo skydelio seanso slapuko tikrinimą ir pasirašymą - Pradinio slaptažodžio nustatymas (
INITIAL_PASSWORD) turėtų būti aiškiai sukonfigūruotas pirminiam parengimui pirmojo paleidimo metu - API rakto HMAC paslaptis (
API_KEY_SECRET) apsaugo generuojamo vietinio API rakto formatą - Teikėjų paslaptys (API raktai / prieigos raktai) saugomos vietinėje DB ir turėtų būti apsaugotos failų sistemos lygmeniu
- Sinchronizavimo su debesija galiniai taškai remiasi autentifikavimu API raktu ir įrenginio ID semantika
Aplinkos ir vykdymo aplinkos matrica
Kodo aktyviai naudojami aplinkos kintamieji:
- Programa / autentifikavimas:
JWT_SECRET,INITIAL_PASSWORD - Saugykla:
DATA_DIR - Pasirinktinis bazinio saugyklos katalogo perrašymas („Linux“ / „macOS“, kai
DATA_DIRnenustatytas):XDG_CONFIG_HOME - Saugos maiša:
API_KEY_SECRET,MACHINE_ID_SALT - Žurnalų rašymas:
APP_LOG_TO_FILE,APP_LOG_RETENTION_DAYS,CALL_LOG_RETENTION_DAYS - Sinchronizavimo / debesijos URL:
NEXT_PUBLIC_BASE_URL,NEXT_PUBLIC_CLOUD_URL - Išeinantis tarpinis serveris:
HTTP_PROXY,HTTPS_PROXY,ALL_PROXY,NO_PROXYir variantai mažosiomis raidėmis - SOCKS5 funkcijos vėliavėlės:
ENABLE_SOCKS5_PROXY,NEXT_PUBLIC_ENABLE_SOCKS5_PROXY - Platformos / vykdymo aplinkos pagalbiniai kintamieji (ne konkrečios programos konfigūracija):
APPDATA,NODE_ENV,PORT,HOSTNAME
Žinomos architektūros pastabos
usageDbirlocalDbtaiko tą pačią bazinio katalogo strategiją (DATA_DIR->XDG_CONFIG_HOME/omniroute->~/.omniroute) ir palaiko senų failų migravimą./api/v1/route.tsperduoda vykdymą tam pačiam suvienodinto katalogo kūrimo komponentui, kurį naudoja/api/v1/models(src/app/api/v1/models/catalog.ts), kad būtų išvengta semantinių neatitikimų.- Kai užklausų žurnalas įjungtas, į jį įrašomos visos antraštės ir visas turinys; žurnalo katalogą laikykite jautriu.
- Debesijos veikimas priklauso nuo tinkamos
NEXT_PUBLIC_BASE_URLreikšmės ir debesijos galinio taško pasiekiamumo. - Katalogas
open-sse/publikuojamas kaip npm darbo srities paketas@omniroute/open-sse. Šaltinio kodas jį importuoja per@omniroute/open-sse/...(išsprendžiama naudojant Next.jstranspilePackages). Siekiant nuoseklumo, failų keliuose šiame dokumente ir toliau naudojamas katalogo pavadinimasopen-sse/. - Valdymo skydelio diagramose naudojamas Recharts (pagrįstas SVG), skirtas prieinamoms, interaktyvioms analitinėms vizualizacijoms (modelių naudojimo stulpelinėms diagramoms, teikėjų suskirstymo lentelėms su sėkmės rodikliais).
- E2E testams naudojamas Playwright (
tests/e2e/), jie paleidžiami vykdantnpm run test:e2e. Vienetiniams testams naudojama Node.js testų vykdymo priemonė (tests/unit/), jie paleidžiami vykdantnpm run test:unit. Šaltinio kodas katalogesrc/yra TypeScript (.ts/.tsx); darbo sritisopen-sse/išlieka JavaScript (.js). - Nustatymų puslapis suskirstytas į 7 skirtukus: Bendrieji, Išvaizda, DI, Saugumas, Maršruto parinkimas, Atsparumas, Išplėstiniai. Atsparumo puslapyje konfigūruojama tik užklausų eilė, ryšio atvėsimo laikotarpis, teikėjo grandinės pertraukiklis ir laukimo, kol pasibaigs atvėsimo laikotarpis, elgsena; tiesioginė grandinės pertraukiklio vykdymo būsena rodoma Būklės puslapyje.
- Konteksto perdavimo strategija (
context-relay) padalyta į du sluoksnius:combo.tsnustato, ar turėtų būti sukurtas perdavimas, ochat.tsįterpia perdavimą nustačius paskyrą. Perdavimo duomenys saugomi SQLite lentelėjecontext_handoffs. Toks padalijimas yra tyčinis, nes tikchat.tsžino, ar faktinė paskyra pasikeitė. - Tarpinio serverio naudojimo užtikrinimas dabar yra visapusiškas:
tokenHealthCheck.tsnustato tarpinį serverį kiekvienam ryšiui,/api/providers/validatenaudojarunWithProxyContext, oproxyFetch.tsnaudojaundici.fetch(), kad būtų išlaikytas suderinamumas su dispatcher mechanizmu Node 22 aplinkoje. - Node.js vykdymo aplinkos strategijos aptikimas:
/api/settings/require-logingrąžina laukusnodeVersionirnodeCompatible. Prisijungimo puslapyje rodoma įspėjamoji juosta, kai vykdymo aplinka nepatenka į palaikomas saugias Node.js versijų linijas.
Veikimo patikros kontrolinis sąrašas
- Sukurkite iš pirminio kodo:
npm run build - Sukurkite Docker atvaizdą:
docker build -t omniroute . - Paleiskite paslaugą ir patikrinkite:
GET /api/settingsGET /api/v1/models- CLI tikslinis bazinis URL turėtų būti
http://<host>:20128/v1, kaiPORT=20128