# API Reference (ગુજરાતી) 🌐 **Languages:** 🇺🇸 [English](../../../../reference/API_REFERENCE.md) · 🇪🇹 [am](../../../am/docs/reference/API_REFERENCE.md) · 🇸🇦 [ar](../../../ar/docs/reference/API_REFERENCE.md) · 🇦🇿 [az](../../../az/docs/reference/API_REFERENCE.md) · 🇧🇬 [bg](../../../bg/docs/reference/API_REFERENCE.md) · 🇧🇩 [bn](../../../bn/docs/reference/API_REFERENCE.md) · 🇨🇿 [cs](../../../cs/docs/reference/API_REFERENCE.md) · 🇩🇰 [da](../../../da/docs/reference/API_REFERENCE.md) · 🇩🇪 [de](../../../de/docs/reference/API_REFERENCE.md) · 🇬🇷 [el](../../../el/docs/reference/API_REFERENCE.md) · 🇪🇸 [es](../../../es/docs/reference/API_REFERENCE.md) · 🇪🇪 [et](../../../et/docs/reference/API_REFERENCE.md) · 🇮🇷 [fa](../../../fa/docs/reference/API_REFERENCE.md) · 🇫🇮 [fi](../../../fi/docs/reference/API_REFERENCE.md) · 🇫🇷 [fr](../../../fr/docs/reference/API_REFERENCE.md) · 🇮🇪 [ga](../../../ga/docs/reference/API_REFERENCE.md) · 🇳🇬 [ha](../../../ha/docs/reference/API_REFERENCE.md) · 🇮🇱 [he](../../../he/docs/reference/API_REFERENCE.md) · 🇮🇳 [hi](../../../hi/docs/reference/API_REFERENCE.md) · 🇭🇷 [hr](../../../hr/docs/reference/API_REFERENCE.md) · 🇭🇺 [hu](../../../hu/docs/reference/API_REFERENCE.md) · 🇦🇲 [hy](../../../hy/docs/reference/API_REFERENCE.md) · 🇮🇩 [id](../../../id/docs/reference/API_REFERENCE.md) · 🇳🇬 [ig](../../../ig/docs/reference/API_REFERENCE.md) · 🇮🇹 [it](../../../it/docs/reference/API_REFERENCE.md) · 🇯🇵 [ja](../../../ja/docs/reference/API_REFERENCE.md) · 🇬🇪 [ka](../../../ka/docs/reference/API_REFERENCE.md) · 🇰🇭 [km](../../../km/docs/reference/API_REFERENCE.md) · 🇮🇳 [kn](../../../kn/docs/reference/API_REFERENCE.md) · 🇰🇷 [ko](../../../ko/docs/reference/API_REFERENCE.md) · 🇱🇹 [lt](../../../lt/docs/reference/API_REFERENCE.md) · 🇱🇻 [lv](../../../lv/docs/reference/API_REFERENCE.md) · 🇮🇳 [ml](../../../ml/docs/reference/API_REFERENCE.md) · 🇮🇳 [mr](../../../mr/docs/reference/API_REFERENCE.md) · 🇲🇾 [ms](../../../ms/docs/reference/API_REFERENCE.md) · 🇲🇹 [mt](../../../mt/docs/reference/API_REFERENCE.md) · 🇲🇲 [my](../../../my/docs/reference/API_REFERENCE.md) · 🇳🇵 [ne](../../../ne/docs/reference/API_REFERENCE.md) · 🇳🇱 [nl](../../../nl/docs/reference/API_REFERENCE.md) · 🇳🇴 [no](../../../no/docs/reference/API_REFERENCE.md) · 🇮🇳 [or](../../../or/docs/reference/API_REFERENCE.md) · 🇮🇳 [pa](../../../pa/docs/reference/API_REFERENCE.md) · 🇵🇭 [phi](../../../phi/docs/reference/API_REFERENCE.md) · 🇵🇱 [pl](../../../pl/docs/reference/API_REFERENCE.md) · 🇵🇹 [pt](../../../pt/docs/reference/API_REFERENCE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/API_REFERENCE.md) · 🇷🇴 [ro](../../../ro/docs/reference/API_REFERENCE.md) · 🇷🇺 [ru](../../../ru/docs/reference/API_REFERENCE.md) · 🇱🇰 [si](../../../si/docs/reference/API_REFERENCE.md) · 🇸🇰 [sk](../../../sk/docs/reference/API_REFERENCE.md) · 🇸🇮 [sl](../../../sl/docs/reference/API_REFERENCE.md) · 🇷🇸 [sr](../../../sr/docs/reference/API_REFERENCE.md) · 🇸🇪 [sv](../../../sv/docs/reference/API_REFERENCE.md) · 🇰🇪 [sw](../../../sw/docs/reference/API_REFERENCE.md) · 🇮🇳 [ta](../../../ta/docs/reference/API_REFERENCE.md) · 🇮🇳 [te](../../../te/docs/reference/API_REFERENCE.md) · 🇹🇭 [th](../../../th/docs/reference/API_REFERENCE.md) · 🇹🇷 [tr](../../../tr/docs/reference/API_REFERENCE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/reference/API_REFERENCE.md) · 🇵🇰 [ur](../../../ur/docs/reference/API_REFERENCE.md) · 🇺🇿 [uz](../../../uz/docs/reference/API_REFERENCE.md) · 🇻🇳 [vi](../../../vi/docs/reference/API_REFERENCE.md) · 🇳🇬 [yo](../../../yo/docs/reference/API_REFERENCE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/reference/API_REFERENCE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/reference/API_REFERENCE.md) --- 🌐 **ભાષાઓ:** 🇺🇸 [English](./API_REFERENCE.md) | 🇪🇹 [አማርኛ](../i18n/am/docs/reference/API_REFERENCE.md) | 🇸🇦 [العربية](../i18n/ar/docs/reference/API_REFERENCE.md) | 🇦🇿 [Azərbaycan dili](../i18n/az/docs/reference/API_REFERENCE.md) | 🇧🇬 [Български](../i18n/bg/docs/reference/API_REFERENCE.md) | 🇧🇩 [বাংলা](../i18n/bn/docs/reference/API_REFERENCE.md) | 🇨🇿 [Čeština](../i18n/cs/docs/reference/API_REFERENCE.md) | 🇩🇰 [Dansk](../i18n/da/docs/reference/API_REFERENCE.md) | 🇩🇪 [Deutsch](../i18n/de/docs/reference/API_REFERENCE.md) | 🇬🇷 [Ελληνικά](../i18n/el/docs/reference/API_REFERENCE.md) | 🇪🇸 [Español](../i18n/es/docs/reference/API_REFERENCE.md) | 🇪🇪 [Eesti](../i18n/et/docs/reference/API_REFERENCE.md) | 🇮🇷 [فارسی](../i18n/fa/docs/reference/API_REFERENCE.md) | 🇫🇮 [Suomi](../i18n/fi/docs/reference/API_REFERENCE.md) | 🇫🇷 [Français](../i18n/fr/docs/reference/API_REFERENCE.md) | 🇮🇪 [Gaeilge](../i18n/ga/docs/reference/API_REFERENCE.md) | 🇮🇳 [ગુજરાતી](../i18n/gu/docs/reference/API_REFERENCE.md) | 🇳🇬 [Hausa](../i18n/ha/docs/reference/API_REFERENCE.md) | 🇮🇱 [עברית](../i18n/he/docs/reference/API_REFERENCE.md) | 🇮🇳 [हिन्दी](../i18n/hi/docs/reference/API_REFERENCE.md) | 🇭🇷 [Hrvatski](../i18n/hr/docs/reference/API_REFERENCE.md) | 🇭🇺 [Magyar](../i18n/hu/docs/reference/API_REFERENCE.md) | 🇦🇲 [Հայերեն](../i18n/hy/docs/reference/API_REFERENCE.md) | 🇮🇩 [Bahasa Indonesia](../i18n/id/docs/reference/API_REFERENCE.md) | 🇳🇬 [Igbo](../i18n/ig/docs/reference/API_REFERENCE.md) | 🇮🇹 [Italiano](../i18n/it/docs/reference/API_REFERENCE.md) | 🇯🇵 [日本語](../i18n/ja/docs/reference/API_REFERENCE.md) | 🇬🇪 [ქართული](../i18n/ka/docs/reference/API_REFERENCE.md) | 🇰🇭 [ខ្មែរ](../i18n/km/docs/reference/API_REFERENCE.md) | 🇮🇳 [ಕನ್ನಡ](../i18n/kn/docs/reference/API_REFERENCE.md) | 🇰🇷 [한국어](../i18n/ko/docs/reference/API_REFERENCE.md) | 🇱🇹 [Lietuvių](../i18n/lt/docs/reference/API_REFERENCE.md) | 🇱🇻 [Latviešu](../i18n/lv/docs/reference/API_REFERENCE.md) | 🇮🇳 [മലയാളം](../i18n/ml/docs/reference/API_REFERENCE.md) | 🇮🇳 [मराठी](../i18n/mr/docs/reference/API_REFERENCE.md) | 🇲🇾 [Bahasa Melayu](../i18n/ms/docs/reference/API_REFERENCE.md) | 🇲🇹 [Malti](../i18n/mt/docs/reference/API_REFERENCE.md) | 🇲🇲 [မြန်မာ](../i18n/my/docs/reference/API_REFERENCE.md) | 🇳🇵 [नेपाली](../i18n/ne/docs/reference/API_REFERENCE.md) | 🇳🇱 [Nederlands](../i18n/nl/docs/reference/API_REFERENCE.md) | 🇳🇴 [Norsk](../i18n/no/docs/reference/API_REFERENCE.md) | 🇮🇳 [ଓଡ଼ିଆ](../i18n/or/docs/reference/API_REFERENCE.md) | 🇮🇳 [ਪੰਜਾਬੀ](../i18n/pa/docs/reference/API_REFERENCE.md) | 🇵🇭 [Filipino](../i18n/phi/docs/reference/API_REFERENCE.md) | 🇵🇱 [Polski](../i18n/pl/docs/reference/API_REFERENCE.md) | 🇵🇹 [Português (Portugal)](../i18n/pt/docs/reference/API_REFERENCE.md) | 🇧🇷 [Português (Brasil)](../i18n/pt-BR/docs/reference/API_REFERENCE.md) | 🇷🇴 [Română](../i18n/ro/docs/reference/API_REFERENCE.md) | 🇷🇺 [Русский](../i18n/ru/docs/reference/API_REFERENCE.md) | 🇱🇰 [සිංහල](../i18n/si/docs/reference/API_REFERENCE.md) | 🇸🇰 [Slovenčina](../i18n/sk/docs/reference/API_REFERENCE.md) | 🇸🇮 [Slovenščina](../i18n/sl/docs/reference/API_REFERENCE.md) | 🇷🇸 [Српски](../i18n/sr/docs/reference/API_REFERENCE.md) | 🇸🇪 [Svenska](../i18n/sv/docs/reference/API_REFERENCE.md) | 🇰🇪 [Kiswahili](../i18n/sw/docs/reference/API_REFERENCE.md) | 🇮🇳 [தமிழ்](../i18n/ta/docs/reference/API_REFERENCE.md) | 🇮🇳 [తెలుగు](../i18n/te/docs/reference/API_REFERENCE.md) | 🇹🇭 [ไทย](../i18n/th/docs/reference/API_REFERENCE.md) | 🇹🇷 [Türkçe](../i18n/tr/docs/reference/API_REFERENCE.md) | 🇺🇦 [Українська](../i18n/uk-UA/docs/reference/API_REFERENCE.md) | 🇵🇰 [اردو](../i18n/ur/docs/reference/API_REFERENCE.md) | 🇺🇿 [Oʻzbekcha](../i18n/uz/docs/reference/API_REFERENCE.md) | 🇻🇳 [Tiếng Việt](../i18n/vi/docs/reference/API_REFERENCE.md) | 🇳🇬 [Yorùbá](../i18n/yo/docs/reference/API_REFERENCE.md) | 🇨🇳 [中文 (简体)](../i18n/zh-CN/docs/reference/API_REFERENCE.md) | 🇹🇼 [中文 (繁體)](../i18n/zh-TW/docs/reference/API_REFERENCE.md) OmniRoute API માટેનો મુખ્ય સંદર્ભ. તે જાહેર `/v1` સપાટી અને સૌથી વધુ ઉપયોગમાં લેવાતા મેનેજમેન્ટ એન્ડપોઇન્ટ્સને આવરી લે છે; મશીન-વાંચનીય [`docs/openapi.yaml`](../openapi.yaml) અને `src/app/api/` હેઠળનું રૂટ ટ્રી સંપૂર્ણ સ્રોતો છે. --- ## વિષયસૂચિ - [ચેટ પૂર્ણતાઓ](#chat-completions) - [વિશિષ્ટ સંચાલિત સત્ર લીઝ](#exclusive-managed-session-leases) - [એમ્બેડિંગ્સ](#embeddings) - [છબી નિર્માણ](#image-generation) - [દસ્તાવેજ OCR](#document-ocr) - [મોડેલોની સૂચિ](#list-models) - [પ્રદાતા પ્લગઇન મેનિફેસ્ટ](#provider-plugin-manifest) - [સુસંગતતા એન્ડપોઇન્ટ્સ](#compatibility-endpoints) - [ફાઇલો API](#files-api) - [બૅચ API](#batches-api) - [શોધ API](#search-api) - [WebSocket સ્ટ્રીમિંગ](#websocket-streaming) - [ક્વોટા અને સમસ્યા રિપોર્ટિંગ](#quotas--issues-reporting) - [સિમેન્ટિક કૅશ](#semantic-cache) - [ડૅશબોર્ડ અને સંચાલન](#dashboard--management) - [કોમ્બો સંચાલન](#combo-management) - [વેબહુક્સ](#webhooks) - [નોંધાયેલ કીઝ (સ્વતઃ-સંચાલન)](#registered-keys-auto-management) - [એજન્ટ્સ પ્રોટોકોલ](#agents-protocol) - [સંચાલન પ્રોક્સીઓ](#management-proxies) - [સ્થિતિસ્થાપકતા (વિસ્તૃત)](#resilience-extended) - [કૌશલ્યો](#skills) - [મેમરી](#memory) - [MCP સર્વર](#mcp-server) - [A2A સર્વર](#a2a-server) - [ક્લાઉડ, મૂલ્યાંકનો અને આકલન](#cloud-evals--assess) - [વિનંતી પ્રક્રિયા](#request-processing) - [પ્રમાણીકરણ](#authentication) --- ## ચેટ પૂર્ણતાઓ ```bash POST /v1/chat/completions Authorization: Bearer your-api-key Content-Type: application/json { "model": "cc/claude-opus-4-6", "messages": [ {"role": "user", "content": "Write a function to..."} ], "stream": true } ``` ### કસ્ટમ હેડર્સ | હેડર | દિશા | વર્ણન | | ------------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `X-OmniRoute-No-Cache` | વિનંતી | કૅશને બાયપાસ કરવા માટે `true` પર સેટ કરો | | `x-omniroute-no-memory` | વિનંતી | આ વિનંતી માટે મેમરી + કૌશલ્ય ઇન્જેક્શન છોડવા `true` પર સેટ કરો (નો-કૅશ જેવું જ; દરેક કૉલનો ટોકન/ખર્ચ ઓવરહેડ ટાળે છે) | | `X-OmniRoute-Progress` | વિનંતી | પ્રગતિ ઇવેન્ટ્સ માટે `true` પર સેટ કરો | | `X-Session-Id` | વિનંતી | બાહ્ય સત્ર એફિનિટી માટે સ્ટિકી સત્ર કી | | `x_session_id` | વિનંતી | અન્ડરસ્કોર વેરિઅન્ટ પણ સ્વીકારવામાં આવે છે (ડાયરેક્ટ HTTP) | | `X-OmniRoute-Session-Id` | વિનંતી | કૉલર દ્વારા આપવામાં આવેલ સત્ર/વાતચીત ટૅગ (મેમરીમાં પણ મોકલાય છે). હાજર હોય ત્યારે, પ્રતિ-સત્ર ખર્ચ એટ્રિબ્યુશન માટે `call_logs.session_tag`માં યથાવત્ સંગ્રહાય છે (#8249) — ગેરહાજર હોય ત્યારે ક્યારેય બનાવાતું નથી | | `Idempotency-Key` | વિનંતી | ડિડુપ કી (5s વિન્ડો) | | `X-Request-Id` | વિનંતી | વૈકલ્પિક ડિડુપ કી | | `X-OmniRoute-Cache` | પ્રતિસાદ | `HIT` અથવા `MISS` (નોન-સ્ટ્રીમિંગ) | | `X-OmniRoute-Idempotent` | પ્રતિસાદ | ડિડુપ્લિકેટ કરાયું હોય તો `true` | | `X-OmniRoute-Progress` | પ્રતિસાદ | પ્રગતિ ટ્રૅકિંગ ચાલુ હોય તો `enabled` | | `X-OmniRoute-Session-Id` | પ્રતિસાદ | OmniRoute દ્વારા ઉપયોગમાં લેવાયેલ અસરકારક સત્ર ID | | `X-OmniRoute-Request-Id` | પ્રતિસાદ | વિનંતી સહસંબંધ ID (જ્યારે જાણીતું હોય) | | `X-OmniRoute-Version` | પ્રતિસાદ | OmniRoute બિલ્ડ વર્ઝન (હંમેશાં હાજર) | | `X-OmniRoute-Cost-Saved` | પ્રતિસાદ | HIT પર કૅશ દ્વારા બચાવાયેલ USD (ફક્ત કૅશ હિટ્સ માટે) | | `X-OmniRoute-Decision` | પ્રતિસાદ | રાઉટિંગ ટ્રેસ: `strategy=; provider=; latency_ms=` (`` કોમ્બો વ્યૂહરચના છે અથવા નોન-કોમ્બો વિનંતી માટે `single`) — પૂર્ણતા પ્રતિસાદોમાં હંમેશાં હાજર હોય છે | > Nginx નોંધ: જો તમે અન્ડરસ્કોર હેડર્સ પર આધાર રાખો છો (ઉદાહરણ તરીકે `x_session_id`), તો `underscores_in_headers on;` સક્ષમ કરો. > **ખર્ચ ટેલિમેટ્રી હેડર્સ:** નોન-સ્ટ્રીમિંગ સફળ પ્રતિસાદોમાં `X-OmniRoute-*` ખર્ચ-ટેલિમેટ્રી સેટ પણ હોય છે — `X-OmniRoute-Response-Cost` (USD, નિશ્ચિત 10 દશાંશ સ્થાનો; મફત/કિંમત નિર્ધારિત ન હોય ત્યારે `0.0000000000`), `X-OmniRoute-Tokens-In` / `X-OmniRoute-Tokens-Out`, `X-OmniRoute-Model`, `X-OmniRoute-Provider`, `X-OmniRoute-Latency-Ms`, `X-OmniRoute-Cache-Hit`, અને `X-OmniRoute-Fallback-Attempts` (માત્ર જ્યારે > 0 હોય), ઉપરાંત `X-OmniRoute-Request-Id` અને `X-OmniRoute-Version`. આ હેડર્સ ચેટ કમ્પ્લીશન્સ, `/v1/responses`, `/v1/messages`, **અને મીડિયા એન્ડપોઇન્ટ્સ** — `/v1/embeddings`, `/v1/images/generations`, `/v1/audio/speech`, `/v1/audio/transcriptions`, `/v1/rerank`, `/v1/videos/generations`, `/v1/music/generations`, અને `/v1/moderations` (ખર્ચ હંમેશાં `0`) દ્વારા મોકલવામાં આવે છે. જ્યારે કિંમત ઉપલબ્ધ હોય ત્યારે મીડિયા ખર્ચની ગણતરી મોડેલિટી પ્રમાણે (પ્રતિ-ઇમેજ, પ્રતિ-સેકન્ડ, પ્રતિ-અક્ષર, પ્રતિ સર્ચ-યુનિટ) કરવામાં આવે છે, અન્યથા `0` (ફેઇલ-ઓપન). > **કૅશ-હિટ ખર્ચ અર્થવિજ્ઞાન:** સિમેન્ટિક-કૅશ HIT (`X-OmniRoute-Cache-Hit: true`) પર કોઈ અપસ્ટ્રીમ કૉલ કરવામાં આવતો નથી, તેથી `X-OmniRoute-Response-Cost` `0.0000000000` હોય છે (હિટ સર્વ કરવાનો **વધારાનો** ખર્ચ). મૂળ/થયો હોત તે ખર્ચ `X-OmniRoute-Cost-Saved` માં અલગથી દર્શાવવામાં આવે છે. બિલિંગ ઉપભોક્તાઓએ `X-OmniRoute-Response-Cost` નો સરવાળો કરવો જોઈએ (હિટનો કોઈ ખર્ચ નથી); કૅશ એનાલિટિક્સ `X-OmniRoute-Cost-Saved` ને એકત્રિત કરી શકે છે. ## વિશિષ્ટ સંચાલિત સત્ર લીઝ વિશિષ્ટ સંચાલિત સત્ર લીઝિંગ એ વૈકલ્પિક, ક્લાયન્ટ-નિરપેક્ષ રૂટિંગ કરાર છે: એક સક્રિય માલિક એક પાત્ર OmniRoute કનેક્શન ધરાવે છે. તે કોઈ મોડેલને લીઝ પર આપતું નથી, OAuth જરૂરી બનાવતું નથી, કોઈ ચોક્કસ ક્લાયન્ટને ઓળખતું નથી અથવા કોઈ ચોક્કસ પ્રદાતા જરૂરી બનાવતું નથી. પ્રમાણીકરણ કરતી API કી પાસે `lease:exclusive` સ્કોપ અને સ્પષ્ટ, બિન-ખાલી `allowedConnections` સૂચિ હોવી આવશ્યક છે. ડેટાબેઝ મ્યુટેશન સીમા કી બનાવતી વખતે અને આંશિક અપડેટ્સ દરમિયાન બંને ફીલ્ડને એકસાથે લાગુ કરે છે. ```http POST /api/v1/session-leases Authorization: Bearer Content-Type: application/json X-OmniRoute-Lease-Owner: vlo_<43-base64url-characters> {"action":"acquire","model":"glm/glm-4.6"} ``` સફળ acquire, renew અને release પ્રતિસાદો ટાઇમસ્ટેમ્પ્સ, `state` અને ચોક્કસ ધન `generation` દર્શાવે છે, પરંતુ પસંદ કરેલું કનેક્શન અથવા ઓળખપત્રો ક્યારેય દર્શાવતા નથી. Renew અને release JSON બોડીમાં generation આપે છે: ```json { "action": "renew", "generation": 1 } ``` ```json { "action": "release", "generation": 1, "reason": "OWNER_EXIT" } ``` સક્રિય લીઝ માલિક તેના વર્તમાન બાઇન્ડિંગ માટે સ્પષ્ટપણે ગોપનીયતા-સુરક્ષિત ડિસ્પ્લે મેટાડેટાની વિનંતી કરી શકે છે: ```json { "action": "status", "generation": 1 } ``` ```json { "state": "ACTIVE", "generation": 1, "acquiredAt": "2026-08-28T12:00:00.000Z", "renewedAt": "2026-08-28T12:00:30.000Z", "expiresAt": "2026-08-28T12:02:30.000Z", "connection": { "displayName": "Primary Codex", "provider": "codex" } } ``` આ વૈકલ્પિક status ક્રિયા એક જ ડેટાબેઝ ટ્રાન્ઝેક્શનમાં અપારદર્શક માલિક, પ્રમાણિત સંચાલિત API કી અને ચોક્કસ સક્રિય generation દ્વારા સુરક્ષિત છે. `displayName` માત્ર ટ્રિમ કરેલું કન્ફિગર કરેલું કનેક્શન નામ છે; જ્યારે કોઈ સુરક્ષિત કન્ફિગર કરેલું નામ અસ્તિત્વમાં ન હોય ત્યારે તે `null` હોય છે. OmniRoute ક્યારેય ઇમેઇલ અથવા જનરેટ કરેલી એકાઉન્ટ ઓળખને તેના સ્થાને મૂકતું નથી. પ્રદાતા મૂલ્ય એ બિન-સંવેદનશીલ ડિસ્પ્લે લેબલ છે અને ક્યારેય જનરેટ કરેલું સુસંગત-પ્રદાતા ઓળખકર્તા નથી. ઓળખપત્રો, ટોકન્સ, કુકીઝ, કાચા કનેક્શન અથવા API કી ids, માલિક હેશ, ફેન્સિંગ સિક્રેટ્સ અને આંતરિક રૂટિંગ ડેટાનો સમાવેશ થતો નથી. ખોટી-કી, ખોટા-માલિક, જૂના-generation, ગુમ, સમાપ્ત થયેલા, રિલીઝ થયેલા અને અમાન્ય કરાયેલા લુકઅપ્સ બધા કનેક્શન મેટાડેટા વિના સમાન `409 LEASE_FENCE_STALE` ભૂલ પરત કરે છે. ક્ષમતા-પ્રતીક્ષા પ્રતિસાદ મેળવનાર ક્લાયન્ટ પાસે તપાસવા માટે કોઈ સક્રિય બાઇન્ડિંગ હોતું નથી. જ્યારે રૂટિંગ સક્રિય લીઝનું સંક્રમણ કરે છે, ત્યારે સમાન generation માન્ય રહે છે અને status ઍટોમિક રીતે નવું બાઇન્ડિંગ પરત કરે છે, જૂનું ક્યારેય નહીં. હાલના ક્લાયન્ટ્સ યથાવત્ રહે છે કારણ કે acquire, renew, release અને waiting પ્રતિસાદો તેમના અગાઉના સ્વરૂપો જાળવી રાખે છે. આ સર્વર કરાર મૂળ OpenAI Codex `/status` ને બદલતો નથી. મૂળ Codex હાલમાં તેના મોડેલ પ્રદાતા અને બિલ્ટ-ઇન પ્રમાણીકરણ/એકાઉન્ટ સ્થિતિની જાણ કરે છે, પરંતુ મનસ્વી કસ્ટમ પ્રદાતા એકાઉન્ટ મેટાડેટા રેન્ડર કરતું નથી; ભવિષ્યના ક્લાયન્ટ ઇન્ટિગ્રેશને આ ક્રિયાને કૉલ કરવી અને `connection.displayName` કેવી રીતે દર્શાવવું તે નક્કી કરવું આવશ્યક છે. ત્યારબાદ દરેક સંચાલિત ઇન્ફરન્સ વિનંતી બંને કંટ્રોલ હેડર્સ આપે છે: ```http X-OmniRoute-Lease-Owner: vlo_<43-base64url-characters> X-OmniRoute-Lease-Generation: 1 ``` દરેક સમર્થિત અપસ્ટ્રીમ પ્રયાસ પહેલાં ચોક્કસ માલિક, generation, સક્રિય કનેક્શન અને પ્રમાણિત API કીને તરત જ ફેન્સ કરવામાં આવે છે. અન્ય કી સાથે માલિક અને generation ને ફરીથી ચલાવવું નિષ્ફળ જાય છે, ભલે તે કી સમાન કનેક્શનની પરવાનગી આપતી હોય. કાચા માલિકો પર્સિસ્ટ થતા નથી, લૉગ થતા નથી, વિનંતી સ્નૅપશૉટમાં જાળવવામાં આવતા નથી અથવા અપસ્ટ્રીમ ફોરવર્ડ થતા નથી. અસ્થાયી સ્પર્ધા `Retry-After` સાથે HTTP `429` અને નીચેનું પરત કરે છે: ```json { "state": "WAITING_FOR_CAPACITY", "error": { "type": "lease_error", "code": "LEASE_CAPACITY_UNAVAILABLE" }, "reason": "NO_FREE_ELIGIBLE_CONNECTION", "retryAfter": 30 } ``` આ પ્રતિસાદનો અર્થ માત્ર એટલો જ છે કે સામાન્ય પાત્ર સમૂહ બિન-ખાલી હતો અને દરેક મુક્ત ઉમેદવાર કોઈ અન્ય સક્રિય લીઝ દ્વારા રોકાયેલો હતો. અસમર્થિત મોડેલ્સ/પ્રદાતાઓ, નીતિ અસંગતતા, કૂલડાઉન, ક્વોટા, સ્વાસ્થ્ય અને અન્ય સામાન્ય પાત્રતા નિષ્ફળતાઓ તેમના હાલના OmniRoute પ્રતિસાદો જાળવી રાખે છે. ### `x-omniroute-compression` કમ્પ્રેશન પ્લાનનો પ્રતિ-વિનંતી ઓવરરાઇડ. સર્વોચ્ચ અગ્રતા — રૂટિંગ-કોમ્બો ઓવરરાઇડ, સક્રિય પ્રોફાઇલ, ઑટો-ટ્રિગર અને પેનલ Default કરતાં પણ પ્રાધાન્ય ધરાવે છે. મૂલ્યો: | મૂલ્ય | અસર | | ------------- | ------------------------------------------------------------------------------ | | `off` | આ વિનંતી માટે કોઈ કમ્પ્રેશન નહીં. | | `default` | પેનલમાંથી મેળવેલી Default પ્રોફાઇલ (સક્રિય પ્રોફાઇલને અવગણે છે). | | `engine:` | સક્ષમ હોય ત્યારે એકમાત્ર એન્જિન, દા.ત. `engine:rtk`. | | `` | નામિત કોમ્બો, જે પહેલાં નામ દ્વારા (કેસ-અસંવેદનશીલ), પછી id દ્વારા મેળ ખાય છે. | નોંધો: - અજ્ઞાત મૂલ્યો અવગણવામાં આવે છે (વિનંતી ક્યારેય નકારવામાં આવતી નથી); રિઝોલ્યુશન સામાન્ય ઑપરેટર અગ્રતા અનુસાર આગળ વધે છે. - જો અનેક કોમ્બો સમાન નામ ધરાવતા હોય, તો નિર્ધારિત મેળ માટે કોમ્બો **id** આપો. - જે કોમ્બોનું નામ `off` અથવા `default` હોય તેને નામ દ્વારા પસંદ કરી શકાતું નથી (તે કીવર્ડ્સનું પહેલાં અર્થઘટન થાય છે); આવા કોમ્બોને તેના id દ્વારા સંદર્ભિત કરો. - મુખ્ય કમ્પ્રેશન સ્વિચ સખત નિયંત્રણ છે: જ્યારે કમ્પ્રેશન વૈશ્વિક રીતે અક્ષમ હોય, ત્યારે આ હેડર તેને સક્ષમ કરી શકતું નથી. લાગુ કરેલો પ્લાન પ્રતિસાદ હેડરમાં પાછો દર્શાવવામાં આવે છે: ``` X-OmniRoute-Compression: ; source= ``` જ્યાં `` એ `request-header`, `routing-override`, `active-profile`, `auto-trigger`, `default` અથવા `off` પૈકી એક હોય છે. --- ## એમ્બેડિંગ્સ ```bash POST /v1/embeddings Authorization: Bearer your-api-key Content-Type: application/json { "model": "nebius/Qwen/Qwen3-Embedding-8B", "input": "The food was delicious" } ``` ઉપલબ્ધ પ્રદાતાઓ: Nebius, OpenAI, Mistral, Together AI, Fireworks, NVIDIA, **OpenRouter**, Jina AI. કૅટલૉગ ids `provider/model` સ્વરૂપમાં હોય છે (ઉદાહરણ: `jina-ai/jina-embeddings-v5-omni-small`). રજિસ્ટ્રીમાં દેખાતા માત્ર Jina model ids (ઉદાહરણ તરીકે `jina-embeddings-v5-text-small`, `jina-reranker-v3.5`) પણ રિઝૉલ્વ થાય છે. Jina embed/rerank/classify/segment પહેલાં ડૅશબોર્ડના `jina-ai` ક્રેડેન્શિયલ્સનો ઉપયોગ કરે છે; ડૅશબોર્ડ કી ઉપલબ્ધ ન હોય ત્યારે જ `JINA_AI_API_KEY` ફૉલબૅક તરીકે વપરાય છે. `jina-reader` કાર્ડ માત્ર Reader / `r.jina.ai` માટે છે (`POST /v1/web/fetch`) અને તે ક્યારેય embeddings અથવા rerank પ્રદાન કરતું નથી. મલ્ટિમોડલ સપોર્ટ દર્શાવતા રજિસ્ટ્રી મોડલ્સ વધુમાં વધુ 32 પ્રદાતા-નિરપેક્ષ સ્ટ્રક્ચર્ડ આઇટમ્સ પણ સ્વીકારે છે. મીડિયા આઇટમના પ્રકારો `text`, `image`, `audio`, `video`, અને `document` છે. તેમનો મીડિયા `source` કાં તો `{"type":"url","url":"https://..."}` અથવા `{"type":"base64","data":"...","media_type":"..."}` હોય છે. Jina v5 Omni (`jina-ai/jina-embeddings-v5-omni-small`, `jina-ai/jina-embeddings-v5-omni-nano`, અને ફૅમિલી ઉપનામ `jina-ai/jina-embeddings-v5-omni` → omni-small) Jinaના નેટિવ EmbeddingsV5Request દસ્તાવેજો પણ સ્વીકારે છે અને તેમને **અકબંધ રીતે ફૉર્વર્ડ કરે છે** `https://api.jina.ai/v1/embeddings` પર: ```json { "model": "jina-ai/jina-embeddings-v5-omni-small", "task": "retrieval.query", "normalized": true, "input": [ { "text": "a red bicycle" }, { "image": "https://example.com/bike.png" }, { "content": [{ "text": "caption" }, { "image": "data:image/png;base64,..." }] } ] } ``` નેટિવ `{ image | audio | video | pdf }` મૂલ્યો સાર્વજનિક HTTPS URL, `data:` URI, અથવા રૉ base64 હોઈ શકે છે. OmniRoute તે ઑબ્જેક્ટ્સને સ્ટ્રિંગમાં રૂપાંતરિત કરતું નથી અથવા નેટિવ image URLsને ફેચ કરતું નથી — Jina સાર્વજનિક મીડિયાને પોતે પ્રાપ્ત કરે છે. વધારાનાં Jina ફીલ્ડ્સ (`task`, `normalized`, `truncate`, `embedding_type`) ફૉર્વર્ડ કરવામાં આવે છે. માત્ર-ટેક્સ્ટ Jina SKUs હજુ પણ નૉન-ટેક્સ્ટ દસ્તાવેજોને નકારે છે. સુરક્ષા અને ટ્રાન્સપોર્ટ મર્યાદાઓ: - રિમોટ મીડિયા URLs સાર્વજનિક HTTPS હોવા આવશ્યક છે. કૅનોનિકલ `{type,source:url}` આઇટમ્સને સર્વર-સાઇડ ફેચ કરવામાં આવે છે (રીડાયરેક્ટ પુનઃમાન્યકરણ, ટાઇમઆઉટ, સાઇઝ મર્યાદાઓ, સાર્વજનિક DNS, કનેક્શન પિનિંગ) અને પ્રદાતા કૉલ પહેલાં ઇનલાઇન કરવામાં આવે છે. Jina-નેટિવ `{image:"https://..."}` આઇટમ્સને સમાન સાર્વજનિક-HTTPS ચકાસણી પછી જેમ છે તેમ ફૉર્વર્ડ કરવામાં આવે છે; Jina URLને ફેચ કરે છે. - ઇનલાઇન base64 મીડિયા માટે દરેક આઇટમ દીઠ ડિકોડ કરેલી મર્યાદા 8 MiB અને સમગ્ર રિક્વેસ્ટ માટે ડિકોડ કરેલી મર્યાદા 16 MiB છે. પ્રદાતા રૂપાંતરણ (કૅનોનિકલ આઇટમ્સને ક્યારેય ફેરફાર વિના ફૉર્વર્ડ કરવામાં આવતી નથી): - Jina મલ્ટિમોડલ મોડલ્સ: દરેક ટૉપ-લેવલ આઇટમ ઇનલાઇન મીડિયા માટે data URIsનો ઉપયોગ કરીને એક મોડાલિટી-કીવાળું ઑબ્જેક્ટ (`text` / `image` / `audio` / `video` / `pdf`) બને છે; દરેક ટૉપ-લેવલ આઇટમ દીઠ એક વેક્ટર. - Gemini Embedding 2 ફૅમિલી: એક ટૉપ-લેવલ ઍરે `content.parts` (`text` અથવા `inline_data`) સાથેની એક નેટિવ `models/{model}:embedContent` રિક્વેસ્ટ બને છે. - સ્પષ્ટ મોડાલિટી મેટાડેટા વિનાનાં અજ્ઞાત/ડાયનૅમિક મોડલ્સ HTTP 400 સાથે સ્ટ્રક્ચર્ડ ઇનપુટને નકારે છે. ```json { "model": "jina-ai/jina-embeddings-v5-omni-small", "input": [ { "type": "text", "text": "A red bicycle" }, { "type": "image", "source": { "type": "url", "url": "https://example.com/bicycle.png" } } ], "dimensions": 512, "encoding_format": "float" } ``` અસમર્થિત મોડલ/મોડાલિટી સંયોજનો આઇટમને બળજબરીથી રૂપાંતરિત કરવાને બદલે HTTP 400 પરત કરે છે. લેગસી string/token રિક્વેસ્ટ્સ પરનાં નૉન-ઇનપુટ એક્સ્ટેન્શન ફીલ્ડ્સ ફેરફાર વિના પાસ થવાનું ચાલુ રાખે છે. ```bash # તમામ embedding મોડલ્સની યાદી બનાવો GET /v1/embeddings ``` --- ## છબી જનરેશન ```bash POST /v1/images/generations Authorization: Bearer your-api-key Content-Type: application/json { "model": "openai/gpt-image-2", "prompt": "પર્વતો પરનો સુંદર સૂર્યાસ્ત", "size": "1024x1024" } ``` ઉપલબ્ધ પ્રદાતાઓ: OpenAI (GPT Image 2), xAI (Grok Image), Together AI (FLUX), Fireworks AI, Nebius (FLUX), Hyperbolic, NanoBanana, **OpenRouter**, SD WebUI (સ્થાનિક), ComfyUI (સ્થાનિક). ```bash # બધા છબી મોડેલોની યાદી આપો GET /v1/images/generations ``` --- ## દસ્તાવેજ OCR ```bash POST /v1/ocr Authorization: Bearer your-api-key Content-Type: application/json { "model": "mistral/mistral-ocr-latest", "document": { "type": "document_url", "document_url": "https://example.com/invoice.pdf" } } ``` `model`, `provider/model` ઉપસર્ગ દ્વારા OCR પ્રદાતાને પસંદ કરે છે; માત્ર મોડેલ id (દા.ત. `mistral-ocr-latest`) તેના નોંધાયેલા પ્રદાતા તરીકે ઉકેલાય છે અને જો `model` આપવામાં ન આવ્યું હોય, તો ડિફૉલ્ટ રૂપે Mistral (`mistral-ocr-latest`) વપરાય છે. નોંધાયેલા પ્રદાતાઓ (`open-sse/config/ocrRegistry.ts`): | પ્રદાતા id | મોડેલ id | `model` મૂલ્ય | નોંધો | | ----------------------------- | -------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | | `mistral` | `mistral-ocr-latest` | `mistral/mistral-ocr-latest` (અથવા માત્ર `mistral-ocr-latest`) | સિંક્રોનસ — એક જ અપસ્ટ્રીમ કૉલમાંથી પ્રતિસાદ સીધો પરત કરવામાં આવે છે. | | `azure-document-intelligence` | `prebuilt-read` | `azure-document-intelligence/prebuilt-read` | અસિંક્રોનસ અપસ્ટ્રીમ (`analyze` + પોલ) — નીચે જુઓ. | | `vertex-deepseek-ocr` | `deepseek-ocr-maas` | `vertex-deepseek-ocr/deepseek-ocr-maas` | સિંક્રોનસ, Vertex AIના `openapi/chat/completions` પાર્ટનર એન્ડપોઇન્ટ મારફતે — પ્રમાણીકરણ/URL માટે નીચે જુઓ. | ત્રણેય પ્રદાતાઓ સમાન Mistral-સ્વરૂપની બૉડીમાં પ્રતિસાદ આપે છે: ```json { "pages": [{ "index": 0, "markdown": "# કાઢવામાં આવેલ ટેક્સ્ટ..." }], "model": "mistral-ocr-latest", "usage_info": { "pages_processed": 1 } } ``` ### Azure Document Intelligence પોલ પ્રવાહ Azure Document Intelligenceનું `analyze` API અસિંક્રોનસ છે: પ્રારંભિક વિનંતી બૉડીને બદલે `Operation-Location` હેડર પરત કરે છે અને પરિણામ માટે વારંવાર પોલ કરવું આવશ્યક છે. હેન્ડલર (`open-sse/handlers/ocr.ts`) તે URLને દર સેકન્ડે વધુમાં વધુ 30 પ્રયાસો સુધી પોલ કરે છે, `ok` ન હોય તેવા પોલ પ્રતિસાદ અથવા `"failed"` સ્થિતિ પર તરત નિષ્ફળ થાય છે (પોલ કરવાનું ચાલુ રાખતું નથી) અને પ્રયાસોની મર્યાદા સમાપ્ત થયા પછી પણ ઑપરેશન ચાલી રહ્યું હોય તો `504` પરત કરે છે. અંતિમ Azure પ્રતિસાદને કૉલરને પરત કરતા પહેલાં Mistral દ્વારા વપરાતા સમાન `pages`/`markdown` સ્વરૂપમાં સામાન્યીકૃત કરવામાં આવે છે, તેથી ક્લાયન્ટ કોડને પ્રદાતા માટે વિશેષ વ્યવસ્થા કરવાની જરૂર નથી. ### Vertex AI DeepSeek OCR પ્રમાણીકરણ અને એન્ડપોઇન્ટ નિર્ધારણ `vertex-deepseek-ocr`, ચેટ/છબી ટ્રાફિક માટે OmniRoute પહેલેથી જ સમર્થન આપતું હોય તે જ Vertex AI પ્રમાણીકરણનો ફરીથી ઉપયોગ કરે છે (`open-sse/executors/vertex.ts`): કનેક્શનની API કી કાં તો Service Account JSON ઓળખપત્ર હોય છે (જેને JWT-bearer પ્રવાહ મારફતે ટૂંકા સમય માટે માન્ય OAuth ઍક્સેસ ટોકન સાથે વિનિમય કરવામાં આવે છે) અથવા પહેલેથી જ બનાવાયેલ OAuth ઍક્સેસ ટોકન હોય છે, જેનો જેમ છે તેમ ઉપયોગ થાય છે. અપસ્ટ્રીમ એન્ડપોઇન્ટ URL એ Vertexનું સામાન્ય `openapi/chat/completions` પાર્ટનર એન્ડપોઇન્ટ છે, જે કનેક્શનના પ્રોજેક્ટ અને પ્રદેશ પરથી બનાવવામાં આવે છે — સ્પષ્ટ `providerSpecificData.project`/`providerSpecificData.region`ને હંમેશાં પ્રાથમિકતા મળે છે; અન્યથા પ્રોજેક્ટ Service Account JSONના `project_id` પરથી મેળવવામાં આવે છે અને પ્રદેશ ડિફૉલ્ટ રૂપે `us-central1` હોય છે. બંને નિર્ધારણો `open-sse/handlers/ocr.ts`માં થાય છે (`resolveVertexOcrAccessToken`, `resolveVertexOcrBaseUrl`), જેનો ઉપયોગ `handleOcr`ને મોકલતા પહેલાં `src/app/api/v1/ocr/route.ts` દ્વારા કરવામાં આવે છે. --- ## મોડેલોની યાદી ```bash GET /v1/models Authorization: Bearer your-api-key → OpenAI ફોર્મેટમાં તમામ ચૅટ, એમ્બેડિંગ અને ઇમેજ મોડેલો + કોમ્બો પરત કરે છે ``` ### મોડેલ id ઉપસર્ગો (`?prefix=`) મોટાભાગના મોડેલો **પ્રદાતા ઉપસર્ગ** હેઠળ દર્શાવવામાં આવે છે. તમને કયો ઉપસર્ગ મળે છે તે `MODELS_CATALOG_PREFIX_MODE` ફીચર ફ્લૅગ દ્વારા નિયંત્રિત થાય છે અને તેને ક્વેરી પૅરામીટર વડે **દર વિનંતી દીઠ** ઓવરરાઇડ કરી શકાય છે — જે એવા ક્લાયન્ટ માટે ઉપયોગી છે જે બીજા બધા માટેની સર્વર-વ્યાપી સેટિંગ બદલ્યા વિના સ્વચ્છ યાદી ઇચ્છે છે: ```bash GET /v1/models?prefix=alias # મોડેલ દીઠ એક id — ટૂંકો ઉપનામ ઉપસર્ગ GET /v1/models?prefix=dual # બંને સ્વરૂપો (સર્વર ડિફૉલ્ટ) GET /v1/models?prefix=canonical # માત્ર સંપૂર્ણ પ્રદાતા-id ઉપસર્ગ ``` | મોડ | ઉત્સર્જિત કરે છે | નોંધો | | ----------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `dual` | `cc/claude-sonnet-4-6` **અને** `claude/claude-sonnet-4-6` | **ડિફૉલ્ટ.** બંને ids એક જ મોડેલ તરફ રૂટ થાય છે; કોઈપણ સ્વરૂપને હાર્ડકોડ કરેલા ક્લાયન્ટ કૉન્ફિગ્સ કાર્યરત રહે તે માટે આ જાળવી રાખવામાં આવ્યું છે. આ કૅટલૉગનું કદ લગભગ બમણું કરે છે. | | `alias` | `cc/claude-sonnet-4-6` | મોડેલ દીઠ એક એન્ટ્રી. અલગ ઉપનામ ન ધરાવતા પ્રદાતાઓ પણ પોતાની એન્ટ્રી ઉત્સર્જિત કરે છે, તેથી કંઈ ગુમ થતું નથી. | | `canonical` | `claude/claude-sonnet-4-6` | સંપૂર્ણ પ્રદાતા-id ઉપસર્ગ હેઠળ મોડેલ દીઠ એક એન્ટ્રી. અલગ ઉપનામ ન ધરાવતા પ્રદાતાઓ (દા.ત. `antigravity/…`, `agy/…`) પણ અહીં પોતાનું એકમાત્ર id ઉત્સર્જિત કરે છે, તેથી કંઈ ગુમ થતું નથી. | `dual`-મોડ મિરરને ક્વેરી પૅરામીટર વિના પણ ઓળખી શકાય છે: તેમાં પ્રાથમિક id તરફ નિર્દેશ કરતું `parent` ફીલ્ડ હોય છે. મોડેલ પિકર રેન્ડર કરતા ક્લાયન્ટોએ `?prefix=alias` માટે વિનંતી કરવી જોઈએ — [OmniCopilot VS Code extension](../guides/VSCODE-COPILOT.md) પણ આ જ કરે છે. ### વિચારણા-વિનાના મોડેલ વેરિઅન્ટ્સ વિચારણા-સક્ષમ Claude મોડેલો માટે, `/v1/models` એક **વિચારણા-વિનાનું** વેરિઅન્ટ પણ દર્શાવે છે, જેના id પહેલાં `claude-3-omniroute-no-thinking/` ઉપસર્ગ હોય છે: ``` claude-3-omniroute-no-thinking// ``` આ id પસંદ કરવાથી (દા.ત. હંમેશાં `thinking` બ્લૉક જોડતા Claude Code કૉન્ફિગમાં) રીઝનિંગને નિષ્ક્રિય રાખીને વાસ્તવિક `/` પર પાછું રિઝૉલ્વ થાય છે — `/v1/messages` પાથ પર `thinking:{type:"disabled"}`, અથવા `/v1/chat/completions` પાથ પર `reasoning`/`reasoning_effort` ફીલ્ડ્સ દૂર કરવામાં આવે છે. આ વેરિઅન્ટ માત્ર એવા Claude-કુટુંબના મોડેલો માટે સૂચિબદ્ધ થાય છે જે વિચારણાને સપોર્ટ કરે છે **અને** `disabled`ને માન્ય રાખે છે (તેથી, દા.ત. `disabled`ને નકારતા માત્ર-અડૅપ્ટિવ મોડેલો બાકાત રાખવામાં આવે છે). ઑપરેટર્સ `ModelSpec.noThinkingAlias` દ્વારા દરેક મોડેલ માટે વેરિઅન્ટને બળજબરીથી ચાલુ અથવા બંધ કરી શકે છે. --- ## પ્રોવાઇડર પ્લગઇન મેનિફેસ્ટ ```bash GET /api/v1/provider-plugin-manifest ``` Bifrost, CLIProxyAPI અને ભવિષ્યના સાઇડકાર રાઉટર્સ દ્વારા ઉપયોગમાં લેવાતું JSON-સુરક્ષિત પ્રોવાઇડર પ્લગઇન મેનિફેસ્ટ પરત કરે છે. પ્રતિસાદ TypeScript પ્રોવાઇડર રજિસ્ટ્રીમાંથી જનરેટ થાય છે અને ઇરાદાપૂર્વક OAuth ક્લાયન્ટ સિક્રેટ્સ, રનટાઇમ એન્વાયર્નમેન્ટ રિઝોલ્યુશન, એક્ઝિક્યુટર ફંક્શન્સ, રિક્વેસ્ટ હેડર્સ અને એકાઉન્ટ ડેટાને બાકાત રાખે છે. જ્યારે સાઇડકાર આઉટ-ઓફ-પ્રોસેસ ચાલે અને `open-sse/config/providerPluginManifestRegistry.ts` ને સીધી રીતે ઇમ્પોર્ટ ન કરી શકે ત્યારે આ એન્ડપોઇન્ટનો ઉપયોગ કરો. --- ## સુસંગતતા એન્ડપોઇન્ટ્સ | પદ્ધતિ | પાથ | ફોર્મેટ | | ------ | ----------------------------------------- | ---------------------------------- | | POST | `/v1/chat/completions` | OpenAI | | POST | `/v1/messages` | Anthropic | | POST | `/v1/responses` | OpenAI Responses | | POST | `/v1/embeddings` | OpenAI | | POST | `/v1/images/generations` | OpenAI Images | | POST | `/v1/images/edits` | OpenAI Images (સંપાદન/ઇનપેઇન્ટ) | | POST | `/v1/videos/generations` | OpenAI-શૈલીનું વિડિયો જનરેશન | | POST | `/v1/music/generations` | OpenAI-શૈલીનું સંગીત જનરેશન | | POST | `/v1/audio/transcriptions` | OpenAI Audio (STT) | | POST | `/v1/audio/speech` | OpenAI TTS (ઑડિયો બોડી પરત કરે છે) | | POST | `/v1/rerank` | Cohere/Voyage-શૈલીનું રીરૅન્ક | | POST | `/v1/classify` | Jina વર્ગીકરણ (`api.jina.ai`) | | POST | `/v1/segment` | Jina સેગમેન્ટર (`segment.jina.ai`) | | POST | `/v1/moderations` | OpenAI Moderations | | GET | `/v1/models` | OpenAI | | POST | `/v1/messages/count_tokens` | Anthropic | | GET | `/v1beta/models` | Gemini | | POST | `/v1beta/models/{...path}` | Gemini generateContent | | POST | `/v1/api/chat` | Ollama | | GET | `/api/v1/vscode/{token}/` | OpenAI કૅટલૉગ ઉપનામ | | GET | `/api/v1/vscode/{token}/models` | OpenAI મોડલ્સનું ઉપનામ | | POST | `/api/v1/vscode/{token}/chat/completions` | OpenAI ટોકનાઇઝ્ડ ઉપનામ | | POST | `/api/v1/vscode/{token}/responses` | OpenAI Responses ટોકનાઇઝ્ડ ઉપનામ | | POST | `/api/v1/vscode/{token}/api/chat` | Ollama ટોકનાઇઝ્ડ ઉપનામ | | GET | `/api/v1/vscode/{token}/api/tags` | Ollama ટૅગ્સનું ટોકનાઇઝ્ડ ઉપનામ | બધા POST રૂટ્સ સમાન માળખાને અનુસરે છે: `Bearer your-api-key` + Zod દ્વારા માન્ય કરાયેલ JSON બોડી (`v1RerankSchema`, `v1ModerationSchema`, `v1AudioSpeechSchema` વગેરે, `src/shared/validation/schemas.ts` જુઓ). સ્કીમા નિષ્ફળ જાય ત્યારે 4xx પરત કરવામાં આવે છે. જે ક્લાયન્ટ્સ `Authorization: Bearer ...` જોડી શકતા નથી તેમના માટે OmniRoute, ક્વેરી-સ્ટ્રિંગ સુસંગતતા (`?token=...`, `?apiKey=...`, `?api_key=...`, `?key=...`) અથવા નીચે દસ્તાવેજીકૃત સમર્પિત `/api/v1/vscode/{token}/...` એન્ડપોઇન્ટ્સ દ્વારા URLમાં API કીઝ પણ સ્વીકારે છે. ```bash # રીરૅન્ક POST /v1/rerank { "model": "jina-ai/jina-reranker-v3.5", "query": "...", "documents": ["..."] } # Jina વર્ગીકરણ (Foundation API ઓળખપત્રો) POST /v1/classify { "model": "jina-embeddings-v5-text-small", "input": ["..."], "labels": ["a", "b"] } # Jina સેગમેન્ટર POST /v1/segment { "content": "...", "return_chunks": true } # Jina શોધ (s.jina.ai; પ્રોવાઇડર ઉપનામો: jina-search, jina-ai, jina) POST /v1/search { "query": "...", "provider": "jina-search" } # મોડરેશન્સ POST /v1/moderations { "model": "omni-moderation-latest", "input": "..." } # TTS — audio/mpeg (અથવા વિનંતી કરાયેલ ફોર્મેટ) બોડી પરત કરે છે POST /v1/audio/speech { "model": "openai/tts-1", "input": "Hello", "voice": "alloy" } # છબી સંપાદન (multipart) POST /v1/images/edits -F image=@input.png -F prompt="..." -F mask=@mask.png # વિડિયો / સંગીત જનરેશન (પ્રોવાઇડર-પ્રિફિક્સવાળી મોડલ id) POST /v1/videos/generations { "model": "runway/gen-3", "prompt": "..." } POST /v1/music/generations { "model": "suno/v3.5", "prompt": "..." } ``` ### સમર્પિત પ્રોવાઇડર રૂટ્સ ```bash POST /v1/providers/{provider}/chat/completions POST /v1/providers/{provider}/embeddings POST /v1/providers/{provider}/images/generations ``` જો પ્રોવાઇડર પ્રિફિક્સ ન હોય તો તે આપમેળે ઉમેરવામાં આવે છે. મેળ ન ખાતાં મોડલ્સ `400` પરત કરે છે. --- ## Files API બેચ ઇનપુટ/આઉટપુટ અને ફાઇલ-હેતુવાળા અપલોડ્સ માટે OpenAI-સુસંગત ફાઇલ્સ એન્ડપોઇન્ટ. | પદ્ધતિ | પાથ | વર્ણન | | ------ | ------------------------ | ----------------------------------------------------------------------------------------------------------------- | | POST | `/v1/files` | ફાઇલ અપલોડ કરો (multipart: `file`, `purpose`, `expires_after[anchor]`, `expires_after[seconds]`) — મહત્તમ 512 MiB | | GET | `/v1/files` | પ્રમાણિત API કી માટેની ફાઇલોની યાદી આપો | | GET | `/v1/files/[id]` | ફાઇલનું મેટાડેટા મેળવો | | DELETE | `/v1/files/[id]` | ફાઇલ કાઢી નાખો | | GET | `/v1/files/[id]/content` | મૂળ ફાઇલ બોડીને સ્ટ્રીમ કરીને પરત મોકલો | **પ્રમાણીકરણ:** બેરર API કી — `getApiKeyRequestScope` મારફતે ફાઇલોનો વ્યાપ દરેક API કી મુજબ નક્કી થાય છે. કી માત્ર તેની પોતાની ફાઇલો જુએ છે, ડાઉનલોડ કરે છે અને કાઢી નાખે છે; કી વિનાનું ડેશબોર્ડ સેશન સમગ્ર ઇન્સ્ટન્સ વાંચે છે; માલિક વિનાની ફાઇલ (અનામી અથવા ડેશબોર્ડ-સેશન અપલોડ) દરેક બિન-સેશન કૉલર માટે પ્રતિબંધિત છે. `GET /v1/files` અનામી કૉલરને — અને એવી પ્રસ્તુત કીને જેનું નિરાકરણ થતું નથી — `REQUIRE_API_KEY=false` હોય ત્યારે પણ, દરેક ટેનન્ટની ફાઇલોની યાદી આપવાને બદલે `401` સાથે નકારે છે (GHSA-m3hp-hq9g-fpmv, GHSA-2jm2-mpx8-6523). --- ## Batches API OpenAI-સુસંગત બેચ પ્રોસેસિંગ. | પદ્ધતિ | પાથ | વર્ણન | | ------ | ------------------------- | ------------------------------------------------------------------------------------------------------------- | | POST | `/v1/batches` | બેચ બનાવો — `v1BatchCreateSchema` દ્વારા માન્ય કરાયેલ બોડી (`input_file_id`, `endpoint`, `completion_window`) | | GET | `/v1/batches` | બેચોની યાદી આપો | | GET | `/v1/batches/[id]` | બેચની સ્થિતિ + `request_counts` મેળવો | | DELETE | `/v1/batches/[id]` | પૂર્ણ/નિષ્ફળ થયેલ બેચ કાઢી નાખો | | POST | `/v1/batches/[id]/cancel` | પ્રગતિમાં રહેલો બેચ રદ કરો | **પ્રમાણીકરણ:** બેરર API કી. બેચનો વ્યાપ ફાઇલો જેવા જ ત્રિ-માર્ગી નિયમ હેઠળ દરેક API કી મુજબ નક્કી થાય છે: માત્ર પોતાની કી, ડેશબોર્ડ સેશન માટે સમગ્ર ઇન્સ્ટન્સ, અને દરેક બિન-સેશન કૉલર માટે નલ-માલિકીના રેકોર્ડ પ્રતિબંધિત (મેળવવા, કાઢી નાખવા, રદ કરવા અને બનાવતી વખતે `input_file_id`ની ચકાસણી). `GET /v1/batches` અનામી કૉલરને `REQUIRE_API_KEY=false` હોય ત્યારે પણ `401` સાથે નકારે છે. --- ## Search API વેબ/શોધ પ્રદાતા અમૂર્તીકરણ (Tavily, Brave, Exa, Serper વગેરે). | પદ્ધતિ | પાથ | વર્ણન | | ------ | ---------------------- | -------------------------------------------------------------------------------------------------- | | GET | `/v1/search` | રૂપરેખાંકિત શોધ પ્રદાતાઓ + ક્ષમતાઓની યાદી આપે છે | | POST | `/v1/search` | શોધ ક્વેરી ચલાવે છે — બોડી `v1SearchSchema` દ્વારા માન્ય કરાય છે, કેશિંગ/કોએલેસિંગને સપોર્ટ કરે છે | | GET | `/v1/search/analytics` | પ્રત્યેક પ્રદાતા માટે હિટ/લેટન્સી/કેશ આંકડા | **પ્રમાણીકરણ:** Bearer API કી (`extractApiKey` + `isValidApiKey`). શોધ નીતિ `enforceApiKeyPolicy` દ્વારા લાગુ કરવામાં આવે છે. --- ## Web Fetch API રૂપરેખાંકિત વેબ-ફેચ પ્રદાતા (Firecrawl, Jina Reader, Tavily Extract, TinyFish Fetch, Nimble Extract) દ્વારા URLમાંથી સામગ્રી કાઢે છે. | પદ્ધતિ | પાથ | વર્ણન | | ------ | --------------- | --------------------------------------------------------------------- | | POST | `/v1/web/fetch` | URL ફેચ/સ્ક્રેપ કરે છે — બોડી `v1WebFetchSchema` દ્વારા માન્ય કરાય છે | **પ્રમાણીકરણ:** Bearer API કી (`extractApiKey` + `isValidApiKey`). નીતિ `enforceApiKeyPolicy` દ્વારા લાગુ કરવામાં આવે છે. **ક્વોટા-જાગૃત ફૉલબૅક (#8297):** જ્યારે કોઈ સ્પષ્ટ `provider` આપવામાં આવ્યો ન હોય, ત્યારે પૂલમાં (`firecrawl` → `jina-reader` → `tavily-search` → `tinyfish` → `nimble-search`) નિશ્ચિત પ્રાથમિકતા ક્રમમાં (પહેલા-ભરો) આગળ વધવામાં આવે છે — દર-મર્યાદિત પરંતુ રૂપરેખાંકિત પ્રદાતાને વિનંતીને તરત સમાપ્ત કરવાને બદલે અવગણવામાં આવે છે, અને ફરી પ્રયાસ કરી શકાય તેવી/ક્વોટા-સંબંધિત અપસ્ટ્રીમ નિષ્ફળતા (HTTP 429 હંમેશાં; Firecrawl/Tavily/TinyFishના ક્વોટા-શૈલીના મફત સ્તરો માટે 402/403 — Jina Reader માટે નહીં, અને સામાન્ય 400 ખરાબ વિનંતી માટે ક્યારેય નહીં) વિનંતીના સમયે આગલા હજુ અજમાવ્યા ન હોય તેવા, ક્રેડેન્શિયલ ધરાવતા પ્રદાતા તરફ આગળ વધે છે. જ્યારે પૂલના દરેક પ્રદાતાની ક્ષમતા સમાપ્ત થઈ જાય, ત્યારે એન્ડપોઇન્ટ અગાઉના સામાન્ય `400`ના બદલે એક જ `429` (`Retry-After` હેડર સાથે) પરત કરે છે. જ્યારે સ્પષ્ટ `provider`ની વિનંતી કરવામાં આવે, ત્યારે કોઈ મૌન ફૉલબૅક **નથી** — દર-મર્યાદિત અથવા નિષ્ફળ સ્પષ્ટ પ્રદાતા પોતાની જ ભૂલ દર્શાવે છે (દર-મર્યાદિત હોય તો `429`, અન્યથા અપસ્ટ્રીમ સ્ટેટસ). --- ## WebSocket સ્ટ્રીમિંગ ```bash GET /v1/ws?handshake=1 ``` WebSocket અપગ્રેડ હેન્ડશેકને માન્ય કરે છે અને વાયર પ્રોટોકોલના ઉદાહરણ સંદેશાઓ (`request`, `cancel`) પરત કરે છે. વાસ્તવિક WS ફ્રેમ્સ Next.js રૂટ ટેબલની બહાર બંડલ કરેલા WS સર્વર દ્વારા સંભાળવામાં આવે છે. **પ્રમાણીકરણ:** હેન્ડશેક દરમિયાન Bearer API કી. ### WebSocket મારફતે Responses API (માત્ર codex) ```bash # HTTP API જેવો જ હોસ્ટ:પોર્ટ (ડિફૉલ્ટ 20128); કનેક્શન અપગ્રેડ કરો: wscat -c "ws://localhost:20128/v1/responses?api_key=" # (અથવા: -H "Authorization: Bearer ") # પ્રથમ ફ્રેમ response.create જ હોવી આવશ્યક છે: { "type": "response.create", "model": "gpt-5.5", "input": [ { "role": "user", "content": "hi" } ] } ``` Responses-API-over-WebSocket પ્રોક્સી **ફક્ત `codex` સાથે** જોડાયેલ છે (ChatGPT બેકએન્ડ). તે API/ડૅશબોર્ડ જેવા જ પોર્ટ પર `/v1/responses`, `/responses` અને `/api/v1/responses` પાથ પર સાંભળે છે. પ્રથમ `response.create` ફ્રેમ પર તે આંતરિક `codex-responses-ws` બ્રિજ દ્વારા પ્રમાણીકરણ + તૈયારી કરે છે, એક codex OAuth કનેક્શન પસંદ કરે છે અને `wreq-js` ટ્રાન્સપોર્ટ દ્વારા `wss://chatgpt.com/backend-api/codex/responses` સુધી ટનલ બનાવે છે. **બિન-codex મોડેલો નકારવામાં આવે છે** (`codex_ws_provider_required`). ક્વોટા-શેર રૂટિંગ માટે `model: "qtSd//codex/"` વાપરો. અમલીકરણ `app/server-ws.mjs` + `scripts/dev/responses-ws-proxy.mjs` + `src/app/api/internal/codex-responses-ws/route.ts`માં છે. **પ્રમાણીકરણ:** હેન્ડશેક દરમિયાન Bearer API કી. બંડલ કરેલું HTTP સર્વર (`server-ws.mjs`) સક્રિય એન્ટ્રીપોઇન્ટ હોવું આવશ્યક છે (`app/server-ws.mjs` હાજર હોય ત્યારે ડિફૉલ્ટ રૂપે તે જ હોય છે). #### મોડેલ id: મૂળભૂત ChatGPT id વાપરો (`codex/` પ્રિફિક્સ વિના) જ્યારે `supports_websockets = true` હોય ત્યારે OpenAI **Codex CLI** ક્લાયન્ટ બાજુએ મોડેલ નામને માન્ય કરે છે અને `codex/gpt-5.5` જેવા **પ્રદાતા-પ્રિફિક્સવાળા ids નકારે છે** (`The 'codex/gpt-5.5' model is not supported when using Codex with a ChatGPT account`). **મૂળભૂત** id મોકલો (દા.ત. `gpt-5.5`). OmniRouteનો બ્રિજ માત્ર codex માટે છે, તેથી અપસ્ટ્રીમમાં ટનલ કરતાં પહેલાં તે મૂળભૂત idને codex મોડેલ તરીકે (`resolveCodexWsModelInfo`) ફરીથી રિઝોલ્વ કરે છે — ભલે મૂળભૂત `gpt-5.5` અન્યથા HTTP મારફતે બીજા પ્રદાતા તરફ રૂટ થાય. #### OpenAI Codex CLIને રૂપરેખાંકિત કરવું WebSocket સપોર્ટ ધરાવતો કસ્ટમ પ્રદાતા `~/.codex/config.toml`માં ઉમેરીને Codex CLIને OmniRoute તરફ નિર્દેશિત કરો (હાલની રૂપરેખાને સ્પર્શવાનું ટાળવા માટે અલગ `CODEX_HOME` વાપરો): ```toml model = "gpt-5.5" # મૂળભૂત id — "codex/gpt-5.5" નહીં model_provider = "omniroute" [model_providers.omniroute] name = "OmniRoute (WS)" base_url = "http://localhost:20128/v1" # અંતે સ્લૅશ નહીં; WS URL તારવવામાં આવે છે (પ્રોડક્શનમાં https/wss વાપરો) wire_api = "responses" # Feb 2026થી એકમાત્ર સમર્થિત મૂલ્ય supports_websockets = true # Responses-over-WS ટ્રાન્સપોર્ટ સક્ષમ કરે છે env_key = "OMNIROUTE_API_KEY" # OmniRoute API કી (Bearer) ધરાવે છે ``` ```bash export OMNIROUTE_API_KEY=sk-... # એક OmniRoute API કી (REQUIRE_API_KEY=false હોય તો કોઈપણ કી) codex exec "Responda apenas: PONG" ``` CLI `base_url + /responses`ને WebSocketમાં અપગ્રેડ કરે છે અને OmniRoute તેને પસંદ કરેલા codex OAuth કનેક્શન સુધી ટનલ કરે છે. સ્થાનિક સર્વર સામે શરૂઆતથી અંત સુધી માન્ય કરાયેલ: ChatGPT `codex.rate_limits` + `response.created` પરત કરે છે અને પૂર્ણતાને સ્ટ્રીમ કરે છે. --- ## ક્વોટા અને સમસ્યા રિપોર્ટિંગ | પદ્ધતિ | પાથ | વર્ણન | | ------ | ------------------- | -------------------------------------------------------------------------------------- | | GET | `/v1/quotas/check` | નોંધાયેલ કી જારી કરતાં પહેલાં `provider` + `accountId` માટે ક્વોટાની પૂર્વ-ચકાસણી કરો | | POST | `/v1/issues/report` | ક્વોટા/કી જારી કરવાની નિષ્ફળતાની GitHub પર જાણ કરો (`GITHUB_ISSUES_REPO` + ટોકન જરૂરી) | **પ્રમાણીકરણ:** Bearer API કી (`isAuthenticated`). --- ## સ્વ-સેવા વપરાશ (`/api/usage/om-usage`) કોઈપણ API કી **પોતાનો** વપરાશ અને ક્વોટા વાંચી શકે છે — મેનેજમેન્ટ પ્રમાણીકરણની જરૂર નથી. ક્લાયન્ટ (CLI, OmniCopilot પેનલ) કી ધારકને તેમનો ખર્ચ બતાવવા માટે આ એન્ડપોઇન્ટનો ઉપયોગ કરે છે. ```bash # ટેક્સ્ટ સ્વરૂપ (ઐતિહાસિક કરાર — ટર્મિનલ માટે સાદો ટેક્સ્ટ) curl -H "Authorization: Bearer " \ http://localhost:20128/api/usage/om-usage # સંરચિત સ્વરૂપ — UI જેનો ઉપયોગ કરે છે curl -H "Authorization: Bearer " \ "http://localhost:20128/api/usage/om-usage?format=json" ``` કી માટે **`allowUsageCommand`** સક્ષમ હોવું જરૂરી છે (ડિફૉલ્ટ રૂપે બંધ — ડૅશબોર્ડનું API-કી મેનેજર તેને દરેક કી માટે ટૉગલ કરે છે). તેના વિના એન્ડપોઇન્ટ `403` જવાબ આપે છે. `?format=json` એક ભેદદર્શક સંરચના પરત કરે છે, જેથી કૉલર અસ્વીકારના જવાબમાંથી ક્યારેય ડેટા ફીલ્ડ વાંચે નહીં. સફળતા પર: ```jsonc { "allowed": true, // ફક્ત ત્યારે હાજર હોય છે જ્યારે કીએ પ્રતિ-કી વપરાશ મર્યાદાઓ (દૈનિક/સાપ્તાહિક USD) પસંદ કરી હોય: "personal": { "dailySpentUsd": 1.25, "dailyLimitUsd": 5, "dailyResetAtIso": "…", "weeklySpentUsd": 8, "weeklyLimitUsd": 20, "weeklyResetAtIso": "…" /* … */, }, // પસંદ કરેલ પ્રોવાઇડર ક્વોટાનો સ્નૅપશૉટ, અથવા હજી કંઈ કૅશ ન થયું હોય ત્યારે null: "provider": { "connectionId": "…", "provider": "claude", "plan": "…", "quotas": {/* … */}, }, // દરેક કનેક્શનનો સ્નૅપશૉટ, જેથી UI ઘણા પ્રોવાઇડર્સને બાજુ-બાજુ દર્શાવી શકે: "providers": [ { "connectionId": "…", "provider": "claude" /* … */ }, { "provider": "codex" /* … */ }, ], } ``` અસ્વીકાર પર (`401` અમાન્ય કી / `403` પરવાનગી નથી) એ જ રૂટ `{ "allowed": false, "error": { "message": "…" } }` પરત કરે છે — હાજર-પણ-ખાલી `personal`/`provider` (કી માન્ય છે, હજી કંઈ જાણવામાં આવ્યું નથી) એ અસ્વીકાર કરતાં અલગ સ્થિતિ છે, અને માત્ર JSON સ્વરૂપ તેમની વચ્ચે ભેદ કરે છે. **પ્રમાણીકરણ:** કૉલરની પોતાની Bearer API કી, જે `isValidApiKey` વડે માન્ય કરવામાં આવે છે — આ મેનેજમેન્ટ સપાટી (`/api/keys/…`) _નથી_, જે `requireManagementAuth` દ્વારા સુરક્ષિત રહે છે. --- ## સિમેન્ટિક કૅશ ```bash # કૅશના આંકડા મેળવો GET /api/cache/stats # બધા કૅશ સાફ કરો DELETE /api/cache/stats ``` પ્રતિસાદનું ઉદાહરણ: ```json { "semanticCache": { "memorySize": 42, "memoryMaxSize": 500, "dbSize": 128, "hitRate": 0.65 }, "idempotency": { "activeKeys": 3, "windowMs": 5000 } } ``` ### લેટન્સી પર અસર સિમેન્ટિક કૅશ HIT પ્રતિસાદને **અપસ્ટ્રીમ કૉલ વિના** કૅશમાંથી આપે છે, તેથી રિપોર્ટ કરાયેલ `X-OmniRoute-Response-Latency` લગભગ શૂન્ય હોય છે (મૂળ અપસ્ટ્રીમ લેટન્સીને ધ્યાનમાં લીધા વિના). લેટન્સી-સંવેદનશીલ ક્લાયન્ટ્સ (બેન્ચમાર્કિંગ, p50/p99 મોનિટરિંગ)એ `X-OmniRoute-Cache-Latency` પ્રતિસાદ હેડર તપાસવું જોઈએ: | મૂલ્ય | અર્થ | | ----------- | ---------------------------------------------------------------------- | | `synthetic` | પ્રતિસાદ કૅશમાંથી આપવામાં આવ્યો છે; લેટન્સી વાસ્તવિક અપસ્ટ્રીમ સમય નથી | | _(ગેરહાજર)_ | વાસ્તવિક અપસ્ટ્રીમ કૉલમાંથી આવેલ પ્રતિસાદ | ### પ્રતિ-કી કૅશ બાયપાસ API કીઓ `cacheDefaultMode` દ્વારા સિમેન્ટિક કૅશ વાંચનમાંથી બહાર રહી શકે છે: | મૂલ્ય | વર્તન | | -------- | -------------------------------------------------------- | | `legacy` | સામાન્ય કૅશ વર્તન (ડિફૉલ્ટ) | | `bypass` | કૅશ લુકઅપ સંપૂર્ણપણે અવગણો; હંમેશા અપસ્ટ્રીમનો ઉપયોગ કરો | કી બનાવતી વખતે (`POST /api/keys`) સેટ કરો અથવા (`PATCH /api/keys/[id]`) દ્વારા અપડેટ કરો: ```json { "cacheDefaultMode": "bypass" } ``` ### પ્રતિ-વિનંતી બાયપાસ કોઈપણ વિનંતી કી સેટિંગ્સને ધ્યાનમાં લીધા વિના કૅશને બાયપાસ કરી શકે છે: ``` X-OmniRoute-No-Cache: true ``` --- ## ડેશબોર્ડ અને વ્યવસ્થાપન વ્યવસ્થાપન રૂટ્સ (`/api/*`, જાહેર auth/login સિવાય) સામાન્ય inference API કીઓ દ્વારા અધિકૃત **નથી**. ઓળખપત્રના પ્રકારો, સ્કોપ્સ અને curl ઉદાહરણો: [વ્યવસ્થાપન પ્રમાણીકરણ](../guides/MANAGEMENT-AUTH.md). ### પ્રમાણીકરણ | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | ----------------------------- | ------- | --------------------------- | | `/api/auth/login` | POST | લૉગિન | | `/api/auth/logout` | POST | લૉગઆઉટ | | `/api/settings/require-login` | GET/PUT | લૉગિન આવશ્યકતા ચાલુ/બંધ કરો | ### પ્રદાતા વ્યવસ્થાપન | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | ---------------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------- | | `/api/providers` | GET/POST | પ્રદાતાઓની સૂચિ જુઓ / બનાવો | | `/api/providers/[id]` | GET/PUT/DELETE | પ્રદાતાનું વ્યવસ્થાપન કરો | | `/api/providers/[id]/test` | POST | પ્રદાતા કનેક્શનનું પરીક્ષણ કરો | | `/api/providers/[id]/models` | GET | પ્રદાતાના મોડેલોની સૂચિ જુઓ | | `/api/providers/validate` | POST | પ્રદાતાનું રૂપરેખાંકન માન્ય કરો | | `/api/providers/bulk` | POST | એક પ્રદાતા માટે API કીઓ સામૂહિક રીતે ઉમેરો | | `/api/providers/import` | POST | પાર્સ કરેલી CSV/JSON ફાઇલમાંથી વિવિધ પ્રદાતાઓની સૂચિ આયાત કરો (#6836); દરેક પંક્તિ માટે આંશિક-નિષ્ફળતાનાં પરિણામો | | `/api/provider-nodes*` | વિવિધ | પ્રદાતા નોડનું વ્યવસ્થાપન | | `/api/provider-models` | GET/POST/PATCH/DELETE | કસ્ટમ મોડેલો (ઉમેરો, અપડેટ કરો, છુપાવો/બતાવો, કાઢી નાખો) | ### OAuth પ્રવાહો | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | -------------------------------- | ------ | --------------------- | | `/api/oauth/[provider]/[action]` | વિવિધ | પ્રદાતા-વિશિષ્ટ OAuth | ### રૂટિંગ અને રૂપરેખાંકન | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | --------------------- | -------- | -------------------------------- | | `/api/models/alias` | GET/POST | મોડેલ ઉપનામો | | `/api/models/catalog` | GET | પ્રદાતા + પ્રકાર મુજબ બધા મોડેલો | | `/api/combos*` | વિવિધ | કોમ્બો વ્યવસ્થાપન | | `/api/keys*` | વિવિધ | API કી વ્યવસ્થાપન | | `/api/pricing` | GET | મોડેલ કિંમત-નિર્ધારણ | ### વપરાશ અને વિશ્લેષણ | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | -------------------------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `/api/usage/history` | GET | ઉપયોગનો ઇતિહાસ | | `/api/usage/logs` | GET | ઉપયોગ લૉગ્સ | | `/api/usage/request-logs` | GET | વિનંતી-સ્તરના લૉગ્સ | | `/api/usage/[connectionId]` | GET | દરેક કનેક્શનનો ઉપયોગ | | `/api/usage/token-limits` | GET/POST/DELETE | દરેક API કી માટેની ટોકન-મર્યાદાની ફાળવણી | | `/api/usage/model-latency-stats` | GET | દરેક પ્રોવાઇડર/મોડેલ માટેનો રોલિંગ લેટન્સી સરવાળો (સરેરાશ/p50/p95/p99, સફળતા દર); ફિલ્ટર્સ: `windowHours`/`minSamples`/`maxRows`/`provider`/`model` (#6873) | | `/api/usage/cache-health` | GET | `call_logs` પર આધારિત પ્રોમ્પ્ટ-કૅશની સ્થિતિનો સારાંશ — લખાણ/વાંચન ગુણોત્તર, p50/p90/p99 લખાણ-કદ વિતરણ, ભારે લખાણનું સંકેન્દ્રણ, દરેક મોડેલ પ્રમાણે વિભાજન અને `healthy`/`degraded`/`thrash`/`no-data` નિષ્કર્ષ; ક્વેરી પેરામીટર્સ `range` (`1h`\|`24h`\|`7d`\|`30d`, ડિફૉલ્ટ `24h`) અને વૈકલ્પિક `model` (#8827) | ### સેટિંગ્સ | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | ------------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `/api/settings` | GET/PUT/PATCH | સામાન્ય સેટિંગ્સ | | `/api/settings/proxy` | GET/PUT | નેટવર્ક પ્રોક્સી કન્ફિગરેશન | | `/api/settings/proxy/test` | POST | પ્રોક્સી કનેક્શનનું પરીક્ષણ | | `/api/settings/ip-filter` | GET/PUT | IP મંજૂરીસૂચિ/અવરોધસૂચિ | | `/api/settings/thinking-budget` | GET/PUT | વિચાર/તર્ક **વિનંતી** પુનર્લેખન મોડ (યથાવત્ પસાર / આપમેળે દૂર કરવું / કસ્ટમ / અનુકૂલનશીલ). કમ્પ્રેશનથી સ્વતંત્ર. [THINKING_BUDGET.md](../guides/THINKING_BUDGET.md) જુઓ. | | `/api/settings/system-prompt` | GET/PUT | વૈશ્વિક સિસ્ટમ પ્રોમ્પ્ટ | | `/api/settings/compression` | GET/PUT | વૈશ્વિક કમ્પ્રેશન કન્ફિગરેશન | | `/api/settings/purge-request-history` | POST | વિનંતી લૉગની પંક્તિઓ અને સ્થાનિક કૉલ-લૉગ આર્ટિફેક્ટ્સ સાફ કરો | ### કોન્ટેક્સ્ટ અને કમ્પ્રેશન | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | -------------------------------------- | -------------- | ----------------------------------------------------------------------- | | `/api/compression/preview` | POST | off/lite/standard/aggressive/ultra/RTK/stacked કમ્પ્રેશનનું પૂર્વાવલોકન | | `/api/compression/language-packs` | GET | ઉપલબ્ધ Caveman ભાષા પૅક્સની યાદી | | `/api/compression/rules` | GET | Caveman નિયમ મેટાડેટાની યાદી | | `/api/context/caveman/config` | GET/PUT | Caveman-વિશિષ્ટ સેટિંગ્સનું ઉપનામ | | `/api/context/rtk/config` | GET/PUT | કસ્ટમ ફિલ્ટર્સ અને મૂળ આઉટપુટ જાળવણી સહિત RTK-વિશિષ્ટ સેટિંગ્સ | | `/api/context/rtk/filters` | GET | RTK ફિલ્ટર કૅટલૉગ અને કસ્ટમ-ફિલ્ટર ડાયગ્નોસ્ટિક્સ | | `/api/context/rtk/test` | POST | ટેક્સ્ટ પેલોડ સામે RTK પૂર્વાવલોકન/પરીક્ષણ ચલાવો | | `/api/context/rtk/raw-output/[id]` | GET | પોઇન્ટર id દ્વારા જાળવેલું રીડેક્ટ કરાયેલ મૂળ આઉટપુટ વાંચો | | `/api/context/combos` | GET/POST | કમ્પ્રેશન કૉમ્બોની યાદી/બનાવટ | | `/api/context/combos/[id]` | GET/PUT/DELETE | કમ્પ્રેશન કૉમ્બોની વિગતો/અપડેટ/ડિલીટ | | `/api/context/combos/[id]/assignments` | GET/PUT | રૂટિંગ કૉમ્બોને કમ્પ્રેશન કૉમ્બો સોંપો | | `/api/context/analytics` | GET | કમ્પ્રેશન ઍનલિટિક્સનું ઉપનામ | ### મોનિટરિંગ | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | ------------------------------------ | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `/api/sessions` | GET | સક્રિય સેશન ટ્રૅકિંગ | | `/api/rate-limits` | GET | દરેક એકાઉન્ટ માટેની રેટ મર્યાદાઓ | | `/api/monitoring/health` | GET | હેલ્થ ચેક + પ્રોવાઇડર સારાંશ (`catalogCount`, `configuredCount`, `activeCount`, `monitoredCount`). મેનેજમેન્ટ વ્યૂમાં `credentialHealth` સામેલ છે: પ્રોબ-કૅશ સ્કેલર્સ, `failed>0` હોય ત્યારે `failedConnections`, અને `staleDbNonOkCount` (SQLite સ્ટિકી `test_status`, ગેજ નહીં). [MONITORING_GUIDE.md](../ops/MONITORING_GUIDE.md#credentialhealth-probe-cache-vs-sqlite-test_status) જુઓ. | | `/api/cache/stats` | GET/DELETE | કૅશ આંકડા / સાફ કરો | | `/api/modality-bridge/stats` | GET | ઇન-મેમરી `attempts`, સફળતાઓ/`bridged`, નિષ્ફળતાઓ, કૅશ હિટ્સ, `totalLatencyMs`, `latencySamples`, નમૂના-હરવાળાવાળું `averageLatencyMs`, અને છેલ્લે ઉપયોગનો સમય (રીસ્ટાર્ટ વખતે રીસેટ થાય છે; મેનેજમેન્ટ પ્રમાણીકરણ) | | `/api/modality-bridge/video/runtime` | GET | મેનેજમેન્ટ પ્રમાણીકરણ/પ્રોબ પહેલાં કડક વિશ્વસનીય-લૂપબૅક ચકાસણી; સેનિટાઇઝ કરેલી FFmpeg/ffprobe ઉપલબ્ધતા અને વર્ઝન્સ (નો-સ્ટોર) | | `/api/modality-bridge/video/extract` | POST | આંતરિક પ્રમાણીકૃત વિશ્વસનીય-લૂપબૅક બાઇટ બ્રોકર; 50 MiB ઇનપુટ, મર્યાદિત ક્યૂ/32 MiB આઉટપુટ, `503` ક્ષમતા, `499` ડિસ્કનેક્ટ, `504` સમયમર્યાદા; આ જાહેર અપલોડ API નથી | ### બૅકઅપ અને એક્સપોર્ટ/ઇમ્પોર્ટ | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | --------------------------- | ------ | ------------------------------------------------- | | `/api/db-backups` | GET | ઉપલબ્ધ બૅકઅપ્સની સૂચિ | | `/api/db-backups` | PUT | મેન્યુઅલ બૅકઅપ બનાવો | | `/api/db-backups` | POST | ચોક્કસ બૅકઅપમાંથી પુનઃસ્થાપિત કરો | | `/api/db-backups/export` | GET | ડેટાબેઝને .sqlite ફાઇલ તરીકે ડાઉનલોડ કરો | | `/api/db-backups/import` | POST | ડેટાબેઝ બદલવા માટે .sqlite ફાઇલ અપલોડ કરો | | `/api/db-backups/exportAll` | GET | સંપૂર્ણ બૅકઅપને .tar.gz આર્કાઇવ તરીકે ડાઉનલોડ કરો | ### ક્લાઉડ સિંક | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | ---------------------- | ------ | -------------------- | | `/api/sync/cloud` | વિવિધ | ક્લાઉડ સિંક કામગીરીઓ | | `/api/sync/initialize` | POST | સિંક પ્રારંભ કરો | | `/api/cloud/*` | વિવિધ | ક્લાઉડ વ્યવસ્થાપન | ### ટનલ્સ | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | -------------------------- | ------ | ------------------------------------------------------------------------ | | `/api/tunnels/cloudflared` | GET | ડૅશબોર્ડ માટે Cloudflare Quick Tunnelની ઇન્સ્ટોલેશન/રનટાઇમ સ્થિતિ વાંચો | | `/api/tunnels/cloudflared` | POST | Cloudflare Quick Tunnelને સક્ષમ અથવા અક્ષમ કરો (`action=enable/disable`) | | `/api/tunnels/ngrok` | GET | ડૅશબોર્ડ માટે ngrok Tunnelની રનટાઇમ સ્થિતિ વાંચો | | `/api/tunnels/ngrok` | POST | ngrok Tunnelને સક્ષમ અથવા અક્ષમ કરો (`action=enable/disable`) | ### CLI ટૂલ્સ | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | ---------------------------------- | ------ | ------------------- | | `/api/cli-tools/claude-settings` | GET | Claude CLI સ્થિતિ | | `/api/cli-tools/codex-settings` | GET | Codex CLI સ્થિતિ | | `/api/cli-tools/droid-settings` | GET | Droid CLI સ્થિતિ | | `/api/cli-tools/openclaw-settings` | GET | OpenClaw CLI સ્થિતિ | | `/api/cli-tools/runtime/[toolId]` | GET | સામાન્ય CLI રનટાઇમ | CLI પ્રતિસાદોમાં આનો સમાવેશ થાય છે: `installed`, `runnable`, `command`, `commandPath`, `runtimeMode`, `reason`. ### ACP એજન્ટ્સ | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | ----------------- | ------ | ----------------------------------------------------------- | | `/api/acp/agents` | GET | સ્થિતિ સાથે શોધાયેલા તમામ એજન્ટ્સની સૂચિ (બિલ્ટ-ઇન + કસ્ટમ) | | `/api/acp/agents` | POST | કસ્ટમ એજન્ટ ઉમેરો અથવા શોધ કૅશ રિફ્રેશ કરો | | `/api/acp/agents` | DELETE | `id` ક્વેરી પેરામિટર દ્વારા કસ્ટમ એજન્ટ દૂર કરો | GET પ્રતિસાદમાં `agents[]` (id, name, binary, version, installed, protocol, isCustom) અને `summary` (total, installed, notFound, builtIn, custom)નો સમાવેશ થાય છે. ### સ્થિતિસ્થાપકતા અને દર મર્યાદાઓ | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | --------------------------------- | --------- | ------------------------------------------------------------------------------------- | | `/api/resilience` | GET/PATCH | વિનંતી કતાર, કનેક્શન કૂલડાઉન, પ્રોવાઇડર બ્રેકર અને પ્રતીક્ષા સેટિંગ્સ મેળવો/અપડેટ કરો | | `/api/resilience/reset` | POST | પ્રોવાઇડર સર્કિટ બ્રેકર્સ રીસેટ કરો | | `/api/resilience/model-cooldowns` | GET | બાકી સમય પ્રમાણે સૉર્ટ કરેલા સક્રિય પ્રતિ-(પ્રોવાઇડર, કનેક્શન, મોડલ) લૉકઆઉટ્સની સૂચિ | | `/api/resilience/model-cooldowns` | DELETE | મોડલ લૉકઆઉટ સાફ કરો — બૉડી `{provider, model}` અથવા બધું સાફ કરવા માટે `{all: true}` | | `/api/rate-limits` | GET | પ્રતિ-એકાઉન્ટ દર મર્યાદાની સ્થિતિ | | `/api/rate-limit` | GET | વૈશ્વિક દર મર્યાદા કૉન્ફિગરેશન | > તમામ ચાર `/api/resilience/*` રૂટ્સ માટે **મેનેજમેન્ટ ઑથ** (`requireManagementAuth`) જરૂરી છે. પ્રોવાઇડર બ્રેકર વિરુદ્ધ કનેક્શન કૂલડાઉન વિરુદ્ધ મોડલ લૉકઆઉટની સંપૂર્ણ વિગતો માટે [સ્થિતિસ્થાપકતા (વિસ્તૃત)](#resilience-extended) જુઓ. ### મૂલ્યાંકનો | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | ------------ | -------- | ------------------------------------------ | | `/api/evals` | GET/POST | મૂલ્યાંકન સ્યુટ્સની સૂચિ / મૂલ્યાંકન ચલાવો | ### નીતિઓ | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | --------------- | --------------- | ------------------------------- | | `/api/policies` | GET/POST/DELETE | રાઉટિંગ નીતિઓનું વ્યવસ્થાપન કરો | ### અનુપાલન | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | --------------------------- | ------ | --------------------------- | | `/api/compliance/audit-log` | GET | અનુપાલન ઑડિટ લૉગ (છેલ્લા N) | ### v1beta (Gemini-સુસંગત) | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | -------------------------- | ------ | ----------------------------------- | | `/v1beta/models` | GET | Gemini ફોર્મેટમાં મોડલ્સની સૂચિ | | `/v1beta/models/{...path}` | POST | Gemini `generateContent` એન્ડપોઇન્ટ | આ એન્ડપોઇન્ટ્સ એવા ક્લાયન્ટ્સ માટે Geminiના API ફોર્મેટને પ્રતિબિંબિત કરે છે, જેઓ મૂળ Gemini SDK સુસંગતતાની અપેક્ષા રાખે છે. ### આંતરિક / સિસ્ટમ APIs | એન્ડપોઇન્ટ | પદ્ધતિ | વર્ણન | | ------------------------ | ------ | -------------------------------------------------------- | | `/api/init` | GET | એપ્લિકેશન આરંભની ચકાસણી (પ્રથમ વખત ચલાવતી વખતે વપરાય છે) | | `/api/tags` | GET | Ollama-સુસંગત મોડેલ ટૅગ્સ (Ollama ક્લાયન્ટ્સ માટે) | | `/api/restart` | POST | સર્વરને સુવ્યવસ્થિત રીતે પુનઃપ્રારંભ કરાવે છે | | `/api/shutdown` | POST | સર્વરને સુવ્યવસ્થિત રીતે બંધ કરાવે છે | | `/api/system/env/repair` | POST | OAuth પ્રદાતાનાં પર્યાવરણ ચલ સમારે છે | > **નોંધ:** આ એન્ડપોઇન્ટ્સનો ઉપયોગ સિસ્ટમ દ્વારા આંતરિક રીતે અથવા Ollama ક્લાયન્ટ સુસંગતતા માટે થાય છે. સામાન્ય રીતે અંતિમ વપરાશકર્તાઓ દ્વારા તેમને કૉલ કરવામાં આવતાં નથી. ### OAuth પર્યાવરણ સમારકામ _(v3.6.1+)_ ```bash POST /api/system/env/repair Content-Type: application/json { "provider": "claude-code" } ``` ચોક્કસ પ્રદાતા માટે ખૂટતા અથવા બગડેલા OAuth પર્યાવરણ ચલોને સમારે છે. આ પરત કરે છે: ```json { "success": true, "repaired": ["CLAUDE_CODE_OAUTH_CLIENT_ID", "CLAUDE_CODE_OAUTH_CLIENT_SECRET"], "backupPath": "/home/user/.omniroute/backups/env-repair-2026-04-11.bak" } ``` --- ## ઑડિયો ટ્રાન્સક્રિપ્શન ```bash POST /v1/audio/transcriptions Authorization: Bearer your-api-key Content-Type: multipart/form-data ``` કોઈપણ કૉન્ફિગર કરેલા STT પ્રદાતાનો ઉપયોગ કરીને ઑડિયો ફાઇલોનું ટ્રાન્સક્રિપ્શન કરો. પ્રથમ પાથ સેગમેન્ટ મૂળ પ્રદાતા (`openai/…`, `deepgram/…`) પસંદ કરે છે. અન્ય વિક્રેતાના મોડેલને ફરીથી નિકાસ કરતા ગેટવે ક્વૉલિફાઇડ id (`openrouter/deepgram/nova-3`) નો ઉપયોગ કરે છે. **વિનંતી:** ```bash curl -X POST http://localhost:20128/v1/audio/transcriptions \ -H "Authorization: Bearer your-api-key" \ -F "file=@recording.mp3" \ -F "model=openai/whisper-1" ``` **પ્રતિસાદ:** ```json { "text": "Hello, this is the transcribed audio content.", "task": "transcribe", "language": "en", "duration": 12.5 } ``` **મોડેલ idનાં ઉદાહરણો:** `openai/whisper-1` (OpenAI કી જરૂરી છે), `openrouter/deepgram/nova-3` (OpenRouter કી જરૂરી છે), `deepgram/nova-3` (મૂળ Deepgram કી જરૂરી છે). માત્ર `deepgram/nova-3` વિનંતી OpenRouterનો ઉપયોગ **કરતી નથી**. **સમર્થિત ફોર્મેટ્સ:** `mp3`, `wav`, `m4a`, `flac`, `ogg`, `webm`. --- ## Ollama સુસંગતતા Ollamaના API ફોર્મેટનો ઉપયોગ કરતા ક્લાયન્ટ્સ માટે: ```bash # ચૅટ એન્ડપોઇન્ટ (Ollama ફોર્મેટ) POST /v1/api/chat # મોડેલની સૂચિ (Ollama ફોર્મેટ) GET /api/tags ``` વિનંતીઓનું Ollama અને આંતરિક ફોર્મેટ્સ વચ્ચે આપમેળે રૂપાંતરણ થાય છે. ## ટોકનાઇઝ્ડ VS Code / હેડર વિનાના ઉપનામો જ્યારે કોઈ ઇન્ટિગ્રેશન `Authorization` હેડર ઉમેરી શકતું ન હોય અને API કીને બેઝ URLમાં એમ્બેડ કરવાની જરૂર હોય ત્યારે આ ઉપનામોનો ઉપયોગ કરો. ```bash # OpenAI-શૈલીનું કૅટલૉગ ઉપનામ GET /api/v1/vscode/{token}/ GET /api/v1/vscode/{token}/models # OpenAI-શૈલીનાં ચૅટ ઉપનામો POST /api/v1/vscode/{token}/chat/completions POST /api/v1/vscode/{token}/responses # Ollama-શૈલીનાં ઉપનામો POST /api/v1/vscode/{token}/api/chat GET /api/v1/vscode/{token}/api/tags ``` ઉદાહરણ: ```bash curl https://your-host.example/api/v1/vscode/YOUR_API_KEY/models curl -X POST https://your-host.example/api/v1/vscode/YOUR_API_KEY/chat/completions \ -H "Content-Type: application/json" \ -d '{"model":"auto","messages":[{"role":"user","content":"hello"}]}' ``` નોંધો: - ટોકનાઇઝ્ડ ઉપનામો `/v1/*` અને `/api/tags` જેવા જ હેન્ડલર્સનો ફરીથી ઉપયોગ કરે છે; પ્રતિસાદનાં સ્વરૂપો સમાન રહે છે. - જ્યારે ક્લાયન્ટ કસ્ટમ હેડર્સને સપોર્ટ કરતો હોય ત્યારે `Authorization: Bearer ...`ને પ્રાધાન્ય આપો. - URL-આધારિત ટોકન્સ રિવર્સ-પ્રૉક્સી લૉગ્સ, બ્રાઉઝર ઇતિહાસ અને OmniRouteની બહારની ટેલિમેટ્રીમાં દેખાઈ શકે છે. તેમને ડિફૉલ્ટ પ્રમાણીકરણ મોડ તરીકે નહીં, પરંતુ સુસંગતતા વિકલ્પ તરીકે ગણો. --- ## ટેલિમેટ્રી ```bash # વિલંબ ટેલિમેટ્રીનો સારાંશ મેળવો (પ્રતિ પ્રદાતા p50/p95/p99) GET /api/telemetry/summary ``` **પ્રતિસાદ:** ```json { "providers": { "claudeCode": { "p50": 245, "p95": 890, "p99": 1200, "count": 150 }, "github": { "p50": 180, "p95": 620, "p99": 950, "count": 320 } } } ``` --- ## બજેટ ```bash # બધી API કી માટે બજેટની સ્થિતિ મેળવો GET /api/usage/budget # બજેટ સેટ અથવા અપડેટ કરો POST /api/usage/budget Content-Type: application/json { "apiKeyId": "key-123", "dailyLimitUsd": 5.00, "weeklyLimitUsd": 30.00, "monthlyLimitUsd": 100.00, "warningThreshold": 0.8, "resetInterval": "monthly" } ``` > **સ્કીમા નોંધો** (`setBudgetSchema`): `apiKeyId` આવશ્યક છે; `dailyLimitUsd`, `weeklyLimitUsd` અથવા `monthlyLimitUsd`માંથી ઓછામાં ઓછું એક શૂન્યથી વધુ હોવું આવશ્યક છે. વૈકલ્પિક ફીલ્ડ્સ: `warningThreshold` (0–1), `resetInterval` (`daily` | `weekly` | `monthly`), `resetTime` (`HH:MM`). જૂનું `{keyId, limit, period}` સ્વરૂપ `400 Bad Request` પરત કરે છે. ## ટોકન મર્યાદાઓ પ્રતિ-API-key **ટોકન** બજેટ (ઉપરના USD-આધારિત બજેટથી અલગ). વિનંતીના પાથ પર જ લાગુ કરવામાં આવે છે: જ્યારે કોઈ કીનો વર્તમાન વિન્ડો વપરાશ તેની મર્યાદા સુધી પહોંચે છે, ત્યારે વિનંતીઓ `429 Too Many Requests` સાથે નકારવામાં આવે છે. મર્યાદાઓને ચોક્કસ `model`, `provider` સુધી મર્યાદિત કરી શકાય છે અથવા સમગ્ર કી પર `global` રીતે લાગુ કરી શકાય છે; જ્યારે એક વિનંતી સાથે અનેક મર્યાદાઓ મેળ ખાય છે, ત્યારે સૌથી કડક મર્યાદા લાગુ પડે છે. ```bash # કીની ટોકન મર્યાદાઓની યાદી મેળવો (લાઇવ વિન્ડો વપરાશ સહિત) GET /api/usage/token-limits?apiKeyId=key-123 # ટોકન મર્યાદા બનાવો અથવા અપડેટ કરો POST /api/usage/token-limits Content-Type: application/json { "apiKeyId": "key-123", "scopeType": "model", "scopeValue": "openai/gpt-4o", "tokenLimit": 1000000, "resetInterval": "monthly", "enabled": true } # id દ્વારા ટોકન મર્યાદા કાઢી નાખો DELETE /api/usage/token-limits?id=tl-abc ``` > **સ્કીમા નોંધો** (`setTokenLimitSchema`): `apiKeyId` અને `scopeType` (`model` | `provider` | `global`) જરૂરી છે. `scopeType`, `global` ન હોય ત્યાં સુધી `scopeValue` જરૂરી છે (દા.ત. `model` સ્કોપ માટે મોડેલ id, `provider` સ્કોપ માટે પ્રોવાઇડર id). `tokenLimit` ધન પૂર્ણાંક હોવો આવશ્યક છે (સ્ટ્રિંગમાંથી રૂપાંતરિત). વૈકલ્પિક: `id` (બનાવવા માટે છોડો, અપડેટ કરવા માટે આપો), `resetInterval` (`daily` | `weekly` | `monthly`, ડિફૉલ્ટ `monthly`), `resetTime` (`HH:MM`), `enabled` (ડિફૉલ્ટ `true`). `GET` પ્રતિસાદો દરેક મર્યાદામાં `tokensUsed`, `remaining`, `windowStart`, `periodStartAt`, અને `nextResetAt` ઉમેરે છે. આ મેનેજમેન્ટ-ક્લાસ એન્ડપોઇન્ટ છે (ઑથરાઇઝેશન પાઇપલાઇન દ્વારા ઑથ કેન્દ્રીય રીતે લાગુ કરવામાં આવે છે). ## વિનંતી પ્રક્રિયા 1. ક્લાયન્ટ `/v1/*` પર વિનંતી મોકલે છે 2. રૂટ હેન્ડલર `handleChat`, `handleEmbedding`, `handleAudioTranscription`, અથવા `handleImageGeneration`ને કૉલ કરે છે 3. મોડેલ રિઝૉલ્વ કરવામાં આવે છે (સીધો provider/model અથવા alias/combo) 4. એકાઉન્ટ ઉપલબ્ધતા ફિલ્ટરિંગ સાથે સ્થાનિક DBમાંથી ક્રેડેન્શિયલ્સ પસંદ કરવામાં આવે છે 5. ચેટ માટે: `handleChatCore` સિમેન્ટિક/સિગ્નેચર કૅશ તપાસે છે અને combo કમ્પ્રેશન સેટિંગ્સ રિઝૉલ્વ કરે છે 6. સક્ષમ હોય ત્યારે પ્રોવાઇડર ટ્રાન્સલેશન પહેલાં પ્રોએક્ટિવ કમ્પ્રેશન ચાલે છે (`lite`, Caveman, RTK, અથવા સ્ટૅક્ડ) 7. પ્રોવાઇડર એક્ઝિક્યુટર અપસ્ટ્રીમ વિનંતી મોકલે છે 8. પ્રતિસાદ પાછો ક્લાયન્ટ ફૉર્મેટમાં ટ્રાન્સલેટ કરવામાં આવે છે (ચેટ) અથવા જેમનો તેમ પરત કરવામાં આવે છે (એમ્બેડિંગ્સ/ઇમેજિસ/ઑડિયો) 9. વપરાશ, કમ્પ્રેશન એનાલિટિક્સ, અને વિનંતી લૉગ્સ રેકોર્ડ કરવામાં આવે છે 10. ભૂલો આવે ત્યારે combo નિયમો અનુસાર ફૉલબૅક લાગુ પડે છે સંપૂર્ણ આર્કિટેક્ચર સંદર્ભ: [`ARCHITECTURE.md`](../architecture/ARCHITECTURE.md) --- ## Combo મેનેજમેન્ટ ઉચ્ચ-સ્તરીય રાઉટિંગ combos (જેનો સારાંશ પહેલેથી `/api/combos*` હેઠળ આપવામાં આવ્યો છે)ને મોડેલ id પૅટર્નમાંથી 1:1 પણ મૅપ કરી શકાય છે, જે OpenAI-શૈલીના મોડેલ idને combo તરફ પારદર્શક રીતે રીડાયરેક્ટ કરવાની મંજૂરી આપે છે. | પદ્ધતિ | પાથ | વર્ણન | | ------ | -------------------------------- | ---------------------------------------------------------------------------- | | GET | `/api/model-combo-mappings` | બધા model→combo મૅપિંગ્સની યાદી મેળવો | | POST | `/api/model-combo-mappings` | મૅપિંગ બનાવો — બૉડી: `{pattern, comboId, priority?, enabled?, description?}` | | GET | `/api/model-combo-mappings/[id]` | એક મૅપિંગ મેળવો | | PUT | `/api/model-combo-mappings/[id]` | હાલના મૅપિંગના ફીલ્ડ્સ અપડેટ કરો | | DELETE | `/api/model-combo-mappings/[id]` | મૅપિંગ દૂર કરો | **ઑથ:** મેનેજમેન્ટ સેશન/API key (`requireManagementAuth`). --- ## Webhooks OmniRoute ઇવેન્ટ્સ (વિનંતી પૂર્ણતા, ક્વોટા સમાપ્ત થવો, કી રોટેશન વગેરે) માટે આઉટબાઉન્ડ webhook સબ્સ્ક્રિપ્શન્સ. | પદ્ધતિ | પાથ | વર્ણન | | ------ | ------------------------- | ------------------------------------------------------------------------ | | GET | `/api/webhooks` | webhooksની યાદી આપો (secretsને `...` તરીકે માસ્ક કરવામાં આવે છે) | | POST | `/api/webhooks` | webhook બનાવો — body: `{url, events?: ["*"], secret?, description?}` | | GET | `/api/webhooks/[id]` | webhook મેળવો | | PUT | `/api/webhooks/[id]` | url/events/secret/description અપડેટ કરો | | DELETE | `/api/webhooks/[id]` | webhook દૂર કરો | | POST | `/api/webhooks/[id]/test` | webhook URL પર પરીક્ષણ payload મોકલો અને ડિલિવરી સ્થિતિ પરત કરો | **પ્રમાણીકરણ:** મેનેજમેન્ટ સેશન/API કી (`requireManagementAuth`). --- ## નોંધાયેલ કીઓ (સ્વચાલિત સંચાલન) દૈનિક/કલાકદીઠ ક્વોટા સાથે, બેકિંગ provider/account સામે API કીઓ જારી કરવા અને રોટેટ કરવા માટે સ્વચાલિત કી સંચાલન સબસિસ્ટમ દ્વારા ઉપયોગમાં લેવાય છે. | પદ્ધતિ | પાથ | વર્ણન | | ------ | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | GET | `/api/v1/registered-keys` | નોંધાયેલ કીઓની યાદી આપો (માત્ર માસ્ક કરેલો prefix) | | POST | `/api/v1/registered-keys` | નવી નોંધાયેલ કી જારી કરો — body: `{name, provider?, accountId?, idempotencyKey?, expiresAt?, dailyBudget?, hourlyBudget?}`. મૂળ કી **માત્ર એક વાર** પરત કરે છે. ક્વોટાના કારણે અસ્વીકાર થવા પર `429` પરત કરે છે. | | GET | `/api/v1/registered-keys/[id]` | નોંધાયેલ કીનું metadata મેળવો (મૂળ કી સામગ્રી વિના) | | DELETE | `/api/v1/registered-keys/[id]` | નોંધાયેલ કી રદ કરો | | POST | `/api/v1/registered-keys/[id]/revoke` | સ્પષ્ટ revoke endpoint (DELETE જેવી જ અસર) | **પ્રમાણીકરણ:** Bearer API કી (`isAuthenticated`). `/v1/quotas/check` અને `/v1/issues/report` પણ જુઓ. --- ## એજન્ટ્સ પ્રોટોકૉલ OmniRoute વપરાશકર્તાઓ વતી રિમોટ રીતે ચલાવવામાં આવતાં ક્લાઉડ એજન્ટ કાર્યો (Claude Code, Codex Cloud, OpenHands વગેરે). | પદ્ધતિ | પાથ | વર્ણન | | ------ | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | | GET | `/api/v1/agents/tasks` | કાર્યોની સૂચિ — વૈકલ્પિક `?provider=`, `?status=`, `?limit=` (1–500, ડિફૉલ્ટ 50) | | POST | `/api/v1/agents/tasks` | કાર્ય બનાવો — બૉડી `CreateCloudAgentTaskSchema` (`providerId`, `prompt`, `source`, `options?`) દ્વારા માન્ય કરવામાં આવે છે. કાર્ય એન્વલપ સાથે `201` પરત કરે છે | | DELETE | `/api/v1/agents/tasks?id=...` | કાર્ય કાઢી નાખો | | GET | `/api/v1/agents/tasks/[id]` | કાર્ય વાંચો — જ્યારે `external_id` સેટ હોય ત્યારે અપસ્ટ્રીમ ક્લાઉડ એજન્ટ પાસેથી સ્થિતિને સિંક્રોનસ રીતે રિફ્રેશ કરે છે | | POST | `/api/v1/agents/tasks/[id]` | ભેદદર્શક ક્રિયા: `{action: "approve"}`, `{action: "message", message}`, અથવા `{action: "cancel"}` | | DELETE | `/api/v1/agents/tasks/[id]` | id દ્વારા ચોક્કસ કાર્ય કાઢી નાખો | > **પ્રમાણીકરણ:** દરેક પદ્ધતિ પર મેનેજમેન્ટ પ્રમાણીકરણ જરૂરી છે (`requireCloudAgentManagementAuth`). v3.8.0 પહેલાં આ પ્રમાણીકરણ વિનાના હતા — બ્રેકિંગ ફેરફાર માટે કમિટ `588a0333` જુઓ. ```bash # Claude Code ક્લાઉડ કાર્ય બનાવો curl -X POST http://localhost:20128/api/v1/agents/tasks \ -H "Authorization: Bearer your-management-key" \ -H "Content-Type: application/json" \ -d '{"providerId":"claude-code-cloud","prompt":"Fix the failing test","source":{"repo":"...","branch":"..."}}' ``` --- ## મેનેજમેન્ટ પ્રૉક્સીઓ આઉટબાઉન્ડ HTTP(S)/SOCKS પ્રૉક્સીઓ, જેને પ્રદાતાઓ, એકાઉન્ટ્સ અથવા વૈશ્વિક સ્તરે સોંપી શકાય છે. | પદ્ધતિ | પાથ | વર્ણન | | ------ | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | | GET | `/api/v1/management/proxies` | પ્રૉક્સીઓની સૂચિ (`?id=` સાથે એક પ્રૉક્સી પરત કરે છે; `?id=&where_used=1` સાથે અસાઇનમેન્ટ ગ્રાફ પરત કરે છે) | | POST | `/api/v1/management/proxies` | પ્રૉક્સી બનાવો — બૉડી `createProxyRegistrySchema` દ્વારા માન્ય કરવામાં આવે છે | | PATCH | `/api/v1/management/proxies` | પ્રૉક્સી અપડેટ કરો — બૉડી `updateProxyRegistrySchema` દ્વારા માન્ય કરવામાં આવે છે (`id` જરૂરી છે) | | DELETE | `/api/v1/management/proxies?id=...&force=1` | પ્રૉક્સી કાઢી નાખો (અસાઇનમેન્ટ્સને અલગ કરવા માટે `force=1` વાપરો) | | GET | `/api/v1/management/proxies/assignments` | અસાઇનમેન્ટ્સની સૂચિ — `proxy_id`, `scope`, `scope_id` દ્વારા ફિલ્ટર કરી શકાય છે; કનેક્શન માટે સક્રિય પ્રૉક્સી નિર્ધારિત કરવા `resolve_connection_id=` પાસ કરો | | PUT | `/api/v1/management/proxies/assignments` | સોંપો — બૉડી `proxyAssignmentSchema` (`{scope, scopeId?, proxyId?}`) દ્વારા માન્ય કરવામાં આવે છે. ડિસ્પેચર કૅશ સાફ કરે છે | | PUT | `/api/v1/management/proxies/bulk-assign` | જથ્થાબંધ સોંપણી — બૉડી `bulkProxyAssignmentSchema` (`{scope, scopeIds[], proxyId?}`) દ્વારા માન્ય કરવામાં આવે છે | | GET | `/api/v1/management/proxies/health?hours=24` | નિર્ધારિત સમયગાળા દરમિયાન એકત્રિત પ્રૉક્સી સ્વાસ્થ્ય (સફળતા/નિષ્ફળતાની સંખ્યા, વિલંબ) | **પ્રમાણીકરણ:** દરેક રૂટ પર મેનેજમેન્ટ સેશન/API કી (`requireManagementAuth`). > કાર્ય વર્ણનમાં દર્શાવેલા `POST /api/v1/management/proxies/[id]/assignments` અને `POST /api/v1/management/proxies/[id]/health`, ઉપર દર્શાવેલા ફ્લૅટ `/assignments` અને `/health` રૂટ્સ દ્વારા સેવા આપે છે — કોડબેઝમાં દરેક id માટે અલગ સબરૂટ્સ નથી. --- ## સ્થિતિસ્થાપકતા (વિસ્તૃત) OmniRoute ત્રણ સ્વતંત્ર અસ્થાયી-નિષ્ફળતા મિકેનિઝમ ઉપલબ્ધ કરાવે છે; નીચેના મેનેજમેન્ટ એન્ડપોઇન્ટ્સ ઑપરેટરોને તેમની સ્થિતિ વાંચવા અને ઓવરરાઇડ કરવાની સુવિધા આપે છે: | વ્યાપ | સ્થિતિ સંગ્રહ | વાંચવું | રીસેટ / સાફ કરવું | | --------------- | --------------------------------------- | ----------------------------------------- | --------------------------------------------------------- | | પ્રદાતા બ્રેકર | `domain_circuit_breakers` + ઇન-મેમરી | `/api/monitoring/health` | `POST /api/resilience/reset` | | કનેક્શન કૂલડાઉન | પ્રદાતા કનેક્શન્સ પર `rateLimitedUntil` | `/api/rate-limits`, `/api/providers/[id]` | (જરૂર પડ્યે ફરી સક્ષમ થાય છે; પ્રદાતા PUT દ્વારા સાફ કરો) | | મોડેલ લૉકઆઉટ | ઇન-મેમરી મોડેલ-ઉપલબ્ધતા રજિસ્ટ્રી | `GET /api/resilience/model-cooldowns` | `DELETE /api/resilience/model-cooldowns` | `PATCH /api/resilience`, `providerBreaker.oauth` અને `providerBreaker.apikey` હેઠળ પ્રદાતા બ્રેકર ઓવરરાઇડ્સ સ્વીકારે છે. દરેક પ્રોફાઇલ `degradationThreshold`, `failureThreshold`, અને `resetTimeoutMs`ને સપોર્ટ કરે છે; આ જ ફીલ્ડ્સ Dashboard → Settings → Resilienceમાં ઉપલબ્ધ છે. ```bash # એક મોડેલ લૉકઆઉટ સાફ કરો curl -X DELETE http://localhost:20128/api/resilience/model-cooldowns \ -H "Cookie: auth_token=..." \ -H "Content-Type: application/json" \ -d '{"provider":"openai","model":"gpt-4o-mini"}' # દરેક લૉકઆઉટ કાઢી નાખો curl -X DELETE http://localhost:20128/api/resilience/model-cooldowns \ -H "Cookie: auth_token=..." \ -d '{"all":true}' ``` સંપૂર્ણ વૈચારિક સંદર્ભ અને બ્રેકરના ડિફૉલ્ટ્સ માટે: [`CLAUDE.md`](../../CLAUDE.md) → "સ્થિતિસ્થાપકતાની રનટાઇમ સ્થિતિ" જુઓ. --- ## કૌશલ્યો કસ્ટમ એક્ઝિક્યુટેબલ હેન્ડલર્સ વડે OmniRouteને વિસ્તૃત કરવા માટેનું કૌશલ્ય ફ્રેમવર્ક, તેમજ માર્કેટપ્લેસ ઇન્ટિગ્રેશન્સ. | પદ્ધતિ | પાથ | વર્ણન | | ------ | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | GET | `/api/skills` | ઇન્સ્ટોલ કરેલાં કૌશલ્યોની યાદી — `?q=`, `?mode=on\|off\|auto`, `?source=skillsmp\|skillssh\|local` દ્વારા ફિલ્ટર કરી શકાય છે, પેજિનેટેડ | | GET | `/api/skills/[id]` | એક કૌશલ્ય મેળવો | | PUT | `/api/skills/[id]` | કૌશલ્ય અપડેટ કરો (નામ, વર્ણન, મોડ, સ્કીમા, હેન્ડલર, ટૅગ્સ) | | DELETE | `/api/skills/[id]` | કૌશલ્ય અનઇન્સ્ટોલ કરો | | POST | `/api/skills/install` | રૉ મેનિફેસ્ટમાંથી કૌશલ્ય ઇન્સ્ટોલ કરો — બોડી: `{name, version, description, schema:{input, output}, handlerCode, apiKeyId?}` | | GET | `/api/skills/executions` | તાજેતરના કૌશલ્ય એક્ઝિક્યુશન્સની યાદી (ઇનપુટ્સ/આઉટપુટ્સ/અવધિ સાથેનો ઑડિટ ટ્રેલ) | | GET | `/api/skills/marketplace?q=...` | SkillsMP માર્કેટપ્લેસમાંથી શોધ/લોકપ્રિય સૂચિ (`skillsmpApiKey` સેટિંગ જરૂરી છે) | | POST | `/api/skills/marketplace/install` | SkillsMPમાંથી id દ્વારા કૌશલ્ય ઇન્સ્ટોલ કરો | | GET | `/api/skills/skillssh?q=&limit=` | skills.sh રજિસ્ટ્રીમાં શોધો | | POST | `/api/skills/skillssh/install` | skills.shમાંથી id દ્વારા કૌશલ્ય ઇન્સ્ટોલ કરો | **પ્રમાણીકરણ:** મેનેજમેન્ટ સેશન/API કી. માર્કેટપ્લેસ શોધ રૂટ્સ મેનેજમેન્ટ પ્રમાણીકરણ અથવા Bearer API કી (`isAuthenticated`)માંથી કોઈ એક સ્વીકારે છે. --- ## મેમરી સતત સંવાદાત્મક/તથ્યાત્મક મેમરી સ્ટોર, જે API કી / સેશન દીઠ મર્યાદિત છે. | પદ્ધતિ | પાથ | વર્ણન | | ------ | -------------------- | ------------------------------------------------------------------------------------------------------------- | | GET | `/api/memory` | મેમરીઓની યાદી — `?apiKeyId=`, `?type=`, `?sessionId=`, `?q=`, સાથે `offset/limit` અથવા `page/limit` પેજિનેશન | | POST | `/api/memory` | મેમરી બનાવો — Zod દ્વારા ચકાસાયેલ બોડી: `{content, key, type?, sessionId?, apiKeyId?, metadata?, expiresAt?}` | | GET | `/api/memory/[id]` | એક મેમરી મેળવો | | DELETE | `/api/memory/[id]` | મેમરી કાઢી નાખો | | GET | `/api/memory/health` | મેમરી સબસિસ્ટમનું સ્વાસ્થ્ય (DB કનેક્ટિવિટી, એમ્બેડિંગ્સ બેકએન્ડ, વેક્ટર ઇન્ડેક્સ સ્થિતિ) | **પ્રમાણીકરણ:** મેનેજમેન્ટ સેશન/API કી (`requireManagementAuth`). `type` enum: `FACTUAL`, `EPISODIC`, `SEMANTIC`, `PROCEDURAL` (`src/lib/memory/types.ts` માં `MemoryType` જુઓ). --- ## MCP સર્વર OmniRoute 3 ટ્રાન્સપોર્ટ (stdio, SSE, streamable-http) અને સ્કોપ કરેલ ટૂલ્સ સાથે એમ્બેડેડ Model Context Protocol સર્વર પ્રદાન કરે છે. નીચેના ડેશબોર્ડ એન્ડપોઇન્ટ્સ સ્થિતિ/ઑડિટ ડેટા વાંચે છે અને HTTP ટ્રાન્સપોર્ટ્સને પ્રોક્સી કરે છે. | પદ્ધતિ | પાથ | વર્ણન | | ------ | ---------------------- | ------------------------------------------------------------------------------------------------ | -------------------- | | GET | `/api/mcp/status` | હાર્ટબીટ, ટ્રાન્સપોર્ટ, ઑનલાઇન સ્થિતિ, છેલ્લો કૉલ, ટોચના ટૂલ્સ, 24 કલાકનો સફળતા દર | | GET | `/api/mcp/tools` | `name`, `description`, `scopes`, `phase`, `auditLevel`, `sourceEndpoints` સાથે MCP ટૂલ્સની યાદી | | GET | `/api/mcp/sse` | SSE ટ્રાન્સપોર્ટ માટે ખુલ્લી SSE સ્ટ્રીમ (MCP અક્ષમ હોય અથવા ટ્રાન્સપોર્ટ મેળ ન ખાતો હોય તો `503` પરત કરે છે) | | POST | `/api/mcp/sse` | SSE ટ્રાન્સપોર્ટ પર JSON-RPC ફ્રેમ મોકલો | | GET | `/api/mcp/stream` | Streamable HTTP ટ્રાન્સપોર્ટની SSE બાજુ ખોલો (સર્વર દ્વારા શરૂ કરાયેલા સંદેશાઓ) | | POST | `/api/mcp/stream` | Streamable HTTP ટ્રાન્સપોર્ટ પર JSON-RPC ફ્રેમ મોકલો | | DELETE | `/api/mcp/stream` | Streamable HTTP સેશન સમાપ્ત કરો | | GET | `/api/mcp/audit` | ઑડિટ લૉગની ક્વેરી કરો — `?limit=`, `?offset=`, `?tool=`, `?success=true | false`, `?apiKeyId=` | | GET | `/api/mcp/audit/stats` | સંકલિત ઑડિટ આંકડા (કુલ સંખ્યા, સફળતા દર, સરેરાશ અવધિ, ટોચના ટૂલ્સ) | **પ્રમાણીકરણ:** `sse`/`stream` ટ્રાન્સપોર્ટ્સ MCP-વિશિષ્ટ પ્રમાણીકરણ સપાટીને અનુસરે છે (`mcp` સ્કોપ સાથે Bearer API કી); `status`/`tools`/`audit*` રૂટ્સ ડેશબોર્ડમાંથી વાંચી શકાય છે (ડેશબોર્ડ હોસ્ટ સુધી પહોંચવા ઉપરાંત કોઈ વધારાના પ્રમાણીકરણની જરૂર નથી). > બંને HTTP ટ્રાન્સપોર્ટ્સ `settings.mcpEnabled` અને `settings.mcpTransport` દ્વારા નિયંત્રિત થાય છે — ટ્રાન્સપોર્ટ મેળ ન ખાય તો `400` પરત થાય છે અને MCP અક્ષમ સ્થિતિમાં `503` પરત થાય છે. --- ## A2A સર્વર OmniRoute નિરીક્ષણ/ડૅશબોર્ડના ઉપયોગ માટે REST રૅપર ઉપરાંત A2A (Agent-to-Agent) JSON-RPC 2.0 એન્ડપૉઇન્ટ પ્રદાન કરે છે. ### JSON-RPC ```bash POST /a2a Authorization: Bearer your-api-key # OMNIROUTE_API_KEY સેટ કરેલ ન હોય ત્યાં સુધી વૈકલ્પિક Content-Type: application/json { "jsonrpc": "2.0", "id": 1, "method": "message/send", "params": { "skill": "smart-routing", "messages": [{"role": "user", "content": "Route this coding task"}] } } ``` સમર્થિત મેથડ્સ (તમામ `settings.a2aEnabled` દ્વારા નિયંત્રિત): | મેથડ | વર્ણન | | ---------------- | --------------------------------------------------------------------- | | `message/send` | સિંક્રોનસ સ્કિલ એક્ઝિક્યુશન; `{task, artifacts, metadata}` પરત કરે છે | | `message/stream` | સમાન સ્કિલ સેટનું સ્ટ્રીમિંગ SSE એક્ઝિક્યુશન | | `tasks/get` | `taskId` દ્વારા ટાસ્ક મેળવો | | `tasks/cancel` | `taskId` દ્વારા ટાસ્ક રદ કરો | બિલ્ટ-ઇન સ્કિલ્સ: `smart-routing`, `quota-management`, `provider-discovery`, `cost-analysis`, `health-report`. ### એજન્ટ કાર્ડ ```bash GET /.well-known/agent.json ``` સાર્વજનિક A2A એજન્ટ કાર્ડ (નામ, વર્ણન, ક્ષમતાઓ, સ્કિલ કૅટલૉગ, ઑથ સ્કીમ) પરત કરે છે — જાહેર રીતે 1h માટે કૅશ કરવામાં આવે છે. ઑથ જરૂરી નથી. ### REST સહાયકો | મેથડ | પાથ | વર્ણન | | ---- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------- | | GET | `/api/a2a/status` | A2A સક્ષમતા + ટાસ્ક આંકડા + કૅશ કરેલ એજન્ટ કાર્ડનો સારાંશ | | GET | `/api/a2a/tasks` | ટાસ્ક્સની સૂચિ — `?state=submitted\|working\|completed\|failed\|cancelled`, `?skill=`, `?limit=` (≤200), `?offset=` | | POST | `/api/a2a/tasks` | (REST સહાયક તરીકે અમલમાં મૂકાયેલ નથી — JSON-RPC `message/send` દ્વારા બનાવો) | | GET | `/api/a2a/tasks/[id]` | એક ટાસ્ક મેળવો | | POST | `/api/a2a/tasks/[id]/cancel` | ટાસ્ક રદ કરો | **ઑથ:** REST સહાયકો મેનેજમેન્ટ ઑથ વિના ચાલે છે (ડૅશબોર્ડ દ્વારા વાંચી શકાય તેવા); જો કૉન્ફિગર કરેલ હોય, તો JSON-RPC `/a2a` રૂટ Bearer `OMNIROUTE_API_KEY` નો ઉપયોગ કરે છે. --- ## ક્લાઉડ, ઇવેલ્સ અને અસેસ | મેથડ | પાથ | વર્ણન | | ------ | ------------------------------- | ------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------- | | POST | `/api/cloud/auth` | Bearer કી ચકાસો અને ક્લાઉડ સિંક ક્લાયન્ટ્સ માટે માસ્ક કરેલ પ્રોવાઇડર કનેક્શન્સ + મોડલ એલિયાસ પરત કરો | | POST | `/api/cloud/credentials/update` | ક્લાઉડ-સિંક કરેલા પ્રોવાઇડર માટે એન્ક્રિપ્ટ કરેલ ક્રેડેન્શિયલ્સ અપડેટ કરો | | POST | `/api/cloud/model/resolve` | સ્થાનિક રૂટિંગ ટેબલનો ઉપયોગ કરીને લૉજિકલ મોડલ id ને ચોક્કસ પ્રોવાઇડર/મોડલમાં રિઝૉલ્વ કરો | | GET | `/api/cloud/models/alias` | ક્લાઉડ સિંકને દર્શાવવામાં આવતા મોડલ એલિયાસની સૂચિ આપો | | GET | `/api/assess` | નવીનતમ અસેસમેન્ટ વર્ગીકરણો વાંચો (દરેક પ્રોવાઇડર/મોડલ માટે) | | POST | `/api/assess` | અસેસમેન્ટ ચલાવો — બૉડી: `{scope: {type:"all"} | {type:"provider", providerId} | {type:"model", modelId}, trigger?}` | | GET | `/api/evals` | બિલ્ટ-ઇન ઇવેલ સ્યુટ્સ + સૌથી તાજેતરના રન્સની સૂચિ આપો | | POST | `/api/evals` | ઇવેલ રન ટ્રિગર કરો | | POST | `/api/evals/suites` | કસ્ટમ ઇવેલ સ્યુટ બનાવો — બૉડી `evalSuiteSaveSchema` દ્વારા માન્ય કરવામાં આવે છે | | GET | `/api/evals/suites/[id]` | કસ્ટમ ઇવેલ સ્યુટ મેળવો | **ઑથ:** `/api/cloud/auth` સીધી Bearer કીને માન્ય કરે છે; અન્ય `/api/cloud/*`, `/api/evals/*`, અને `/api/assess` રૂટ્સ માટે મેનેજમેન્ટ સેશન/API કી જરૂરી છે. `/api/assess` POST ડિસ્ક્રિમિનેટેડ-યુનિયન સ્કોપ સ્કીમા સાથે `validateBody` નો ઉપયોગ કરે છે. --- ## ACP (Agent Client Protocol) વ્યવસ્થાપન ચાઇલ્ડ પ્રોસેસ તરીકે. આ એન્ડપોઇન્ટ્સ ACP એજન્ટની શોધ અને કસ્ટમ એજન્ટની નોંધણીનું વ્યવસ્થાપન કરે છે. | પદ્ધતિ | પાથ | વર્ણન | | ------ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | GET | `/api/acp/agents` | ઇન્સ્ટોલેશન સ્થિતિ, વર્ઝન અને બાઇનરી સાથે તમામ જાણીતા CLI એજન્ટ્સ (બિલ્ટ-ઇન + કસ્ટમ)ની યાદી આપે છે | | POST | `/api/acp/agents` | કસ્ટમ ACP એજન્ટ નોંધે છે અથવા કૅશ રિફ્રેશ કરે છે — બોડી: `{id, name, binary, versionCommand, providerAlias, spawnArgs, protocol}` અથવા `{action: "refresh"}` | | DELETE | `/api/acp/agents` | કસ્ટમ ACP એજન્ટ દૂર કરે છે — ક્વેરી પેરામીટર: `?id=` | **પ્રતિસાદનું ઉદાહરણ** (`GET /api/acp/agents`): ```json { "agents": [ { "id": "claude", "name": "Claude Code CLI", "binary": "claude", "version": "1.0.45", "installed": true, "protocol": "stdio", "providerAlias": "claude", "isCustom": false }, { "id": "my-custom-cli", "name": "My Custom CLI", "installed": false, "protocol": "stdio", "providerAlias": "my-provider", "isCustom": true } ], "cacheTtlMs": 60000, "cacheAge": 1234 } ``` **પ્રમાણીકરણ:** મેનેજમેન્ટ સેશન (ડૅશબોર્ડની `auth_token` કૂકી) અથવા મેનેજમેન્ટ-સ્કોપવાળી API કી આવશ્યક છે. સંપૂર્ણ વિગતો માટે [ACP ફ્રેમવર્ક](../frameworks/ACP.md) જુઓ. --- ## ઍનલિટિક્સ અને અવલોકનક્ષમતા રાઉટિંગ, કમ્પ્રેશન અને પ્રદાતા વૈવિધ્યનું નિરીક્ષણ કરવા માટેના રીઅલ-ટાઇમ ઍનલિટિક્સ એન્ડપોઇન્ટ્સ. આ `/dashboard/analytics/*` પેજને આધાર આપે છે. ### ઑટો-રાઉટિંગ ઍનલિટિક્સ | પદ્ધતિ | પાથ | વર્ણન | | ------ | ------------------------------------ | --------------------------------------------------------------------------------------- | | GET | `/api/analytics/auto-routing` | એકત્રિત ઑટો-રાઉટિંગ આંકડા: કુલ કૉલ્સ, વ્યૂહરચનાનું વિતરણ, ટિયરનું વિતરણ, ટોચના પ્રદાતાઓ | | GET | `/api/analytics/auto-routing?days=7` | સમય-વિન્ડો આધારિત આંકડા (ડિફૉલ્ટ 24h) | **પ્રતિસાદનું ઉદાહરણ**: ```json { "window": "24h", "totalCalls": 1234, "strategyBreakdown": { "rules": 800, "cost": 200, "latency": 150, "sla-aware": 50, "lkgp": 34 }, "tierBreakdown": { "ultra": 100, "pro": 500, "standard": 400, "free": 234 }, "topProviders": [ { "provider": "openai", "calls": 500, "avgLatencyMs": 850 }, { "provider": "anthropic", "calls": 300, "avgLatencyMs": 1200 } ] } ``` ### કમ્પ્રેશન ઍનલિટિક્સ | પદ્ધતિ | પાથ | વર્ણન | | ------ | ---------------------------- | ---------------------------------------------------------------------------- | | GET | `/api/analytics/compression` | એકત્રિત કમ્પ્રેશન આંકડા: બચાવેલા ટોકન્સ, બચત %, મોડનું વિતરણ, એન્જિનનો ઉપયોગ | **પ્રતિસાદનું ઉદાહરણ**: ```json { "window": "24h", "totalOriginalTokens": 5000000, "totalCompressedTokens": 3500000, "totalSavings": 1500000, "savingsPct": 30.0, "modeBreakdown": { "lite": 400, "standard": 600, "aggressive": 100, "ultra": 50, "rtk": 84 }, "engineBreakdown": { "caveman": 800, "rtk": 434 } } ``` ### પ્રદાતા વૈવિધ્ય ટ્રૅકિંગ | પદ્ધતિ | પાથ | વર્ણન | | ------ | -------------------------- | -------------------------------------------------------------------------------------------------------------- | | GET | `/api/analytics/diversity` | Shannon entropy-આધારિત વૈવિધ્ય ટ્રૅકિંગ: પ્રદાતાઓ વચ્ચેના વિતરણને માપીને નિષ્ફળતાના એકમાત્ર બિંદુઓને અટકાવે છે | **પ્રતિસાદનું ઉદાહરણ**: ```json { "window": "24h", "shannonEntropy": 2.45, "maxEntropy": 3.17, "diversityRatio": 0.77, "providerUsage": { "openai": 0.4, "anthropic": 0.25, "google": 0.2, "kiro": 0.15 }, "warnings": ["OpenAI accounts for 40% of traffic — consider diversifying"] } ``` **પ્રમાણીકરણ:** મેનેજમેન્ટ સેશન અથવા મેનેજમેન્ટ-સ્કોપવાળી API કી આવશ્યક છે. --- ## એડમિન કામગીરીઓ કાર્યાત્મક વ્યવસ્થાપન માટે માત્ર એડમિન માટેના એન્ડપોઇન્ટ્સ. | પદ્ધતિ | પાથ | વર્ણન | | ------ | ------------------------ | ---------------------------------------------------------------------------------------------- | | GET | `/api/admin/concurrency` | વર્તમાન સમવર્તિતા મર્યાદાઓ વાંચો (વૈશ્વિક + પ્રતિ-પ્રદાતા) | | POST | `/api/admin/concurrency` | સમવર્તિતા મર્યાદાઓ અપડેટ કરો — બોડી: `{global?: number, perProvider?: Record}` | **પ્રમાણીકરણ:** એડમિન સ્કોપ સાથેનું મેનેજમેન્ટ સત્ર જરૂરી છે. --- ## CLI ટૂલ્સનું વ્યવસ્થાપન OmniRoute સાથે સંકલિત થતા CLI ટૂલ્સનું વ્યવસ્થાપન કરો (antigravity, chipotle, commandCode, devin-cli, વગેરે). સંપૂર્ણ સૂચિ માટે [પ્રદાતા સંદર્ભ](./PROVIDER_REFERENCE.md) જુઓ. | પદ્ધતિ | પાથ | વર્ણન | | ------ | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | GET | `/api/cli-tools/all-statuses` | તમામ CLI ટૂલ્સની સ્થિતિ (ઇન્સ્ટોલ થયેલ, વર્ઝન, છેલ્લે જોવામાં આવેલ) | | GET | `/api/cli-tools/status` | એક CLI ટૂલ માટે સ્થિતિની વિગતો (`?tool=` ક્વેરી) | | POST | `/api/cli-tools/apply` | ટૂલનું જનરેટ કરેલું કૉન્ફિગ લખો (`dryRun` પૂર્વાવલોકન કરે છે; કન્ટેનરાઇઝ્ડ હોય ત્યારે `422` + `containerEphemeralTarget`; `migration` લેગસી Codex YAMLની નોંધ કરે છે) | | GET | `/api/cli-tools/backups` | CLI ટૂલ કૉન્ફિગરેશન બૅકઅપ્સની સૂચિ મેળવો | | POST | `/api/cli-tools/backups` | તમામ CLI ટૂલ કૉન્ફિગરેશન્સનો બૅકઅપ બનાવો | | POST | `/api/cli-tools/backups` | પુનઃસ્થાપિત કરો: બોડીમાં `{tool, backupId}` સાથે એ જ એન્ડપોઇન્ટ તે બૅકઅપને પુનઃસ્થાપિત કરે છે | | GET | `/api/cli-tools/antigravity-mitm` | Antigravity MITM પ્રૉક્સીની સ્થિતિ ("antigravity-mitm" CLI ટૂલ) | | POST | `/api/cli-tools/antigravity-mitm/alias` | antigravity-mitm ઉપનામોને કૉન્ફિગર કરો | **પ્રમાણીકરણ:** મેનેજમેન્ટ સત્ર જરૂરી છે. --- ## એજન્ટ સ્કિલ્સ AI એજન્ટ સ્કિલ્સનું વ્યવસ્થાપન કરો (OpenAIના કસ્ટમ GPTs જેવા, પરંતુ એજન્ટ્સ માટે). | પદ્ધતિ | પાથ | વર્ણન | | ------ | ---------------------------- | ----------------------------------------------------------------------------------- | | GET | `/api/agent-skills` | તમામ એજન્ટ સ્કિલ્સની સૂચિ મેળવો (બિલ્ટ-ઇન + કસ્ટમ) | | GET | `/api/agent-skills/[id]` | ચોક્કસ એજન્ટ સ્કિલ મેળવો | | POST | `/api/agent-skills` | કસ્ટમ એજન્ટ સ્કિલ બનાવો — બોડી: `{name, description, prompt, model?, temperature?}` | | PUT | `/api/agent-skills/[id]` | કસ્ટમ એજન્ટ સ્કિલ અપડેટ કરો | | DELETE | `/api/agent-skills/[id]` | કસ્ટમ એજન્ટ સ્કિલ કાઢી નાખો | | GET | `/api/agent-skills/[id]/raw` | રૉ પ્રૉમ્પ્ટ + મેટાડેટા મેળવો (એક્ઝિક્યુશન વિના) | | POST | `/api/agent-skills/generate` | કુદરતી ભાષાના વર્ણનમાંથી AI દ્વારા નવી સ્કિલ જનરેટ કરો | **પ્રમાણીકરણ:** મેનેજમેન્ટ સત્ર અથવા મેનેજમેન્ટ-સ્કોપ્ડ API કી જરૂરી છે. --- ## કૅશ વ્યવસ્થાપન સિમેન્ટિક કૅશ અને રીઝનિંગ કૅશનું વ્યવસ્થાપન કરો. | પદ્ધતિ | પાથ | વર્ણન | | ------ | ---------------------- | ------------------------------------------------------------------------------------------------------------------- | | GET | `/api/cache` | કૅશનો સારાંશ: કુલ એન્ટ્રીઓ, હિટ રેટ, ડિસ્ક પરનું કદ | | GET | `/api/cache/entries` | કૅશ કરેલી એન્ટ્રીઓની સૂચિ (પેજિનેશન સાથે) | | DELETE | `/api/cache/entries` | કૅશ એન્ટ્રીઓ કાઢી નાખો (ક્વેરી પેરામીટર્સ દ્વારા ફિલ્ટર કરો) | | GET | `/api/cache/stats` | વિગતવાર કૅશ આંકડા (દર-પ્રોવાઇડર, દર-મોડલ) | | GET | `/api/cache/reasoning` | રીઝનિંગ કૅશની સ્થિતિ (રીઝનિંગ રીપ્લે માટે) | | DELETE | `/api/cache/reasoning` | રીઝનિંગ કૅશ સાફ કરો — ક્વેરી પેરામીટર્સ: `?toolCallId=` (એક) અથવા `?provider=

` અથવા કોઈ પેરામીટર નહીં (બધું) | **પ્રમાણીકરણ:** મેનેજમેન્ટ સત્ર જરૂરી છે. --- ## મેમરી સિસ્ટમ સ્થાયી મેમરીનું વ્યવસ્થાપન કરો (FTS5 + વેક્ટર એમ્બેડિંગ્સ). | પદ્ધતિ | પાથ | વર્ણન | | ------ | ------------------ | ------------------------------------------------------------------- | | GET | `/api/memory` | મેમરી એન્ટ્રીઓની સૂચિ (સ્કોપ, પ્રકાર, શોધ ક્વેરી દ્વારા ફિલ્ટર કરો) | | POST | `/api/memory` | નવી મેમરી એન્ટ્રી બનાવો — બોડી: `{scope, type, content, metadata?}` | | GET | `/api/memory/[id]` | ચોક્કસ મેમરી એન્ટ્રી મેળવો | | PUT | `/api/memory/[id]` | મેમરી એન્ટ્રી અપડેટ કરો | | DELETE | `/api/memory/[id]` | મેમરી એન્ટ્રી કાઢી નાખો | | GET | `/api/memory?q=` | મેમરી શોધો (FTS5 + વેક્ટર) — આંકડા એ જ પ્રતિસાદમાં સામેલ છે | **પ્રમાણીકરણ:** મેનેજમેન્ટ સત્ર અથવા મેનેજમેન્ટ-સ્કોપ્ડ API કી જરૂરી છે. --- ## વેબહુક્સ ઇવેન્ટ્સ માટેના વેબહુક સબ્સ્ક્રિપ્શન્સનું વ્યવસ્થાપન કરો. | પદ્ધતિ | પાથ | વર્ણન | | ------ | ------------------------------- | ---------------------------------------------------------------------- | | GET | `/api/webhooks` | તમામ વેબહુક સબ્સ્ક્રિપ્શન્સની સૂચિ | | POST | `/api/webhooks` | વેબહુક સબ્સ્ક્રિપ્શન બનાવો — બોડી: `{url, events[], secret?, active?}` | | GET | `/api/webhooks/[id]` | ચોક્કસ વેબહુક સબ્સ્ક્રિપ્શન મેળવો | | PUT | `/api/webhooks/[id]` | વેબહુક સબ્સ્ક્રિપ્શન અપડેટ કરો | | DELETE | `/api/webhooks/[id]` | વેબહુક સબ્સ્ક્રિપ્શન કાઢી નાખો | | GET | `/api/webhooks/[id]/deliveries` | વેબહુક માટે ડિલિવરી ઇતિહાસની સૂચિ (સફળતા/નિષ્ફળતા લૉગ) | | POST | `/api/webhooks/[id]/test` | વેબહુકને ટેસ્ટ ઇવેન્ટ મોકલો | **પ્રમાણીકરણ:** મેનેજમેન્ટ સત્ર જરૂરી છે. સંપૂર્ણ ઇવેન્ટ પ્રકારો માટે [વેબહુક્સ ફ્રેમવર્ક](../frameworks/WEBHOOKS.md) જુઓ. --- ## સ્કિલ્સ ફ્રેમવર્ક સ્કિલ્સ (એજેન્ટિક એક્સ્ટેન્શન્સ ફ્રેમવર્ક)નું સંચાલન કરો. | પદ્ધતિ | પાથ | વર્ણન | | ------ | ------------------------ | ---------------------------------------------------------------------------------------- | | GET | `/api/skills` | ઇન્સ્ટોલ કરેલી બધી સ્કિલ્સની યાદી (બિલ્ટ-ઇન + કસ્ટમ) | | POST | `/api/skills/install` | લોકલ પાથ અથવા URL પરથી સ્કિલ ઇન્સ્ટોલ કરો | | DELETE | `/api/skills/[id]` | સ્કિલ અનઇન્સ્ટોલ કરો | | PUT | `/api/skills/[id]` | સ્કિલ સક્ષમ અથવા અક્ષમ કરો — બોડી: `{enabled?: boolean, mode?: "on" \| "off" \| "auto"}` | | POST | `/api/skills/executions` | સ્કિલ એક્ઝિક્યુટ કરો — બોડી: `{skillName, apiKeyId, input?, sessionId?}` | | GET | `/api/skills/executions` | બધી સ્કિલ્સ માટે એક્ઝિક્યુશન ઇતિહાસની યાદી (`?apiKeyId=` દ્વારા ફિલ્ટર કરો) | **પ્રમાણીકરણ:** મેનેજમેન્ટ સેશન અથવા મેનેજમેન્ટ-સ્કોપ્ડ API કી જરૂરી છે. સંપૂર્ણ વિગતો માટે [સ્કિલ્સ ફ્રેમવર્ક](../frameworks/SKILLS.md) જુઓ. --- ## પ્લગઇન્સ OmniRoute પ્લગઇન્સ (તૃતીય-પક્ષ એક્સ્ટેન્શન્સ)નું સંચાલન કરો. | પદ્ધતિ | પાથ | વર્ણન | | ------ | ---------------------------------- | ------------------------------------- | | GET | `/api/plugins` | ઇન્સ્ટોલ કરેલા પ્લગઇન્સની યાદી | | POST | `/api/plugins/marketplace/install` | માર્કેટપ્લેસ પરથી પ્લગઇન ઇન્સ્ટોલ કરો | | DELETE | `/api/plugins/[name]` | પ્લગઇન અનઇન્સ્ટોલ કરો | | POST | `/api/plugins/[name]/activate` | પ્લગઇન સક્રિય કરો | | POST | `/api/plugins/[name]/deactivate` | પ્લગઇન નિષ્ક્રિય કરો | | GET | `/api/plugins/[name]/config` | પ્લગઇન કૉન્ફિગરેશન મેળવો | | PUT | `/api/plugins/[name]/config` | પ્લગઇન કૉન્ફિગરેશન અપડેટ કરો | **પ્રમાણીકરણ:** મેનેજમેન્ટ સેશન જરૂરી છે. સંપૂર્ણ વિગતો માટે [પ્લગઇન્સ ફ્રેમવર્ક](../frameworks/PLUGIN_SDK.md) જુઓ. --- ## શેડો રાઉટિંગ પ્રોવાઇડર્સની શેડો / A-B સરખામણી **એક સ્વતંત્ર REST સરફેસ નથી** — તેને કોમ્બો રાઉટિંગ મારફતે કૉન્ફિગર કરવામાં આવે છે ([ઑટો-કોમ્બો](../routing/AUTO-COMBO.md) જુઓ). દરેક કોમ્બો માટેના સરખામણી મેટ્રિક્સ `GET /api/combos/metrics` દ્વારા પ્રદાન કરવામાં આવે છે. --- ## ગાર્ડરેલ્સ રનટાઇમ ગાર્ડરેલ્સ (PII શોધ, પ્રોમ્પ્ટ ઇન્જેક્શન શોધ, વિઝન બ્રિજિંગ)નું નિરીક્ષણ કરો. ગાર્ડરેલ્સ દરેક વિનંતી પર ચાલે છે; દરેક કૉલ માટે ઑપ્ટ-આઉટ `x-omniroute-disabled-guardrails` રિક્વેસ્ટ હેડર દ્વારા થાય છે — કાયમી રીતે સાચવાતું સક્ષમ/અક્ષમ સરફેસ ઉપલબ્ધ નથી. | પદ્ધતિ | પાથ | વર્ણન | | ------ | ---------------------- | --------------------------------------------------------------------------------------- | | GET | `/api/guardrails` | નોંધાયેલા ગાર્ડરેલ્સ અને તેમની સ્થિતિની યાદી (નામ / સક્ષમ / પ્રાથમિકતા) | | POST | `/api/guardrails/test` | નમૂના ઇનપુટ પર પ્રી-કૉલ પાઇપલાઇનનું ડ્રાય-રન કરો — બોડી: `{input, disabledGuardrails?}` | **પ્રમાણીકરણ:** મેનેજમેન્ટ સેશન જરૂરી છે. સંપૂર્ણ વિગતો માટે [સુરક્ષા > ગાર્ડરેલ્સ](../security/GUARDRAILS.md) જુઓ. --- --- ## પ્રમાણીકરણ ચાર ક્રેડેન્શિયલ પરિવારો (ડેશબોર્ડ સેશન, સ્થાનિક CLI ટોકન, `oma_live_…` ઍક્સેસ ટોકન, મેનેજમેન્ટ-સ્કોપ્ડ API કી) અને તેઓ ઇન્ફરન્સ કીથી કેવી રીતે અલગ પડે છે તે જાણવા માટે [મેનેજમેન્ટ પ્રમાણીકરણ](../guides/MANAGEMENT-AUTH.md) જુઓ. - ડેશબોર્ડ રૂટ્સ (`/dashboard/*`) `auth_token` કૂકીનો ઉપયોગ કરે છે - લૉગિન સાચવેલા પાસવર્ડ હૅશનો ઉપયોગ કરે છે; વિકલ્પ તરીકે `INITIAL_PASSWORD`નો ઉપયોગ થાય છે - `requireLogin`ને `/api/settings/require-login` દ્વારા ટૉગલ કરી શકાય છે - `REQUIRE_API_KEY=true` હોય ત્યારે `/v1/*` રૂટ્સ માટે વૈકલ્પિક રીતે Bearer API કી જરૂરી બને છે - આ સંદર્ભમાં "મેનેજમેન્ટ ટોકન" / "મેનેજમેન્ટ-સ્કોપ્ડ API કી"નો અર્થ તે માર્ગદર્શિકામાંના પરિવારોમાંથી કોઈ એક છે — કોઈ અપરિભાષિત વધારાનો સિક્રેટ પ્રકાર નહીં > **બ્રેકિંગ ફેરફાર (v3.8.0)** — `/api/v1/agents/tasks/*` અને કૂલડાઉન મેનેજમેન્ટ એન્ડપોઇન્ટ્સ માટે હવે **મેનેજમેન્ટ પ્રમાણીકરણ** (ડેશબોર્ડ `auth_token` કૂકી અથવા મેનેજમેન્ટ-સ્કોપ્ડ API કી) જરૂરી છે. અગાઉ આ રૂટ્સને પ્રમાણીકરણ વિના કૉલ કરતા ક્લાયન્ટ્સને `401 Unauthorized` પ્રાપ્ત થશે. કમિટ `588a0333` (`fix(auth): require management auth for agent and cooldown APIs`) જુઓ.