OmniRoute/docs/i18n/ro/CODEBASE_DOCUMENTATION.md

41 KiB

omniroute — Documentația de bază de cod

🌐 Languages: 🇺🇸 English | 🇧🇷 Português (Brasil) | 🇪🇸 Español | 🇫🇷 Français | 🇮🇹 Italiano | 🇷🇺 Русский | 🇨🇳 中文 (简体) | 🇩🇪 Deutsch | 🇮🇳 हिन्दी | 🇹🇭 ไทย | 🇺🇦 Українська | 🇸🇦 العربية | 🇯🇵 日本語 | 🇻🇳 Tiếng Việt | 🇧🇬 Български | 🇩🇰 Dansk | 🇫🇮 Suomi | 🇮🇱 עברית | 🇭🇺 Magyar | 🇮🇩 Bahasa Indonesia | 🇰🇷 한국어 | 🇲🇾 Bahasa Melayu | 🇳🇱 Nederlands | 🇳🇴 Norsk | 🇵🇹 Português (Portugal) | 🇷🇴 Română | 🇵🇱 Polski | 🇸🇰 Slovenčina | 🇸🇪 Svenska | 🇵🇭 Filipino

Un ghid cuprinzător, prietenos pentru începători, pentru routerul proxy AI cu mai mulți furnizori omniroute.


1. Ce este omniroute?

omniroute este un router proxy care se află între clienții AI (Claude CLI, Codex, Cursor IDE etc.) și furnizorii AI (Anthropic, Google, OpenAI, AWS, GitHub etc.). Rezolvă o mare problemă:

Diferiți clienți AI vorbesc diferite „limbi” (formate API), iar diferiți furnizori de AI se așteaptă și ei la „limbi” diferite. Omniroute se traduce automat între ele.

Gândiți-vă la asta ca la un traducător universal la Națiunile Unite - orice delegat poate vorbi orice limbă, iar traducătorul o convertește pentru orice alt delegat.


2. Privire de ansamblu asupra arhitecturii

graph LR
    subgraph Clients
        A[Claude CLI]
        B[Codex]
        C[Cursor IDE]
        D[OpenAI-compatible]
    end

    subgraph omniroute
        E[Handler Layer]
        F[Translator Layer]
        G[Executor Layer]
        H[Services Layer]
    end

    subgraph Providers
        I[Anthropic Claude]
        J[Google Gemini]
        K[OpenAI / Codex]
        L[GitHub Copilot]
        M[AWS Kiro]
        N[Antigravity]
        O[Cursor API]
    end

    A --> E
    B --> E
    C --> E
    D --> E
    E --> F
    F --> G
    G --> I
    G --> J
    G --> K
    G --> L
    G --> M
    G --> N
    G --> O
    H -.-> E
    H -.-> G

Principiul de bază: Traducerea hub-and-spoke

Toată traducerea formatului trece prin formatul OpenAI ca hub:

Client Format → [OpenAI Hub] → Provider Format    (request)
Provider Format → [OpenAI Hub] → Client Format    (response)

Aceasta înseamnă că aveți nevoie doar de N traducători (unul pentru fiecare format) în loc de (fiecare pereche).


3. Structura proiectului

omniroute/
├── open-sse/                  ← Core proxy library (portable, framework-agnostic)
│   ├── index.js               ← Main entry point, exports everything
│   ├── config/                ← Configuration & constants
│   ├── executors/             ← Provider-specific request execution
│   ├── handlers/              ← Request handling orchestration
│   ├── services/              ← Business logic (auth, models, fallback, usage)
│   ├── translator/            ← Format translation engine
│   │   ├── request/           ← Request translators (8 files)
│   │   ├── response/          ← Response translators (7 files)
│   │   └── helpers/           ← Shared translation utilities (6 files)
│   └── utils/                 ← Utility functions
├── src/                       ← Application layer (Express/Worker runtime)
│   ├── app/                   ← Web UI, API routes, middleware
│   ├── lib/                   ← Database, auth, and shared library code
│   ├── mitm/                  ← Man-in-the-middle proxy utilities
│   ├── models/                ← Database models
│   ├── shared/                ← Shared utilities (wrappers around open-sse)
│   ├── sse/                   ← SSE endpoint handlers
│   └── store/                 ← State management
├── data/                      ← Runtime data (credentials, logs)
│   └── provider-credentials.json   (external credentials override, gitignored)
└── tester/                    ← Test utilities

4. Defalcare modul cu modul

4.1 Configurare (open-sse/config/)

Sursa unică de adevăr pentru configurația tuturor furnizorilor.

Fișier Scop
constants.ts PROVIDERS obiect cu adrese URL de bază, acreditări OAuth (implicite), anteturi și solicitări implicite de sistem pentru fiecare furnizor. De asemenea, definește HTTP_STATUS, ERROR_TYPES, COOLDOWN_MS, BACKOFF_CONFIG și SKIP_PATTERNS.
credentialLoader.ts Încarcă acreditările externe de la data/provider-credentials.json și le îmbină peste valorile implicite codificate în PROVIDERS. Păstrează secretele sub controlul sursei, menținând în același timp compatibilitatea cu versiunea inversă.
providerModels.ts Registrul central de modele: hărți aliasuri furnizori → ID-uri model. Funcții precum getModels(), getProviderByAlias().
codexInstructions.ts Instrucțiuni de sistem injectate în cererile Codex (constrângeri de editare, reguli sandbox, politici de aprobare).
defaultThinkingSignature.ts Semnături implicite „de gândire” pentru modelele Claude și Gemini.
ollamaModels.ts Definirea schemei pentru modelele locale Ollama (nume, dimensiune, familie, cuantizare).

Flux de încărcare a acreditărilor

flowchart TD
    A["App starts"] --> B["constants.ts defines PROVIDERS\nwith hardcoded defaults"]
    B --> C{"data/provider-credentials.json\nexists?"}
    C -->|Yes| D["credentialLoader reads JSON"]
    C -->|No| E["Use hardcoded defaults"]
    D --> F{"For each provider in JSON"}
    F --> G{"Provider exists\nin PROVIDERS?"}
    G -->|No| H["Log warning, skip"]
    G -->|Yes| I{"Value is object?"}
    I -->|No| J["Log warning, skip"]
    I -->|Yes| K["Merge clientId, clientSecret,\ntokenUrl, authUrl, refreshUrl"]
    K --> F
    H --> F
    J --> F
    F -->|Done| L["PROVIDERS ready with\nmerged credentials"]
    E --> L

4.2 Executori (open-sse/executors/)

Executorii încapsulează logica specifică furnizorului utilizând Modelul de strategie. Fiecare executant anulează metodele de bază după cum este necesar.

classDiagram
    class BaseExecutor {
        +buildUrl(model, stream, options)
        +buildHeaders(credentials, stream, body)
        +transformRequest(body, model, stream, credentials)
        +execute(url, options)
        +shouldRetry(status, error)
        +refreshCredentials(credentials, log)
    }

    class DefaultExecutor {
        +refreshCredentials()
    }

    class AntigravityExecutor {
        +buildUrl()
        +buildHeaders()
        +transformRequest()
        +shouldRetry()
        +refreshCredentials()
    }

    class CursorExecutor {
        +buildUrl()
        +buildHeaders()
        +transformRequest()
        +parseResponse()
        +generateChecksum()
    }

    class KiroExecutor {
        +buildUrl()
        +buildHeaders()
        +transformRequest()
        +parseEventStream()
        +refreshCredentials()
    }

    BaseExecutor <|-- DefaultExecutor
    BaseExecutor <|-- AntigravityExecutor
    BaseExecutor <|-- CursorExecutor
    BaseExecutor <|-- KiroExecutor
    BaseExecutor <|-- CodexExecutor
    BaseExecutor <|-- GeminiCLIExecutor
    BaseExecutor <|-- GithubExecutor
Executant Furnizor Specializări cheie
base.ts Bază abstractă: crearea adresei URL, anteturi, logica reîncercării, reîmprospătarea acreditărilor
default.ts Claude, Gemeni, OpenAI, GLM, Kimi, MiniMax Reîmprospătare generică a jetonului OAuth pentru furnizorii standard
antigravity.ts Cod Google Cloud Generarea ID-ului de proiect/sesiune, alternativă cu mai multe adrese URL, reîncercare personalizată de analiză din mesajele de eroare („resetare după 2h7m23s”)
cursor.ts Cursor IDE Cel mai complex: SHA-256 checksum auth, codificare cerere Protobuf, binar EventStream → analiza răspuns SSE
codex.ts OpenAI Codex Injectează instrucțiuni de sistem, gestionează nivelurile de gândire, elimină parametrii neacceptați
gemini-cli.ts Google Gemini CLI Creare URL personalizată (streamGenerateContent), reîmprospătare jeton OAuth Google
github.ts GitHub Copilot Sistem dual token (GitHub OAuth + token Copilot), imitarea antetului VSCode
kiro.ts AWS CodeWhisperer Analiza binară AWS EventStream, cadre de evenimente AMZN, estimare token
index.ts Fabrică: numele furnizorului de hărți → clasa executorului, cu fallback implicit

4.3 Handlers (open-sse/handlers/)

Stratul de orchestrare — coordonează traducerea, execuția, transmiterea în flux și gestionarea erorilor.

Fișier Scop
chatCore.ts Orchestrator central (~600 de linii). Se ocupă de ciclul de viață complet al cererii: detectarea formatului → traducerea → expedierea executorului → răspunsul în flux/non-streaming → reîmprospătarea simbolului → gestionarea erorilor → înregistrarea utilizării.
responsesHandler.ts Adaptor pentru API-ul OpenAI Responses: convertește formatul de răspunsuri → Terminări de chat → trimite la chatCore → convertește SSE înapoi în formatul de răspunsuri.
embeddings.ts Managerul de generare de încorporare: rezolvă modelul de încorporare → furnizor, trimite către API-ul furnizorului, returnează un răspuns de încorporare compatibil OpenAI. Suportă peste 6 furnizori.
imageGeneration.ts Managerul de generare a imaginii: rezolvă modelul de imagine → furnizor, acceptă modurile compatibile cu OpenAI, Gemini-image (antigravitație) și modurile de rezervă (Nebius). Returnează imagini base64 sau URL.

Ciclul de viață al cererii (chatCore.ts)

sequenceDiagram
    participant Client
    participant chatCore
    participant Translator
    participant Executor
    participant Provider

    Client->>chatCore: Request (any format)
    chatCore->>chatCore: Detect source format
    chatCore->>chatCore: Check bypass patterns
    chatCore->>chatCore: Resolve model & provider
    chatCore->>Translator: Translate request (source → OpenAI → target)
    chatCore->>Executor: Get executor for provider
    Executor->>Executor: Build URL, headers, transform request
    Executor->>Executor: Refresh credentials if needed
    Executor->>Provider: HTTP fetch (streaming or non-streaming)

    alt Streaming
        Provider-->>chatCore: SSE stream
        chatCore->>chatCore: Pipe through SSE transform stream
        Note over chatCore: Transform stream translates<br/>each chunk: target → OpenAI → source
        chatCore-->>Client: Translated SSE stream
    else Non-streaming
        Provider-->>chatCore: JSON response
        chatCore->>Translator: Translate response
        chatCore-->>Client: Translated JSON
    end

    alt Error (401, 429, 500...)
        chatCore->>Executor: Retry with credential refresh
        chatCore->>chatCore: Account fallback logic
    end

4.4 Servicii (open-sse/services/)

Logica de afaceri care sprijină manipulatorii și executanții.

Fișier Scop
provider.ts Detecție format (detectFormat): analizează structura corpului cererii pentru a identifica formatele Claude/OpenAI/Gemini/Antigravity/Responses (include max_tokens euristica pentru Claude). De asemenea: construirea URL, construirea antetului, normalizarea configurației gândirii. Acceptă furnizorii dinamici openai-compatible-* și anthropic-compatible-*.
model.ts Analizarea șirurilor de model (claude/model-name{provider: "claude", model: "model-name"}), rezoluția aliasului cu detectarea coliziunilor, dezinfectarea intrării (respinge caracterele de parcurgere/control al căii) și rezoluția informațiilor despre model cu suport pentru obținerea de alias asincron.
accountFallback.ts Gestionarea limitelor de rată: retragere exponențială (1s → 2s → 4s → max 2 min), gestionarea timpului de răcire a contului, clasificarea erorilor (care declanșează erorile de rezervă vs. nu).
tokenRefresh.ts Actualizare jeton OAuth pentru fiecare furnizor: Google (Gemini, Antigravity), Claude, Codex, Qwen, iFlow, GitHub (OAuth + Copilot dual-token), Kiro (AWS SSO OIDC + Social Auth). Include memoria cache de deduplicare a promisiunii în timpul zborului și reîncercarea cu backoff exponențial.
combo.ts Modele combinate: lanțuri de modele de rezervă. Dacă modelul A eșuează cu o eroare eligibilă pentru rezervă, încercați modelul B, apoi C etc. Returnează codurile reale de stare din amonte.
usage.ts Preia datele de cotă/utilizare de la API-urile furnizorului (cote GitHub Copilot, cote model antigravitație, limite ale ratei Codex, defalcări de utilizare Kiro, setări Claude).
accountSelector.ts Selecția inteligentă a contului cu algoritm de punctare: ia în considerare prioritatea, starea de sănătate, poziția round-robin și starea de cooldown pentru a alege contul optim pentru fiecare solicitare.
contextManager.ts Gestionarea ciclului de viață a contextului solicitării: creează și urmărește obiecte de context per-cerere cu metadate (ID-ul cererii, marcaje temporale, informații despre furnizor) pentru depanare și înregistrare.
ipFilter.ts Controlul accesului bazat pe IP: acceptă modurile liste de permise și liste de blocare. Validează IP-ul clientului în raport cu regulile configurate înainte de a procesa solicitările API.
sessionManager.ts Urmărirea sesiunilor cu amprenta clientului: urmărește sesiunile active folosind identificatori de client hashing, monitorizează numărul de solicitări și oferă valori ale sesiunii.
signatureCache.ts Cache de deduplicare bazată pe semnături de solicitare: previne cererile duplicate prin memorarea în cache a semnăturilor de cereri recente și returnarea răspunsurilor memorate în cache pentru cereri identice într-o fereastră de timp.
systemPrompt.ts Injectarea globală a promptului de sistem: adaugă sau adaugă un prompt de sistem configurabil la toate solicitările, cu gestionarea compatibilității pentru fiecare furnizor.
thinkingBudget.ts Gestionarea bugetului token-ului de raționament: acceptă modurile passthrough, automate (configurație de gândire strip), personalizate (buget fix) și adaptive (scalate la complexitate) pentru controlul simbolurilor de gândire/raționament.
wildcardRouter.ts Dirijarea modelului cu caractere wildcard: rezolvă modelele wildcard (de exemplu, */claude-*) în perechi concrete furnizor/model în funcție de disponibilitate și prioritate.

Deduplicare de reîmprospătare a simbolului

sequenceDiagram
    participant R1 as Request 1
    participant R2 as Request 2
    participant Cache as refreshPromiseCache
    participant OAuth as OAuth Provider

    R1->>Cache: getAccessToken("gemini", token)
    Cache->>Cache: No in-flight promise
    Cache->>OAuth: Start refresh
    R2->>Cache: getAccessToken("gemini", token)
    Cache->>Cache: Found in-flight promise
    Cache-->>R2: Return existing promise
    OAuth-->>Cache: New access token
    Cache-->>R1: New access token
    Cache-->>R2: Same access token (shared)
    Cache->>Cache: Delete cache entry

Mașină de stat de rezervă a contului

stateDiagram-v2
    [*] --> Active
    Active --> Error: Request fails (401/429/500)
    Error --> Cooldown: Apply backoff
    Cooldown --> Active: Cooldown expires
    Active --> Active: Request succeeds (reset backoff)

    state Error {
        [*] --> ClassifyError
        ClassifyError --> ShouldFallback: Rate limit / Auth / Transient
        ClassifyError --> NoFallback: 400 Bad Request
    }

    state Cooldown {
        [*] --> ExponentialBackoff
        ExponentialBackoff: Level 0 = 1s
        ExponentialBackoff: Level 1 = 2s
        ExponentialBackoff: Level 2 = 4s
        ExponentialBackoff: Max = 2min
    }

Lanț de modele combinate

flowchart LR
    A["Request with\ncombo model"] --> B["Model A"]
    B -->|"2xx Success"| C["Return response"]
    B -->|"429/401/500"| D{"Fallback\neligible?"}
    D -->|Yes| E["Model B"]
    D -->|No| F["Return error"]
    E -->|"2xx Success"| C
    E -->|"429/401/500"| G{"Fallback\neligible?"}
    G -->|Yes| H["Model C"]
    G -->|No| F
    H -->|"2xx Success"| C
    H -->|"Fail"| I["All failed →\nReturn last status"]

4.5 Traducător (open-sse/translator/)

Motorul de traducere a formatului utilizând un sistem de pluginuri cu auto-înregistrare.

Arhitectură

graph TD
    subgraph "Request Translation"
        A["Claude → OpenAI"]
        B["Gemini → OpenAI"]
        C["Antigravity → OpenAI"]
        D["OpenAI Responses → OpenAI"]
        E["OpenAI → Claude"]
        F["OpenAI → Gemini"]
        G["OpenAI → Kiro"]
        H["OpenAI → Cursor"]
    end

    subgraph "Response Translation"
        I["Claude → OpenAI"]
        J["Gemini → OpenAI"]
        K["Kiro → OpenAI"]
        L["Cursor → OpenAI"]
        M["OpenAI → Claude"]
        N["OpenAI → Antigravity"]
        O["OpenAI → Responses"]
    end
Director Fișiere Descriere
request/ 8 traducători Convertiți corpurile de solicitare între formate. Fiecare fișier se auto-înregistrează prin register(from, to, fn) la import.
response/ 7 traducători Conversia fragmentelor de răspuns în flux între formate. Se ocupă de tipurile de evenimente SSE, blocurile de gândire, apelurile de instrumente.
helpers/ 6 ajutoare Utilitare partajate: claudeHelper (extracția promptului sistemului, configurația gândirii), geminiHelper (matarea părților/conținutului), openaiHelper (filtrarea formatului), toolCallHelper (generarea ID-ului, injectarea răspunsului TOKEN_8 lipsă, __8 NI_EN) responsesApiHelper.
index.ts Motor de traducere: translateRequest(), translateResponse(), management de stat, registru.
formats.ts Formatare constante: OPENAI, CLAUDE, GEMINI, ANTIGRAVITY, KIRO, , CURSOR,

Design cheie: pluginuri cu auto-înregistrare

// Each translator file calls register() on import:
import { register } from "../index.js";
register("claude", "openai", translateClaudeToOpenAI);

// The index.js imports all translator files, triggering registration:
import "./request/claude-to-openai.js"; // ← self-registers

4.6 Utilități (open-sse/utils/)

Fișier Scop
error.ts Crearea răspunsului la erori (format compatibil cu OpenAI), analizarea erorilor în amonte, extragerea timpului de reîncercare antigravitație din mesajele de eroare, transmiterea erorilor SSE.
stream.ts SSE Transform Stream — canalul de streaming de bază. Două moduri: TRANSLATE (traducere în format complet) și PASSTHROUGH (normalizare + extragere utilizare). Se ocupă de stocarea în tampon, estimarea utilizării, urmărirea duratei conținutului. Instanțele de codificator/decodor per-stream evită starea partajată.
streamHelpers.ts Utilitare SSE de nivel scăzut: parseSSELine (tolerant la spații albe), hasValuableContent (filtrează bucăți goale pentru OpenAI/Claude/Gemini), fixInvalidId, SSE_103_ware) perf_metrics curățare).
usageTracking.ts Extragerea utilizării jetoanelor din orice format (Claude/OpenAI/Gemini/Responses), estimare cu rapoarte separate pentru instrumente/mesaj, adăugare de buffer (marja de siguranță de 2000 de jetoane), filtrare câmp specific formatului, înregistrare în consolă cu culori ANSI.
requestLogger.ts Înregistrarea cererilor pe bază de fișier (înregistrare prin ENABLE_REQUEST_LOGS=true). Creează foldere de sesiune cu fișiere numerotate: 1_req_client.json7_res_client.txt. Toate I/O sunt asincrone (foc și uitare). Mască anteturile sensibile.
bypassHandler.ts Interceptează modele specifice din Claude CLI (extragere titlu, încălzire, numărare) și returnează răspunsuri false fără a apela niciun furnizor. Acceptă atât streaming, cât și non-streaming. Limitat intenționat la domeniul Claude CLI.
networkProxy.ts Rezolvă URL-ul proxy de ieșire pentru un anumit furnizor cu prioritate: configurație specifică furnizorului → configurație globală → variabile de mediu (HTTPS_PROXY/HTTP_PROXY/ALL_PROXY). Acceptă excluderile NO_PROXY. Memorează în cache configurația pentru 30 de secunde.

SSE Streaming Pipeline

flowchart TD
    A["Provider SSE stream"] --> B["TextDecoder\n(per-stream instance)"]
    B --> C["Buffer lines\n(split on newline)"]
    C --> D["parseSSELine()\n(trim whitespace, parse JSON)"]
    D --> E{"Mode?"}
    E -->|TRANSLATE| F["translateResponse()\ntarget → OpenAI → source"]
    E -->|PASSTHROUGH| G["fixInvalidId()\nnormalize chunk"]
    F --> H["hasValuableContent()\nfilter empty chunks"]
    G --> H
    H -->|"Has content"| I["extractUsage()\ntrack token counts"]
    H -->|"Empty"| J["Skip chunk"]
    I --> K["formatSSE()\nserialize + clean perf_metrics"]
    K --> L["TextEncoder\n(per-stream instance)"]
    L --> M["Enqueue to\nclient stream"]

    style A fill:#f9f,stroke:#333
    style M fill:#9f9,stroke:#333

Solicitați structura sesiunii de înregistrare

logs/
└── claude_gemini_claude-sonnet_20260208_143045/
    ├── 1_req_client.json      ← Raw client request
    ├── 2_req_source.json      ← After initial conversion
    ├── 3_req_openai.json      ← OpenAI intermediate format
    ├── 4_req_target.json      ← Final target format
    ├── 5_res_provider.txt     ← Provider SSE chunks (streaming)
    ├── 5_res_provider.json    ← Provider response (non-streaming)
    ├── 6_res_openai.txt       ← OpenAI intermediate chunks
    ├── 7_res_client.txt       ← Client-facing SSE chunks
    └── 6_error.json           ← Error details (if any)

4.7 Stratul de aplicație (src/)

Director Scop
src/app/ Interfață de utilizare web, rute API, middleware Express, handlere de apel invers OAuth
src/lib/ Acces la baza de date (localDb.ts, usageDb.ts), autentificare, partajat
src/mitm/ Utilități proxy Man-in-the-middle pentru interceptarea traficului furnizorului
src/models/ Definițiile modelului bazei de date
src/shared/ Învelișuri în jurul funcțiilor open-sse (furnizor, flux, eroare etc.)
src/sse/ Managerii de puncte finale SSE care conectează biblioteca open-sse la rutele Express
src/store/ Managementul stării aplicației

Rute API notabile

Traseu Metode Scop
/api/provider-models GET/POST/DELETE CRUD pentru modele personalizate per furnizor
/api/models/catalog GET Catalog agregat al tuturor modelelor (chat, încorporare, imagine, personalizat) grupate după furnizor
/api/settings/proxy GET/PUT/DELETE Configurație ierarhică de ieșire proxy (global/providers/combos/keys)
/api/settings/proxy/test POST Validează conectivitatea proxy și returnează IP/latența publică
/v1/providers/[provider]/chat/completions POST Finalizări de chat dedicate pentru fiecare furnizor cu validare a modelului
/v1/providers/[provider]/embeddings POST Înglobări dedicate pentru fiecare furnizor cu validare a modelului
/v1/providers/[provider]/images/generations POST Generare de imagini dedicată pentru fiecare furnizor cu validarea modelului
/api/settings/ip-filter GET/PUT Gestionarea listei de permise/liste de blocare IP
/api/settings/thinking-budget GET/PUT Configurarea bugetului simbolului de raționament (passthrough/auto/custom/adaptive)
/api/settings/system-prompt GET/PUT Sistem global de injectare promptă pentru toate solicitările
/api/sessions GET Urmărirea sesiunii active și valorile
/api/rate-limits GET Starea limitei ratei per cont

5. Modele de design cheie

5.1 Traducere hub-and-spoke

Toate formatele se traduc prin formatul OpenAI ca hub. Adăugarea unui furnizor nou necesită doar scrierea o pereche de traducători (la/de la OpenAI), nu N perechi.

5.2 Modelul Strategiei Executorului

Fiecare furnizor are o clasă de executor dedicată care moștenește de la BaseExecutor. Fabrica din executors/index.ts îl selectează pe cel potrivit în timpul rulării.

5.3 Sistem de pluginuri cu auto-înregistrare

Modulele de traducător se înregistrează la import prin register(). Adăugarea unui nou traducător înseamnă doar crearea unui fișier și importarea acestuia.

5.4 Retragerea contului cu retragere exponențială

Atunci când un furnizor returnează 429/401/500, sistemul poate trece la următorul cont, aplicând perioade de răcire exponențiale (1s → 2s → 4s → max 2min).

5.5 Lanțuri de modele combinate

Un „combo” grupează mai multe șiruri provider/model. Dacă primul eșuează, reveniți automat la următorul.

5.6 Traducere în flux cu stat

Traducerea răspunsurilor menține starea în bucățile SSE (urmărirea blocurilor de gândire, acumularea apelurilor de instrumente, indexarea blocurilor de conținut) prin mecanismul initState().

5.7 Utilizare tampon de siguranță

Un buffer de 2000 de jetoane este adăugat la utilizarea raportată pentru a preveni clienții să atingă limitele ferestrei de context din cauza supraîncărcării de la solicitările de sistem și traducerea formatului.


6. Formate acceptate

Format Direcție Identificator
Finalizări de chat OpenAI sursa + tinta openai
OpenAI Responses API sursa + tinta openai-responses
Claude antropic sursa + tinta claude
Google Gemeni sursa + tinta gemini
Google Gemini CLI doar țintă gemini-cli
Antigravitație sursa + tinta antigravity
AWS Kiro doar țintă kiro
Cursor doar țintă cursor

7. Furnizori acceptați

Furnizor Metoda de autentificare Executant Note cheie
Claude antropic Cheia API sau OAuth Implicit Utilizează antetul x-api-key
Google Gemeni Cheia API sau OAuth Implicit Utilizează antetul x-goog-api-key
Google Gemini CLI OAuth GeminiCLI Utilizează punctul final streamGenerateContent
Antigravitație OAuth Antigravitație Alternativ cu mai multe adrese URL, reîncercare personalizată analizare
OpenAI Cheia API Implicit Autoritatea purtătorului standard
Codex OAuth Codex Injectează instrucțiuni de sistem, gestionează gândirea
GitHub Copilot OAuth + Jeton Copilot Github Jeton dublu, imitație antet VSCode
Kiro (AWS) AWS SSO OIDC sau Social Kiro Analiza binar EventStream
Cursor IDE Autentificare sumă de control Cursor Codificare Protobuf, sume de control SHA-256
Qwen OAuth Implicit Autentificare standard
iFlow OAuth (de bază + purtător) Implicit Antet de autentificare dublă
OpenRouter Cheia API Implicit Autoritatea purtătorului standard
GLM, Kimi, MiniMax Cheia API Implicit Compatibil cu Claude, utilizați x-api-key
openai-compatible-* Cheia API Implicit Dinamic: orice punct final compatibil OpenAI
anthropic-compatible-* Cheia API Implicit Dinamic: orice punct final compatibil cu Claude

8. Rezumatul fluxului de date

Solicitare de streaming

flowchart LR
    A["Client"] --> B["detectFormat()"]
    B --> C["translateRequest()\nsource → OpenAI → target"]
    C --> D["Executor\nbuildUrl + buildHeaders"]
    D --> E["fetch(providerURL)"]
    E --> F["createSSEStream()\nTRANSLATE mode"]
    F --> G["parseSSELine()"]
    G --> H["translateResponse()\ntarget → OpenAI → source"]
    H --> I["extractUsage()\n+ addBuffer"]
    I --> J["formatSSE()"]
    J --> K["Client receives\ntranslated SSE"]
    K --> L["logUsage()\nsaveRequestUsage()"]

Solicitare non-streaming

flowchart LR
    A["Client"] --> B["detectFormat()"]
    B --> C["translateRequest()\nsource → OpenAI → target"]
    C --> D["Executor.execute()"]
    D --> E["translateResponse()\ntarget → OpenAI → source"]
    E --> F["Return JSON\nresponse"]

Bypass Flow (Claude CLI)

flowchart LR
    A["Claude CLI request"] --> B{"Match bypass\npattern?"}
    B -->|"Title/Warmup/Count"| C["Generate fake\nOpenAI response"]
    B -->|"No match"| D["Normal flow"]
    C --> E["Translate to\nsource format"]
    E --> F["Return without\ncalling provider"]