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

`, അല്ലെങ്കിൽ പാരാമീറ്ററുകളില്ലാതെ (എല്ലാം) | **പ്രാമാണീകരണം:** മാനേജ്മെന്റ് സെഷൻ ആവശ്യമാണ്. --- ## മെമ്മറി സിസ്റ്റം സ്ഥിരമായ മെമ്മറി (FTS5 + വെക്റ്റർ എംബെഡ്ഡിങ്ങുകൾ) നിയന്ത്രിക്കുക. | രീതി | പാത | വിവരണം | | ------ | ------------------ | ------------------------------------------------------------------------------------------------------- | | GET | `/api/memory` | മെമ്മറി എൻട്രികളുടെ പട്ടിക (സ്കോപ്പ്, തരം, തിരയൽ ക്വറി എന്നിവ പ്രകാരം ഫിൽട്ടർ ചെയ്യുക) | | POST | `/api/memory` | പുതിയ മെമ്മറി എൻട്രി സൃഷ്ടിക്കുക — ബോഡി: `{scope, type, content, metadata?}` | | GET | `/api/memory/[id]` | ഒരു നിർദ്ദിഷ്ട മെമ്മറി എൻട്രി നേടുക | | PUT | `/api/memory/[id]` | ഒരു മെമ്മറി എൻട്രി അപ്ഡേറ്റ് ചെയ്യുക | | DELETE | `/api/memory/[id]` | ഒരു മെമ്മറി എൻട്രി ഇല്ലാതാക്കുക | | GET | `/api/memory?q=` | മെമ്മറിയിൽ തിരയുക (FTS5 + വെക്റ്റർ) — അതേ പ്രതികരണത്തിൽ സ്ഥിതിവിവരക്കണക്കുകളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു | **പ്രാമാണീകരണം:** മാനേജ്മെന്റ് സെഷൻ അല്ലെങ്കിൽ മാനേജ്മെന്റ്-സ്കോപ്പുള്ള API കീ ആവശ്യമാണ്. --- ## വെബ്ഹുക്കുകൾ ഇവന്റുകൾക്കായുള്ള വെബ്ഹുക്ക് സബ്സ്ക്രിപ്ഷനുകൾ നിയന്ത്രിക്കുക. | രീതി | പാത | വിവരണം | | ------ | ------------------------------- | ------------------------------------------------------------------------------------ | | GET | `/api/webhooks` | എല്ലാ വെബ്ഹുക്ക് സബ്സ്ക്രിപ്ഷനുകളുടെയും പട്ടിക | | POST | `/api/webhooks` | ഒരു വെബ്ഹുക്ക് സബ്സ്ക്രിപ്ഷൻ സൃഷ്ടിക്കുക — ബോഡി: `{url, events[], secret?, active?}` | | GET | `/api/webhooks/[id]` | ഒരു നിർദ്ദിഷ്ട വെബ്ഹുക്ക് സബ്സ്ക്രിപ്ഷൻ നേടുക | | PUT | `/api/webhooks/[id]` | ഒരു വെബ്ഹുക്ക് സബ്സ്ക്രിപ്ഷൻ അപ്ഡേറ്റ് ചെയ്യുക | | DELETE | `/api/webhooks/[id]` | ഒരു വെബ്ഹുക്ക് സബ്സ്ക്രിപ്ഷൻ ഇല്ലാതാക്കുക | | GET | `/api/webhooks/[id]/deliveries` | ഒരു വെബ്ഹുക്കിന്റെ ഡെലിവറി ചരിത്രം പട്ടികപ്പെടുത്തുക (വിജയ/പരാജയ ലോഗ്) | | POST | `/api/webhooks/[id]/test` | ഒരു വെബ്ഹുക്കിലേക്ക് പരീക്ഷണ ഇവന്റ് അയയ്ക്കുക | **പ്രാമാണീകരണം:** മാനേജ്മെന്റ് സെഷൻ ആവശ്യമാണ്. എല്ലാ ഇവന്റ് തരങ്ങൾക്കും [വെബ്ഹുക്ക്സ് ഫ്രെയിംവർക്ക്](../frameworks/WEBHOOKS.md) കാണുക. --- ## സ്കിൽസ് ഫ്രെയിംവർക്ക് സ്കിൽസ് (ഏജന്റിക് എക്സ്റ്റൻഷൻസ് ഫ്രെയിംവർക്ക്) മാനേജ് ചെയ്യുക. | മെത്തഡ് | പാത്ത് | വിവരണം | | ------- | ------------------------ | --------------------------------------------------------------------------------------------------------- | | GET | `/api/skills` | ഇൻസ്റ്റാൾ ചെയ്ത എല്ലാ സ്കിൽസും ലിസ്റ്റ് ചെയ്യുക (ബിൽറ്റ്-ഇൻ + കസ്റ്റം) | | POST | `/api/skills/install` | ഒരു ലോക്കൽ പാത്തിൽ നിന്നോ URL-ൽ നിന്നോ ഒരു സ്കിൽ ഇൻസ്റ്റാൾ ചെയ്യുക | | DELETE | `/api/skills/[id]` | ഒരു സ്കിൽ അൺഇൻസ്റ്റാൾ ചെയ്യുക | | PUT | `/api/skills/[id]` | ഒരു സ്കിൽ എനേബിൾ അല്ലെങ്കിൽ ഡിസേബിൾ ചെയ്യുക — ബോഡി: `{enabled?: boolean, mode?: "on" \| "off" \| "auto"}` | | POST | `/api/skills/executions` | ഒരു സ്കിൽ എക്സിക്യൂട്ട് ചെയ്യുക — ബോഡി: `{skillName, apiKeyId, input?, sessionId?}` | | GET | `/api/skills/executions` | എല്ലാ സ്കിൽസിന്റെയും എക്സിക്യൂഷൻ ഹിസ്റ്ററി ലിസ്റ്റ് ചെയ്യുക (`?apiKeyId=` ഉപയോഗിച്ച് ഫിൽട്ടർ ചെയ്യുക) | **ഓതന്റിക്കേഷൻ:** മാനേജ്മെന്റ് സെഷനോ മാനേജ്മെന്റ്-സ്കോപ്പുള്ള API കീയോ ആവശ്യമാണ്. പൂർണ്ണ വിവരങ്ങൾക്ക് [സ്കിൽസ് ഫ്രെയിംവർക്ക്](../frameworks/SKILLS.md) കാണുക. --- ## പ്ലഗിനുകൾ OmniRoute പ്ലഗിനുകൾ (മൂന്നാം കക്ഷി എക്സ്റ്റൻഷനുകൾ) മാനേജ് ചെയ്യുക. | മെത്തഡ് | പാത്ത് | വിവരണം | | ------- | ---------------------------------- | ----------------------------------------------------- | | GET | `/api/plugins` | ഇൻസ്റ്റാൾ ചെയ്ത പ്ലഗിനുകൾ ലിസ്റ്റ് ചെയ്യുക | | POST | `/api/plugins/marketplace/install` | മാർക്കറ്റ്പ്ലേസിൽ നിന്ന് ഒരു പ്ലഗിൻ ഇൻസ്റ്റാൾ ചെയ്യുക | | DELETE | `/api/plugins/[name]` | ഒരു പ്ലഗിൻ അൺഇൻസ്റ്റാൾ ചെയ്യുക | | POST | `/api/plugins/[name]/activate` | ഒരു പ്ലഗിൻ ആക്റ്റിവേറ്റ് ചെയ്യുക | | POST | `/api/plugins/[name]/deactivate` | ഒരു പ്ലഗിൻ ഡീആക്റ്റിവേറ്റ് ചെയ്യുക | | GET | `/api/plugins/[name]/config` | പ്ലഗിൻ കോൺഫിഗറേഷൻ നേടുക | | PUT | `/api/plugins/[name]/config` | പ്ലഗിൻ കോൺഫിഗറേഷൻ അപ്ഡേറ്റ് ചെയ്യുക | **ഓതന്റിക്കേഷൻ:** മാനേജ്മെന്റ് സെഷൻ ആവശ്യമാണ്. പൂർണ്ണ വിവരങ്ങൾക്ക് [പ്ലഗിൻസ് ഫ്രെയിംവർക്ക്](../frameworks/PLUGIN_SDK.md) കാണുക. --- ## ഷാഡോ റൂട്ടിംഗ് പ്രൊവൈഡർമാരുടെ ഷാഡോ / A-B താരതമ്യം **ഒരു സ്വതന്ത്ര REST സർഫേസ് അല്ല** — അത് കോംബോ റൂട്ടിംഗിലൂടെയാണ് കോൺഫിഗർ ചെയ്യുന്നത് ([ഓട്ടോ-കോംബോ](../routing/AUTO-COMBO.md) കാണുക). ഓരോ കോംബോയുടെയും താരതമ്യ മെട്രിക്സ് `GET /api/combos/metrics` വഴി ലഭ്യമാക്കുന്നു. --- ## ഗാർഡ്റെയിലുകൾ റൺടൈം ഗാർഡ്റെയിലുകൾ (PII ഡിറ്റക്ഷൻ, പ്രോംപ്റ്റ് ഇൻജക്ഷൻ ഡിറ്റക്ഷൻ, വിഷൻ ബ്രിഡ്ജിംഗ്) പരിശോധിക്കുക. എല്ലാ റിക്വസ്റ്റിലും ഗാർഡ്റെയിലുകൾ പ്രവർത്തിക്കുന്നു; ഓരോ കോളിലെയും ഒഴിവാക്കൽ `x-omniroute-disabled-guardrails` റിക്വസ്റ്റ് ഹെഡർ വഴിയാണ് — നിലനിൽക്കുന്ന എനേബിൾ/ഡിസേബിൾ സർഫേസ് ഇല്ല. | മെത്തഡ് | പാത്ത് | വിവരണം | | ------- | ---------------------- | ----------------------------------------------------------------------------------------------- | | GET | `/api/guardrails` | രജിസ്റ്റർ ചെയ്ത ഗാർഡ്റെയിലുകളും അവയുടെ സ്റ്റാറ്റസും ലിസ്റ്റ് ചെയ്യുക (പേര് / എനേബിൾഡ് / മുൻഗണന) | | POST | `/api/guardrails/test` | ഒരു സാമ്പിൾ ഇൻപുട്ടിൽ പ്രീ-കോൾ പൈപ്പ്ലൈൻ ഡ്രൈ-റൺ ചെയ്യുക — ബോഡി: `{input, disabledGuardrails?}` | **ഓതന്റിക്കേഷൻ:** മാനേജ്മെന്റ് സെഷൻ ആവശ്യമാണ്. പൂർണ്ണ വിവരങ്ങൾക്ക് [സുരക്ഷ > ഗാർഡ്റെയിലുകൾ](../security/GUARDRAILS.md) കാണുക. --- --- ## പ്രാമാണീകരണം നാല് ക്രെഡൻഷ്യൽ വിഭാഗങ്ങളെക്കുറിച്ചും (ഡാഷ്ബോർഡ് സെഷൻ, ലോക്കൽ CLI ടോക്കൺ, `oma_live_…` ആക്സസ് ടോക്കൺ, മാനേജ്മെന്റ്-സ്കോപ്പുള്ള API കീ) അവ ഇൻഫറൻസ് കീകളിൽനിന്ന് എങ്ങനെ വ്യത്യാസപ്പെട്ടിരിക്കുന്നുവെന്നും അറിയാൻ [മാനേജ്മെന്റ് പ്രാമാണീകരണം](../guides/MANAGEMENT-AUTH.md) കാണുക. - ഡാഷ്ബോർഡ് റൂട്ടുകൾ (`/dashboard/*`) `auth_token` കുക്കി ഉപയോഗിക്കുന്നു - ലോഗിൻ സേവ് ചെയ്ത പാസ്വേഡ് ഹാഷ് ഉപയോഗിക്കുന്നു; ലഭ്യമല്ലെങ്കിൽ `INITIAL_PASSWORD` ഉപയോഗിക്കുന്നു - `/api/settings/require-login` വഴി `requireLogin` ടോഗിൾ ചെയ്യാം - `REQUIRE_API_KEY=true` ആയിരിക്കുമ്പോൾ `/v1/*` റൂട്ടുകൾക്ക് ഐച്ഛികമായി Bearer API കീ ആവശ്യമാണ് - ഈ റഫറൻസിലെ "മാനേജ്മെന്റ് ടോക്കൺ" / "മാനേജ്മെന്റ്-സ്കോപ്പുള്ള API കീ" എന്നത് ആ ഗൈഡിലുള്ള വിഭാഗങ്ങളിലൊന്നിനെയാണ് സൂചിപ്പിക്കുന്നത് — നിർവചിക്കാത്ത മറ്റൊരു രഹസ്യ തരത്തെയല്ല > **പിന്നോട്ടുള്ള അനുയോജ്യത തകർക്കുന്ന മാറ്റം (v3.8.0)** — `/api/v1/agents/tasks/*` റൂട്ടുകൾക്കും കൂൾഡൗൺ മാനേജ്മെന്റ് എൻഡ്പോയിന്റുകൾക്കും ഇപ്പോൾ **മാനേജ്മെന്റ് പ്രാമാണീകരണം** (ഡാഷ്ബോർഡ് `auth_token` കുക്കി അല്ലെങ്കിൽ മാനേജ്മെന്റ്-സ്കോപ്പുള്ള API കീ) ആവശ്യമാണ്. മുമ്പ് പ്രാമാണീകരണമില്ലാതെ ഈ റൂട്ടുകൾ വിളിച്ചിരുന്ന ക്ലയന്റുകൾക്ക് `401 Unauthorized` ലഭിക്കും. commit `588a0333` (`fix(auth): require management auth for agent and cooldown APIs`) കാണുക.