# 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) · 🇧🇦 [bs](../../../bs/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) · 🇮🇳 [gu](../../../gu/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) · 🇮🇳 [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) | 🇧🇦 [Bosanski](../i18n/bs/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/` ଅଧୀନରେ ଥିବା ରୁଟ୍ ଟ୍ରି ହେଉଛି ସମ୍ପୂର୍ଣ୍ଣ ଉତ୍ସଗୁଡ଼ିକ। OpenAI-ସୁସଙ୍ଗତ ପ୍ରୋଟୋକଲ୍ ଏବଂ ପ୍ରଦାନକାରୀ କ୍ଷମତା ମ୍ୟାଟ୍ରିକ୍ସ ବିଷୟରେ କେନ୍ଦ୍ରିତ ସୂଚନା ପାଇଁ, [`OPENAI_COMPATIBILITY.md`](./OPENAI_COMPATIBILITY.md) ଦେଖନ୍ତୁ। --- ## ବିଷୟ ସୂଚୀ - [ଚାଟ ସମ୍ପୂର୍ଣ୍ଣତା](#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-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 } ``` ### କଷ୍ଟମ ହେଡର୍ | Header | Direction | Description | | ------------------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `X-OmniRoute-No-Cache` | ଅନୁରୋଧ | କ୍ୟାଚ୍ ବାଇପାସ୍ କରିବାକୁ `true` ସେଟ୍ କରନ୍ତୁ | | `x-omniroute-no-memory` | ଅନୁରୋଧ | ଏହି ଅନୁରୋଧ ପାଇଁ ମେମୋରୀ + ସ୍କିଲ୍ ଇଞ୍ଜେକ୍ସନ୍ ସ୍କିପ୍ କରିବାକୁ `true` ସେଟ୍ କରନ୍ତୁ (no-cache କୁ ମିରର୍ କରେ; ପ୍ରତି-କଲ୍ ଟୋକନ୍/ଖର୍ଚ୍ଚ ଓଭରହେଡ୍ ଏଡ଼ାଏ) | | `X-OmniRoute-Progress` | ଅନୁରୋଧ | ପ୍ରଗତି ଇଭେଣ୍ଟଗୁଡ଼ିକ ପାଇଁ `true` ସେଟ୍ କରନ୍ତୁ | | `X-Session-Id` | ଅନୁରୋଧ | ବାହ୍ୟ ସେସନ ଆଫିନିଟି ପାଇଁ ସ୍ଟିକି ସେସନ କୀ | | `x_session_id` | ଅନୁରୋଧ | ଅଣ୍ଡରସ୍କୋର ଭାରିଆଣ୍ଟ ମଧ୍ୟ ଗ୍ରହଣ କରାଯାଏ (ସିଧାସଳଖ HTTP) | | `X-OmniRoute-Session-Id` | ଅନୁରୋଧ | କଲର୍-ସପ୍ଲାଇଡ୍ ସେସନ/କନଭର୍ସେସନ୍ ଟ୍ୟାଗ୍ (ମେମୋରୀକୁ ମଧ୍ୟ ଫିଡ୍ କରେ)। ଉପସ୍ଥିତ ଥିଲେ, ପ୍ରତି-ସେସନ ଖର୍ଚ୍ଚ ଆଟ୍ରିବ୍ୟୁସନ୍ ପାଇଁ `call_logs.session_tag` ରେ ଭର୍ବାଟିମ୍ ସଂରକ୍ଷିତ ହୁଏ (#8249) — ଅନୁପସ୍ଥିତ ଥିଲେ କେବେ ବି ସିନ୍ଥେସାଇଜ୍ ହୁଏ ନାହିଁ | | `Idempotency-Key` | ଅନୁରୋଧ | ଡେଡପ୍ କୀ (5 ସେକେଣ୍ଡ ୱିଣ୍ଡୋ) | | `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` | ପ୍ରତିକ୍ରିୟା | ଅନୁରୋଧ ସମ୍ପର୍କୀୟ ଆଇଡି (ଜଣାଥିଲେ) | | `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` (fail-open)। > **କ୍ୟାଚ୍-ହିଟ୍ ଖର୍ଚ୍ଚ ସେମାଣ୍ଟିକ୍ସ:** ଏକ ସେମାଣ୍ଟିକ୍-କ୍ୟାଚ୍ 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"} ``` ସଫଳ ଅଧିଗ୍ରହଣ, ନବୀକରଣ ଏବଂ ମୁକ୍ତି ପ୍ରତିକ୍ରିୟାଗୁଡ଼ିକ ଟାଇମ୍ଷ୍ଟାମ୍ପ୍, `state`, ଏବଂ ସଠିକ୍ ସକାରାତ୍ମକ `generation` ପ୍ରକାଶ କରେ, କିନ୍ତୁ କେବେବି ଚୟନିତ ସଂଯୋଗ କିମ୍ବା ପ୍ରମାଣପତ୍ର ନୁହେଁ। ନବୀକରଣ ଏବଂ ମୁକ୍ତି 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" } } ``` ଏହି ଅପ୍ଟ-ଇନ୍ ଷ୍ଟାଟସ୍ କାର୍ଯ୍ୟ ଅସ୍ପଷ୍ଟ ମାଲିକ, ପ୍ରାମାଣିକ ମ୍ୟାନେଜ୍ଡ୍ API କି', ଏବଂ ଗୋଟିଏ ଡାଟାବେସ୍ ଟ୍ରାନ୍ସାକସନରେ ସଠିକ୍ ସକ୍ରିୟ generation ଦ୍ୱାରା ଫେନ୍ସ କରାଯାଇଛି। `displayName` କେବଳ ଟ୍ରିମ୍ ହୋଇଥିବା କନଫିଗର୍ଡ୍ ସଂଯୋଗ ନାମ; ଯେତେବେଳେ କୌଣସି ସୁରକ୍ଷିତ କନଫିଗର୍ଡ୍ ନାମ ନଥାଏ ସେତେବେଳେ ଏହା `null` ହୋଇଥାଏ। OmniRoute କେବେବି ଏକ ଇମେଲ୍ କିମ୍ବା ଉତ୍ପନ୍ନ ଆକାଉଣ୍ଟ୍ ପରିଚୟ ବଦଳାଏ ନାହିଁ। ପ୍ରଦାନକାରୀ ମୂଲ୍ୟ ଏକ ଅଣ-ସମ୍ବେଦନଶୀଳ ପ୍ରଦର୍ଶନ ଲେବଲ୍ ଏବଂ କେବେବି ଏକ ଉତ୍ପନ୍ନ ସୁସଙ୍ଗତ-ପ୍ରଦାନକାରୀ ପରିଚୟକାରୀ ନୁହେଁ। ପ୍ରମାଣପତ୍ର, ଟୋକେନ୍, କୁକିଜ୍, କଞ୍ଚା ସଂଯୋଗ କିମ୍ବା API କି' id, ମାଲିକ ହ୍ୟାସ୍, ଫେନ୍ସିଂ ସିକ୍ରେଟ୍, ଏବଂ ଆଭ୍ୟନ୍ତରୀଣ ରାଉଟିଂ ଡାଟା ବାଦ୍ ଦିଆଯାଇଛି। ଭୁଲ-କି', ଭୁଲ-ମାଲିକ, ଷ୍ଟେଲ୍-ଜେନେରେସନ୍, ନିଖୋଜ, ମିଆଦ ସରିଯାଇଥିବା, ମୁକ୍ତ, ଏବଂ ଅବୈଧ ଲୁକଅପ୍ ସମସ୍ତେ ସମାନ `409 LEASE_FENCE_STALE` ତ୍ରୁଟି ଫେରାନ୍ତି, ବିନା ସଂଯୋଗ ମେଟାଡାଟାରେ। ଏକ କ୍ଲାଏଣ୍ଟ ଯିଏ କ୍ଷମତା-ଅପେକ୍ଷା ପ୍ରତିକ୍ରିୟା ଗ୍ରହଣ କରିଛି, ତା'ର ଯାଞ୍ଚ କରିବାକୁ କୌଣସି ସକ୍ରିୟ ବାଇଣ୍ଡିଂ ନାହିଁ। ଯେତେବେଳେ ରାଉଟିଂ ଏକ ସକ୍ରିୟ ଲିଜ୍ ପରିବର୍ତ୍ତନ କରେ, ସମାନ generation ବୈଧ ରହେ ଏବଂ ଷ୍ଟାଟସ୍ ଆଟୋମିକାଲି ନୂତନ ବାଇଣ୍ଡିଂ ଫେରାଏ, କେବେବି ପୁରୁଣା ନୁହେଁ। ବିଦ୍ୟମାନ କ୍ଲାଏଣ୍ଟଗୁଡ଼ିକ ଅପରିବର୍ତ୍ତିତ ରହନ୍ତି କାରଣ ଅଧିଗ୍ରହଣ, ନବୀକରଣ, ମୁକ୍ତି, ଏବଂ ଅପେକ୍ଷା ପ୍ରତିକ୍ରିୟାଗୁଡ଼ିକ ସେମାନଙ୍କର ପୂର୍ବ ଆକୃତି ବଜାୟ ରଖନ୍ତି। ଏହି ସର୍ଭର ଚୁକ୍ତି ଷ୍ଟକ୍ OpenAI Codex `/status` କୁ ପରିବର୍ତ୍ତନ କରେ ନାହିଁ। ଷ୍ଟକ୍ Codex ବର୍ତ୍ତମାନ ଏହାର ମଡେଲ୍ ପ୍ରଦାନକାରୀ ଏବଂ ବିଲ୍ଟ-ଇନ୍ ପ୍ରାମାଣିକରଣ/ଆକାଉଣ୍ଟ୍ ଷ୍ଟେଟ୍ ରିପୋର୍ଟ କରେ କିନ୍ତୁ ମନମୁଖୀ କଷ୍ଟମ୍ ପ୍ରଦାନକାରୀ ଆକାଉଣ୍ଟ୍ ମେଟାଡାଟା ରେଣ୍ଡର କରେ ନାହିଁ; ଏକ ପରବର୍ତ୍ତୀ କ୍ଲାଏଣ୍ଟ୍ ଇଣ୍ଟିଗ୍ରେସନ୍ ଏହି କାର୍ଯ୍ୟକୁ ଡାକିବା ଏବଂ `connection.displayName` କୁ କିପରି ପ୍ରଦର୍ଶିତ କରିବ ତାହା ସ୍ଥିର କରିବା ଆବଶ୍ୟକ। ପ୍ରତ୍ୟେକ ମ୍ୟାନେଜ୍ଡ୍ ଇନଫେରେନ୍ସ ଅନୁରୋଧ ତାପରେ ଉଭୟ ନିୟନ୍ତ୍ରଣ ହେଡର୍ ଯୋଗାଏ: ```http X-OmniRoute-Lease-Owner: vlo_<43-base64url-characters> X-OmniRoute-Lease-Generation: 1 ``` ସଠିକ୍ ମାଲିକ, generation, ସକ୍ରିୟ ସଂଯୋଗ, ଏବଂ ପ୍ରାମାଣିକ API କି' ପ୍ରତ୍ୟେକ ସମର୍ଥିତ ଅପଷ୍ଟ୍ରିମ୍ ପ୍ରୟାସ ପୂର୍ବରୁ ତୁରନ୍ତ ଫେନ୍ସ କରାଯାଏ। ଅନ୍ୟ ଏକ କି' ସହିତ ମାଲିକ ଏବଂ generation କୁ ପୁନରାବୃତ୍ତି କରିବା ବିଫଳ ହୁଏ ଯେତେବେଳେ ସେହି କି' ସମାନ ସଂଯୋଗକୁ ଅନୁମତି ଦିଏ। କଞ୍ଚା ମାଲିକମାନେ ସ୍ଥାୟୀ ହୁଅନ୍ତି ନାହିଁ, ଲଗ୍ ହୁଅନ୍ତି ନାହିଁ, ଅନୁରୋଧ ସ୍ନାପସଟରେ ରଖାଯାନ୍ତି ନାହିଁ, କିମ୍ବା ଅପଷ୍ଟ୍ରିମ୍ ଫରୱାର୍ଡ କରାଯାନ୍ତି ନାହିଁ। ଅସ୍ଥାୟୀ ପ୍ରତିଯୋଗିତା HTTP `429` ଫେରାଏ `Retry-After` ଏବଂ: ```json { "state": "WAITING_FOR_CAPACITY", "error": { "type": "lease_error", "code": "LEASE_CAPACITY_UNAVAILABLE" }, "reason": "NO_FREE_ELIGIBLE_CONNECTION", "retryAfter": 30 } ``` ଏହି ପ୍ରତିକ୍ରିୟା କେବଳ ଏହାର ଅର୍ଥ ହେଉଛି ଯେ ସାଧାରଣ ଯୋଗ୍ୟ ସେଟ୍ ଅଣ-ଶୂନ୍ୟ ଥିଲା ଏବଂ ପ୍ରତ୍ୟେକ ମୁକ୍ତ ପ୍ରାର୍ଥୀ ଏକ ବିଦେଶୀ ସକ୍ରିୟ ଲିଜ୍ ଦ୍ୱାରା ଧାରଣ କରାଯାଇଥିଲା। ଅସମର୍ଥିତ ମଡେଲ୍/ପ୍ରଦାନକାରୀ, ନୀତି ଅସଙ୍ଗତି, କୁଲଡାଉନ୍, କୋଟା, ସ୍ୱାସ୍ଥ୍ୟ, ଏବଂ ଅନ୍ୟାନ୍ୟ ସାଧାରଣ ଯୋଗ୍ୟତା ବିଫଳତା ସେମାନଙ୍କର ବିଦ୍ୟମାନ OmniRoute ପ୍ରତିକ୍ରିୟା ବଜାୟ ରଖନ୍ତି। ### `x-omniroute-compression` ସଙ୍କୋଚନ ଯୋଜନାର ପ୍ରତି-ଅନୁରୋଧ ଓଭରରାଇଡ୍। ସର୍ବୋଚ୍ଚ ପ୍ରାଧାନ୍ୟ — ରାଉଟିଂ-କମ୍ବୋ ଓଭରରାଇଡ୍, ସକ୍ରିୟ ପ୍ରୋଫାଇଲ୍, ଅଟୋ-ଟ୍ରିଗର୍, ଏବଂ ପ୍ୟାନେଲ୍ ଡିଫଲ୍ଟକୁ ହରାଏ। ମୂଲ୍ୟଗୁଡ଼ିକ: | ମୂଲ୍ୟ | ପ୍ରଭାବ | | ------------- | -------------------------------------------------------------------------------------------- | | `off` | ଏହି ଅନୁରୋଧ ପାଇଁ କୌଣସି ସଙ୍କୋଚନ ନାହିଁ। | | `default` | ପ୍ୟାନେଲ୍-ଡେରିଭ୍ଡ ଡିଫଲ୍ଟ ପ୍ରୋଫାଇଲ୍ (ସକ୍ରିୟ ପ୍ରୋଫାଇଲ୍ କୁ ଅଣଦେଖା କରେ)। ଲୋସି ଇଞ୍ଜିନ୍ ବନ୍ଦ ରହେ। | | `safe` | କେବଳ ଡେଡୁପ୍ ଏବଂ ଧଳା ସ୍ଥାନ ଫୋଲ୍ଡିଂ। | | `allow-lossy` | ସାରାଂଶ ଏବଂ ଶୈଳୀ ପୁନଃଲେଖା ସହିତ ଏହି ଅନୁରୋଧ ପାଇଁ ଅପରେଟର ଯୋଜନା ରଖନ୍ତୁ। | | `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। କ୍ୟାଟାଲଗ୍ idଗୁଡ଼ିକ `provider/model` ଫର୍ମାଟ୍ରେ ଥାଏ (ଉଦାହରଣ: `jina-ai/jina-embeddings-v5-omni-small`)। ରେଜିଷ୍ଟ୍ରିରେ ଥିବା କେବଳ Jina ମଡେଲ୍ idଗୁଡ଼ିକ (ଉଦାହରଣ ସ୍ୱରୂପ `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 ସେହି ଅବଜେକ୍ଟଗୁଡ଼ିକୁ ଷ୍ଟ୍ରିଙ୍ଗ୍ରେ ପରିଣତ କରେ ନାହିଁ କିମ୍ବା ନେଟିଭ୍ ଇମେଜ୍ URLଗୁଡ଼ିକୁ ଫେଚ୍ କରେ ନାହିଁ — Jina ନିଜେ ସାର୍ବଜନୀନ ମିଡିଆ ଆଣେ। ଅତିରିକ୍ତ Jina ଫିଲ୍ଡଗୁଡ଼ିକ (`task`, `normalized`, `truncate`, `embedding_type`) ଫରୱାର୍ଡ କରାଯାଏ। କେବଳ-ଟେକ୍ସଟ୍ Jina SKUଗୁଡ଼ିକ ଏବେ ମଧ୍ୟ ଅଣ-ଟେକ୍ସଟ୍ ଡକ୍ୟୁମେଣ୍ଟକୁ ପ୍ରତ୍ୟାଖ୍ୟାନ କରେ। ସୁରକ୍ଷା ଏବଂ ପରିବହନ ସୀମା: - ରିମୋଟ୍ ମିଡିଆ URLଗୁଡ଼ିକ ନିଶ୍ଚିତ ଭାବେ ସାର୍ବଜନୀନ HTTPS ହେବା ଆବଶ୍ୟକ। କ୍ୟାନୋନିକାଲ୍ `{type,source:url}` ଆଇଟମ୍ଗୁଡ଼ିକୁ ସର୍ଭର୍ ପକ୍ଷରୁ ଫେଚ୍ କରାଯାଏ (ରିଡାଇରେକ୍ଟ ପୁନଃବୈଧୀକରଣ, ଟାଇମ୍ଆଉଟ୍, ଆକାର ସୀମା, ସାର୍ବଜନୀନ DNS, ସଂଯୋଗ ପିନିଂ) ଏବଂ ପ୍ରଦାନକାରୀ କଲ୍ ପୂର୍ବରୁ ଇନ୍ଲାଇନ୍ କରାଯାଏ। Jina-ନେଟିଭ୍ `{image:"https://..."}` ଆଇଟମ୍ଗୁଡ଼ିକୁ ସମାନ ସାର୍ବଜନୀନ-HTTPS ଯାଞ୍ଚ ପରେ ଯେପରି ଅଛି ସେପରି ଫରୱାର୍ଡ କରାଯାଏ; Jina URLଟିକୁ ଫେଚ୍ କରେ। - ଇନ୍ଲାଇନ୍ base64 ମିଡିଆ ପ୍ରତି ଆଇଟମ୍ରେ ଡିକୋଡ୍ ହୋଇଥିବା 8 MiB ଏବଂ ସମଗ୍ର ଅନୁରୋଧରେ ଡିକୋଡ୍ ହୋଇଥିବା 16 MiB ପର୍ଯ୍ୟନ୍ତ ସୀମିତ। ପ୍ରଦାନକାରୀ ରୂପାନ୍ତରଣ (କ୍ୟାନୋନିକାଲ୍ ଆଇଟମ୍ଗୁଡ଼ିକୁ କେବେବି ଅପରିବର୍ତ୍ତିତ ଭାବେ ଫରୱାର୍ଡ କରାଯାଏ ନାହିଁ): - Jina ମଲ୍ଟିମୋଡାଲ୍ ମଡେଲ୍ଗୁଡ଼ିକ: ପ୍ରତ୍ୟେକ ଶୀର୍ଷ-ସ୍ତରୀୟ ଆଇଟମ୍ ଗୋଟିଏ ମୋଡାଲିଟି-କୀଯୁକ୍ତ ଅବଜେକ୍ଟରେ ପରିଣତ ହୁଏ (`text` / `image` / `audio` / `video` / `pdf`), ଯେଉଁଥିରେ ଇନ୍ଲାଇନ୍ ମିଡିଆ ପାଇଁ data URI ବ୍ୟବହାର କରାଯାଏ; ପ୍ରତ୍ୟେକ ଶୀର୍ଷ-ସ୍ତରୀୟ ଆଇଟମ୍ ପାଇଁ ଗୋଟିଏ ଭେକ୍ଟର୍। - Gemini Embedding 2 ଫ୍ୟାମିଲି: ଗୋଟିଏ ଶୀର୍ଷ-ସ୍ତରୀୟ ଆରେ ଏକକ ନେଟିଭ୍ `models/{model}:embedContent` ଅନୁରୋଧରେ ପରିଣତ ହୁଏ, ଯେଉଁଥିରେ `content.parts` (`text` କିମ୍ବା `inline_data`) ଥାଏ। - llama.cpp (`llama-cpp/`, ସ୍ଥାନୀୟ ସର୍ଭର୍ ଲୋଡ୍ କରିଥିବା ଯେକୌଣସି ମଡେଲ୍): କ୍ୟାନୋନିକାଲ୍ `text` ଆଇଟମ୍ଗୁଡ଼ିକ ସାଧାରଣ ଷ୍ଟ୍ରିଙ୍ଗ୍ରେ ପରିଣତ ହୁଏ, ଏବଂ `image` / `audio` / `video` ପ୍ରତ୍ୟେକ ଗୋଟିଏ `{"content": [part]}` ଅବଜେକ୍ଟରେ ପରିଣତ ହୁଏ, ଯେଉଁଥିରେ llama-serverର ଚାଟ୍ କଣ୍ଟେଣ୍ଟ ପାର୍ଟଗୁଡ଼ିକ (`image_url`, `input_audio`, ଫର୍ମାଟ୍ `wav` / `mp3` / `flac` ସହିତ, `input_video`) ଇନ୍ଲାଇନ୍ ଡାଟା ସହ ବ୍ୟବହୃତ ହୁଏ; ପ୍ରତ୍ୟେକ ଶୀର୍ଷ-ସ୍ତରୀୟ ଆଇଟମ୍ ପାଇଁ ଗୋଟିଏ ଭେକ୍ଟର୍। ସର୍ଭର୍ଟି `--embedding --mmproj …` ସହ ଚାଲିବା ଆବଶ୍ୟକ; ପ୍ରୋଜେକ୍ଟର୍ ବିନା ଏହା ନିଜେ ମିଡିଆକୁ ପ୍ରତ୍ୟାଖ୍ୟାନ କରେ। `document` ସମର୍ଥିତ ନୁହେଁ। - ସ୍ପଷ୍ଟ ମୋଡାଲିଟି ମେଟାଡାଟା ନଥିବା ଅଜଣା/ଡାଇନାମିକ୍ ମଡେଲ୍ଗୁଡ଼ିକ 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 ଫେରାଏ। ପୁରୁଣା ଷ୍ଟ୍ରିଙ୍ଗ୍/ଟୋକେନ୍ ଅନୁରୋଧଗୁଡ଼ିକର ଅଣ-ଇନ୍ପୁଟ୍ ଏକ୍ସଟେନ୍ସନ୍ ଫିଲ୍ଡଗୁଡ଼ିକ ପୂର୍ବପରି ଅପରିବର୍ତ୍ତିତ ଭାବେ ପାସ୍ ହେବା ଜାରି ରଖେ। ```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**, **ZenMux**, SD WebUI (ସ୍ଥାନୀୟ), ComfyUI (ସ୍ଥାନୀୟ) ଅନ୍ତର୍ଭୁକ୍ତ। `n`, `data[]`ରେ `n`ଟି ଛବି ଫେରାଏ। ଯେଉଁ ପ୍ରଦାନକାରୀଙ୍କ upstream API ପ୍ରତ୍ୟେକ କଲ୍ରେ ଗୋଟିଏ ଛବି ଫେରାଏ (Black Forest Labs, Stability AI, Leonardo, Ideogram, Haiper, Hyperbolic, Magnific/Freepik, NVIDIA NIM, Cloudflare Workers AI), ସେମାନଙ୍କ ପାଇଁ ସର୍ବାଧିକ 4ଟି ଏକକାଳୀନ କଲ୍ ସହିତ `n`ଟି ପୃଥକ upstream କଲ୍ କରାଯାଏ। ଏକ ନିର୍ଦ୍ଧାରିତ `seed`କୁ କଲ୍ ସୂଚକାଙ୍କ ଅନୁସାରେ ବୃଦ୍ଧି କରାଯାଏ (`seed`, `seed + 1`, …), ଫଳରେ ଛବିଗୁଡ଼ିକ ଭିନ୍ନ ହେଲେ ମଧ୍ୟ ପୁନରୁତ୍ପାଦନଯୋଗ୍ୟ ରହେ। `n`ର ସର୍ବାଧିକ ସୀମା 10। କୌଣସି କଲ୍ ବିଫଳ ହେଲେ ସମଗ୍ର ଅନୁରୋଧ ବିଫଳ ହୁଏ। fan-out ଫର୍ମାଟ୍ଗୁଡ଼ିକର ତାଲିକା `open-sse/handlers/imageGeneration/fanOut.ts`ରେ ଥିବା `SINGLE_IMAGE_FANOUT_FORMATS` ଅଟେ। ZenMux ବିଦ୍ୟମାନ API-key ସଂଯୋଗକୁ ପୁନଃବ୍ୟବହାର କରେ ଏବଂ `zenmux/` କିମ୍ବା `zm/` ଉପସର୍ଗ ଗ୍ରହଣ କରେ: - `zenmux/openai/gpt-image-2`, ZenMuxର OpenAI Images API ବ୍ୟବହାର କରେ। ବିକଳ୍ପଗୁଡ଼ିକ ମଧ୍ୟରେ `size`, `quality`, `n`, `output_format`, `output_compression`, `background`, ଏବଂ `response_format` ଅନ୍ତର୍ଭୁକ୍ତ। - `zm/meta/muse-image-1.0` ପରି ଅନ୍ୟ ପ୍ରକାଶକମାନେ ZenMuxର Vertex AI `:predict` endpoint ବ୍ୟବହାର କରନ୍ତି। `n`, `sampleCount` ସହିତ, `aspect_ratio`, `aspectRatio` ସହିତ ଏବଂ `image_size` (`1K`, `2K`, `4K`), `sampleImageSize` ସହିତ ମ୍ୟାପ୍ ହୁଏ। ଏକ pixel `size` କେବଳ ଗୋଟିଏ aspect ratio ପ୍ରଦାନ କରେ, ନିଶ୍ଚିତ pixel dimensions ନୁହେଁ। ସମର୍ଥିତ ratio, resolution ଏବଂ count ମଡେଲ୍ ଅନୁସାରେ ଭିନ୍ନ ହୁଏ। - `zm/inclusionai/ming-image-0.1-design` ନିଜର dimensions ବାଛେ। `size`, `aspect_ratio`, ଏବଂ `image_size`କୁ ଛାଡ଼ି ଦିଅନ୍ତୁ; ସ୍ପଷ୍ଟ ମୂଲ୍ୟଗୁଡ଼ିକ HTTP 400 ଫେରାଏ। `output_format` ସହିତ PNG, JPEG, ଏବଂ WebP ଅନୁରୋଧ କରାଯାଇପାରେ। ଏହି ସମନ୍ୱୟ text-to-image ସୃଷ୍ଟିକୁ ସମର୍ଥନ କରେ, reference-image ସମ୍ପାଦନାକୁ ନୁହେଁ। Vertex ଆଉଟପୁଟ୍କୁ `data[].b64_json`ରେ ସାମାନ୍ୟୀକୃତ କରାଯାଏ; `response_format: "url"` ଏକ upstream HTTPS URL ଫେରାଏ କିମ୍ବା କେବଳ image bytes ଉପଲବ୍ଧ ଥିଲେ ଏକ base64 data URL ଫେରାଏ। ଖାଲି/ଫିଲ୍ଟର୍ ହୋଇଥିବା ଆଉଟପୁଟ୍ ଖାଲି ସଫଳତା ପରିବର୍ତ୍ତେ ଏକ ତ୍ରୁଟି ଫେରାଏ। ମଡେଲ୍ ଆକ୍ସେସ୍ ZenMux ଆକାଉଣ୍ଟ ଉପରେ ନିର୍ଭର କରେ। [ZenMuxର Vertex API](https://docs.zenmux.ai/api/vertexai/generate-images) ଏବଂ [OpenAI Images API](https://docs.zenmux.ai/api/openai/generate-an-image) ଦେଖନ୍ତୁ। ```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 ପ୍ରୋଭାଇଡର୍ ଚୟନ କରେ; ଏକ କେବଳ ମଡେଲ୍ ଆଇଡି (ଯଥା `mistral-ocr-latest`) ଏହାର ପଞ୍ଜୀକୃତ ପ୍ରୋଭାଇଡର୍ ପାଇଁ ସମାଧାନ ହୁଏ, ଏବଂ ଏକ ବାଦ୍ ଦିଆଯାଇଥିବା `model` ଡିଫଲ୍ଟ ଭାବରେ Mistral (`mistral-ocr-latest`) କୁ ଯାଏ। ପଞ୍ଜୀକୃତ ପ୍ରୋଭାଇଡର୍ଗୁଡ଼ିକ (`open-sse/config/ocrRegistry.ts`): | ପ୍ରୋଭାଇଡର୍ ଆଇଡି | ମଡେଲ୍ ଆଇଡି | `model` ମୂଲ୍ୟ | ନୋଟ୍ | | ----------------------------- | -------------------- | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | | `mistral` | `mistral-ocr-latest` | `mistral/mistral-ocr-latest` (କିମ୍ବା କେବଳ `mistral-ocr-latest`) | ସିଙ୍କ୍ରୋନସ୍ — ପ୍ରତିକ୍ରିୟା ସିଧାସଳଖ ଏକକ ଅପସ୍ଟ୍ରିମ୍ କଲରୁ ଫେରିଆସେ। | | `azure-document-intelligence` | `prebuilt-read` | `azure-document-intelligence/prebuilt-read` | ଅସିଙ୍କ୍ରୋନସ୍ ଅପସ୍ଟ୍ରିମ୍ (`analyze` + poll) — ନିମ୍ନରେ ଦେଖନ୍ତୁ। | | `vertex-deepseek-ocr` | `deepseek-ocr-maas` | `vertex-deepseek-ocr/deepseek-ocr-maas` | ସିଙ୍କ୍ରୋନସ୍, Vertex AI ର `openapi/chat/completions` ପାର୍ଟନର୍ ଏଣ୍ଡପଏଣ୍ଟ ମାଧ୍ୟମରେ — auth/URL ପାଇଁ ନିମ୍ନରେ ଦେଖନ୍ତୁ। | ସମସ୍ତ ତିନୋଟି ପ୍ରୋଭାଇଡର୍ ସମାନ Mistral-ଆକୃତିର ବଡିରେ ପ୍ରତିକ୍ରିୟା ଦିଅନ୍ତି: ```json { "pages": [{ "index": 0, "markdown": "# Extracted text..." }], "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 କୀ ହୁଏତ ଏକ ସର୍ଭିସ୍ ଆକାଉଣ୍ଟ JSON ପ୍ରମାଣପତ୍ର (JWT-bearer ପ୍ରବାହ ମାଧ୍ୟମରେ ଏକ ସ୍ୱଳ୍ପ-ଜୀବନୀ OAuth ଆକ୍ସେସ୍ ଟୋକନ୍ ପାଇଁ ବିନିମୟ ହୋଇଥାଏ) କିମ୍ବା ଏକ ପୂର୍ବରୁ ଜାରି ହୋଇଥିବା OAuth ଆକ୍ସେସ୍ ଟୋକନ୍ ଯାହା ସେମିତି ବ୍ୟବହୃତ ହୁଏ। ଅପସ୍ଟ୍ରିମ୍ ଏଣ୍ଡପଏଣ୍ଟ URL ହେଉଛି Vertex ର ସାଧାରଣ `openapi/chat/completions` ପାର୍ଟନର୍ ଏଣ୍ଡପଏଣ୍ଟ, ଯାହା ସଂଯୋଗର ପ୍ରୋଜେକ୍ଟ ଏବଂ ଅଞ୍ଚଳରୁ ନିର୍ମିତ — ଏକ ସ୍ପଷ୍ଟ `providerSpecificData.project`/`providerSpecificData.region` ସର୍ବଦା ପ୍ରାଧାନ୍ୟ ନିଏ; ଅନ୍ୟଥା ପ୍ରୋଜେକ୍ଟଟି ସର୍ଭିସ୍ ଆକାଉଣ୍ଟ 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 # କେବଳ ସମ୍ପୂର୍ଣ୍ଣ provider-id ଉପସର୍ଗ ``` | ମୋଡ୍ | ନିର୍ଗତ କରେ | ଟିପ୍ପଣୀ | | ----------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `dual` | `cc/claude-sonnet-4-6` **ଏବଂ** `claude/claude-sonnet-4-6` | **ଡିଫଲ୍ଟ।** ଉଭୟ id ସମାନ ମଡେଲ୍କୁ ରୁଟ୍ କରେ; ଯେଉଁ କ୍ଲାଏଣ୍ଟ କନଫିଗ୍ଗୁଡ଼ିକରେ ଯେକୌଣସି ରୂପ ହାର୍ଡକୋଡ୍ ହୋଇଛି, ସେଗୁଡ଼ିକ ଯେପରି କାମ କରିଚାଲିବ ସେଥିପାଇଁ ଏହାକୁ ରଖାଯାଇଛି। ଏହା କ୍ୟାଟାଲଗ୍କୁ ପ୍ରାୟ ଦୁଇଗୁଣ କରେ। | | `alias` | `cc/claude-sonnet-4-6` | ପ୍ରତ୍ୟେକ ମଡେଲ୍ ପାଇଁ ଗୋଟିଏ ଏଣ୍ଟ୍ରି। ପୃଥକ ଉପନାମ ନଥିବା ପ୍ରଦାନକାରୀମାନେ ମଧ୍ୟ ସେମାନଙ୍କ ଏଣ୍ଟ୍ରି ନିର୍ଗତ କରନ୍ତି, ତେଣୁ କିଛି ହଜିଯାଏ ନାହିଁ। | | `canonical` | `claude/claude-sonnet-4-6` | ସମ୍ପୂର୍ଣ୍ଣ provider-id ଉପସର୍ଗ ଅଧୀନରେ ପ୍ରତ୍ୟେକ ମଡେଲ୍ ପାଇଁ ଗୋଟିଏ ଏଣ୍ଟ୍ରି। ପୃଥକ ଉପନାମ ନଥିବା ପ୍ରଦାନକାରୀମାନେ (ଯଥା `antigravity/…`, `agy/…`) ମଧ୍ୟ ଏଠାରେ ସେମାନଙ୍କର ଏକମାତ୍ର id ନିର୍ଗତ କରନ୍ତି, ତେଣୁ କିଛି ହଜିଯାଏ ନାହିଁ। | ଏକ `dual`-ମୋଡ୍ ମିରର୍କୁ କ୍ୱେରୀ ପାରାମିଟର୍ ବିନା ମଧ୍ୟ ଚିହ୍ନଟ କରାଯାଇପାରେ: ଏଥିରେ ପ୍ରାଥମିକ id କୁ ସୂଚିତ କରୁଥିବା ଏକ `parent` ଫିଲ୍ଡ ଥାଏ। ମଡେଲ୍ ପିକର୍ ରେଣ୍ଡର୍ କରୁଥିବା କ୍ଲାଏଣ୍ଟଗୁଡ଼ିକ `?prefix=alias` ଅନୁରୋଧ କରିବା ଉଚିତ — [OmniCopilot VS Code extension](../guides/VSCODE-COPILOT.md) ଏହିପରି କରେ। ### ବ୍ୟକ୍ତିଗତ ଭାବେ ଲୁଚାଯାଇଥିବା ଚାଟ୍ ମଡେଲ୍ଗୁଡ଼ିକ ନିଜ ପ୍ରଦାନକାରୀ ପୃଷ୍ଠାରେ **Hidden** ଭାବେ ଚିହ୍ନିତ ଏକ ମଡେଲ୍କୁ କ୍ୟାଟାଲଗ୍ରୁ ବାଦ ଦିଆଯାଏ ଏବଂ ସ୍ପଷ୍ଟ ଭାବେ ଅନୁରୋଧ କରାଗଲେ HTTP `404` / `model_not_found` ସହ ପ୍ରତ୍ୟାଖ୍ୟାନ କରାଯାଏ। ଯାଞ୍ଚ ପ୍ରକ୍ରିୟା ସମାଧାନ କରାଯାଇଥିବା ପ୍ରଦାନକାରୀ ଏବଂ ମଡେଲ୍କୁ ବ୍ୟବହାର କରେ, ଯେଉଁଥିରେ ପ୍ରଦାନକାରୀ ଉପନାମ, ସୁସଙ୍ଗତ-ପ୍ରଦାନକାରୀ ନୋଡ୍ ଉପସର୍ଗ ଏବଂ କନେକ୍ସନ୍ ଡିଫଲ୍ଟ ଅନ୍ତର୍ଭୁକ୍ତ। ଏକ କମ୍ବୋ ଲୁଚାଯାଇଥିବା ଟାର୍ଗେଟ୍ଗୁଡ଼ିକୁ ଏଡ଼ାଇଯାଏ ଏବଂ ଏକ ଦୃଶ୍ୟମାନ ସମକକ୍ଷକୁ ବ୍ୟବହାର କରିପାରେ; ଯେତେବେଳେ କୌଣସି ନିଷ୍ପାଦନଯୋଗ୍ୟ ଟାର୍ଗେଟ୍ ଅବଶିଷ୍ଟ ନଥାଏ, ଏହା ସମାନ ତ୍ରୁଟି କୋଡ୍ ଫେରାଏ। ଲୁଚାଇବା ବାତିଲ୍ କରିବା ପରବର୍ତ୍ତୀ ଅନୁରୋଧରୁ କାର୍ଯ୍ୟକାରୀ ହୁଏ। କେବଳ-ଇମେଜ୍ ଦୃଶ୍ୟମାନତା ଓଭର୍ରାଇଡ୍ଗୁଡ଼ିକ ସମାନ ID ଥିବା ଚାଟ୍ ମଡେଲ୍କୁ ଲୁଚାନ୍ତି ନାହିଁ। ଏହି ବ୍ୟକ୍ତିଗତ ମଡେଲ୍ ସେଟିଂ [ମଡେଲ୍ ପ୍ରକାଶନ ଅନୁମତି/ପ୍ରତ୍ୟାଖ୍ୟାନ ତାଲିକା](../routing/MODEL_EXPOSURE_LIST.md) ଠାରୁ ପୃଥକ, ଯାହା ସ୍ପଷ୍ଟ ଡିସ୍ପ୍ୟାଚ୍କୁ ବଜାୟ ରଖି କ୍ୟାଟାଲଗ୍ ପ୍ରଦର୍ଶନ ଏବଂ ସ୍ୱୟଂଚାଳିତ-ରାଉଟିଂ ପ୍ରାର୍ଥୀମାନଙ୍କୁ ଫିଲ୍ଟର୍ କରେ। API-key ମଡେଲ୍ ଅନୁମତିଗୁଡ଼ିକ ସ୍ୱାଧୀନ ଭାବେ ଲାଗୁ ହେବା ଜାରି ରହେ। ଡିଫଲ୍ଟ କ୍ୟାଟାଲଗ୍ ଉପସର୍ଗ ମୋଡ୍ `dual` ଭାବେ ରହେ। ### ଚିନ୍ତନ-ବିହୀନ ମଡେଲ୍ ଭାରିଆଣ୍ଟଗୁଡ଼ିକ ଚିନ୍ତନ-ସକ୍ଷମ 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` କୁ ପ୍ରତ୍ୟାଖ୍ୟାନ କରୁଥିବା adaptive-only ମଡେଲ୍ଗୁଡ଼ିକୁ ବାଦ ଦିଆଯାଏ)। ଅପରେଟର୍ମାନେ `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 # ପୁନଃକ୍ରମାଙ୍କନ (କ୍ଲାଉଡ୍ ରେଜିଷ୍ଟ୍ରି ପ୍ରଦାନକାରୀ, କିମ୍ବା "/" ଭାବରେ ଏକ OpenAI-ସୁସଙ୍ଗତ ପ୍ରଦାନକାରୀ ନୋଡ୍) 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" } # Soniox TTS ପାଇଁ ଏକ ଭାଷା ଏବଂ କଣ୍ଠସ୍ୱର ଆବଶ୍ୟକ: `language`ର ଡିଫଲ୍ଟ ହେଉଛି "en"; ଅନୁପସ୍ଥିତ # କଣ୍ଠସ୍ୱର କିମ୍ବା OpenAIର ମାନକ କଣ୍ଠସ୍ୱର ନାମ (alloy, nova, …) "Adrian" ହୋଇଯାଏ POST /v1/audio/speech { "model": "soniox/tts-rt-v1", "input": "Xin chào", "voice": "Adrian", "language": "vi" } # ଛବି ସମ୍ପାଦନା (ମଲ୍ଟିପାର୍ଟ) 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": "kie/suno-v4.0", "prompt": "..." } ``` > **ପୁନଃକ୍ରମାଙ୍କନ ପ୍ରଦାନକାରୀ ନୋଡ୍ଗୁଡ଼ିକ:** `POST /v1/rerank` `/` ଭାବରେ ଠିକଣା ଦିଆଯାଇଥିବା OpenAI-ସୁସଙ୍ଗତ ପ୍ରଦାନକାରୀ ନୋଡ୍ଗୁଡ଼ିକୁ ମଧ୍ୟ ରୁଟ୍ କରେ > (ଏକ ଗେଟ୍ୱେ ପଛରେ ଥିବା oMLX, vLLM, Infinity, TEI, …)। ଲୁପ୍ବ୍ୟାକ୍ > ନୋଡ୍ଗୁଡ଼ିକ (`localhost`, `127.0.0.1`, `172.16.0.0/12`) ସର୍ବଦା ଯୋଗ୍ୟ ହୋଇଥାନ୍ତି, ଏବଂ ଅପରେଟର୍ > `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS`ରେ ତାଲିକାଭୁକ୍ତ କରିଥିବା ହୋଷ୍ଟନାମଗୁଡ଼ିକ ମଧ୍ୟ ଯୋଗ୍ୟ ହୋଇଥାନ୍ତି (ଉଦାହରଣ ସ୍ୱରୂପ `http://reranker:8080/v1` ପରି ଏକ Docker/Compose ସେବା ନାମ; ଏଗୁଡ଼ିକୁ > ସିଧାସଳଖ କଲ୍ କରାଯାଏ, କେବେ ମଧ୍ୟ `HTTP(S)_PROXY` କିମ୍ବା ଏକ ସଂଯୋଗର ପିନ୍ କରାଯାଇଥିବା ପ୍ରକ୍ସି ମାଧ୍ୟମରେ ନୁହେଁ)। ଅନ୍ୟ କୌଣସି > ହୋଷ୍ଟରେ ଥିବା ନୋଡ୍—ଏକ LAN ବକ୍ସ କିମ୍ବା Tailscale ପିୟର୍—କେବଳ ସେତେବେଳେ ଯୋଗ୍ୟ ହୁଏ, ଯେତେବେଳେ ଅପରେଟର୍ > `RERANK_REMOTE_PROVIDER_NODES` ଫିଚର୍ ଫ୍ଲାଗ୍ ସକ୍ଷମ କରନ୍ତି **ଏବଂ** ନୋଡ୍ର ବେସ୍ URL ପ୍ରଦାନକାରୀର > ଆଉଟ୍ବାଉଣ୍ଡ URL ନୀତି (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`) ପାର୍ କରେ। > ମେମୋରି ଇଞ୍ଜିନ୍ର ପୁନଃକ୍ରମାଙ୍କନ ପଦକ୍ଷେପ ଲୁପ୍ବ୍ୟାକ୍ ମାଧ୍ୟମରେ ଏହି ରୁଟ୍କୁ କଲ୍ କରେ, > ତେଣୁ ସମାନ ନିୟମ Memory ସେଟିଂସ୍ରେ ଥିବା `rerankProviderModel`କୁ ନିୟନ୍ତ୍ରଣ କରେ। > > **ସ୍ଥାନୀୟ ସର୍ଭର୍ ଗଠନଗୁଡ଼ିକ:** ନୋଡ୍କୁ `/v1/rerank`ରେ ଏବଂ 404 ହେଲେ `/rerank`ରେ > (Infinity, TEI) କଲ୍ କରାଯାଏ। ଅପ୍ଷ୍ଟ୍ରିମ୍ ବଡି Cohere/OpenAI ବନାନ (`documents`, > `return_documents`) ଏବଂ TEI ବନାନ (`texts`, `return_text`) ଉଭୟ ବହନ କରେ, ଏବଂ ଅପ୍ଷ୍ଟ୍ରିମ୍ ପ୍ରତିକ୍ରିୟାକୁ > Cohere ଏନ୍ଭେଲପ୍ରେ ସାମାନ୍ୟୀକୃତ କରାଯାଏ: TEIର ସ୍ୱତନ୍ତ୍ର `[{index, score, text}]`, ହାଲୁକା ଗେଟ୍ୱେଗୁଡ଼ିକରୁ `{results: [{index, score}]}` > ଏବଂ Voyage-ଶୈଳୀର `{data: [...]}`—ସମସ୍ତେ କ୍ଲାଏଣ୍ଟକୁ > `{results: [{index, relevance_score, document?}]}` ଭାବରେ ଫେରନ୍ତି, ସ୍କୋର୍ ଅନୁଯାୟୀ ସଜାଯାଇ ଏବଂ `top_n`ରେ ସୀମିତ ହୋଇ। > **ପ୍ରଦାତା-ନୋଡ୍ ଆବିଷ୍କାର:** ଏକ OpenAI-ସୁସଙ୍ଗତ ପ୍ରଦାତା ନୋଡ୍ରେ ଥିବା ମଡେଲ୍ଗୁଡ଼ିକ `GET /v1/models` > ରେ ନୋଡ୍ ଉପସର୍ଗ ଅଧୀନରେ ଦେଖାଯାଆନ୍ତି। କୌଣସି ଏଣ୍ଡପଏଣ୍ଟ ମେଟାଡାଟା ନଥିବା ଧାଡ଼ିଗୁଡ଼ିକ (ସ୍ଥାନୀୟ `/v1/models` ତାଲିକା ପାଇଁ ସାଧାରଣ) > ନୋଡ୍ର `apiType` ଉତ୍ତରାଧିକାରରେ ପାଆନ୍ତି, ତେଣୁ ଏକ `embeddings` ନୋଡ୍ର ମଡେଲ୍ଗୁଡ଼ିକ ଡିଫଲ୍ଟ ଭାବେ ଚାଟ୍ ହେବା ପରିବର୍ତ୍ତେ `type: "embedding"` ଏବଂ ଏକ > `rerank` ନୋଡ୍ର ମଡେଲ୍ଗୁଡ଼ିକ `type: "rerank"` ହୁଅନ୍ତି; ସିଙ୍କ୍ ହୋଇଥିବା କିମ୍ବା ମାନୁଆଲ୍ ଭାବେ ଯୋଡ଼ାଯାଇଥିବା ଧାଡ଼ିରେ ଏକ ସ୍ପଷ୍ଟ > `supportedEndpoints` ତଥାପି ଅଗ୍ରାଧିକାର ପାଏ। ### ସମର୍ପିତ ପ୍ରଦାତା ରୁଟ୍ଗୁଡ଼ିକ ```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` | କଞ୍ଚା ଫାଇଲ୍ ବଡିକୁ ପୁନଃ ଷ୍ଟ୍ରିମ୍ କରନ୍ତୁ | **ପ୍ରମାଣୀକରଣ:** Bearer API କୀ — `getApiKeyRequestScope` ମାଧ୍ୟମରେ ଫାଇଲ୍ଗୁଡ଼ିକୁ ପ୍ରତ୍ୟେକ API କୀ ଅନୁସାରେ ସୀମିତ କରାଯାଇଛି। ଗୋଟିଏ କୀ କେବଳ ନିଜର ଫାଇଲ୍ଗୁଡ଼ିକୁ ଦେଖିପାରେ, ଡାଉନଲୋଡ୍ ଏବଂ ବିଲୋପ କରିପାରେ; କୀ ବିନା ଗୋଟିଏ ଡ୍ୟାସ୍ବୋର୍ଡ ସେସନ୍ ସମଗ୍ର ଇନ୍ଷ୍ଟାନ୍ସକୁ ପଢ଼େ; କୌଣସି ମାଲିକ ନଥିବା ଫାଇଲ୍ (ଅଜ୍ଞାତ କିମ୍ବା ଡ୍ୟାସ୍ବୋର୍ଡ-ସେସନ୍ ଅପଲୋଡ୍) ପ୍ରତ୍ୟେକ ଅଣ-ସେସନ୍ କଲର୍ଙ୍କ ପାଇଁ ପ୍ରତ୍ୟାଖ୍ୟାନ କରାଯାଏ। `GET /v1/files` ଏକ ଅଜ୍ଞାତ କଲର୍କୁ — ଏବଂ ଉପସ୍ଥାପିତ କୀର ସମାଧାନ ନ ହେଲେ — `REQUIRE_API_KEY=false` ଥିବା ସମୟରେ ମଧ୍ୟ ପ୍ରତ୍ୟେକ ଟେନାଣ୍ଟଙ୍କ ଫାଇଲ୍ ତାଲିକାଭୁକ୍ତ କରିବା ପରିବର୍ତ୍ତେ `401` ସହିତ ପ୍ରତ୍ୟାଖ୍ୟାନ କରେ (GHSA-m3hp-hq9g-fpmv, GHSA-2jm2-mpx8-6523)। --- ## ବ୍ୟାଚ୍ 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` | ପ୍ରକ୍ରିୟାଧୀନ ବ୍ୟାଚ୍ ବାତିଲ କରନ୍ତୁ | **ପ୍ରାମାଣିକରଣ:** Bearer API କୀ। ଫାଇଲ୍ଗୁଡ଼ିକ ପରି ସମାନ ତ୍ରିମୁଖୀ ନିୟମ ଅଧୀନରେ ବ୍ୟାଚ୍ଗୁଡ଼ିକ ପ୍ରତ୍ୟେକ API କୀ ପାଇଁ ସୀମିତ: କେବଳ ନିଜ କୀ, ଡ୍ୟାସ୍ବୋର୍ଡ ସେସନ୍ ପାଇଁ ଇନ୍ଷ୍ଟାନ୍ସ-ବ୍ୟାପୀ ପ୍ରବେଶ, ଏବଂ null-owner ରେକର୍ଡଗୁଡ଼ିକ ପାଇଁ ପ୍ରତ୍ୟେକ ଅଣ-ସେସନ୍ କଲର୍କୁ ପ୍ରବେଶ ନିଷିଦ୍ଧ (ପ୍ରାପ୍ତି, ବିଲୋପ, ବାତିଲ ଏବଂ ସୃଷ୍ଟି ସମୟରେ `input_file_id` ଯାଞ୍ଚ)। `REQUIRE_API_KEY=false` ଥିଲେ ମଧ୍ୟ `GET /v1/batches` ଜଣେ ଅଜ୍ଞାତ କଲର୍କୁ `401` ସହିତ ପ୍ରତ୍ୟାଖ୍ୟାନ କରେ। --- ## ସନ୍ଧାନ API ୱେବ୍/ସନ୍ଧାନ ପ୍ରୋଭାଇଡର୍ ଆବଷ୍ଟ୍ରାକ୍ସନ (Tavily, Brave, Exa, Serper, ଇତ୍ୟାଦି)। | ପଦ୍ଧତି | ପଥ | ବର୍ଣ୍ଣନା | | ------ | ---------------------- | -------------------------------------------------------------------------------------------------- | | GET | `/v1/search` | କନଫିଗର୍ ହୋଇଥିବା ସନ୍ଧାନ ପ୍ରୋଭାଇଡର୍ + କ୍ଷମତା ତାଲିକା କରନ୍ତୁ | | POST | `/v1/search` | ଏକ ସନ୍ଧାନ କ୍ୱେରି ଚଲାନ୍ତୁ — ବଡି `v1SearchSchema` ଦ୍ୱାରା ବୈଧ କରାଯାଇଛି, caching/coalescing ସମର୍ଥନ କରେ | | GET | `/v1/search/analytics` | ପ୍ରତି-ପ୍ରୋଭାଇଡର୍ hit/latency/cache ପରିସଂଖ୍ୟାନ | **ପ୍ରାମାଣିକିକରଣ:** Bearer API କି (`extractApiKey` + `isValidApiKey`). ସନ୍ଧାନ ନୀତି `enforceApiKeyPolicy` ମାଧ୍ୟମରେ ପ୍ରୟୋଗ କରାଯାଇଛି। --- ## ୱେବ୍ ଫେଚ୍ ଏପିଆଇ ଏକ ବିନ୍ୟାସ କରାଯାଇଥିବା ୱେବ୍-ଫେଚ୍ ପ୍ରଦାନକର୍ତ୍ତା (ଫାୟାରକ୍ରଲ, ଜିନା ରିଡର, ଟାଭିଲି ଏକ୍ଷଟ୍ରାକ୍ଟ, ଟିନିଫିଶ୍ ଫେଚ୍, ନିମ୍ବଲ ଏକ୍ଷଟ୍ରାକ୍ଟ) ମାଧ୍ୟମରେ ଏକ URL ରୁ ସାମଗ୍ରୀ ଉତ୍ତୋଳନ କରନ୍ତୁ। | ପଦ୍ଧତି | ପଥ | ବିବରଣୀ | | ------ | --------------- | -------------------------------------------------------------------------------- | | POST | `/v1/web/fetch` | ଏକ URL ଫେଚ୍ କରନ୍ତୁ/ସ୍କ୍ରେପ୍ କରନ୍ତୁ — ଶରୀର `v1WebFetchSchema` ଦ୍ୱାରା ଯାଞ୍ଚ କରାଯାଏ | **ପ୍ରମାଣୀକରଣ:** ବିୟରର ଏପିଆଇ କୀ (`extractApiKey` + `isValidApiKey`)। ନୀତି `enforceApiKeyPolicy` ମାଧ୍ୟମରେ ଜୋର ଦିଆଯାଏ। **କୋଟା-ସଚେତନ ଫଲବ୍ୟାକ୍ (#8297):** ଯେତେବେଳେ ସ୍ପଷ୍ଟ `ପ୍ରଦାନକର୍ତ୍ତା` ଦିଆଯାଇ ନାହିଁ, ପୁଲ (`ଫାୟାରକ୍ରଲ` → `ଜିନା-ରିଡର` → `ଟାଭିଲି-ସର୍ଚ୍ଚ` → `ଟିନିଫିଶ୍` → `ନିମ୍ବଲ-ସର୍ଚ୍ଚ`) ସ୍ଥିର ପ୍ରାଥମିକତା କ୍ରମରେ (ପୂରଣ-ପ୍ରଥମେ) ପରିଦର୍ଶିତ ହୁଏ — ଏକ ହାର ସୀମାବଦ୍ଧ କିନ୍ତୁ ବିନ୍ୟାସ କରାଯାଇଥିବା ପ୍ରଦାନକର୍ତ୍ତା ଅନୁରୋଧ ଛୋଟ କରିବା ପରିବର୍ତ୍ତେ ଏଡ଼ାଯାଏ, ଏବଂ ଏକ ପୁନରାବୃତ୍ତିଯୋଗ୍ୟ/କୋଟା ଅପ୍ଷ୍ଟ୍ରିମ ବିଫଳତା (ହମେଶା HTTP 429; ଫାୟାରକ୍ରଲ/ଟାଭିଲି/ଟିନିଫିଶ୍ କୋଟା-ଶୈଳୀ ମୁକ୍ତ ସ୍ତର ପାଇଁ 402/403 — ଜିନା ରିଡର ପାଇଁ ନୁହେଁ, ଏବଂ କେବଳ 400 ଖରାପ ଅନୁରୋଧ ପାଇଁ କେବେ ନୁହେଁ) ଅନୁରୋଧ ସମୟରେ ପରବର୍ତ୍ତୀ ଅପରୀକ୍ଷିତ ସାକ୍ଷରତା ପ୍ରଦାନକର୍ତ୍ତାକୁ ଛାଡ଼ି ଦିଏ। ଯେତେବେଳେ ପୁଲରେ ପ୍ରତ୍ୟେକ ପ୍ରଦାନକର୍ତ୍ତା ସମାପ୍ତ ହୁଏ, ଏଣ୍ଡପଏଣ୍ଟ ପୂର୍ବବର୍ତ୍ତୀ ସାଧାରଣ `400` ପରିବର୍ତ୍ତେ ଏକ `429` ଫେରାଏ (ଏକ `Retry-After` ହେଡର ସହ)। ଯେତେବେଳେ ଏକ ସ୍ପଷ୍ଟ `ପ୍ରଦାନକର୍ତ୍ତା` ଅନୁରୋଧ କରାଯାଏ, କୌଣସି ନିରବ ଫଲବ୍ୟାକ୍ **ନାହିଁ** — ଏକ ହାର ସୀମାବଦ୍ଧ କିମ୍ବା ବିଫଳ ସ୍ପଷ୍ଟ ପ୍ରଦାନକର୍ତ୍ତା ନିଜର ତ୍ରୁଟି ଦେଖାଏ (ଯଦି ହାର ସୀମାବଦ୍ଧ ତେବେ `429`, ଅନ୍ୟଥା ଅପ୍ଷ୍ଟ୍ରିମ ସ୍ଥିତି)। --- ## ୱେବସକେଟ୍ ଷ୍ଟ୍ରିମିଂ ```bash GET /v1/ws?handshake=1 ``` ଏକ ୱେବସକେଟ୍ ଅପଗ୍ରେଡ୍ ହ୍ୟାଣ୍ଡସେକ୍ ଯାଞ୍ଚ କରେ ଏବଂ ୱାୟାର୍ ପ୍ରୋଟୋକଲ୍ ଉଦାହରଣ ବାର୍ତ୍ତା (`request`, `cancel`) ଫେରାଏ। ପ୍ରକୃତ WS ଫ୍ରେମ୍ Next.js ରୁଟ୍ ଟେବୁଲ ବାହାରେ ବଣ୍ଡଲ କରାଯାଇଥିବା WS ସର୍ଭର ଦ୍ୱାରା ହ୍ୟାଣ୍ଡଲ କରାଯାଏ। **ପ୍ରମାଣୀକରଣ:** ହ୍ୟାଣ୍ଡସେକ୍ ସମୟରେ ବିୟରର ଏପିଆଇ କୀ। ### ୱେବସକେଟ୍ ଉପରେ ରେସପନ୍ସେସ୍ ଏପିଆଇ (କୋଡେକ୍ସ କେବଳ) ```bash # Same host:port as the HTTP API (default 20128); upgrade the connection: wscat -c "ws://localhost:20128/v1/responses?api_key=" # (or: -H "Authorization: Bearer ") # First frame MUST be response.create: { "type": "response.create", "model": "gpt-5.5", "input": [ { "role": "user", "content": "hi" } ] } ``` ଏକ WebSocket-over-Responses-API ପ୍ରକ୍ସି **ବିଶେଷଭାବେ `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_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` ରେ କାର୍ଯ୍ୟକାରୀ କରାଯାଇଛି। **ପ୍ରମାଣୀକରଣ:** ହ୍ୟାଣ୍ଡସେକ୍ ସମୟରେ ବିୟରର ଏପିଆଇ କୀ। ବଣ୍ଡଲ କରାଯାଇଥିବା HTTP ସର୍ଭର (`server-ws.mjs`) ସକ୍ରିୟ ପ୍ରବେଶପଥ୍ ହେବା ଉଚିତ୍ (ଡିଫଲ୍ଟରେ, ଯେତେବେଳେ `app/server-ws.mjs` ଅଛି, ଏହା ସେହିପରି ଅଟେ)। #### ମଡେଲ୍ ଆଇଡି: ନଗ୍ନ ChatGPT ଆଇଡି ବ୍ୟବହାର କରନ୍ତୁ (କୌଣସି `codex/` ଉପସର୍ଗ ନାହିଁ) OpenAI **Codex CLI** `supports_websockets = true` ସମୟରେ ମଡେଲ୍ ନାମ କ୍ଲାଏଣ୍ଟ-ପାଖରେ ଯାଞ୍ଚ କରେ ଏବଂ `codex/gpt-5.5` ପରି ପ୍ରଦାନକର୍ତ୍ତା-ଉପସର୍ଗ ଆଇଡି **ପ୍ରତ୍ୟାଖ୍ୟାନ** କରେ (`The 'codex/gpt-5.5' model is not supported when using Codex with a ChatGPT account`)। **ନଗ୍ନ** ଆଇଡି (ଉଦାହରଣ `gpt-5.5`) ପଠାନ୍ତୁ। OmniRoute ର ବ୍ରିଜ୍ କୋଡେକ୍ସ-କେବଳ ଅଟେ, ସେଥିପାଇଁ ଅପ୍ଷ୍ଟ୍ରିମକୁ ଟନେଲ କରିବା ପୂର୍ବରୁ ଏହା ଏକ ନଗ୍ନ ଆଇଡିକୁ କୋଡେକ୍ସ ମଡେଲ୍ ରେ ପୁନର୍ବିନ୍ୟାସ କରେ (`resolveCodexWsModelInfo`) — ଯଦିଓ ଏକ ନଗ୍ନ `gpt-5.5` HTTP ମାଧ୍ୟମରେ ଅନ୍ୟ ପ୍ରଦାନକର୍ତ୍ତାକୁ ରୁଟ୍ ହୋଇଥାନ୍ତା। #### OpenAI Codex CLI ବିନ୍ୟାସ କରିବା WebSocket ସମର୍ଥନ ସହ ଏକ କଷ୍ଟମ ପ୍ରଦାନକର୍ତ୍ତା ଯୋଗ କରି `~/.codex/config.toml` ରେ Codex CLI କୁ OmniRoute ଆଡ଼କୁ ପଏଣ୍ଟ କରନ୍ତୁ (ଏକ ବିଦ୍ୟମାନ ବିନ୍ୟାସ ସ୍ପର୍ଶ ନ କରିବା ପାଇଁ ଏକ ଅଲଗା `CODEX_HOME` ବ୍ୟବହାର କରନ୍ତୁ): ```toml model = "gpt-5.5" # bare id — NOT "codex/gpt-5.5" model_provider = "omniroute" [model_providers.omniroute] name = "OmniRoute (WS)" base_url = "http://localhost:20128/v1" # no trailing slash; the WS URL is derived (use https/wss in production) wire_api = "responses" # only supported value since Feb 2026 supports_websockets = true # enables the Responses-over-WS transport env_key = "OMNIROUTE_API_KEY" # holds the OmniRoute API key (Bearer) ``` ```bash export OMNIROUTE_API_KEY=sk-... # an OmniRoute API key (any key if 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 key (`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` ଦ୍ୱାରା ବୈଧ କରାଯାଏ — ଏହା ପରିଚାଳନା ପୃଷ୍ଠ (_management surface_) (`/api/keys/…`) _ନୁହେଁ_, ଯାହା `requireManagementAuth` ପଛରେ ହିଁ ରହେ। ### କଞ୍ଚା ବନାମ କଟଅଫ୍-ସମନ୍ୱିତ କୋଟା ପ୍ରତିଶତ `/api/usage/om-usage` ବ୍ୟବହାର କରିବା ସମୟରେ, କଲରମାନେ **ସାଧାରଣ-ଟେକ୍ସଟ୍ ଆଉଟପୁଟ୍** ଏବଂ ସଂରଚିତ **JSON ଆଉଟପୁଟ୍** ଦ୍ୱାରା ପ୍ରଦର୍ଶିତ ପ୍ରତିଶତଗୁଡ଼ିକ ମଧ୍ୟରେ ଥିବା ପାର୍ଥକ୍ୟକୁ ଧ୍ୟାନ ଦେବା ଉଚିତ: | ଦିଗ | ସାଧାରଣ-ଟେକ୍ସଟ୍ ଫର୍ମାଟ୍ (`/api/usage/om-usage` / `@@om-usage`) | JSON ଫର୍ମାଟ୍ (`?format=json`) | | :-------------------- | :------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------------------------- | | **ଆଉଟପୁଟ୍ ଫିଲ୍ଡ** | `NN% left` (ଯଥା, `20% left`) | `provider.quotas` / `providers[].quotas` | | **ମାପନ** | **କଟଅଫ୍-ସମନ୍ୱିତ ବ୍ୟବହାରଯୋଗ୍ୟ ଅନୁମତି**: କଟଅଫ୍ ସୀମାଠାରୁ ଅଧିକ ଅବଶିଷ୍ଟ କ୍ଷମତା | **କଞ୍ଚା ଅପ୍ଷ୍ଟ୍ରିମ୍ କୋଟା**: ପ୍ରଦାନକାରୀଙ୍କ ଅସମନ୍ୱିତ ମାପନ | | **କଟଅଫ୍ ସ୍କେଲିଂ** | `effectiveRemainingPercent()` ମାଧ୍ୟମରେ ସ୍କେଲ୍ କରାଯାଏ, ଯାହାଦ୍ୱାରା ସଂରକ୍ଷିତ ରିଜର୍ଭ `0% left` ଭାବେ ଦେଖାଯାଏ | କିଛି ନାହିଁ (ପ୍ରଦାନକାରୀଙ୍କ ଦ୍ୱାରା ରିପୋର୍ଟ ହୋଇଥିବା କଞ୍ଚା ସ୍ନାପସଟ୍ ମୂଲ୍ୟଗୁଡ଼ିକ) | | **ସୀମା ଡାଟା** | ପ୍ରଦର୍ଶିତ ପ୍ରତିଶତରେ ଅନ୍ତର୍ଭୁକ୍ତ | ପ୍ରତ୍ୟେକ ସଂଯୋଗରେ `quotaWindowThresholds` ଭିତରେ ସଂରକ୍ଷିତ (କିମ୍ବା ସର୍ଭର୍ ଡିଫଲ୍ଟ) | | **ପ୍ରାଥମିକ ଉପଭୋକ୍ତା** | ଇଣ୍ଟରାକ୍ଟିଭ୍ CLI, ଟର୍ମିନାଲ୍ ପ୍ରମ୍ପ୍ଟ, ମାନବ ଅପରେଟର୍ | ପ୍ରୋଗ୍ରାମାଟିକ୍ ଇଣ୍ଟିଗ୍ରେସନ୍, ଡ୍ୟାସବୋର୍ଡ, ବିଶ୍ଳେଷଣ, ବିଲିଂ ଟ୍ରାକର୍ | #### କଟଅଫ୍ ସମନ୍ୱୟ ସୂତ୍ର ଅପ୍ଷ୍ଟ୍ରିମ୍ କ୍ଷୟକୁ ରୋକିବା ପାଇଁ OmniRoute ସକ୍ରିୟ କୋଟା କଟଅଫ୍କୁ ସମର୍ଥନ କରେ (ସଂଯୋଗ `quotaWindowThresholds`, ପ୍ରଦାନକାରୀ ଡିଫଲ୍ଟ, କିମ୍ବା ଗ୍ଲୋବାଲ୍ ସହନଶୀଳତା ସେଟିଂସ୍ ମାଧ୍ୟମରେ ବିନ୍ୟାସିତ)। ଯେତେବେଳେ କୌଣସି କୋଟା ୱିଣ୍ଡୋରେ ଏକ କଟଅଫ୍ ସୀମା (ଯଥା, `cutoff = 25%`) ସକ୍ରିୟ ଥାଏ, ଟେକ୍ସଟ୍ ରେଣ୍ଡରର୍ ଅବଶିଷ୍ଟ ଅନୁମତିକୁ ନିମ୍ନପ୍ରକାର ଗଣନା କରେ: - ଯଦି `remaining <= cutoff`: `0%` ଫେରାଏ। - ଯଦି `remaining > cutoff`: `((remaining - cutoff) / (100 - cutoff)) * 100` ଫେରାଏ। ଫର୍ମାଟ୍ କରାଯାଇଥିବା ଟେକ୍ସଟ୍ ଆଉଟପୁଟ୍ ଏହାକୁ ନିକଟତମ ପୂର୍ଣ୍ଣସଂଖ୍ୟାକୁ ରାଉଣ୍ଡ କରେ (`Math.round(...)`)। #### ଦୃଷ୍ଟାନ୍ତମୂଳକ ଉଦାହରଣ **60% କଞ୍ଚା ବ୍ୟବହାର** (ଅର୍ଥାତ୍ **40% କଞ୍ଚା ଅବଶିଷ୍ଟ କୋଟା**) ଏବଂ ବିନ୍ୟାସିତ **25% ଅବଶିଷ୍ଟ-କୋଟା କଟଅଫ୍** ସୀମା ଥିବା ଏକ ପ୍ରଦାନକାରୀ ୱିଣ୍ଡୋକୁ ବିଚାର କରନ୍ତୁ: | ଉପସ୍ଥାପନା | ଗଣନା | ଅବଶିଷ୍ଟ | ନିହିତ ବ୍ୟବହାର | | :------------------------------- | :------------------------------------------------- | :-----: | :-----------------------------------------: | | **କଞ୍ଚା JSON (`?format=json`)** | ଅପ୍ଷ୍ଟ୍ରିମ୍ ସ୍ନାପସଟ୍ (`quotas[window]`) | **40%** | **60%** | | **ଟେକ୍ସଟ୍ ଫର୍ମାଟ୍ (`NN% left`)** | `((40 - 25) / (100 - 25)) * 100 = (15 / 75) * 100` | **20%** | **80%** (ଯଦି `100 - remaining` ଗଣନା କରାଯାଏ) | - **ଟେକ୍ସଟ୍ରେ 20% ଅବଶିଷ୍ଟ କାହିଁକି ଦେଖାଏ:** ଆକାଉଣ୍ଟରେ ଅବଶିଷ୍ଟ 40% ଭୌତିକ କୋଟା ମଧ୍ୟରୁ 25% କଟଅଫ୍ ନୀତି ଦ୍ୱାରା ସଂରକ୍ଷିତ। ରାଉଟର୍ ଏହି ସଂଯୋଗକୁ ରାଉଟ୍ କରିବା ବନ୍ଦ କରିବା ପୂର୍ବରୁ କଲରଙ୍କ ପାଖରେ 75% ବ୍ୟବହାରଯୋଗ୍ୟ ସୀମା ମଧ୍ୟରୁ କେବଳ 15% ଅବଶିଷ୍ଟ ରହେ। ସ୍କେଲିଂ ସୁନିଶ୍ଚିତ କରେ ଯେ ଯେଉଁ ମୁହୂର୍ତ୍ତରେ ରାଉଟିଂ ବନ୍ଦ ହେବ, ଠିକ୍ ସେହି ମୁହୂର୍ତ୍ତରେ ସଂଯୋଗଟି କ୍ଷୟ (`0% left`) ସଙ୍କେତ ଦେବ। - **JSON କଞ୍ଚା ମୂଲ୍ୟଗୁଡ଼ିକୁ କାହିଁକି ସଂରକ୍ଷଣ କରେ:** JSON ପେଲୋଡ୍ ସଠିକ୍ ପ୍ରଦାନକାରୀ ସ୍ନାପସଟ୍ (`UsageSnapshot`) ଫେରାଏ, ଯାହାଦ୍ୱାରା ବାହ୍ୟ ଟୁଲ୍ଗୁଡ଼ିକ ସର୍ଭର୍-ପକ୍ଷୀୟ କ୍ଷତିକାରକ ସ୍କେଲିଂ ବିନା ବାସ୍ତବ ଅପ୍ଷ୍ଟ୍ରିମ୍ ବ୍ୟବହାର ଏବଂ ସଂଯୋଗ-ସ୍ତରୀୟ `quotaWindowThresholds` ପାଇପାରନ୍ତି। #### ଉପଭୋକ୍ତା ସ୍ଥାନାନ୍ତରଣ ମାର୍ଗଦର୍ଶନ ଯଦି କୌଣସି ବାହ୍ୟ ଇଣ୍ଟିଗ୍ରେସନ୍ (ଯଥା ଏକ ଏଡିଟର୍ ପ୍ଲଗଇନ୍ କିମ୍ବା ଏଜେଣ୍ଟ ଏକ୍ସଟେନ୍ସନ୍) ପୂର୍ବରୁ ଟେକ୍ସଟ୍ ଏଣ୍ଡପଏଣ୍ଟ (`NN% left`) ସ୍କ୍ରାପ୍ କରୁଥିଲା ଏବଂ ବ୍ୟବହୃତ ପ୍ରତିଶତକୁ `100 - NN` ଭାବେ ଗଣନା କରୁଥିଲା, ତେବେ `?format=json`କୁ ସ୍ଥାନାନ୍ତରଣ କରିବାର ଅର୍ଥ: - କଞ୍ଚା JSON ମୂଲ୍ୟଗୁଡ଼ିକ ପଢ଼ିଲେ **ପ୍ରକୃତ ଅପ୍ଷ୍ଟ୍ରିମ୍ ବ୍ୟବହାର** ପ୍ରତିଫଳିତ ହେବ (ଉପରୋକ୍ତ ଉଦାହରଣରେ 60% ବ୍ୟବହୃତ)। - ଯଦି ଇଣ୍ଟିଗ୍ରେସନ୍ ଟେକ୍ସଟ୍ ଏଣ୍ଡପଏଣ୍ଟର ବ୍ୟବହାରଯୋଗ୍ୟ-ଅନୁମତି ଅର୍ଥବିଜ୍ଞାନକୁ ବଜାୟ ରଖିବାକୁ ଚାହେଁ, ତେବେ ଏହା ସଂଯୋଗ-ସ୍ତରୀୟ ଓଭରରାଇଡ୍ ପାଇଁ `quotaWindowThresholds` ବ୍ୟବହାର କରି କ୍ଲାଏଣ୍ଟ-ପକ୍ଷରେ ପ୍ରଭାବୀ ଅବଶିଷ୍ଟ ସୂତ୍ରକୁ ମୂଲ୍ୟାୟନ କରିପାରିବ। --- ## ସେମାଣ୍ଟିକ କ୍ୟାଶ ```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 } } ``` ### ଲାଟେନ୍ସି ପ୍ରଭାବ ଏକ ସେମାଣ୍ଟିକ କ୍ୟାଶ ହିଟ ଉତ୍ତରକୁ **ଅପ୍ଷ୍ଟ୍ରିମ୍ ଡାକ ଛାଡ଼ି** କ୍ୟାଶ ଉପରୁ ସେବ କରେ, ତେଣୁ ରିପୋର୍ଟ କରାଯାଇଥିବା `X-OmniRoute-Response-Latency` ପ୍ରାୟ ଶୂନ୍ୟ (ମୂଳ ଅପ୍ଷ୍ଟ୍ରିମ୍ ଲାଟେନ୍ସି ସହ ସମ୍ପୂର୍ଣ୍ଣ ଅବଲମ୍ବନ କରି ନାହିଁ)। ଲାଟେନ୍ସି-ସମ୍ବେଦନଶୀଳ କ୍ଲାଏଣ୍ଟ (ବେଞ୍ଚମାର୍କିଂ, p50/p99 ମନିଟରିଂ) `X-OmniRoute-Cache-Latency` ଉତ୍ତର ହେଡର ଯାଞ୍ଚ କରିବା ଉଚିତ: | ମୂଲ୍ୟ | ଅର୍ଥ | | ----------- | ------------------------------------------------------------------ | | `synthetic` | ଉତ୍ତର କ୍ୟାଶ ଉପରୁ ସେବ କରାଗଲା; ଲାଟେନ୍ସି ପ୍ରକୃତ ଅପ୍ଷ୍ଟ୍ରିମ୍ ସମୟ ନୁହେଁ | | _(absent)_ | ପ୍ରକୃତ ଅପ୍ଷ୍ଟ୍ରିମ୍ ଡାକ ଉପରୁ ଉତ୍ତର | ### ପ୍ରତି-କୀ କ୍ୟାଶ ବାଇପାସ API keys `cacheDefaultMode` ମାଧ୍ୟମରେ ସେମାଣ୍ଟିକ କ୍ୟାଶ ପଢ଼ିବାରୁ ବାହାରିପାରିବେ: | ମୂଲ୍ୟ | ବ୍ୟବହାର | | -------- | --------------------------------------------------------------- | | `legacy` | ସାଧାରଣ କ୍ୟାଶ ବ୍ୟବହାର (ଡିଫଲ୍ଟ) | | `bypass` | ସମ୍ପୂର୍ଣ୍ଣ କ୍ୟାଶ ଲୁକଅପ୍ ଛାଡ଼ନ୍ତୁ; ସର୍ବଦା ଅପ୍ଷ୍ଟ୍ରିମ୍ ହିଟ କରନ୍ତୁ | କୀ ସୃଷ୍ଟି (`POST /api/keys`) ଅଥବା ଅପଡେଟ୍ (`PATCH /api/keys/[id]`) ରେ ସେଟ କରାଯାଏ: ```json { "cacheDefaultMode": "bypass" } ``` ### ପ୍ରତି-ଅନୁରୋଧ ବାଇପାସ କୀ ସେଟିଂ ସହ ସମ୍ବନ୍ଧ ନ ରଖି ଯେକୌଣସି ଅନୁରୋଧ କ୍ୟାଶ ବାଇପାସ କରିପାରିବ: ``` X-OmniRoute-No-Cache: true ``` --- ## ଡ୍ୟାଶବୋର୍ଡ ଏବଂ ପରିଚାଳନା ପରିଚାଳନା ରୁଟ୍ଗୁଡ଼ିକ (`/api/*`, ସାର୍ବଜନୀନ auth/login ବ୍ୟତୀତ) ସାଧାରଣ inference API key ଦ୍ୱାରା **ପ୍ରାଧିକୃତ ନୁହେଁ**। ପ୍ରମାଣପତ୍ର ପରିବାର, scope ଏବଂ 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 | ପ୍ରଦାତା config ବୈଧ କି ନାହିଁ ଯାଞ୍ଚ କରନ୍ତୁ | | `/api/providers/bulk` | POST | ଗୋଟିଏ ପ୍ରଦାତା ପାଇଁ API keyଗୁଡ଼ିକୁ ଏକାସାଙ୍ଗରେ ଯୋଡ଼ନ୍ତୁ | | `/api/providers/import` | POST | ପାର୍ସ କରାଯାଇଥିବା CSV/JSON ଫାଇଲ୍ରୁ ଏକ ବିବିଧ ପ୍ରଦାତା ତାଲିକା ଆମଦାନୀ କରନ୍ତୁ (#6836); ପ୍ରତି ଧାଡ଼ି ପାଇଁ ଆଂଶିକ-ବିଫଳତା ଫଳାଫଳ | | `/api/provider-nodes*` | ବିଭିନ୍ନ | ପ୍ରଦାତା node ପରିଚାଳନା | | `/api/provider-models` | GET/POST/PUT/PATCH/DELETE | କଷ୍ଟମ୍ ମଡେଲ୍ ଏବଂ ପ୍ରତି-ମଡେଲ୍ override (ଯୋଡ଼ିବା, ଅପଡେଟ୍ କରିବା, ଲୁଚାଇବା/ଦେଖାଇବା, ଡିଲିଟ୍ କରିବା) | | `/api/provider-models/validate-and-add` | POST | ପରିଚାଳନା-ପ୍ରମାଣୀକୃତ, ବୈକଳ୍ପିକ କଠୋର-ସଂଯୋଗ ଯାଞ୍ଚ ଏବଂ atomic କଷ୍ଟମ୍-ମଡେଲ୍ ପଞ୍ଜୀକରଣ; [ମଡେଲ୍ ଯାଞ୍ଚ](../guides/MODEL-VALIDATION.md) ଦେଖନ୍ତୁ | ସିଙ୍କ୍/ଆମଦାନୀ କରାଯାଇଥିବା ମଡେଲ୍ଗୁଡ଼ିକ ପାଇଁ, `PUT /api/provider-models` `provider`, `modelId` ଏବଂ `maxOutputTokenOverride` ଗ୍ରହଣ କରେ: ଏକ ଧନାତ୍ମକ ପୂର୍ଣ୍ଣସଂଖ୍ୟା ହସ୍ତଚାଳିତ output-token ସୀମା ନିର୍ଦ୍ଧାରଣ କରେ ଏବଂ `null` ଏହାକୁ ସଫା କରି default ପୁନଃସ୍ଥାପନ କରେ। `GET /api/provider-models?provider=` କଷ୍ଟମ୍-ମଡେଲ୍ row ନଥିବା ମଡେଲ୍ଗୁଡ଼ିକ ସମେତ, `modelOutputOverrides` ମଧ୍ୟରେ ଏହି ମୂଲ୍ୟଗୁଡ଼ିକୁ ଫେରାଏ। override ରନ୍ଟାଇମ୍ `max_output_tokens` କ୍ଷମତା ବ୍ୟବହାର କରେ ଏବଂ ଏକ ମଡେଲ୍ ପୁନଃ-ସିଙ୍କ୍ ପରେ ମଧ୍ୟ ରହିଥାଏ। OpenAI-ସୁସଙ୍ଗତ ପ୍ରଦାତା ପୃଷ୍ଠା ସମାନ ସମ୍ପାଦନ/ସଫା ନିୟନ୍ତ୍ରଣ ପ୍ରଦାନ କରେ ଏବଂ ସ୍ପଷ୍ଟ vision ସମର୍ଥନ ଥିବା ମଡେଲ୍ଗୁଡ଼ିକୁ ଚିହ୍ନିତ କରେ। କଷ୍ଟମ୍ Chat Completions nodeଗୁଡ଼ିକ ସ୍ପଷ୍ଟ reasoning opt-outକୁ upstream backend ଅନୁଯାୟୀ ଅନୁକୂଳିତ କରନ୍ତି। ଏକ ସଫଳ ସଂଯୋଗ ପରୀକ୍ଷା ସ୍ୱତଃଚାଳିତ ଭାବରେ ପ୍ରତ୍ୟେକ ସଠିକ୍ model ID ପାଇଁ chat-template ନିୟନ୍ତ୍ରଣ ଚୟନ କରେ, ଯାହାର `/models` ଏଣ୍ଟ୍ରି ଏକ ସ୍ୱୀକୃତ `owned_by` ମୂଲ୍ୟ ପ୍ରମାଣିତ କରେ: `vllm`, `sglang`, କିମ୍ବା `llamacpp`। ସ୍ୱଚ୍ଛ OpenAI-ସୁସଙ୍ଗତ wrapperଗୁଡ଼ିକ ଏକ nested `openai` object ମଧ୍ୟରେ ମୂଳ model entryକୁ ସଂରକ୍ଷିତ ରଖିପାରନ୍ତି; ଚିହ୍ନଟ ପ୍ରକ୍ରିୟା ଏପରି ସର୍ବାଧିକ ତିନୋଟି envelope ଅନୁସରଣ କରେ। ownership ଅନୁପସ୍ଥିତ, ଅଜଣା କିମ୍ବା ପରସ୍ପରବିରୋଧୀ ଥିବା ମଡେଲ୍ଗୁଡ଼ିକ ସାଧାରଣ OpenAI ଆଚରଣ ବଜାୟ ରଖନ୍ତି। ଚିହ୍ନଟ ପ୍ରକ୍ରିୟା ବିଦ୍ୟମାନ catalog requestକୁ ପୁନଃବ୍ୟବହାର କରେ, କୌଣସି completion token ସୃଷ୍ଟି କରେ ନାହିଁ ଏବଂ ସଂଯୋଗ endpoint ପରିବର୍ତ୍ତିତ ହେଲେ ଏହା ଅବୈଧ ହୋଇଯାଏ। ଯେଉଁ backend ଏହି metadata ପ୍ରକାଶ କରେ ନାହିଁ, ତାହା ପାଇଁ ଆଚରଣକୁ ନିଶ୍ଚିତ କରିବାକୁ ବିଦ୍ୟମାନ ଆଂଶିକ ପ୍ରଦାତା update API ବ୍ୟବହାର କରନ୍ତୁ: ```json { "providerSpecificData": { "reasoningControl": "chat-template" } } ``` ସେହି bodyକୁ `PUT /api/providers/` ସହିତ ପଠାନ୍ତୁ। ସେହି ସଂଯୋଗରେ, `none`ର ଏକ ସ୍ପଷ୍ଟ reasoning effortକୁ `chat_template_kwargs.thinking=false` ଏବଂ `chat_template_kwargs.enable_thinking=false` ଭାବରେ ପଠାଯାଏ। କୌଣସି server-side reasoning ନିୟମ ଏକ effortକୁ ବାଧ୍ୟ ନକଲେ, ସ୍ପଷ୍ଟ native template ମୂଲ୍ୟଗୁଡ଼ିକ ପ୍ରାମାଣିକ ରହେ। ସେଟିଂଟି କେବଳ ସେତେବେଳେ ପ୍ରୟୋଗ ହୁଏ, ଯେତେବେଳେ ଏକ କଷ୍ଟମ୍ OpenAI-ସୁସଙ୍ଗତ ସଂଯୋଗ ଏକ Chat Completions body ପ୍ରେରଣ କରେ; Responses request ଏବଂ ସାଧାରଣ ପ୍ରଦାତାମାନେ ସେମାନଙ୍କର native request ଆକୃତି ବଜାୟ ରଖନ୍ତି। ସାଧାରଣ OpenAI `reasoning_effort` passthroughକୁ ବାଧ୍ୟ କରିବା ପାଇଁ `reasoningControl`କୁ `openai` ଭାବରେ ସେଟ୍ କରନ୍ତୁ, କିମ୍ବା ସ୍ୱୟଂଚାଳିତ ଚିହ୍ନଟ ବ୍ୟବହାର କରିବାକୁ ଏହାକୁ ଛାଡ଼ି ଦିଅନ୍ତୁ/`null` ଭାବରେ ସେଟ୍ କରନ୍ତୁ। Claude Code auto-mode classifier ଅନୁରୋଧଗୁଡ଼ିକରେ କୌଣସି ସ୍ପଷ୍ଟ reasoning control ନଥିଲେ, default native thinkingକୁ disabled ଭାବେ ସେଟ୍ କରେ। ଚିହ୍ନଟ ପ୍ରକ୍ରିୟା model name କିମ୍ବା completion limit ପରିବର୍ତ୍ତେ Claude-format ଅନୁରୋଧରେ classifierର system marker ବ୍ୟବହାର କରେ। ସ୍ପଷ୍ଟ body control, ସମର୍ଥିତ effort/thinking header, routing rule ଏବଂ resolved model effort ସେମାନଙ୍କ ବର୍ତ୍ତମାନର ପ୍ରାଥମିକତା ବଜାୟ ରଖେ। ଉଭୟ classifier stage ସେମାନଙ୍କ prompt, completion limit, stop sequence ଏବଂ ପ୍ରକୃତ upstream permission verdict ବଜାୟ ରଖନ୍ତି; ଦ୍ୱିତୀୟ stage ଏବେ ମଧ୍ୟ ତାହାର ଅନୁରୋଧ କରାଯାଇଥିବା ଦୃଶ୍ୟମାନ reasoningକୁ ସାଧାରଣ text ଭାବେ ଉତ୍ପାଦନ କରିପାରେ। ### OAuth ପ୍ରବାହ | Endpoint | ପଦ୍ଧତି | ବର୍ଣ୍ଣନା | | -------------------------------- | ------- | -------------------------- | | `/api/oauth/[provider]/[action]` | ବିଭିନ୍ନ | Provider-ନିର୍ଦ୍ଦିଷ୍ଟ OAuth | ### Routing ଏବଂ Config | Endpoint | ପଦ୍ଧତି | ବର୍ଣ୍ଣନା | | --------------------- | -------- | ----------------------------------- | | `/api/models/alias` | GET/POST | Model alias | | `/api/models/catalog` | GET | Provider + type ଅନୁସାରେ ସମସ୍ତ model | | `/api/combos*` | ବିଭିନ୍ନ | Combo ପରିଚାଳନା | | `/api/keys*` | ବିଭିନ୍ନ | API key ପରିଚାଳନା | | `/api/pricing` | GET | Model ମୂଲ୍ୟ ନିର୍ଦ୍ଧାରଣ | ### ବ୍ୟବହାର ଏବଂ Analytics | Endpoint | ପଦ୍ଧତି | ବର୍ଣ୍ଣନା | | -------------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `/api/usage/history` | GET | ବ୍ୟବହାର ଇତିହାସ | | `/api/usage/logs` | GET | ବ୍ୟବହାର log | | `/api/usage/request-logs` | GET | ଅନୁରୋଧ-ସ୍ତରୀୟ log | | `/api/usage/[connectionId]` | GET | ପ୍ରତି-connection ବ୍ୟବହାର | | `/api/usage/token-limits` | GET/POST/DELETE | ପ୍ରତି-API-key token-limit budget | | `/api/usage/model-latency-stats` | GET | ପ୍ରତି-provider/model rolling latency aggregate (avg/p50/p95/p99, ସଫଳତା ହାର); filter: `windowHours`/`minSamples`/`maxRows`/`provider`/`model` (#6873) | | `/api/usage/cache-health` | GET | `call_logs` ଉପରେ prompt-cache ସ୍ୱାସ୍ଥ୍ୟ ସାରାଂଶ — write/read ଅନୁପାତ, p50/p90/p99 write-size distribution, heavy-write concentration, ପ୍ରତି-model split ଏବଂ ଏକ `healthy`/`degraded`/`thrash`/`no-data` verdict; query parameter `range` (`1h`\|`24h`\|`7d`\|`30d`, default `24h`) ଏବଂ ଇଚ୍ଛାଧୀନ `model` (#8827) | ### API key ଅନୁମତିଗୁଡ଼ିକ `PATCH /api/keys/{id}` ଏକ ବିଦ୍ୟମାନ keyର ଅନୁମତିଗୁଡ଼ିକୁ update କରେ। ପ୍ରତ୍ୟେକ `/api/keys*` route ପରି, ଏଥିପାଇଁ management authorization ଆବଶ୍ୟକ ([Management Authentication](../guides/MANAGEMENT-AUTH.md) ଦେଖନ୍ତୁ), inference key ନୁହେଁ। ଆପଣ ପରିବର୍ତ୍ତନ କରିବାକୁ ଚାହୁଁଥିବା fieldଗୁଡ଼ିକୁ ମାତ୍ର ପଠାନ୍ତୁ; ସେଗୁଡ଼ିକ ମଧ୍ୟରୁ କୌଣସିଟି ନଥିବା ଅନୁରୋଧକୁ `No valid fields to update` ସହିତ ପ୍ରତ୍ୟାଖ୍ୟାନ କରାଯାଏ। ଗ୍ରହଣୀୟ fieldଗୁଡ଼ିକ `src/shared/validation/schemas/keys.ts`ରେ ଥିବା `updateKeyPermissionsSchema` ଦ୍ୱାରା ପରିଭାଷିତ। | ଫିଲ୍ଡ | ପ୍ରକାର | ଟିପ୍ପଣୀ | | ------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- | | `name` | string, 1-200 ଅକ୍ଷର | | | `isActive` | boolean | | | `isBanned` | boolean | | | `expiresAt` | ISO 8601 datetime କିମ୍ବା `null` | `null` ମିଆଦ ସମାପ୍ତିକୁ ସଫା କରେ | | `modelAccessMode` | `all` \| `restricted` | ମୋଡ୍ `all` ଥିବାବେଳେ `allowedModels` ଖାଲି ହେବା ଆବଶ୍ୟକ | | `allowedModels`, `blockedModels` | stringଗୁଡ଼ିକର array, ସର୍ବାଧିକ 1000 | | | `allowedCombos` | stringଗୁଡ଼ିକର array, ସର୍ବାଧିକ 500 | କୀ କେଉଁ combosକୁ କଲ୍ କରିପାରିବ ତାହା ନିୟନ୍ତ୍ରଣ କରେ; ସିଧାସଳଖ modelsଗୁଡ଼ିକ `modelAccessMode` / `allowedModels` ଦ୍ୱାରା ନିୟନ୍ତ୍ରିତ ହୁଏ | | `connectionAccessMode` | `all` \| `restricted` | `restricted` ଥିବାବେଳେ `allowedConnections` ଖାଲି ନ ହେବା ଏବଂ `all` ଥିବାବେଳେ ଖାଲି ହେବା ଆବଶ୍ୟକ | | `allowedConnections` | UUIDଗୁଡ଼ିକର array, ସର୍ବାଧିକ 100 | | | `allowAutoCombos` | boolean | `false` ଏହି କୀ ସହିତ `auto/*` models ପାଇଁ ଅନୁରୋଧଗୁଡ଼ିକୁ ପ୍ରତ୍ୟାଖ୍ୟାନ କରେ; ଯେଉଁ କୀଗୁଡ଼ିକରେ ଏହା କେବେ ସେଟ୍ କରାଯାଇନାହିଁ, ସେଗୁଡ଼ିକୁ ଅନୁମତି ଦିଆଯାଏ | | `catalogScope` | `all` \| `combos` \| `models` | ଏହି କୀ ପାଇଁ `GET /v1/models` କ’ଣ ତାଲିକାଭୁକ୍ତ କରେ (କେବଳ combos, କେବଳ models, କିମ୍ବା ଉଭୟ); ଏହା କୀ କ’ଣ କଲ୍ କରିପାରିବ ତାହା ପରିବର୍ତ୍ତନ କରେନାହିଁ | | `noLog`, `autoResolve` | boolean | | | `throttleDelayMs` | integer, 0-300000 | | | `maxSessions` | integer, 0-10000 | | | `rateLimits` | `{ limit, window }`ର array (ଧନାତ୍ମକ integers, ସର୍ବାଧିକ 50) କିମ୍ବା `null` | `null` ସୀମାଗୁଡ଼ିକୁ ସଫା କରେ | | `accessSchedule` | schedule object କିମ୍ବା `null` | `null` scheduleକୁ ସଫା କରେ | | `scopes` | stringଗୁଡ଼ିକର array, ସର୍ବାଧିକ 32 | | | `allowedEndpoints` | stringଗୁଡ଼ିକର array, ସର୍ବାଧିକ 20 | | | `streamDefaultMode` | `legacy` \| `json` | | | `cacheDefaultMode` | `legacy` \| `bypass` | [ପ୍ରତି-କୀ cache bypass](#per-key-cache-bypass) ଦେଖନ୍ତୁ | | `compressionEnabled` | boolean | | | `codexServiceMode` | Codex service modes ମଧ୍ୟରୁ ଗୋଟିଏ | | | `disableNonPublicModels` | boolean | | | `allowUsageCommand` | boolean | | | `usageLimitEnabled` | boolean | | | `dailyUsageLimitUsd`, `weeklyUsageLimitUsd` | number >= 0 କିମ୍ବା `null` | | | `chaosModeEnabled` | boolean | | ```bash curl -X PATCH "$OMNIROUTE_URL/api/keys/$KEY_ID" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "allowAutoCombos": false, "catalogScope": "combos" }' ``` ### ସେଟିଂସମୂହ | Endpoint | Method | ବିବରଣୀ | | ------------------------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `/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 | ଚିନ୍ତନ/ତର୍କ **ଅନୁରୋଧ** ପୁନଃଲିଖନ ମୋଡ୍ (passthrough / auto-strip / custom / adaptive)। କମ୍ପ୍ରେସନ୍ଠାରୁ ସ୍ୱାଧୀନ। [THINKING_BUDGET.md](../guides/THINKING_BUDGET.md) ଦେଖନ୍ତୁ। | | `/api/settings/system-prompt` | GET/PUT | ଗ୍ଲୋବାଲ୍ ସିଷ୍ଟମ୍ ପ୍ରମ୍ପ୍ଟ | | `/api/settings/compression` | GET/PUT | ଗ୍ଲୋବାଲ୍ କମ୍ପ୍ରେସନ୍ ବିନ୍ୟାସ | | `/api/settings/purge-request-history` | POST | ଅନୁରୋଧ ଲଗ୍ ଧାଡ଼ି ଏବଂ ସ୍ଥାନୀୟ କଲ୍-ଲଗ୍ ଆର୍ଟିଫ୍ୟାକ୍ଟଗୁଡ଼ିକ ସଫା କରନ୍ତୁ | ### କଣ୍ଟେକ୍ସ୍ଟ ଏବଂ କମ୍ପ୍ରେସନ୍ | Endpoint | Method | ବିବରଣୀ | | -------------------------------------- | -------------- | ----------------------------------------------------------------------------- | | `/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 ଫାଇଲ୍ ଅପଲୋଡ୍ କରନ୍ତୁ (`?dryRun=true` କେବଳ ବୈଧତା ଯାଞ୍ଚ କରେ) | | `/api/db-backups/exportAll` | GET | ସମ୍ପୂର୍ଣ୍ଣ ବ୍ୟାକଅପ୍କୁ .tar.gz ଆର୍କାଇଭ୍ ଭାବରେ ଡାଉନଲୋଡ୍ କରନ୍ତୁ | `/api/db-backups/export`, `/api/db-backups/exportAll` ଏବଂ `/api/settings/export-json` ସଂରକ୍ଷିତ ସମସ୍ତ ପ୍ରମାଣପତ୍ର ପ୍ରଦାନ କରେ, ତେଣୁ ସେଗୁଡ଼ିକ ପାଇଁ ଡ୍ୟାସ୍ବୋର୍ଡ ସେସନ୍ କିମ୍ବା ସ୍ଥାନୀୟ CLI (ଅଥବା ଲଗ୍ଇନ୍ ଅକ୍ଷମ ଥିବା) ଆବଶ୍ୟକ। ଯେକୌଣସି ସ୍କୋପ୍ର API କୀ ଏବଂ `oma_` ଆକ୍ସେସ୍ ଟୋକନ୍ଗୁଡ଼ିକୁ `403` ମିଳେ। `/api/db-backups/export`, `/api/db-backups/exportAll` and `/api/settings/export-json` hand out every stored credential, so they require the dashboard session or the local CLI (or login disabled). API keys of any scope and `oma_` access tokens get `403`. The restores hold the same boundary: `POST /api/db-backups/import` (`dryRun=true` included), `POST /api/db-backups` (restore by id) and `POST /api/settings/import-json` replace the live database or settings, so a machine credential gets `403` there too; `omniroute sync import` sends the local CLI credential. ### କ୍ଲାଉଡ୍ ସିଙ୍କ୍ | ଏଣ୍ଡପଏଣ୍ଟ | ପଦ୍ଧତି | ବର୍ଣ୍ଣନା | | ---------------------- | ------- | ---------------------------- | | `/api/sync/cloud` | ବିଭିନ୍ନ | କ୍ଲାଉଡ୍ ସିଙ୍କ୍ କାର୍ଯ୍ୟଗୁଡ଼ିକ | | `/api/sync/initialize` | POST | ସିଙ୍କ୍ ପ୍ରାରମ୍ଭ କରନ୍ତୁ | | `/api/cloud/*` | ବିଭିନ୍ନ | କ୍ଲାଉଡ୍ ପରିଚାଳନା | ### ଟନେଲ୍ଗୁଡ଼ିକ | Endpoint | Method | ବିବରଣୀ | | -------------------------- | ------ | --------------------------------------------------------------------------- | | `/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 ଉପକରଣଗୁଡ଼ିକ | Endpoint | Method | ବିବରଣୀ | | ---------------------------------- | ------ | ------------------- | | `/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 ଏଜେଣ୍ଟଗୁଡ଼ିକ | Endpoint | Method | ବିବରଣୀ | | ----------------- | ------ | ---------------------------------------------------------------------- | | `/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) ଅନ୍ତର୍ଭୁକ୍ତ ଅଛି। ### ସ୍ଥିତିସ୍ଥାପକତା ଏବଂ ହାର ସୀମା | Endpoint | Method | ବିବରଣୀ | | --------------------------------- | --------- | ---------------------------------------------------------------------------------------------------- | | `/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) ଦେଖନ୍ତୁ। ### ମୂଲ୍ୟାୟନଗୁଡ଼ିକ | Endpoint | Method | ବିବରଣୀ | | ------------ | -------- | ----------------------------------------------- | | `/api/evals` | GET/POST | ମୂଲ୍ୟାୟନ ସୁଇଟ୍ଗୁଡ଼ିକର ତାଲିକା / ମୂଲ୍ୟାୟନ ଚଲାନ୍ତୁ | ### ନୀତିଗୁଡ଼ିକ | Endpoint | Method | ବିବରଣୀ | | --------------- | --------------- | --------------------------------- | | `/api/policies` | GET/POST/DELETE | ରାଉଟିଂ ନୀତିଗୁଡ଼ିକ ପରିଚାଳନା କରନ୍ତୁ | ### ଅନୁପାଳନ | Endpoint | Method | ବିବରଣୀ | | --------------------------- | ------ | --------------------------- | | `/api/compliance/audit-log` | GET | ଅନୁପାଳନ ଅଡିଟ୍ ଲଗ୍ (ଶେଷ Nଟି) | ### v1beta (Gemini-ସୁସଙ୍ଗତ) | Endpoint | Method | ବିବରଣୀ | | -------------------------- | ------ | ------------------------------------ | | `/v1beta/models` | GET | Gemini ଫର୍ମାଟ୍ରେ ମଡେଲ୍ଗୁଡ଼ିକର ତାଲିକା | | `/v1beta/models/{...path}` | POST | Gemini `generateContent` ଏଣ୍ଡପଏଣ୍ଟ୍ | ଏହି ଏଣ୍ଡପଏଣ୍ଟ୍ଗୁଡ଼ିକ ମୂଳ Gemini SDK ସୁସଙ୍ଗତତା ଆଶା କରୁଥିବା କ୍ଲାଏଣ୍ଟମାନଙ୍କ ପାଇଁ Gemini API ଫର୍ମାଟ୍କୁ ପ୍ରତିବିମ୍ବିତ କରନ୍ତି। ### ଆଭ୍ୟନ୍ତରୀଣ / ସିଷ୍ଟମ୍ APIଗୁଡ଼ିକ | Endpoint | Method | ବିବରଣୀ | | ------------------------ | ------ | --------------------------------------------------------- | | `/api/init` | GET | ଆପ୍ଲିକେସନ୍ ପ୍ରାରମ୍ଭୀକରଣ ଯାଞ୍ଚ (ପ୍ରଥମ ଚାଳନାରେ ବ୍ୟବହୃତ) | | `/api/tags` | GET | Ollama-ସୁସଙ୍ଗତ ମଡେଲ୍ ଟ୍ୟାଗ୍ଗୁଡ଼ିକ (Ollama କ୍ଲାଏଣ୍ଟ ପାଇଁ) | | `/api/restart` | POST | ସୁବ୍ୟବସ୍ଥିତ ସର୍ଭର୍ ପୁନଃପ୍ରାରମ୍ଭ ଟ୍ରିଗର୍ କରନ୍ତୁ | | `/api/shutdown` | POST | ସୁବ୍ୟବସ୍ଥିତ ସର୍ଭର୍ ବନ୍ଦ ଟ୍ରିଗର୍ କରନ୍ତୁ | | `/api/system/env/repair` | POST | OAuth ପ୍ରଦାନକାରୀ ପରିବେଶ ଭେରିଏବଲ୍ଗୁଡ଼ିକ ମରାମତି କରନ୍ତୁ | | `/api/system/version` | GET | ବର୍ତ୍ତମାନ/ସର୍ବଶେଷ ଭର୍ସନ୍, ଅପଡେଟ୍ ସ୍ଥିତି, ରିଲିଜ୍ ଚ୍ୟାନେଲ୍ | | `/api/system/version` | POST | ସର୍ବଶେଷ ଭର୍ସନ୍କୁ ଏକ ଡିପ୍ଲୟମେଣ୍ଟ-ସଚେତନ ଅପଡେଟ୍ ଆରମ୍ଭ କରନ୍ତୁ | > **ଟିପ୍ପଣୀ:** ଏହି ଏଣ୍ଡପଏଣ୍ଟ୍ଗୁଡ଼ିକ ସିଷ୍ଟମ୍ ଦ୍ୱାରା ଆଭ୍ୟନ୍ତରୀଣ ଭାବରେ କିମ୍ବା 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 GET /api/system/version ``` କେବଳ ଲୁପ୍ବ୍ୟାକ୍ ପରିଚାଳନା ରୁଟ୍ (ଆଡମିନ୍ ପ୍ରାମାଣିକରଣ)। ଏହା ଚାଲୁଥିବା ସଂସ୍କରଣ, ସର୍ବଶେଷ ପ୍ରକାଶିତ ସଂସ୍କରଣ ଏବଂ ସ୍ୱୟଂଚାଳିତ-ଅପଡେଟ୍ ସ୍ଥିତି ଫେରାଏ। `releaseChannel` ଏବଂ `channels` ଯୋଗାତ୍ମକ ଫିଲ୍ଡ (rail 3.8.54); `channel` ନିଜର ଅର୍ଥ ବଜାୟ ରଖେ — ଡ୍ୟାସ୍ବୋର୍ଡ ଅପଡେଟର୍ ବ୍ୟବହାର କରୁଥିବା ଡିପ୍ଲୟମେଣ୍ଟ ମୋଡ୍ (`npm`, `source` କିମ୍ବା `docker-compose`)। ```json { "current": "3.8.52", "latest": "3.8.52", "updateAvailable": false, "channel": "npm", "autoUpdateSupported": true, "autoUpdateError": null, "news": null, "releaseChannel": "latest", "channels": { "latest": "3.8.52", "next": "3.8.53-rc.1" } } ``` - `releaseChannel` — ଚାଲୁଥିବା ବିଲ୍ଡର npm ଚ୍ୟାନେଲ୍: `-nightly.*` ସଂସ୍କରଣଗୁଡ଼ିକ ପାଇଁ `nightly`, ଅନ୍ୟ ପ୍ରି-ରିଲିଜ୍ଗୁଡ଼ିକ (`-rc.*`, `-beta.*`, `-alpha.*`) ପାଇଁ `next`, `channels.latest` ଠାରୁ ପୁରୁଣା ପ୍ରମୁଖ ସଂସ୍କରଣର ଏକ ସ୍ଥିର ସଂସ୍କରଣ ପାଇଁ `lts`, ଅନ୍ୟଥା `latest`। ଏହା `scripts/release/dist-tag.mjs` ସହ ସମାନ ନିୟମ ବ୍ୟବହାର କରେ, ଯାହା ପ୍ରକାଶନ ସମୟରେ npm dist-tag ବାଛେ। - `channels` — `npm view omniroute dist-tags` ରୁ ପ୍ରତ୍ୟେକ dist-tag ର ପ୍ରକାଶିତ ମୁଖ୍ୟ ସଂସ୍କରଣ (ରେଜିଷ୍ଟ୍ରି HTTP ଫଲ୍ବ୍ୟାକ୍), ଯାହା `latest` ପରି ସମାନ 10-ମିନିଟ୍ TTL ସହିତ କ୍ୟାଶ୍ ହୋଇଥାଏ। `latest` ସର୍ବଦା ଉପସ୍ଥିତ ରହେ (ପ୍ରଥମେ `latest` ଫିଲ୍ଡକୁ, ତାହାପରେ `"unavailable"` କୁ ଫଲ୍ବ୍ୟାକ୍ କରେ); `next`, `nightly` ଏବଂ `lts` କେବଳ ସେହି dist-tag ବିଦ୍ୟମାନ ଥିଲେ ଦେଖାଯାଏ। ଏକ `Cache-Control: no-cache` ଅନୁରୋଧ ଉଭୟ ଲୁକ୍ଅପ୍କୁ ରିଫ୍ରେଶ୍ କରେ। ଚ୍ୟାନେଲ୍ ମଡେଲ୍ (`latest` = 4.0 GA ପର୍ଯ୍ୟନ୍ତ v3, `next` = rc, `nightly` = `develop` ବିଲ୍ଡଗୁଡ଼ିକ, `lts` = 4.0 GA ପରେ v3 ପ୍ୟାଚ୍ଗୁଡ଼ିକ) `docs/ops/RELEASE_STRATEGY.md` ରେ ବର୍ଣ୍ଣିତ ହୋଇଛି। --- ## ଅଡ଼ିଓ ଟ୍ରାନ୍ସକ୍ରିପସନ୍ ```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 # Chat endpoint (Ollama format) POST /v1/api/chat # Model listing (Ollama format) GET /api/tags ``` ଅନୁରୋଧଗୁଡ଼ିକ Ollama ଏବଂ ଅନ୍ତଃଗତ ଫର୍ମାଟ୍ ମଧ୍ୟରେ ସ୍ଵୟଂଚାଳିତ ଭାବରେ ଅନୁବାଦ କରାଯାଏ। ## ଟୋକେନାଇଜ୍ କରାଯାଇଥିବା VS Code / ହେଡର୍ଲେସ୍ ଉପନାମ ଯେତେବେଳେ ଏକ ଇଣ୍ଟିଗ୍ରେସନ୍ `Authorization` ହେଡର୍ ଇଞ୍ଜେକ୍ଟ କରିପାରେ ନାହିଁ ଏବଂ API କୀ କୁ ମୂଳ URL ରେ ସନ୍ନିହିତ କରିବା ଆବଶ୍ୟକ କରେ, ସେତେବେଳେ ଏହି ଉପନାମଗୁଡ଼ିକ ବ୍ୟବହାର କରନ୍ତୁ। ```bash # OpenAI-style catalog alias GET /api/v1/vscode/{token}/ GET /api/v1/vscode/{token}/models # OpenAI-style chat aliases POST /api/v1/vscode/{token}/chat/completions POST /api/v1/vscode/{token}/responses # Ollama-style aliases 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-କି **ଟୋକେନ୍** ବଜେଟ୍ (ଉପରେ ବର୍ଣ୍ଣିତ USD-ଆଧାରିତ ବଜେଟ୍ ଠାରୁ ଭିନ୍ନ)। ଅନୁରୋଧ ପଥରେ ଇନଲାଇନ୍ ପ୍ରୟୋଗ କରାଯାଏ: ଯେତେବେଳେ ଏକ କି'ର ବର୍ତ୍ତମାନ ୱିଣ୍ଡୋ ବ୍ୟବହାର ତାର ସୀମାରେ ପହଞ୍ଚେ, ଅନୁରୋଧଗୁଡିକ `429 Too Many Requests` ସହ ଅସ୍ୱୀକାର କରାଯାଏ। ସୀମାଗୁଡିକ ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ `model`, ଏକ `provider`, କିମ୍ବା କିରେ ସମଗ୍ର `global`ly ପ୍ରୟୋଗ ହୋଇପାରେ; ଯେତେବେଳେ ଅନେକ ସୀମା ଏକ ଅନୁରୋଧ ସହ ମେଳ ଖାଏ, ସବୁଠାରୁ କଠୋର ସୀମା ଜିତେ। ```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 } # ଆଇଡି ଦ୍ୱାରା ଏକ ଟୋକେନ୍ ସୀମା ବିଲୋପ କରନ୍ତୁ DELETE /api/usage/token-limits?id=tl-abc ``` > **ସ୍କିମା ନୋଟ୍** (`setTokenLimitSchema`): `apiKeyId` ଏବଂ `scopeType` (`model` | `provider` | `global`) ଆବଶ୍ୟକ। `scopeValue` ସେତେବେଳେ ଆବଶ୍ୟକ ନୁହେଁ ଯେତେବେଳେ `scopeType` ହେଉଛି `global` (ଉଦାହରଣ ସ୍ୱରୂପ, `model` ସ୍କୋପ୍ ପାଇଁ ଏକ ମଡେଲ୍ ଆଇଡି, `provider` ସ୍କୋପ୍ ପାଇଁ ଏକ ପ୍ରୋଭାଇଡର୍ ଆଇଡି)। `tokenLimit` ଏକ ଧନାତ୍ମକ ପୂର୍ଣ୍ଣ ସଂଖ୍ୟା ହେବା ଉଚିତ (ଷ୍ଟ୍ରିଙ୍ଗ୍ ଠାରୁ ବାଧ୍ୟ କରାଯାଇଛି)। ଐଚ୍ଛିକ: `id` (ସୃଷ୍ଟି କରିବାକୁ ବାଦ୍ ଦିଅନ୍ତୁ, ଅଦ୍ୟତନ କରିବାକୁ ସରବରାହ କରନ୍ତୁ), `resetInterval` (`daily` | `weekly` | `monthly`, ଡିଫଲ୍ଟ `monthly`), `resetTime` (`HH:MM`), `enabled` (ଡିଫଲ୍ଟ `true`)। `GET` ପ୍ରତିକ୍ରିୟା ପ୍ରତି ସୀମାକୁ `tokensUsed`, `remaining`, `windowStart`, `periodStartAt`, ଏବଂ `nextResetAt` ସହ ସମୃଦ୍ଧ କରେ। ଏହା ଏକ ପରିଚାଳନା-ଶ୍ରେଣୀ ଏଣ୍ଡପଏଣ୍ଟ (authz ପାଇପଲାଇନ୍ ଦ୍ୱାରା କେନ୍ଦ୍ରୀୟ ଭାବରେ ପ୍ରୟୋଗ କରାଯାଇଥିବା ପ୍ରମାଣୀକରଣ)। ## ଅନୁରୋଧ ପ୍ରକ୍ରିୟାକରଣ 1. କ୍ଲାଏଣ୍ଟ `/v1/*` କୁ ଅନୁରୋଧ ପଠାଏ 2. ରୁଟ୍ ହ୍ୟାଣ୍ଡଲର୍ `handleChat`, `handleEmbedding`, `handleAudioTranscription`, କିମ୍ବା `handleImageGeneration` କୁ ଡାକେ 3. ମଡେଲ୍ ସମାଧାନ ହୁଏ (ସିଧାସଳଖ ପ୍ରୋଭାଇଡର୍/ମଡେଲ୍ କିମ୍ବା ଉପନାମ/କମ୍ବୋ) 4. ସ୍ଥାନୀୟ ଡିବି ଠାରୁ ଉପଲବ୍ଧତା ଫିଲ୍ଟରିଂ ସହ ପ୍ରମାଣପତ୍ର ଚୟନ ହୁଏ 5. ଚାଟ୍ ପାଇଁ: `handleChatCore` ସମ୍ବେଦନଶୀଳ/ସିଗନିଚର୍ କ୍ୟାଶ୍ ଯାଞ୍ଚ କରେ ଏବଂ କମ୍ବୋ ସଂକୋଚନ ସେଟିଂସ୍ ସମାଧାନ କରେ 6. ସକ୍ରିୟ ହୋଇଥିବା ସମୟରେ ପ୍ରୋଭାଇଡର୍ ଅନୁବାଦ ପୂର୍ବରୁ ସକ୍ରିୟ ସଂକୋଚନ ଚାଲିଏ (`lite`, Caveman, RTK, କିମ୍ବା stacked) 7. ପ୍ରୋଭାଇଡର୍ ଏକ୍ସିକ୍ୟୁଟର୍ ଅପ୍ଷ୍ଟ୍ରିମ୍ ଅନୁରୋଧ ପଠାଏ 8. ପ୍ରତିକ୍ରିୟା କ୍ଲାଏଣ୍ଟ୍ ଫର୍ମାଟ୍ କୁ ଅନୁବାଦ ହୁଏ (ଚାଟ୍) କିମ୍ବା ଯଥାର୍ଥ ଫେରାଯାଏ (embeddings/images/audio) 9. ବ୍ୟବହାର, ସଂକୋଚନ ବିଶ୍ଳେଷଣ, ଏବଂ ଅନୁରୋଧ ଲଗ୍ ରେକର୍ଡ ହୁଏ 10. ତୃଟି ଅନୁଭୂତି ଅନୁଯାୟୀ କମ୍ବୋ ନିୟମ ଅନୁସାରେ ଫଲ୍ବ୍ୟାକ୍ ପ୍ରୟୋଗ ହୁଏ ସମ୍ପୂର୍ଣ୍ଣ ସ୍ଥାପତ୍ୟ ସନ୍ଦର୍ଭ: [`ARCHITECTURE.md`](../architecture/ARCHITECTURE.md) --- ## କମ୍ବୋ ପରିଚାଳନା ଉଚ୍ଚ-ସ୍ତରୀୟ ରୁଟିଂ କମ୍ବୋ (ଇତିମଧ୍ୟରେ `/api/combos*` ଅଧୀନରେ ସାରାଂଶିତ) ଏକ ମଡେଲ୍ ଆଇଡି ପ୍ୟାଟର୍ନ ଠାରୁ ମଧ୍ୟ 1:1 ମ୍ୟାପ୍ ହୋଇପାରେ, ଯାହା ଏକ OpenAI-ଶୈଳୀର ମଡେଲ୍ ଆଇଡିକୁ ଏକ କମ୍ବୋକୁ ସ୍ୱଚ୍ଛ ପୁନଃନିର୍ଦ୍ଦେଶନ ଅନୁମତି ଦିଏ। | ପଦ୍ଧତି | ପଥ | ବର୍ଣ୍ଣନା | | ------ | -------------------------------- | ------------------------------------------------------------------------------------ | | GET | `/api/model-combo-mappings` | ସମସ୍ତ ମଡେଲ୍→କମ୍ବୋ ମ୍ୟାପିଂ ତାଲିକା କରନ୍ତୁ | | 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 କି (`requireManagementAuth`). --- ## ୱେବ୍ହୁକ୍ସ OmniRouter ଇଭେଣ୍ଟ ପାଇଁ ବାହାରମୁଖୀ ୱେବ୍ହୁକ୍ସ ସବସ୍କ୍ରିପ୍ସନ (ଅନୁରୋଧ ସମାପ୍ତି, କୋଟା ଶେଷ, କି ଘୂର୍ଣ୍ଣନ, ଇତ୍ୟାଦି)। | ପଦ୍ଧତି | ପଥ | ବିବରଣୀ | | ------ | ------------------------- | ------------------------------------------------------------------------------ | | GET | `/api/webhooks` | ୱେବ୍ହୁକ୍ସ ତାଲିକା କରନ୍ତୁ (ସିକ୍ରେଟଗୁଡ଼ିକ `...` ରେ ମାସ୍କ୍ କରାଯାଇଛି) | | POST | `/api/webhooks` | ୱେବ୍ହୁକ୍ସ ସୃଷ୍ଟି କରନ୍ତୁ — ବଡ଼ୀ: `{url, events?: ["*"], secret?, description?}` | | GET | `/api/webhooks/[id]` | ଗୋଟିଏ ୱେବ୍ହୁକ୍ସ ପ୍ରାପ୍ତ କରନ୍ତୁ | | PUT | `/api/webhooks/[id]` | url/events/secret/description ଅପଡେଟ୍ କରନ୍ତୁ | | DELETE | `/api/webhooks/[id]` | ଗୋଟିଏ ୱେବ୍ହୁକ୍ସ ହଟାନ୍ତୁ | | POST | `/api/webhooks/[id]/test` | ୱେବ୍ହୁକ୍ସ URL କୁ ଏକ ପରୀକ୍ଷା ପେଲୋଡ୍ ପଠାନ୍ତୁ ଏବଂ ଡେଲିଭରୀ ସ୍ଥିତି ଫେରାନ୍ତୁ | **ପ୍ରାଧିକରଣ:** ପରିଚାଳନା ସେସନ/API କୀ (`requireManagementAuth`)। --- ## ପଞ୍ଜୀକୃତ କୀଗୁଡ଼ିକ (ସ୍ୱୟଂଚାଳିତ ପରିଚାଳନା) ଦୈନିକ/ଘଣ୍ଟାଭିତ୍ତିକ କୋଟା ସହିତ ଏକ ଅନ୍ତର୍ନିହିତ ପ୍ରଦାନକାରୀ/ଆକାଉଣ୍ଟ ପାଇଁ API କୀଗୁଡ଼ିକ ଜାରି ଓ ରୋଟେଟ୍ କରିବାକୁ ସ୍ୱୟଂଚାଳିତ କୀ ପରିଚାଳନା ଉପପ୍ରଣାଳୀ ଦ୍ୱାରା ବ୍ୟବହୃତ ହୁଏ। | ପଦ୍ଧତି | ପଥ | ବର୍ଣ୍ଣନା | | ------ | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | GET | `/api/v1/registered-keys` | ପଞ୍ଜୀକୃତ କୀଗୁଡ଼ିକର ତାଲିକା ଦେଖାଏ (କେବଳ ମାସ୍କ୍ କରାଯାଇଥିବା ପ୍ରିଫିକ୍ସ) | | POST | `/api/v1/registered-keys` | ଏକ ନୂତନ ପଞ୍ଜୀକୃତ କୀ ଜାରି କରେ — ବଡି: `{name, provider?, accountId?, idempotencyKey?, expiresAt?, dailyBudget?, hourlyBudget?}`। ଅସଂଶୋଧିତ କୀକୁ **ଥରେ ମାତ୍ର** ଫେରାଏ। କୋଟା ଅସ୍ୱୀକୃତିରେ `429` ଫେରାଏ। | | GET | `/api/v1/registered-keys/[id]` | ଏକ ପଞ୍ଜୀକୃତ କୀର ମେଟାଡାଟା ପ୍ରାପ୍ତ କରେ (କୌଣସି ଅସଂଶୋଧିତ କୀ ତଥ୍ୟ ନୁହେଁ) | | DELETE | `/api/v1/registered-keys/[id]` | ଏକ ପଞ୍ଜୀକୃତ କୀକୁ ପ୍ରତ୍ୟାହାର କରେ | | POST | `/api/v1/registered-keys/[id]/revoke` | ସ୍ପଷ୍ଟ ପ୍ରତ୍ୟାହାର ଏଣ୍ଡପଏଣ୍ଟ (`DELETE` ସହିତ ସମାନ ପ୍ରଭାବ) | **ପ୍ରାମାଣିକରଣ:** ପରିଚାଳନା ସେସନ୍/API କୀ (`requireManagementAuth`) — `/api/keys` ପରି ସମାନ ଗାର୍ଡ: ଏକ ଡ୍ୟାସ୍ବୋର୍ଡ ସେସନ୍, ସ୍ଥାନୀୟ CLI ଟୋକନ୍, କିମ୍ବା `manage`/`admin` ସ୍କୋପ୍ ସହିତ ଏକ API କୀ; କେବଳ ଇନ୍ଫରେନ୍ସ ପାଇଁ ଥିବା API କୀଗୁଡ଼ିକ `403` ପାଆନ୍ତି। `/v1/quotas/check` ଏବଂ `/v1/issues/report` ମଧ୍ୟ ଦେଖନ୍ତୁ। --- ## ଏଜେଣ୍ଟ ପ୍ରୋଟୋକଲ OmniRoute ବ୍ୟବହାରକାରୀଙ୍କ ପାଇଁ ଦୂରସ୍ଥରେ କାର୍ଯ୍ୟକାରୀ ହୋଇଥିବା କ୍ଲାଉଡ୍ ଏଜେଣ୍ଟ କାର୍ଯ୍ୟ (Claude Code, Codex Cloud, OpenHands, ଇତ୍ୟାଦି)। | ପଦ୍ଧତି | ପାଥ | ବିବରଣୀ | | ------ | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | GET | `/api/v1/agents/tasks` | ତାଲିକା ଟାସ୍କ — ଐଚ୍ଛିକ `?provider=`, `?status=`, `?limit=` (୧–୫୦୦, ଡିଫଲ୍ଟ ୫୦) | | 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` ସମର୍ଥନ କରେ; ସମାନ କ୍ଷେତ୍ରଗୁଡ଼ିକ ଡ୍ୟାସବୋର୍ଡ → ସେଟିଂସ୍ → ସହନଶୀଳତାରେ ପ୍ରଦାନ କରାଯାଇଛି। ```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` | ସ୍ମୃତି ସୃଷ୍ଟି କରନ୍ତୁ — body Zod ଦ୍ୱାରା ସତ୍ୟାପିତ: `{content, key, type?, sessionId?, apiKeyId?, metadata?, expiresAt?}` | | GET | `/api/memory/[id]` | ଗୋଟିଏ ସ୍ମୃତି ପ୍ରାପ୍ତ କରନ୍ତୁ | | DELETE | `/api/memory/[id]` | ସ୍ମୃତି ବିଲୋପ କରନ୍ତୁ | | GET | `/api/memory/health` | ସ୍ମୃତି ଉପାଦାନ ସ୍ୱାସ୍ଥ୍ୟ (DB ସଂଯୋଗ, embeddings ବ୍ୟାକଏଣ୍ଡ, vector index ସ୍ଥିତି) | **ପ୍ରମାଣୀକରଣ:** ପରିଚାଳନା ସେସନ୍/API କୀ (`requireManagementAuth`)। `type` enum: `FACTUAL`, `EPISODIC`, `SEMANTIC`, `PROCEDURAL` (`src/lib/memory/types.ts` ରେ `MemoryType` ଦେଖନ୍ତୁ)। --- ## MCP ସର୍ଭର OmniRoute ଏକ ଏମ୍ବେଡେଡ୍ Model Context Protocol ସର୍ଭର ସହ 3 ଟ୍ରାନ୍ସପୋର୍ଟ (stdio, SSE, streamable-http) ଏବଂ ପରିସୀମିତ ଉପକରଣ ସହ ବିତରଣ କରେ। ନିମ୍ନରେ ଥିବା ଡ୍ୟାସବୋର୍ଡ ଏଣ୍ଡପଏଣ୍ଟଗୁଡ଼ିକ ସ୍ଥିତି/ଅଡିଟ ଡାଟା ପଠାନ୍ତି ଏବଂ HTTP ଟ୍ରାନ୍ସପୋର୍ଟକୁ ପ୍ରକ୍ସି କରନ୍ତି। | ପଦ୍ଧତି | ପଥ | ବିବରଣୀ | | ------ | ---------------------- | ------------------------------------------------------------------------------------------------ | -------------------- | | GET | `/api/mcp/status` | ହୃଦସ୍ପନ୍ଦନ, ଟ୍ରାନ୍ସପୋର୍ଟ, ଅନଲାଇନ୍ ଅବସ୍ଥା, ଶେଷ କଲ, ଶୀର୍ଷ ଉପକରଣ, 24h ସଫଳତା ହାର | | GET | `/api/mcp/tools` | MCP ଉପକରଣ ତାଲିକା `name`, `description`, `scopes`, `phase`, `auditLevel`, `sourceEndpoints` ସହ | | 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 ଏକ A2A (Agent-to-Agent) JSON-RPC 2.0 ଏଣ୍ଡପଏଣ୍ଟ ଏବଂ ନିରୀକ୍ଷଣ/ଡ୍ୟାସବୋର୍ଡ ବ୍ୟବହାର ପାଇଁ ଏକ REST ର୍ୟାପର ଉତ୍କୃଷ୍ଟ କରେ। ### JSON-RPC ```bash POST /a2a Authorization: Bearer your-api-key # optional unless OMNIROUTE_API_KEY is set 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 କୀକୁ ସିଧାସଳଖ ବୈଧ କରେ ଏବଂ କେବଳ `manage` / `admin` ସ୍କୋପ୍ ଥିବା କୀ ପାଇଁ ପ୍ରତ୍ୟେକ ସଂଯୋଗର ମାସ୍କ୍ କରାଯାଇଥିବା କୀ ଏବଂ `projectId` ଫେରାଏ; ଅନ୍ୟ `/api/cloud/*`, `/api/evals/*`, ଏବଂ `/api/assess` ରୁଟ୍ଗୁଡ଼ିକ ପାଇଁ ପରିଚାଳନା ସେସନ୍/API କୀ ଆବଶ୍ୟକ। `/api/assess` POST ଏକ discriminated-union ସ୍କୋପ୍ ସ୍କିମା ସହିତ `validateBody` ବ୍ୟବହାର କରେ। --- ## ACP (ଏଜେଣ୍ଟ କ୍ଲାଏଣ୍ଟ ପ୍ରୋଟୋକଲ) ପରିଚାଳନା ଯେ ପ୍ରକ୍ରିୟାଗୁଡ଼ିକ ଶିଶୁ ପ୍ରକ୍ରିୟା ଭାବରେ ଚାଲେ। ଏହି ଏଣ୍ଡପଏଣ୍ଟଗୁଡ଼ିକ 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` | ଶାନନ ଏଣ୍ଟ୍ରୋପୀ ଆଧାରିତ ବିବିଧତା ଟ୍ରାକିଂ: ପ୍ରଦାନକର୍ତ୍ତା ସ୍ପ୍ରେଡ୍ ମାପି ଏକମାତ୍ର ବିଫଳତା ପଏଣ୍ଟକୁ ରୋକେ | **ଉତ୍ତର ଉଦାହରଣ**: ```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, 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 କୀ ଆବଶ୍ୟକ। --- ## କ୍ୟାଶ୍ ପରିଚାଳନା ସିମାନ୍ତିକ କ୍ୟାଶ୍ ଏବଂ ଯୁକ୍ତି କ୍ୟାଶ୍ ପରିଚାଳନା କରନ୍ତୁ। | ପ୍ରକାର | ପଥ | ବର୍ଣ୍ଣନା | | ------ | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | ଜିଟ୍ | `/api/cache` | କ୍ୟାଶ୍ ସାରାଂଶ: ମୋଟ ପ୍ରବେଶ, ହିଟ୍ ହାର, ଡିସ୍କରେ ଆକାର | | ଜିଟ୍ | `/api/cache/entries` | କ୍ୟାଶ୍ କରାଯାଇଥିବା ପ୍ରବେଶଗୁଡ଼ିକ ତାଲିକା (ପୃଷ୍ଠାସଂଖ୍ୟା ସହ) | | ବିଲୋପ | `/api/cache/entries` | କ୍ୟାଶ୍ ପ୍ରବେଶଗୁଡ଼ିକ ବିଲୋପ କରନ୍ତୁ (କ୍ୱେରୀ ପାରାମିଟର ଦ୍ୱାରା ଫିଲ୍ଟର) | | ଜିଟ୍ | `/api/cache/stats` | ବିସ୍ତୃତ କ୍ୟାଶ୍ ପରିସଂଖ୍ୟାନ (ପ୍ରଦାନକାରୀ ଅନୁସାରେ, ମଡେଲ୍ ଅନୁସାରେ) | | ଜିଟ୍ | `/api/cache/reasoning` | ଯୁକ୍ତି କ୍ୟାଶ୍ ଅବସ୍ଥା (ଯୁକ୍ତି ପୁନରାବୃତ୍ତି ପାଇଁ) | | ବିଲୋପ | `/api/cache/reasoning` | ଯୁକ୍ତି କ୍ୟାଶ୍ ସଫା କରନ୍ତୁ — କ୍ୱେରୀ ପାରାମିଟର: `?toolCallId=` (ଗୋଟିଏ) କିମ୍ବା `?provider=

` କିମ୍ବା କୌଣସି ପାରାମିଟର ନାହିଁ (ସମସ୍ତ) | **ପ୍ରମାଣୀକରଣ:** ପରିଚାଳନା ସେସନ୍ ଆବଶ୍ୟକ। --- ## ସ୍ମୃତି ସିଷ୍ଟମ୍ ସ୍ଥାୟୀ ସ୍ମୃତି (FTS5 + ଭେକ୍ଟର୍ ଏମ୍ବେଡିଂଗ୍) ପରିଚାଳନା କରନ୍ତୁ। | ପ୍ରକାର | ପଥ | ବର୍ଣ୍ଣନା | | ------ | ------------------ | ------------------------------------------------------------------------------- | | ଜିଟ୍ | `/api/memory` | ସ୍ମୃତି ପ୍ରବେଶଗୁଡ଼ିକ ତାଲିକା (ସ୍କୋପ୍, ପ୍ରକାର, ଖୋଜ କ୍ୱେରୀ ଦ୍ୱାରା ଫିଲ୍ଟର) | | ପୋଷ୍ଟ | `/api/memory` | ଏକ ନୂତନ ସ୍ମୃତି ପ୍ରବେଶ ସୃଷ୍ଟି କରନ୍ତୁ — ଶରୀର: `{scope, type, content, metadata?}` | | ଜିଟ୍ | `/api/memory/[id]` | ନିର୍ଦ୍ଦିଷ୍ଟ ସ୍ମୃତି ପ୍ରବେଶ ପ୍ରାପ୍ତ କରନ୍ତୁ | | ପୁଟ୍ | `/api/memory/[id]` | ସ୍ମୃତି ପ୍ରବେଶ ଅପଡେଟ୍ କରନ୍ତୁ | | ବିଲୋପ | `/api/memory/[id]` | ସ୍ମୃତି ପ୍ରବେଶ ବିଲୋପ କରନ୍ତୁ | | ଜିଟ୍ | `/api/memory?q=` | ସ୍ମୃତି ଖୋଜନ୍ତୁ (FTS5 + ଭେକ୍ଟର୍) — ପରିସଂଖ୍ୟାନ ସମାନ ପ୍ରତିକ୍ରିୟାରେ ଅନ୍ତର୍ଭୁକ୍ତ | **ପ୍ରମାଣୀକରଣ:** ପରିଚାଳନା ସେସନ୍ କିମ୍ବା ପରିଚାଳନା-ସ୍କୋପ୍ ଥିବା API କୀ ଆବଶ୍ୟକ। --- ## ୱେବ୍ହୁକ୍ସ ଘଟନା ପାଇଁ ୱେବ୍ହୁକ୍ ସଦସ୍ୟତା ପରିଚାଳନା କରନ୍ତୁ। | ପ୍ରକାର | ପଥ | ବର୍ଣ୍ଣନା | | ------ | ------------------------------- | -------------------------------------------------------------------------- | | ଜିଟ୍ | `/api/webhooks` | ସମସ୍ତ ୱେବ୍ହୁକ୍ ସଦସ୍ୟତା ତାଲିକା | | ପୋଷ୍ଟ | `/api/webhooks` | ୱେବ୍ହୁକ୍ ସଦସ୍ୟତା ସୃଷ୍ଟି କରନ୍ତୁ — ଶରୀର: `{url, events[], secret?, active?}` | | ଜିଟ୍ | `/api/webhooks/[id]` | ନିର୍ଦ୍ଦିଷ୍ଟ ୱେବ୍ହୁକ୍ ସଦସ୍ୟତା ପ୍ରାପ୍ତ କରନ୍ତୁ | | ପୁଟ୍ | `/api/webhooks/[id]` | ୱେବ୍ହୁକ୍ ସଦସ୍ୟତା ଅପଡେଟ୍ କରନ୍ତୁ | | ବିଲୋପ | `/api/webhooks/[id]` | ୱେବ୍ହୁକ୍ ସଦସ୍ୟତା ବିଲୋପ କରନ୍ତୁ | | ଜିଟ୍ | `/api/webhooks/[id]/deliveries` | ୱେବ୍ହୁକ୍ ପାଇଁ ବିତରଣ ଇତିହାସ ତାଲିକା (ସଫଳତା/ବିଫଳତା ଲଗ) | | ପୋଷ୍ଟ | `/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` ମାଧ୍ୟମରେ ଟଗଲ୍ କରାଯାଇପାରିବ - `/v1/*` ରୁଟଗୁଡିକ `REQUIRE_API_KEY=true` ଥିବା ସମୟରେ ବିକଳ୍ପ ଭାବରେ 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`) ଦେଖନ୍ତୁ।