# API Reference (मराठी) 🌐 **Languages:** 🇺🇸 [English](../../../../reference/API_REFERENCE.md) · 🇪🇹 [am](../../../am/docs/reference/API_REFERENCE.md) · 🇸🇦 [ar](../../../ar/docs/reference/API_REFERENCE.md) · 🇦🇿 [az](../../../az/docs/reference/API_REFERENCE.md) · 🇧🇬 [bg](../../../bg/docs/reference/API_REFERENCE.md) · 🇧🇩 [bn](../../../bn/docs/reference/API_REFERENCE.md) · 🇧🇦 [bs](../../../bs/docs/reference/API_REFERENCE.md) · 🇨🇿 [cs](../../../cs/docs/reference/API_REFERENCE.md) · 🇩🇰 [da](../../../da/docs/reference/API_REFERENCE.md) · 🇩🇪 [de](../../../de/docs/reference/API_REFERENCE.md) · 🇬🇷 [el](../../../el/docs/reference/API_REFERENCE.md) · 🇪🇸 [es](../../../es/docs/reference/API_REFERENCE.md) · 🇪🇪 [et](../../../et/docs/reference/API_REFERENCE.md) · 🇮🇷 [fa](../../../fa/docs/reference/API_REFERENCE.md) · 🇫🇮 [fi](../../../fi/docs/reference/API_REFERENCE.md) · 🇫🇷 [fr](../../../fr/docs/reference/API_REFERENCE.md) · 🇮🇪 [ga](../../../ga/docs/reference/API_REFERENCE.md) · 🇮🇳 [gu](../../../gu/docs/reference/API_REFERENCE.md) · 🇳🇬 [ha](../../../ha/docs/reference/API_REFERENCE.md) · 🇮🇱 [he](../../../he/docs/reference/API_REFERENCE.md) · 🇮🇳 [hi](../../../hi/docs/reference/API_REFERENCE.md) · 🇭🇷 [hr](../../../hr/docs/reference/API_REFERENCE.md) · 🇭🇺 [hu](../../../hu/docs/reference/API_REFERENCE.md) · 🇦🇲 [hy](../../../hy/docs/reference/API_REFERENCE.md) · 🇮🇩 [id](../../../id/docs/reference/API_REFERENCE.md) · 🇳🇬 [ig](../../../ig/docs/reference/API_REFERENCE.md) · 🇮🇹 [it](../../../it/docs/reference/API_REFERENCE.md) · 🇯🇵 [ja](../../../ja/docs/reference/API_REFERENCE.md) · 🇬🇪 [ka](../../../ka/docs/reference/API_REFERENCE.md) · 🇰🇭 [km](../../../km/docs/reference/API_REFERENCE.md) · 🇮🇳 [kn](../../../kn/docs/reference/API_REFERENCE.md) · 🇰🇷 [ko](../../../ko/docs/reference/API_REFERENCE.md) · 🇱🇹 [lt](../../../lt/docs/reference/API_REFERENCE.md) · 🇱🇻 [lv](../../../lv/docs/reference/API_REFERENCE.md) · 🇮🇳 [ml](../../../ml/docs/reference/API_REFERENCE.md) · 🇲🇾 [ms](../../../ms/docs/reference/API_REFERENCE.md) · 🇲🇹 [mt](../../../mt/docs/reference/API_REFERENCE.md) · 🇲🇲 [my](../../../my/docs/reference/API_REFERENCE.md) · 🇳🇵 [ne](../../../ne/docs/reference/API_REFERENCE.md) · 🇳🇱 [nl](../../../nl/docs/reference/API_REFERENCE.md) · 🇳🇴 [no](../../../no/docs/reference/API_REFERENCE.md) · 🇮🇳 [or](../../../or/docs/reference/API_REFERENCE.md) · 🇮🇳 [pa](../../../pa/docs/reference/API_REFERENCE.md) · 🇵🇭 [phi](../../../phi/docs/reference/API_REFERENCE.md) · 🇵🇱 [pl](../../../pl/docs/reference/API_REFERENCE.md) · 🇵🇹 [pt](../../../pt/docs/reference/API_REFERENCE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/API_REFERENCE.md) · 🇷🇴 [ro](../../../ro/docs/reference/API_REFERENCE.md) · 🇷🇺 [ru](../../../ru/docs/reference/API_REFERENCE.md) · 🇱🇰 [si](../../../si/docs/reference/API_REFERENCE.md) · 🇸🇰 [sk](../../../sk/docs/reference/API_REFERENCE.md) · 🇸🇮 [sl](../../../sl/docs/reference/API_REFERENCE.md) · 🇷🇸 [sr](../../../sr/docs/reference/API_REFERENCE.md) · 🇸🇪 [sv](../../../sv/docs/reference/API_REFERENCE.md) · 🇰🇪 [sw](../../../sw/docs/reference/API_REFERENCE.md) · 🇮🇳 [ta](../../../ta/docs/reference/API_REFERENCE.md) · 🇮🇳 [te](../../../te/docs/reference/API_REFERENCE.md) · 🇹🇭 [th](../../../th/docs/reference/API_REFERENCE.md) · 🇹🇷 [tr](../../../tr/docs/reference/API_REFERENCE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/reference/API_REFERENCE.md) · 🇵🇰 [ur](../../../ur/docs/reference/API_REFERENCE.md) · 🇺🇿 [uz](../../../uz/docs/reference/API_REFERENCE.md) · 🇻🇳 [vi](../../../vi/docs/reference/API_REFERENCE.md) · 🇳🇬 [yo](../../../yo/docs/reference/API_REFERENCE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/reference/API_REFERENCE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/reference/API_REFERENCE.md) --- 🌐 **भाषा:** 🇺🇸 [English](./API_REFERENCE.md) | 🇪🇹 [አማርኛ](../i18n/am/docs/reference/API_REFERENCE.md) | 🇸🇦 [العربية](../i18n/ar/docs/reference/API_REFERENCE.md) | 🇦🇿 [Azərbaycan dili](../i18n/az/docs/reference/API_REFERENCE.md) | 🇧🇬 [Български](../i18n/bg/docs/reference/API_REFERENCE.md) | 🇧🇩 [বাংলা](../i18n/bn/docs/reference/API_REFERENCE.md) | 🇧🇦 [Bosanski](../i18n/bs/docs/reference/API_REFERENCE.md) | 🇨🇿 [Čeština](../i18n/cs/docs/reference/API_REFERENCE.md) | 🇩🇰 [Dansk](../i18n/da/docs/reference/API_REFERENCE.md) | 🇩🇪 [Deutsch](../i18n/de/docs/reference/API_REFERENCE.md) | 🇬🇷 [Ελληνικά](../i18n/el/docs/reference/API_REFERENCE.md) | 🇪🇸 [Español](../i18n/es/docs/reference/API_REFERENCE.md) | 🇪🇪 [Eesti](../i18n/et/docs/reference/API_REFERENCE.md) | 🇮🇷 [فارسی](../i18n/fa/docs/reference/API_REFERENCE.md) | 🇫🇮 [Suomi](../i18n/fi/docs/reference/API_REFERENCE.md) | 🇫🇷 [Français](../i18n/fr/docs/reference/API_REFERENCE.md) | 🇮🇪 [Gaeilge](../i18n/ga/docs/reference/API_REFERENCE.md) | 🇮🇳 [ગુજરાતી](../i18n/gu/docs/reference/API_REFERENCE.md) | 🇳🇬 [Hausa](../i18n/ha/docs/reference/API_REFERENCE.md) | 🇮🇱 [עברית](../i18n/he/docs/reference/API_REFERENCE.md) | 🇮🇳 [हिन्दी](../i18n/hi/docs/reference/API_REFERENCE.md) | 🇭🇷 [Hrvatski](../i18n/hr/docs/reference/API_REFERENCE.md) | 🇭🇺 [Magyar](../i18n/hu/docs/reference/API_REFERENCE.md) | 🇦🇲 [Հայերեն](../i18n/hy/docs/reference/API_REFERENCE.md) | 🇮🇩 [Bahasa Indonesia](../i18n/id/docs/reference/API_REFERENCE.md) | 🇳🇬 [Igbo](../i18n/ig/docs/reference/API_REFERENCE.md) | 🇮🇹 [Italiano](../i18n/it/docs/reference/API_REFERENCE.md) | 🇯🇵 [日本語](../i18n/ja/docs/reference/API_REFERENCE.md) | 🇬🇪 [ქართული](../i18n/ka/docs/reference/API_REFERENCE.md) | 🇰🇭 [ខ្មែរ](../i18n/km/docs/reference/API_REFERENCE.md) | 🇮🇳 [ಕನ್ನಡ](../i18n/kn/docs/reference/API_REFERENCE.md) | 🇰🇷 [한국어](../i18n/ko/docs/reference/API_REFERENCE.md) | 🇱🇹 [Lietuvių](../i18n/lt/docs/reference/API_REFERENCE.md) | 🇱🇻 [Latviešu](../i18n/lv/docs/reference/API_REFERENCE.md) | 🇮🇳 [മലയാളം](../i18n/ml/docs/reference/API_REFERENCE.md) | 🇮🇳 [मराठी](../i18n/mr/docs/reference/API_REFERENCE.md) | 🇲🇾 [Bahasa Melayu](../i18n/ms/docs/reference/API_REFERENCE.md) | 🇲🇹 [Malti](../i18n/mt/docs/reference/API_REFERENCE.md) | 🇲🇲 [မြန်မာ](../i18n/my/docs/reference/API_REFERENCE.md) | 🇳🇵 [नेपाली](../i18n/ne/docs/reference/API_REFERENCE.md) | 🇳🇱 [Nederlands](../i18n/nl/docs/reference/API_REFERENCE.md) | 🇳🇴 [Norsk](../i18n/no/docs/reference/API_REFERENCE.md) | 🇮🇳 [ଓଡ଼ିଆ](../i18n/or/docs/reference/API_REFERENCE.md) | 🇮🇳 [ਪੰਜਾਬੀ](../i18n/pa/docs/reference/API_REFERENCE.md) | 🇵🇭 [Filipino](../i18n/phi/docs/reference/API_REFERENCE.md) | 🇵🇱 [Polski](../i18n/pl/docs/reference/API_REFERENCE.md) | 🇵🇹 [Português (Portugal)](../i18n/pt/docs/reference/API_REFERENCE.md) | 🇧🇷 [Português (Brasil)](../i18n/pt-BR/docs/reference/API_REFERENCE.md) | 🇷🇴 [Română](../i18n/ro/docs/reference/API_REFERENCE.md) | 🇷🇺 [Русский](../i18n/ru/docs/reference/API_REFERENCE.md) | 🇱🇰 [සිංහල](../i18n/si/docs/reference/API_REFERENCE.md) | 🇸🇰 [Slovenčina](../i18n/sk/docs/reference/API_REFERENCE.md) | 🇸🇮 [Slovenščina](../i18n/sl/docs/reference/API_REFERENCE.md) | 🇷🇸 [Српски](../i18n/sr/docs/reference/API_REFERENCE.md) | 🇸🇪 [Svenska](../i18n/sv/docs/reference/API_REFERENCE.md) | 🇰🇪 [Kiswahili](../i18n/sw/docs/reference/API_REFERENCE.md) | 🇮🇳 [தமிழ்](../i18n/ta/docs/reference/API_REFERENCE.md) | 🇮🇳 [తెలుగు](../i18n/te/docs/reference/API_REFERENCE.md) | 🇹🇭 [ไทย](../i18n/th/docs/reference/API_REFERENCE.md) | 🇹🇷 [Türkçe](../i18n/tr/docs/reference/API_REFERENCE.md) | 🇺🇦 [Українська](../i18n/uk-UA/docs/reference/API_REFERENCE.md) | 🇵🇰 [اردو](../i18n/ur/docs/reference/API_REFERENCE.md) | 🇺🇿 [Oʻzbekcha](../i18n/uz/docs/reference/API_REFERENCE.md) | 🇻🇳 [Tiếng Việt](../i18n/vi/docs/reference/API_REFERENCE.md) | 🇳🇬 [Yorùbá](../i18n/yo/docs/reference/API_REFERENCE.md) | 🇨🇳 [中文 (简体)](../i18n/zh-CN/docs/reference/API_REFERENCE.md) | 🇹🇼 [中文 (繁體)](../i18n/zh-TW/docs/reference/API_REFERENCE.md) OmniRoute API साठी मुख्य संदर्भ. यात सार्वजनिक `/v1` पृष्ठभाग आणि सर्वाधिक वापरले जाणारे व्यवस्थापन एंडपॉइंट्स समाविष्ट आहेत; मशीनद्वारे वाचता येणारे [`docs/openapi.yaml`](../openapi.yaml) आणि `src/app/api/` अंतर्गत असलेले रूट ट्री हे सर्वसमावेशक स्रोत आहेत. OpenAI-सुसंगत प्रोटोकॉल आणि प्रदाता क्षमता मॅट्रिक्सविषयी केंद्रित माहितीसाठी, [`OPENAI_COMPATIBILITY.md`](./OPENAI_COMPATIBILITY.md) पहा. --- ## अनुक्रमणिका - [चॅट पूर्णता](#chat-completions) - [विशेष व्यवस्थापित सत्र लीज](#exclusive-managed-session-leases) - [एम्बेडिंग्ज](#embeddings) - [प्रतिमा निर्मिती](#image-generation) - [दस्तऐवज OCR](#document-ocr) - [मॉडेल्सची सूची](#list-models) - [प्रदाता प्लगइन मॅनिफेस्ट](#provider-plugin-manifest) - [सुसंगतता एंडपॉइंट्स](#compatibility-endpoints) - [फाइल्स API](#files-api) - [बॅचेस API](#batches-api) - [शोध API](#search-api) - [WebSocket स्ट्रीमिंग](#websocket-streaming) - [कोटा आणि समस्या अहवाल](#quotas--issues-reporting) - [सिमॅंटिक कॅशे](#semantic-cache) - [डॅशबोर्ड आणि व्यवस्थापन](#dashboard--management) - [कॉम्बो व्यवस्थापन](#combo-management) - [वेबहुक्स](#webhooks) - [नोंदणीकृत कीज (स्वयं-व्यवस्थापन)](#registered-keys-auto-management) - [एजंट्स प्रोटोकॉल](#agents-protocol) - [व्यवस्थापन प्रॉक्सी](#management-proxies) - [लवचिकता (विस्तारित)](#resilience-extended) - [कौशल्ये](#skills) - [मेमरी](#memory) - [MCP सर्व्हर](#mcp-server) - [A2A सर्व्हर](#a2a-server) - [क्लाउड, मूल्यमापन आणि आकलन](#cloud-evals--assess) - [विनंती प्रक्रिया](#request-processing) - [प्रमाणीकरण](#authentication) --- ## चॅट पूर्णता ```bash POST /v1/chat/completions Authorization: Bearer your-api-key Content-Type: application/json { "model": "cc/claude-opus-4-6", "messages": [ {"role": "user", "content": "Write a function to..."} ], "stream": true } ``` ### सानुकूल हेडर्स | हेडर | दिशा | वर्णन | | ------------------------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `X-OmniRoute-No-Cache` | विनंती | कॅशे टाळण्यासाठी `true` वर सेट करा | | `x-omniroute-no-memory` | विनंती | या विनंतीसाठी मेमरी + कौशल्य अंतःक्षेप वगळण्यासाठी `true` वर सेट करा (नो-कॅशेप्रमाणे; प्रत्येक कॉलसाठीचा टोकन/खर्च ओव्हरहेड टाळते) | | `X-OmniRoute-Progress` | विनंती | प्रगती इव्हेंट्ससाठी `true` वर सेट करा | | `X-Session-Id` | विनंती | बाह्य सत्र संलग्नतेसाठी स्टिकी सत्र की | | `x_session_id` | विनंती | अंडरस्कोर प्रकारही स्वीकारला जातो (थेट HTTP) | | `X-OmniRoute-Session-Id` | विनंती | कॉलरने दिलेला सत्र/संभाषण टॅग (मेमरीलाही पुरवला जातो). उपस्थित असल्यास, प्रत्येक सत्राच्या खर्चाच्या श्रेयांकनासाठी `call_logs.session_tag` मध्ये जसाच्या तसा कायम ठेवला जातो (#8249) — अनुपस्थित असल्यास कधीही तयार केला जात नाही | | `Idempotency-Key` | विनंती | डीडुप्लिकेशन की (5 सेकंदांची विंडो) | | `X-Request-Id` | विनंती | पर्यायी डीडुप्लिकेशन की | | `X-OmniRoute-Cache` | प्रतिसाद | `HIT` किंवा `MISS` (नॉन-स्ट्रीमिंग) | | `X-OmniRoute-Idempotent` | प्रतिसाद | डीडुप्लिकेट केले असल्यास `true` | | `X-OmniRoute-Progress` | प्रतिसाद | प्रगती ट्रॅकिंग सुरू असल्यास `enabled` | | `X-OmniRoute-Session-Id` | प्रतिसाद | OmniRoute द्वारे वापरलेला प्रभावी सत्र ID | | `X-OmniRoute-Request-Id` | प्रतिसाद | विनंती परस्परसंबंध ID (माहित असल्यास) | | `X-OmniRoute-Version` | प्रतिसाद | OmniRoute बिल्ड आवृत्ती (नेहमी उपस्थित) | | `X-OmniRoute-Cost-Saved` | प्रतिसाद | HIT मुळे कॅशेने वाचवलेली USD रक्कम (फक्त कॅशे हिट्ससाठी) | | `X-OmniRoute-Decision` | प्रतिसाद | राउटिंग ट्रेस: `strategy=; provider=; latency_ms=` (`` ही कॉम्बो रणनीती असते किंवा नॉन-कॉम्बो विनंतीसाठी `single`) — पूर्णता प्रतिसादांमध्ये नेहमी उपस्थित | > Nginx टीप: तुम्ही अंडरस्कोर हेडर्सवर अवलंबून असल्यास (उदाहरणार्थ `x_session_id`), `underscores_in_headers on;` सक्षम करा. > **खर्च टेलिमेट्री हेडर्स:** नॉन-स्ट्रीमिंग यशस्वी प्रतिसादांमध्ये `X-OmniRoute-*` खर्च-टेलिमेट्री संचही असतो — `X-OmniRoute-Response-Cost` (USD, निश्चित 10 दशांश स्थाने; विनामूल्य/किंमत नसलेल्यांसाठी `0.0000000000`), `X-OmniRoute-Tokens-In` / `X-OmniRoute-Tokens-Out`, `X-OmniRoute-Model`, `X-OmniRoute-Provider`, `X-OmniRoute-Latency-Ms`, `X-OmniRoute-Cache-Hit`, आणि `X-OmniRoute-Fallback-Attempts` (फक्त > 0 असताना), तसेच `X-OmniRoute-Request-Id` आणि `X-OmniRoute-Version`. हे चॅट पूर्णता, `/v1/responses`, `/v1/messages`, **आणि मीडिया एंडपॉइंट्सद्वारेही** उत्सर्जित केले जातात — `/v1/embeddings`, `/v1/images/generations`, `/v1/audio/speech`, `/v1/audio/transcriptions`, `/v1/rerank`, `/v1/videos/generations`, `/v1/music/generations`, आणि `/v1/moderations` (खर्च नेहमी `0`). किंमत उपलब्ध असताना मीडिया खर्च प्रत्येक मोडॅलिटीनुसार (प्रति-प्रतिमा, प्रति-सेकंद, प्रति-अक्षर, प्रति शोध-युनिट) मोजला जातो; अन्यथा तो `0` असतो (फेल-ओपन). > **कॅश-हिट खर्चाचे अर्थशास्त्र:** सिमॅंटिक-कॅश HIT (`X-OmniRoute-Cache-Hit: true`) झाल्यावर कोणताही अपस्ट्रीम कॉल केला जात नाही, त्यामुळे `X-OmniRoute-Response-Cost` हा `0.0000000000` असतो (हिट पुरवण्याचा **वाढीव** खर्च). मूळ/अन्यथा झाला असता असा खर्च `X-OmniRoute-Cost-Saved` मध्ये स्वतंत्रपणे नोंदवला जातो. बिलिंग वापरकर्त्यांनी `X-OmniRoute-Response-Cost` ची बेरीज करावी (हिट्सचा कोणताही खर्च नसतो); कॅश विश्लेषणासाठी `X-OmniRoute-Cost-Saved` एकत्रित करता येतो. ## एक्सक्लुझिव्ह मॅनेज्ड सेशन लीज एक्सक्लुझिव्ह मॅनेज्ड सेशन लीजिंग हा एक ऑप्ट-इन, क्लायंट-न्यूट्रल राउटिंग करार आहे: एक सक्रिय मालक एक पात्र OmniRoute कनेक्शन धारण करतो. याला मॉडेल लीज करण्याची, OAuth ची आवश्यकता नाही, विशिष्ट क्लायंट ओळखण्याची किंवा विशिष्ट प्रदात्याची आवश्यकता नाही. प्रमाणीकरण करणार्या API की मध्ये `lease:exclusive` स्कोप आणि एक स्पष्ट नॉन-एम्प्टी `allowedConnections` सूची असणे आवश्यक आहे. डेटाबेस म्युटेशन बाउंड्री की तयार करताना आणि आंशिक अद्यतनांवर दोन्ही फील्ड एकत्र लागू करते. ```http POST /api/v1/session-leases Authorization: Bearer Content-Type: application/json X-OmniRoute-Lease-Owner: vlo_<43-base64url-characters> {"action":"acquire","model":"glm/glm-4.6"} ``` यशस्वी अधिग्रहण, नूतनीकरण आणि प्रकाशन प्रतिसाद टाइमस्टॅम्प, `state` आणि अचूक सकारात्मक `generation` उघड करतात, परंतु निवडलेले कनेक्शन किंवा क्रेडेन्शियल्स कधीही नाही. नूतनीकरण आणि प्रकाशन JSON बॉडीमध्ये जनरेशन पुरवतात: ```json { "action": "renew", "generation": 1 } ``` ```json { "action": "release", "generation": 1, "reason": "OWNER_EXIT" } ``` एक सक्रिय लीज मालक त्याच्या सध्याच्या बाइंडिंगसाठी गोपनीयता-सुरक्षित डिस्प्ले मेटाडेटाची स्पष्टपणे विनंती करू शकतो: ```json { "action": "status", "generation": 1 } ``` ```json { "state": "ACTIVE", "generation": 1, "acquiredAt": "2026-08-28T12:00:00.000Z", "renewedAt": "2026-08-28T12:00:30.000Z", "expiresAt": "2026-08-28T12:02:30.000Z", "connection": { "displayName": "Primary Codex", "provider": "codex" } } ``` ही ऑप्ट-इन स्टेटस ॲक्शन अपारदर्शक मालक, प्रमाणीकृत व्यवस्थापित API की आणि एका डेटाबेस ट्रान्झॅक्शनमधील अचूक सक्रिय जनरेशनद्वारे संरक्षित आहे. `displayName` हे केवळ ट्रिम केलेले कॉन्फिगर केलेले कनेक्शन नाव आहे; जेव्हा कोणतेही सुरक्षित कॉन्फिगर केलेले नाव अस्तित्वात नसते तेव्हा ते `null` असते. OmniRoute कधीही ईमेल किंवा व्युत्पन्न खाते ओळख बदलत नाही. प्रदाता मूल्य एक गैर-संवेदनशील डिस्प्ले लेबल आहे आणि कधीही व्युत्पन्न सुसंगत-प्रदाता ओळखकर्ता नाही. क्रेडेन्शियल्स, टोकन, कुकीज, रॉ कनेक्शन किंवा API की आयडी, मालक हॅश, फेंसिंग सिक्रेट्स आणि अंतर्गत राउटिंग डेटा वगळले जातात. चुकीची-की, चुकीचा-मालक, जुनी-जनरेशन, गहाळ, कालबाह्य, रिलीज केलेले आणि अवैध केलेले सर्व लुकअप कनेक्शन मेटाडेटाशिवाय समान `409 LEASE_FENCE_STALE` एरर परत करतात. ज्या क्लायंटला क्षमता-प्रतीक्षा प्रतिसाद मिळाला आहे त्याला तपासण्यासाठी कोणतेही सक्रिय बाइंडिंग नाही. जेव्हा राउटिंग सक्रिय लीजचे संक्रमण करते, तेव्हा समान जनरेशन वैध राहते आणि स्थिती अणूने नवीन बाइंडिंग परत करते, जुने कधीही नाही. विद्यमान क्लायंट अपरिवर्तित राहतात कारण अधिग्रहण, नूतनीकरण, प्रकाशन आणि प्रतीक्षा प्रतिसाद त्यांचे मागील आकार टिकवून ठेवतात. हा सर्व्हर करार स्टॉक OpenAI Codex `/status` बदलत नाही. स्टॉक कोडेक्स सध्या त्याचा मॉडेल प्रदाता आणि अंगभूत प्रमाणीकरण/खाते स्थितीची नोंद करतो परंतु मनमानी सानुकूल प्रदाता खाते मेटाडेटा प्रस्तुत करत नाही; नंतरच्या क्लायंट एकत्रीकरणाने ही ॲक्शन कॉल करणे आवश्यक आहे आणि `connection.displayName` कसे प्रदर्शित करावे हे ठरवावे लागेल. प्रत्येक व्यवस्थापित अनुमान विनंती नंतर दोन्ही नियंत्रण हेडर पुरवते: ```http X-OmniRoute-Lease-Owner: vlo_<43-base64url-characters> X-OmniRoute-Lease-Generation: 1 ``` प्रत्येक समर्थित अपस्ट्रीम प्रयत्नापूर्वी अचूक मालक, जनरेशन, सक्रिय कनेक्शन आणि प्रमाणीकृत API की त्वरित संरक्षित केली जातात. दुसर्या कीसह मालक आणि जनरेशन पुन्हा प्ले करणे अयशस्वी होते जरी ती की समान कनेक्शनला परवानगी देत असेल. रॉ मालक टिकवून ठेवले जात नाहीत, लॉग केले जात नाहीत, विनंती स्नॅपशॉटमध्ये ठेवले जात नाहीत किंवा अपस्ट्रीम फॉरवर्ड केले जात नाहीत. तात्पुरती स्पर्धा HTTP `429` `Retry-After` आणि यासह परत करते: ```json { "state": "WAITING_FOR_CAPACITY", "error": { "type": "lease_error", "code": "LEASE_CAPACITY_UNAVAILABLE" }, "reason": "NO_FREE_ELIGIBLE_CONNECTION", "retryAfter": 30 } ``` या प्रतिसादाचा अर्थ असा आहे की सामान्य पात्र संच नॉन-एम्प्टी होता आणि प्रत्येक मोकळा उमेदवार परदेशी सक्रिय लीजद्वारे धारण केला गेला होता. असमर्थित मॉडेल/प्रदाते, धोरण जुळत नाही, कूलडाउन, कोटा, आरोग्य आणि इतर सामान्य पात्रता अपयश त्यांचे विद्यमान OmniRoute प्रतिसाद टिकवून ठेवतात. ### `x-omniroute-compression` कॉम्प्रेशन योजनेची प्रति-विनंती ओव्हरराइड. सर्वोच्च प्राधान्य — राउटिंग-कॉम्बो ओव्हरराइड, सक्रिय प्रोफाइल, ऑटो-ट्रिगर आणि पॅनेल डिफॉल्टला हरवते. मूल्ये: | मूल्य | परिणाम | | ------------- | --------------------------------------------------------------------------------------------------- | | `off` | या विनंतीसाठी कॉम्प्रेशन नाही. | | `default` | पॅनेल-व्युत्पन्न डिफॉल्ट प्रोफाइल (सक्रिय प्रोफाइलकडे दुर्लक्ष करते). लॉसलेस इंजिन बंद ठेवले जातात. | | `safe` | केवळ डेडअप आणि व्हाईटस्पेस फोल्डिंग. | | `allow-lossy` | सारांश आणि शैली पुनर्लेखनांसह या विनंतीसाठी ऑपरेटर योजना ठेवा. | | `engine:` | सक्षम असताना एकच इंजिन, उदा. `engine:rtk`. त्या इंजिनसाठी प्रति-विनंती ऑप्ट-इन. | | `` | एक नामांकित कॉम्बो, प्रथम नावाने (केस-असंवेदनशील), नंतर आयडीने जुळवला जातो. | टिपा: - अज्ञात मूल्ये दुर्लक्षित केली जातात (विनंती कधीही नाकारली जात नाही); रिझोल्यूशन सामान्य ऑपरेटर प्राधान्याकडे जाते. - जर अनेक कॉम्बो समान नाव सामायिक करत असतील, तर निश्चित जुळणीसाठी कॉम्बो **आयडी** पास करा. - ज्या कॉम्बोचे नाव `off` किंवा `default` आहे ते नावाने निवडले जाऊ शकत नाही (ते कीवर्ड प्रथम इंटरप्रिट केले जातात); अशा कॉम्बोचा त्याच्या आयडीने संदर्भ घ्या. - मास्टर कॉम्प्रेशन स्विच एक हार्ड गेट आहे: जेव्हा कॉम्प्रेशन जागतिक स्तरावर अक्षम केले जाते, तेव्हा हे हेडर ते सक्षम करू शकत नाही. लागू केलेली योजना प्रतिसाद हेडरमध्ये परत दिली जाते: ``` 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`) आणि ते कधीही एम्बेडिंग्ज किंवा रीरँक पुरवत नाही. मल्टिमोडल समर्थन जाहीर करणारी रजिस्ट्री मॉडेल्स कमाल 32 प्रदाता-निरपेक्ष संरचित आयटमदेखील स्वीकारतात. मीडिया आयटमचे प्रकार `text`, `image`, `audio`, `video`, आणि `document` आहेत. त्यांचा मीडिया `source` एकतर `{"type":"url","url":"https://..."}` किंवा `{"type":"base64","data":"...","media_type":"..."}` असतो. Jina v5 Omni (`jina-ai/jina-embeddings-v5-omni-small`, `jina-ai/jina-embeddings-v5-omni-nano`, आणि फॅमिली उपनाव `jina-ai/jina-embeddings-v5-omni` → omni-small) Jina चे मूळ EmbeddingsV5Request दस्तऐवजदेखील स्वीकारते आणि ते `https://api.jina.ai/v1/embeddings` कडे **कोणताही बदल न करता फॉरवर्ड करते**: ```json { "model": "jina-ai/jina-embeddings-v5-omni-small", "task": "retrieval.query", "normalized": true, "input": [ { "text": "a red bicycle" }, { "image": "https://example.com/bike.png" }, { "content": [{ "text": "caption" }, { "image": "data:image/png;base64,..." }] } ] } ``` मूळ `{ image | audio | video | pdf }` मूल्ये सार्वजनिक HTTPS URL, `data:` URI किंवा रॉ base64 असू शकतात. OmniRoute त्या ऑब्जेक्ट्सना स्ट्रिंगमध्ये रूपांतरित करत नाही किंवा मूळ इमेज URL फेच करत नाही — Jina सार्वजनिक मीडिया स्वतः प्राप्त करते. अतिरिक्त Jina फील्ड्स (`task`, `normalized`, `truncate`, `embedding_type`) फॉरवर्ड केली जातात. केवळ मजकूर समर्थित करणारे Jina SKU अजूनही मजकूर नसलेले दस्तऐवज नाकारतात. सुरक्षा आणि ट्रान्सपोर्ट मर्यादा: - रिमोट मीडिया URL सार्वजनिक HTTPS असणे आवश्यक आहे. कॅनॉनिकल `{type,source:url}` आयटम सर्व्हरच्या बाजूने फेच केले जातात (रीडायरेक्टचे पुनर्वैधीकरण, टाइमआउट, आकारमर्यादा, सार्वजनिक DNS, कनेक्शन पिनिंग) आणि प्रदात्याला कॉल करण्यापूर्वी इनलाइन केले जातात. Jina-मूळ `{image:"https://..."}` आयटम त्याच सार्वजनिक-HTTPS तपासणीनंतर जसेच्या तसे फॉरवर्ड केले जातात; Jina URL फेच करते. - इनलाइन base64 मीडिया प्रत्येक आयटमसाठी डीकोड केल्यानंतर 8 MiB आणि संपूर्ण विनंतीमध्ये डीकोड केल्यानंतर एकूण 16 MiB पर्यंत मर्यादित आहे. प्रदात्यानुसार रूपांतरण (कॅनॉनिकल आयटम कधीही बदल न करता फॉरवर्ड केले जात नाहीत): - Jina मल्टिमोडल मॉडेल्स: प्रत्येक उच्च-स्तरीय आयटम हा एक मोडॅलिटी-की असलेला ऑब्जेक्ट बनतो (`text` / `image` / `audio` / `video` / `pdf`), ज्यामध्ये इनलाइन मीडियासाठी डेटा URI वापरले जातात; प्रत्येक उच्च-स्तरीय आयटमसाठी एक व्हेक्टर. - Gemini Embedding 2 फॅमिली: एक उच्च-स्तरीय ॲरे हे `content.parts` (`text` किंवा `inline_data`) असलेले एकच मूळ `models/{model}:embedContent` विनंतीरूप बनते. - llama.cpp (`llama-cpp/`, स्थानिक सर्व्हरने लोड केलेले कोणतेही मॉडेल): कॅनॉनिकल `text` आयटम साध्या स्ट्रिंग्जमध्ये रूपांतरित होतात आणि `image` / `audio` / `video` हे प्रत्येकी एका `{"content": [part]}` ऑब्जेक्टमध्ये रूपांतरित होतात; यासाठी llama-server चे चॅट कंटेंट पार्ट्स (`image_url`, `input_audio` सह स्वरूप `wav` / `mp3` / `flac`, `input_video`) आणि इनलाइन डेटा वापरला जातो; प्रत्येक उच्च-स्तरीय आयटमसाठी एक व्हेक्टर. सर्व्हर `--embedding --mmproj …` सह चालणे आवश्यक आहे; प्रोजेक्टरशिवाय तो मीडिया स्वतःच नाकारतो. `document` समर्थित नाही. - स्पष्ट मोडॅलिटी मेटाडेटा नसलेली अज्ञात/डायनॅमिक मॉडेल्स HTTP 400 सह संरचित इनपुट नाकारतात. ```json { "model": "jina-ai/jina-embeddings-v5-omni-small", "input": [ { "type": "text", "text": "A red bicycle" }, { "type": "image", "source": { "type": "url", "url": "https://example.com/bicycle.png" } } ], "dimensions": 512, "encoding_format": "float" } ``` असमर्थित मॉडेल/मोडॅलिटी संयोजनांमध्ये आयटमचे जबरदस्तीने रूपांतरण करण्याऐवजी HTTP 400 परत केले जाते. जुन्या स्ट्रिंग/टोकन विनंत्यांमधील इनपुटशी संबंधित नसलेली एक्स्टेन्शन फील्ड्स कोणताही बदल न करता पुढे पाठवली जातात. ```bash # सर्व एम्बेडिंग मॉडेल्सची सूची दाखवा GET /v1/embeddings ``` --- ## प्रतिमा निर्मिती ```bash POST /v1/images/generations Authorization: Bearer your-api-key Content-Type: application/json { "model": "openai/gpt-image-2", "prompt": "पर्वतांवरील एक सुंदर सूर्यास्त", "size": "1024x1024" } ``` उपलब्ध प्रदात्यांमध्ये OpenAI (GPT Image 2), xAI (Grok Image), Together AI (FLUX), Fireworks AI, Nebius (FLUX), Hyperbolic, NanoBanana, **OpenRouter**, **ZenMux**, SD WebUI (स्थानिक), ComfyUI (स्थानिक) यांचा समावेश आहे. `n`, `data[]` मध्ये `n` प्रतिमा परत करते. ज्या प्रदात्यांची अपस्ट्रीम API प्रत्येक कॉलसाठी एक प्रतिमा परत करते (Black Forest Labs, Stability AI, Leonardo, Ideogram, Haiper, Hyperbolic, Magnific/Freepik, NVIDIA NIM, Cloudflare Workers AI), त्यांच्यासाठी `n` स्वतंत्र अपस्ट्रीम कॉल केले जातात आणि एका वेळी जास्तीत जास्त 4 कॉल सुरू असतात. निश्चित `seed` मध्ये कॉल निर्देशांकानुसार वाढ केली जाते (`seed`, `seed + 1`, …), त्यामुळे प्रतिमा वेगळ्या असतात, परंतु त्यांची पुनरुत्पादकता कायम राहते. `n` ची कमाल मर्यादा 10 आहे. कोणताही कॉल अयशस्वी झाल्यास संपूर्ण विनंती अयशस्वी होते. फॅन-आउट स्वरूपांची सूची `open-sse/handlers/imageGeneration/fanOut.ts` मधील `SINGLE_IMAGE_FANOUT_FORMATS` आहे. ZenMux विद्यमान API-की कनेक्शनचा पुनर्वापर करते आणि `zenmux/` किंवा `zm/` उपसर्ग स्वीकारते: - `zenmux/openai/gpt-image-2`, ZenMux चे OpenAI Images API वापरते. पर्यायांमध्ये `size`, `quality`, `n`, `output_format`, `output_compression`, `background`, आणि `response_format` यांचा समावेश आहे. - `zm/meta/muse-image-1.0` सारखे इतर प्रकाशक ZenMux चे Vertex AI `:predict` एंडपॉइंट वापरतात. `n` चे मॅपिंग `sampleCount` शी, `aspect_ratio` चे `aspectRatio` शी, आणि `image_size` (`1K`, `2K`, `4K`) चे `sampleImageSize` शी केले जाते. पिक्सेलमधील `size` केवळ आस्पेक्ट रेशो पुरवते, हमीशीर पिक्सेल परिमाणे नाही. समर्थित गुणोत्तरे, रिझोल्यूशन आणि संख्या मॉडेलनुसार बदलतात. - `zm/inclusionai/ming-image-0.1-design` स्वतःची परिमाणे निवडते. `size`, `aspect_ratio`, आणि `image_size` वगळा; स्पष्टपणे दिलेल्या मूल्यांमुळे HTTP 400 परत येते. `output_format` वापरून PNG, JPEG, आणि WebP ची विनंती केली जाऊ शकते. हे एकत्रीकरण मजकुरावरून प्रतिमा निर्मितीला समर्थन देते, संदर्भ-प्रतिमा संपादनाला नाही. Vertex आउटपुट `data[].b64_json` मध्ये सामान्यीकृत केले जाते; `response_format: "url"` अपस्ट्रीम HTTPS URL परत करते किंवा केवळ प्रतिमा बाइट्स उपलब्ध असल्यास base64 डेटा URL परत करते. रिक्त/फिल्टर केलेले आउटपुट रिक्त यशस्वी प्रतिसादाऐवजी त्रुटी परत करतात. मॉडेलचा प्रवेश ZenMux खात्यावर अवलंबून असतो. [ZenMux चे Vertex API](https://docs.zenmux.ai/api/vertexai/generate-images) आणि [OpenAI Images API](https://docs.zenmux.ai/api/openai/generate-an-image) पहा. ```bash # सर्व प्रतिमा मॉडेल्सची सूची दाखवा GET /v1/images/generations ``` --- ## दस्तऐवज OCR ```bash POST /v1/ocr Authorization: Bearer your-api-key Content-Type: application/json { "model": "mistral/mistral-ocr-latest", "document": { "type": "document_url", "document_url": "https://example.com/invoice.pdf" } } ``` `model`, `provider/model` उपसर्गाद्वारे OCR प्रदाता निवडते; केवळ मॉडेल आयडी (उदा. `mistral-ocr-latest`) दिल्यास तो त्याच्या नोंदणीकृत प्रदात्याशी जुळवला जातो आणि `model` वगळल्यास डीफॉल्ट म्हणून Mistral (`mistral-ocr-latest`) वापरले जाते. नोंदणीकृत प्रदाते (`open-sse/config/ocrRegistry.ts`): | प्रदाता आयडी | मॉडेल आयडी | `model` मूल्य | टिपा | | ----------------------------- | -------------------- | -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | | `mistral` | `mistral-ocr-latest` | `mistral/mistral-ocr-latest` (किंवा केवळ `mistral-ocr-latest`) | समकालिक — एकाच अपस्ट्रीम कॉलमधून प्रतिसाद थेट परत केला जातो. | | `azure-document-intelligence` | `prebuilt-read` | `azure-document-intelligence/prebuilt-read` | असमकालिक अपस्ट्रीम (`analyze` + पोलिंग) — खाली पहा. | | `vertex-deepseek-ocr` | `deepseek-ocr-maas` | `vertex-deepseek-ocr/deepseek-ocr-maas` | समकालिक, Vertex AI च्या `openapi/chat/completions` भागीदार एंडपॉइंटद्वारे — प्रमाणीकरण/URL साठी खाली पहा. | तिन्ही प्रदाते समान Mistral-स्वरूपाच्या बॉडीमध्ये प्रतिसाद देतात: ```json { "pages": [{ "index": 0, "markdown": "# काढलेला मजकूर..." }], "model": "mistral-ocr-latest", "usage_info": { "pages_processed": 1 } } ``` ### Azure Document Intelligence पोलिंग प्रवाह Azure Document Intelligence चे `analyze` API असमकालिक आहे: प्रारंभिक विनंती बॉडीऐवजी `Operation-Location` हेडर परत करते आणि निकालासाठी पोलिंग करावे लागते. हँडलर (`open-sse/handlers/ocr.ts`) त्या URL वर दर सेकंदाला, जास्तीत जास्त 30 प्रयत्नांपर्यंत पोलिंग करतो; `ok` नसलेला पोल प्रतिसाद किंवा `"failed"` स्थिती आल्यास तो त्वरित अयशस्वी होतो (पोलिंग सुरू ठेवत नाही) आणि प्रयत्नांची मर्यादा संपल्यानंतरही प्रक्रिया सुरू असल्यास `504` परत करतो. कॉलरला परत करण्यापूर्वी अंतिम Azure प्रतिसाद Mistral द्वारे वापरल्या जाणाऱ्या त्याच `pages`/`markdown` स्वरूपात सामान्यीकृत केला जातो, त्यामुळे क्लायंट कोडला प्रदात्यासाठी वेगळे प्रकरण हाताळण्याची आवश्यकता नसते. ### Vertex AI DeepSeek OCR प्रमाणीकरण आणि एंडपॉइंट निराकरण `vertex-deepseek-ocr`, चॅट/प्रतिमा ट्रॅफिकसाठी OmniRoute आधीपासून समर्थित करत असलेले तेच Vertex AI प्रमाणीकरण पुन्हा वापरते (`open-sse/executors/vertex.ts`): कनेक्शनची API की ही एकतर Service Account JSON क्रेडेन्शियल असते (JWT-bearer प्रवाहाद्वारे अल्पकालीन OAuth ॲक्सेस टोकनसाठी अदलाबदल केलेली) किंवा आधीच तयार केलेले OAuth ॲक्सेस टोकन असते, जे जसेच्या तसे वापरले जाते. अपस्ट्रीम एंडपॉइंट URL हा Vertex चा सर्वसाधारण `openapi/chat/completions` भागीदार एंडपॉइंट आहे, जो कनेक्शनच्या प्रकल्प आणि प्रदेशावरून तयार केला जातो — स्पष्टपणे दिलेले `providerSpecificData.project`/`providerSpecificData.region` नेहमी प्राधान्य घेते; अन्यथा प्रकल्प Service Account JSON मधील `project_id` वरून निर्धारित केला जातो आणि प्रदेशासाठी डीफॉल्ट मूल्य `us-central1` असते. दोन्ही निराकरणे `open-sse/handlers/ocr.ts` (`resolveVertexOcrAccessToken`, `resolveVertexOcrBaseUrl`) मध्ये होतात आणि `handleOcr` कडे पाठवण्यापूर्वी `src/app/api/v1/ocr/route.ts` द्वारे वापरली जातात. --- ## मॉडेल्सची सूची ```bash GET /v1/models Authorization: Bearer your-api-key → OpenAI स्वरूपात सर्व चॅट, एम्बेडिंग आणि इमेज मॉडेल्स + कॉम्बोज परत करते ``` ### मॉडेल आयडी उपसर्ग (`?prefix=`) बहुतेक मॉडेल्स **प्रोव्हायडर उपसर्गा**अंतर्गत दर्शविली जातात. तुम्हाला कोणता उपसर्ग मिळेल हे `MODELS_CATALOG_PREFIX_MODE` फीचर फ्लॅगद्वारे नियंत्रित केले जाते आणि क्वेरी पॅरामीटर वापरून **प्रत्येक विनंतीसाठी** ओव्हरराइड करता येते — इतर सर्वांसाठी सर्व्हर-व्यापी सेटिंग न बदलता स्वच्छ सूची हवी असलेल्या क्लायंटसाठी हे उपयुक्त आहे: ```bash GET /v1/models?prefix=alias # प्रत्येक मॉडेलसाठी एक आयडी — लघु उपनाव उपसर्ग GET /v1/models?prefix=dual # दोन्ही स्वरूपे (सर्व्हर डीफॉल्ट) GET /v1/models?prefix=canonical # केवळ संपूर्ण प्रोव्हायडर-आयडी उपसर्ग ``` | मोड | निर्माण होणारे | टिप्पण्या | | ----------- | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `dual` | `cc/claude-sonnet-4-6` **आणि** `claude/claude-sonnet-4-6` | **डीफॉल्ट.** दोन्ही आयडी एकाच मॉडेलकडे रूट होतात; दोन्हीपैकी कोणतेही स्वरूप हार्डकोड केलेली क्लायंट कॉन्फिगरेशन्स कार्यरत राहावीत म्हणून हे ठेवले आहे. यामुळे कॅटलॉगचा आकार साधारण दुप्पट होतो. | | `alias` | `cc/claude-sonnet-4-6` | प्रत्येक मॉडेलसाठी एक नोंद. स्वतंत्र उपनाव नसलेले प्रोव्हायडर्स तरीही त्यांची नोंद निर्माण करतात, त्यामुळे काहीही गमावले जात नाही. | | `canonical` | `claude/claude-sonnet-4-6` | संपूर्ण प्रोव्हायडर-आयडी उपसर्गाअंतर्गत प्रत्येक मॉडेलसाठी एक नोंद. स्वतंत्र उपनाव नसलेले प्रोव्हायडर्स (उदा. `antigravity/…`, `agy/…`) येथेही त्यांचा एकमेव आयडी निर्माण करतात, त्यामुळे काहीही गमावले जात नाही. | `dual`-मोड मिरर क्वेरी पॅरामीटरशिवायही ओळखता येतो: त्यात प्राथमिक आयडीकडे निर्देश करणारे `parent` फील्ड असते. मॉडेल पिकर रेंडर करणाऱ्या क्लायंट्सनी `?prefix=alias` ची विनंती करावी — [OmniCopilot VS Code एक्स्टेंशन](../guides/VSCODE-COPILOT.md) हेच करते. ### स्वतंत्रपणे लपवलेली चॅट मॉडेल्स प्रोव्हायडर पेजवर **Hidden** म्हणून चिन्हांकित केलेले मॉडेल कॅटलॉगमधून वगळले जाते आणि ते स्पष्टपणे मागितल्यास HTTP `404` / `model_not_found` सह नाकारले जाते. ही तपासणी निराकरण केलेला प्रोव्हायडर आणि मॉडेल वापरते, ज्यामध्ये प्रोव्हायडर उपनावे, सुसंगत-प्रोव्हायडर नोड उपसर्ग आणि कनेक्शन डीफॉल्ट्स यांचा समावेश होतो. कॉम्बो लपवलेली लक्ष्ये वगळतो आणि दृश्यमान सहोदर वापरू शकतो; अंमलात आणता येणारे कोणतेही लक्ष्य शिल्लक नसल्यास तो तोच त्रुटी कोड परत करतो. मॉडेल पुन्हा दृश्यमान केल्याचा परिणाम पुढील विनंतीपासून लागू होतो. केवळ-इमेज दृश्यमानता ओव्हरराइड्स त्याच आयडीचे चॅट मॉडेल लपवत नाहीत. ही स्वतंत्र मॉडेल सेटिंग [मॉडेल एक्सपोजर अनुमती/नकार सूचींपासून](../routing/MODEL_EXPOSURE_LIST.md) वेगळी आहे; त्या स्पष्ट डिस्पॅच कायम ठेवून कॅटलॉगमधील प्रदर्शन आणि स्वयंचलित-रूटिंग उमेदवार फिल्टर करतात. API-की मॉडेल परवानग्या स्वतंत्रपणे लागू राहतात. डीफॉल्ट कॅटलॉग उपसर्ग मोड `dual` राहतो. ### विचार न करणारे मॉडेल प्रकार विचार करण्यास सक्षम असलेल्या Claude मॉडेल्ससाठी, `/v1/models` असा **विचार न करणारा** प्रकारही दर्शवते, ज्याच्या आयडीला `claude-3-omniroute-no-thinking/` हा उपसर्ग असतो: ``` claude-3-omniroute-no-thinking// ``` हा आयडी निवडल्यास (उदा. नेहमी `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 आणि भविष्यातील साइडकार राउटर्सद्वारे वापरला जाणारा JSON-सुरक्षित प्रोव्हायडर प्लगइन मॅनिफेस्ट परत करतो. प्रतिसाद TypeScript प्रोव्हायडर रजिस्ट्रीमधून तयार केला जातो आणि त्यातून हेतुपुरस्सर OAuth क्लायंट सिक्रेट्स, रनटाइम एन्व्हायर्नमेंट रिझोल्यूशन, एक्झिक्युटर फंक्शन्स, रिक्वेस्ट हेडर्स आणि खाते डेटा वगळला जातो. जेव्हा एखादा साइडकार स्वतंत्र प्रक्रियेत चालतो आणि थेट `open-sse/config/providerPluginManifestRegistry.ts` इम्पोर्ट करू शकत नाही, तेव्हा हा एंडपॉइंट वापरा. --- ## सुसंगतता एंडपॉइंट्स | पद्धत | पथ | स्वरूप | | ----- | ----------------------------------------- | ----------------------------------- | | POST | `/v1/chat/completions` | OpenAI | | POST | `/v1/messages` | Anthropic | | POST | `/v1/responses` | OpenAI Responses | | POST | `/v1/embeddings` | OpenAI | | POST | `/v1/images/generations` | OpenAI Images | | POST | `/v1/images/edits` | OpenAI Images (संपादन/इनपेंट) | | POST | `/v1/videos/generations` | OpenAI-शैलीतील व्हिडिओ निर्मिती | | POST | `/v1/music/generations` | OpenAI-शैलीतील संगीत निर्मिती | | POST | `/v1/audio/transcriptions` | OpenAI Audio (STT) | | POST | `/v1/audio/speech` | OpenAI TTS (ऑडिओ बॉडी परत करते) | | POST | `/v1/rerank` | Cohere/Voyage-शैलीतील पुनर्क्रमांकन | | POST | `/v1/classify` | Jina वर्गीकरण (`api.jina.ai`) | | POST | `/v1/segment` | Jina सेगमेंटर (`segment.jina.ai`) | | POST | `/v1/moderations` | OpenAI Moderations | | GET | `/v1/models` | OpenAI | | POST | `/v1/messages/count_tokens` | Anthropic | | GET | `/v1beta/models` | Gemini | | POST | `/v1beta/models/{...path}` | Gemini generateContent | | POST | `/v1/api/chat` | Ollama | | GET | `/api/v1/vscode/{token}/` | OpenAI कॅटलॉग उपनाम | | GET | `/api/v1/vscode/{token}/models` | OpenAI मॉडेल्स उपनाम | | POST | `/api/v1/vscode/{token}/chat/completions` | OpenAI टोकनयुक्त उपनाम | | POST | `/api/v1/vscode/{token}/responses` | OpenAI Responses टोकनयुक्त उपनाम | | POST | `/api/v1/vscode/{token}/api/chat` | Ollama टोकनयुक्त उपनाम | | GET | `/api/v1/vscode/{token}/api/tags` | Ollama टॅग्ज टोकनयुक्त उपनाम | सर्व POST मार्ग समान संरचना वापरतात: `Bearer your-api-key` + Zod-सत्यापित JSON बॉडी (`v1RerankSchema`, `v1ModerationSchema`, `v1AudioSpeechSchema`, इत्यादी; `src/shared/validation/schemas.ts` पाहा). स्कीमा सत्यापन अयशस्वी झाल्यास 4xx परत केला जातो. जे क्लायंट `Authorization: Bearer ...` जोडू शकत नाहीत, त्यांच्यासाठी OmniRoute क्वेरी-स्ट्रिंग सुसंगततेद्वारे (`?token=...`, `?apiKey=...`, `?api_key=...`, `?key=...`) किंवा खाली दस्तऐवजीकरण केलेल्या समर्पित `/api/v1/vscode/{token}/...` एंडपॉइंट्सद्वारे URL मधील API की देखील स्वीकारते. ```bash # पुनर्क्रमांकन (क्लाउड रजिस्ट्री प्रदाता किंवा "/" स्वरूपातील OpenAI-सुसंगत प्रदाता नोड) POST /v1/rerank { "model": "jina-ai/jina-reranker-v3.5", "query": "...", "documents": ["..."] } # Jina वर्गीकरण (Foundation API क्रेडेन्शियल्स) POST /v1/classify { "model": "jina-embeddings-v5-text-small", "input": ["..."], "labels": ["a", "b"] } # Jina सेगमेंटर POST /v1/segment { "content": "...", "return_chunks": true } # Jina शोध (s.jina.ai; प्रदाता उपनाम: jina-search, jina-ai, jina) POST /v1/search { "query": "...", "provider": "jina-search" } # मॉडरेशन्स POST /v1/moderations { "model": "omni-moderation-latest", "input": "..." } # TTS — audio/mpeg (किंवा विनंती केलेल्या स्वरूपाची) बॉडी परत करते POST /v1/audio/speech { "model": "openai/tts-1", "input": "Hello", "voice": "alloy" } # Soniox TTS साठी भाषा आणि आवाज आवश्यक आहेत: `language` चे डीफॉल्ट मूल्य "en" आहे; आवाज # दिला नसल्यास किंवा OpenAI च्या मानक आवाजाचे नाव (alloy, nova, …) दिल्यास ते "Adrian" होते POST /v1/audio/speech { "model": "soniox/tts-rt-v1", "input": "Xin chào", "voice": "Adrian", "language": "vi" } # प्रतिमा संपादन (multipart) POST /v1/images/edits -F image=@input.png -F prompt="..." -F mask=@mask.png # व्हिडिओ / संगीत निर्मिती (प्रदात्याचा उपसर्ग असलेला मॉडेल आयडी) POST /v1/videos/generations { "model": "runway/gen-3", "prompt": "..." } POST /v1/music/generations { "model": "kie/suno-v4.0", "prompt": "..." } ``` > **पुनर्क्रमांकन प्रदाता नोड्स:** `POST /v1/rerank` विनंत्या `/` म्हणून संबोधित केलेल्या OpenAI-सुसंगत प्रदाता नोड्सकडेही > (oMLX, vLLM, Infinity, गेटवेमागील TEI, …) मार्गित करते. लूपबॅक > नोड्स (`localhost`, `127.0.0.1`, `172.16.0.0/12`) नेहमीच पात्र असतात, तसेच ऑपरेटरने > `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS` मध्ये सूचीबद्ध केलेली होस्टनावेही पात्र असतात (उदा. `http://reranker:8080/v1` > सारखे Docker/Compose सेवा नाव; यांना थेट कॉल केला जातो, `HTTP(S)_PROXY` किंवा कनेक्शनच्या > पिन केलेल्या प्रॉक्सीद्वारे कधीही नाही). इतर कोणत्याही > होस्टवरील नोड्स — LAN मशीन किंवा Tailscale पीअर — केवळ ऑपरेटरने > `RERANK_REMOTE_PROVIDER_NODES` फीचर फ्लॅग सक्षम केला असेल **आणि** नोडचा बेस URL प्रदात्याच्या > आउटबाउंड URL धोरणात बसत असेल (`OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` / `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS`) तरच पात्र ठरतात. > मेमरी इंजिनची पुनर्क्रमांकन पायरी या मार्गाला > लूपबॅकवरून कॉल करते, त्यामुळे हाच नियम Memory सेटिंग्जमधील `rerankProviderModel` वर लागू होतो. > > **स्थानिक सर्व्हर संरचना:** नोडला `/v1/rerank` येथे आणि 404 आल्यास `/rerank` > (Infinity, TEI) येथे कॉल केला जातो. अपस्ट्रीम बॉडीमध्ये Cohere/OpenAI स्पेलिंग (`documents`, > `return_documents`) आणि TEI स्पेलिंग (`texts`, `return_text`) दोन्ही असतात आणि अपस्ट्रीम प्रतिसाद > Cohere एन्व्हलपमध्ये सामान्यीकृत केला जातो: TEI चे साधे `[{index, score, text}]`, हलक्या गेटवेजकडून > मिळणारे `{results: [{index, score}]}` आणि Voyage-शैलीतील `{data: [...]}` हे सर्व क्लायंटकडे > `{results: [{index, relevance_score, document?}]}` म्हणून परत येतात, गुणांनुसार क्रमबद्ध केले जातात आणि `top_n` पर्यंत मर्यादित केले जातात. > **प्रोव्हायडर-नोड शोध:** OpenAI-सुसंगत प्रोव्हायडर नोडवरील मॉडेल्स `GET /v1/models` मध्ये > नोड प्रीफिक्सअंतर्गत दिसतात. एंडपॉइंट मेटाडेटा नसलेल्या रकाना (स्थानिक `/v1/models` सूचींसाठी सामान्य) > नोडचा `apiType` वारशाने घेतात, त्यामुळे `embeddings` नोडची मॉडेल्स डीफॉल्टनुसार चॅट प्रकाराची होण्याऐवजी `type: "embedding"` असतात आणि > `rerank` नोडची मॉडेल्स `type: "rerank"` असतात; तरीही सिंक केलेल्या किंवा व्यक्तिचलितपणे जोडलेल्या रकान्यावरील स्पष्ट > `supportedEndpoints` ला प्राधान्य दिले जाते. ### समर्पित प्रोव्हायडर रूट्स ```bash POST /v1/providers/{provider}/chat/completions POST /v1/providers/{provider}/embeddings POST /v1/providers/{provider}/images/generations ``` प्रोव्हायडर प्रीफिक्स नसल्यास तो आपोआप जोडला जातो. न जुळणाऱ्या मॉडेल्ससाठी `400` परत केला जातो. --- ## Files API बॅच इनपुट/आउटपुट आणि फाइल-उद्देश अपलोडसाठी OpenAI-सुसंगत फाइल्स एंडपॉइंट. | पद्धत | पथ | वर्णन | | ------ | ------------------------ | --------------------------------------------------------------------------------------------------------------- | | POST | `/v1/files` | फाइल अपलोड करा (multipart: `file`, `purpose`, `expires_after[anchor]`, `expires_after[seconds]`) — कमाल 512 MiB | | GET | `/v1/files` | प्रमाणीकृत API कीसाठी फाइल्सची सूची मिळवा | | GET | `/v1/files/[id]` | फाइलचा मेटाडेटा मिळवा | | DELETE | `/v1/files/[id]` | फाइल हटवा | | GET | `/v1/files/[id]/content` | मूळ फाइल बॉडी परत स्ट्रीम करा | **प्रमाणीकरण:** Bearer API की — `getApiKeyRequestScope` द्वारे फाइल्स प्रत्येक API कीनुसार मर्यादित केल्या जातात. एखाद्या कीला फक्त स्वतःच्या फाइल्स पाहता, डाउनलोड करता आणि हटवता येतात; की नसलेले डॅशबोर्ड सत्र संपूर्ण इन्स्टन्स वाचू शकते; मालक नसलेली फाइल (अनामिक किंवा डॅशबोर्ड-सत्र अपलोड) प्रत्येक सत्रेतर कॉलरसाठी प्रतिबंधित असते. `GET /v1/files` अनामिक कॉलरला — आणि प्रदान केलेली पण निराकरण न होणारी की असल्यासही — `REQUIRE_API_KEY=false` असतानादेखील प्रत्येक टेनंटच्या फाइल्सची सूची दाखवण्याऐवजी `401` सह नाकारते (GHSA-m3hp-hq9g-fpmv, GHSA-2jm2-mpx8-6523). --- ## 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` | शोध क्वेरी चालवा — body चे प्रमाणीकरण `v1SearchSchema` द्वारे केले जाते, caching/coalescing समर्थित | | GET | `/v1/search/analytics` | प्रत्येक प्रदात्यासाठी hit/latency/cache आकडेवारी | **प्रमाणीकरण:** Bearer API key (`extractApiKey` + `isValidApiKey`). शोध धोरण `enforceApiKeyPolicy` द्वारे लागू केले जाते. --- ## Web Fetch API कॉन्फिगर केलेल्या web-fetch प्रदात्यामार्फत URL मधून सामग्री काढा (Firecrawl, Jina Reader, Tavily Extract, TinyFish Fetch, Nimble Extract). | पद्धत | पथ | वर्णन | | ----- | --------------- | ----------------------------------------------------------------------------- | | POST | `/v1/web/fetch` | URL fetch/scrape करा — body चे प्रमाणीकरण `v1WebFetchSchema` द्वारे केले जाते | **प्रमाणीकरण:** Bearer API key (`extractApiKey` + `isValidApiKey`). धोरण `enforceApiKeyPolicy` द्वारे लागू केले जाते. **कोटा-जागरूक fallback (#8297):** स्पष्ट `provider` दिलेला नसताना, pool मधील (`firecrawl` → `jina-reader` → `tavily-search` → `tinyfish` → `nimble-search`) प्रदाते निश्चित प्राधान्यक्रमाने (fill-first) वापरून पाहिले जातात — rate-limited असलेला पण कॉन्फिगर केलेला प्रदाता विनंती तिथेच थांबवण्याऐवजी वगळला जातो आणि retryable/quota upstream अपयश आल्यास (HTTP 429 नेहमी; Firecrawl/Tavily/TinyFish च्या quota-style free tiers साठी 402/403 — Jina Reader साठी नाही आणि साध्या 400 bad request साठी कधीही नाही) विनंतीच्या वेळी पुढील अद्याप न वापरलेल्या credentialed प्रदात्याकडे प्रक्रिया जाते. pool मधील प्रत्येक प्रदाता संपल्यानंतर, endpoint पूर्वीच्या सामान्य `400` ऐवजी एकच `429` (`Retry-After` header सह) परत करतो. स्पष्ट `provider` मागितला असल्यास, कोणताही **मूक** fallback नसतो — rate-limited किंवा अपयशी स्पष्ट प्रदात्याची स्वतःची त्रुटी दर्शवली जाते (rate-limited असल्यास `429`, अन्यथा upstream status). --- ## WebSocket Streaming ```bash GET /v1/ws?handshake=1 ``` WebSocket upgrade handshake चे प्रमाणीकरण करते आणि wire protocol ची उदाहरण संदेशे (`request`, `cancel`) परत करते. प्रत्यक्ष WS frames हे Next.js route table च्या बाहेर असलेल्या समाविष्ट WS server द्वारे हाताळले जातात. **प्रमाणीकरण:** handshake दरम्यान Bearer API key. ### WebSocket वर Responses API (केवळ codex) ```bash # HTTP API सारखाच host:port (default 20128); connection upgrade करा: wscat -c "ws://localhost:20128/v1/responses?api_key=" # (किंवा: -H "Authorization: Bearer ") # पहिला frame response.create असलाच पाहिजे: { "type": "response.create", "model": "gpt-5.5", "input": [ { "role": "user", "content": "hi" } ] } ``` Responses-API-over-WebSocket proxy **केवळ `codex` शी** (ChatGPT backend) जोडलेला आहे. तो API/dashboard सारख्याच port वर `/v1/responses`, `/responses` आणि `/api/v1/responses` या paths वर ऐकतो. पहिल्या `response.create` frame वर तो अंतर्गत `codex-responses-ws` bridge द्वारे प्रमाणीकरण + तयारी करतो, एक codex OAuth connection निवडतो आणि `wreq-js` transport द्वारे `wss://chatgpt.com/backend-api/codex/responses` कडे tunnel करतो. **codex व्यतिरिक्त इतर models नाकारले जातात** (`codex_ws_provider_required`). quota-share routing साठी `model: "qtSd//codex/"` वापरा. याची अंमलबजावणी `app/server-ws.mjs` + `scripts/dev/responses-ws-proxy.mjs` + `src/app/api/internal/codex-responses-ws/route.ts` मध्ये केली आहे. **प्रमाणीकरण:** handshake दरम्यान Bearer API key. समाविष्ट HTTP server (`server-ws.mjs`) हा सक्रिय entrypoint असला पाहिजे (`app/server-ws.mjs` अस्तित्वात असताना तो default ने सक्रिय असतो). #### Model id: मूळ ChatGPT id वापरा (`codex/` prefix शिवाय) OpenAI **Codex CLI**, `supports_websockets = true` असताना, client-side वर model name चे प्रमाणीकरण करते आणि `codex/gpt-5.5` सारखे **provider-prefixed ids नाकारते** (`The 'codex/gpt-5.5' model is not supported when using Codex with a ChatGPT account`). **मूळ** id पाठवा (उदा. `gpt-5.5`). OmniRoute चा bridge केवळ codex साठी असल्यामुळे, upstream कडे tunnel करण्यापूर्वी तो मूळ id ला codex model म्हणून (`resolveCodexWsModelInfo`) पुन्हा resolve करतो — जरी मूळ `gpt-5.5` अन्यथा HTTP वरून दुसऱ्या प्रदात्याकडे route झाले असते. #### OpenAI Codex CLI कॉन्फिगर करणे `~/.codex/config.toml` मध्ये WebSocket समर्थन असलेला custom provider जोडून Codex CLI ला OmniRoute कडे निर्देशित करा (विद्यमान config मध्ये बदल करणे टाळण्यासाठी स्वतंत्र `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" # शेवटी slash नाही; WS URL यावरून तयार होतो (production मध्ये https/wss वापरा) wire_api = "responses" # Feb 2026 पासून समर्थित असलेले एकमेव value supports_websockets = true # Responses-over-WS transport सक्षम करते env_key = "OMNIROUTE_API_KEY" # OmniRoute API key (Bearer) ठेवते ``` ```bash export OMNIROUTE_API_KEY=sk-... # एक OmniRoute API key (REQUIRE_API_KEY=false असल्यास कोणतीही key) codex exec "Responda apenas: PONG" ``` CLI, `base_url + /responses` ला WebSocket मध्ये upgrade करते आणि OmniRoute त्याला निवडलेल्या codex OAuth connection कडे tunnel करते. स्थानिक server विरुद्ध end-to-end प्रमाणीकरण केले आहे: ChatGPT `codex.rate_limits` + `response.created` परत करते आणि completion stream करते. --- ## कोटा आणि समस्या अहवाल | पद्धत | पथ | वर्णन | | ----- | ------------------- | ---------------------------------------------------------------------------------------- | | GET | `/v1/quotas/check` | नोंदणीकृत की जारी करण्यापूर्वी `provider` + `accountId` साठी कोट्याचे पूर्व-सत्यापन करा | | POST | `/v1/issues/report` | कोटा/की जारी करण्यातील अपयशाचा GitHub वर अहवाल द्या (`GITHUB_ISSUES_REPO` + टोकन आवश्यक) | **प्रमाणीकरण:** Bearer API की (`isAuthenticated`). --- ## स्व-सेवा वापर (`/api/usage/om-usage`) कोणतीही API की **स्वतःचा** वापर आणि कोटा वाचू शकते — व्यवस्थापन प्रमाणीकरणाची गरज नाही. की धारकाला त्याचा खर्च दाखवण्यासाठी क्लायंट (CLI, OmniCopilot पॅनेल) हा एंडपॉइंट वापरतो. ```bash # मजकूर स्वरूप (ऐतिहासिक करार — टर्मिनलसाठी साधा मजकूर) curl -H "Authorization: Bearer " \ http://localhost:20128/api/usage/om-usage # संरचित स्वरूप — UI ज्याचा वापर करतो curl -H "Authorization: Bearer " \ "http://localhost:20128/api/usage/om-usage?format=json" ``` कीसाठी **`allowUsageCommand`** सक्षम असणे आवश्यक आहे (डीफॉल्टनुसार बंद — डॅशबोर्डचा API-की व्यवस्थापक प्रत्येक कीसाठी ते टॉगल करतो). ते नसल्यास एंडपॉइंट `403` प्रतिसाद देतो. `?format=json` विभेदित संरचना परत करतो, जेणेकरून कॉलरने नकाराच्या प्रतिसादातून कधीही डेटा फील्ड वाचू नये. यशस्वी झाल्यास: ```jsonc { "allowed": true, // कीने प्रति-की वापर मर्यादा (दैनिक/साप्ताहिक USD) स्वीकारल्या असतील तेव्हाच उपस्थित: "personal": { "dailySpentUsd": 1.25, "dailyLimitUsd": 5, "dailyResetAtIso": "…", "weeklySpentUsd": 8, "weeklyLimitUsd": 20, "weeklyResetAtIso": "…" /* … */, }, // निवडलेल्या प्रदात्याचा कोटा स्नॅपशॉट, किंवा अद्याप काहीही कॅश केलेले नसल्यास null: "provider": { "connectionId": "…", "provider": "claude", "plan": "…", "quotas": {/* … */}, }, // प्रत्येक कनेक्शनचा स्नॅपशॉट, जेणेकरून UI अनेक प्रदाते शेजारी-शेजारी रेंडर करू शकेल: "providers": [ { "connectionId": "…", "provider": "claude" /* … */ }, { "provider": "codex" /* … */ }, ], } ``` नकार दिल्यास (`401` चुकीची की / `403` परवानगी नाही), हाच रूट `{ "allowed": false, "error": { "message": "…" } }` परत करतो — उपस्थित-परंतु-रिक्त `personal`/`provider` (कीला परवानगी आहे, अद्याप काहीही समजलेले नाही) ही नकारापेक्षा वेगळी स्थिती आहे आणि केवळ JSON स्वरूप त्यांच्यात फरक करते. **प्रमाणीकरण:** कॉलरची स्वतःची Bearer API की, `isValidApiKey` वापरून सत्यापित केली जाते — हे व्यवस्थापन पृष्ठभाग (`/api/keys/…`) _नाही_, जो `requireManagementAuth`च्या मागेच राहतो. ### कच्ची विरुद्ध कटऑफ-समायोजित कोटा टक्केवारी `/api/usage/om-usage` वापरताना, कॉलरने **साध्या-मजकूर आउटपुटमध्ये** आणि संरचित **JSON आउटपुटमध्ये** दर्शविलेल्या टक्केवारीमधील फरक लक्षात घ्यावा: | पैलू | साधे-मजकूर स्वरूप (`/api/usage/om-usage` / `@@om-usage`) | JSON स्वरूप (`?format=json`) | | :------------------ | :------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------- | | **आउटपुट फील्ड** | `NN% left` (उदा., `20% left`) | `provider.quotas` / `providers[].quotas` | | **मापन** | **कटऑफ-समायोजित वापरण्यायोग्य भत्ता**: कटऑफ मर्यादेपेक्षा जास्त उर्वरित क्षमता | **कच्चा अपस्ट्रीम कोटा**: प्रदात्याचे न समायोजित केलेले मापन | | **कटऑफ स्केलिंग** | `effectiveRemainingPercent()` द्वारे स्केल केलेले, जेणेकरून संरक्षित राखीव `0% left` म्हणून दिसेल | काहीही नाही (प्रदात्याने दिल्याप्रमाणे कच्ची स्नॅपशॉट मूल्ये) | | **मर्यादा डेटा** | प्रदर्शित टक्केवारीमध्ये समाविष्ट | प्रत्येक कनेक्शनसाठी `quotaWindowThresholds`मध्ये संग्रहित (किंवा सर्व्हर डीफॉल्ट) | | **प्राथमिक ग्राहक** | परस्परसंवादी CLI, टर्मिनल प्रॉम्प्ट, मानवी ऑपरेटर | प्रोग्रामॅटिक एकत्रीकरणे, डॅशबोर्ड, विश्लेषण, बिलिंग ट्रॅकर | #### कटऑफ समायोजन सूत्र अपस्ट्रीम कोटा संपुष्टात येण्यापासून रोखण्यासाठी OmniRoute सक्रिय कोटा कटऑफना समर्थन देतो (कनेक्शन `quotaWindowThresholds`, प्रदाता डीफॉल्ट किंवा जागतिक लवचिकता सेटिंग्जद्वारे कॉन्फिगर केलेले). कोटा विंडोवर कटऑफ मर्यादा (उदा., `cutoff = 25%`) सक्रिय असताना, मजकूर रेंडरर उर्वरित भत्त्याची गणना अशी करतो: - `remaining <= cutoff` असल्यास: `0%` परत करतो. - `remaining > cutoff` असल्यास: `((remaining - cutoff) / (100 - cutoff)) * 100` परत करतो. स्वरूपित मजकूर आउटपुट हे जवळच्या पूर्णांकापर्यंत राउंड करतो (`Math.round(...)`). #### स्पष्टीकरणात्मक उदाहरण **60% कच्चा वापर** (म्हणून **40% कच्चा उर्वरित कोटा**) असलेली प्रदाता विंडो आणि कॉन्फिगर केलेली **25% उर्वरित-कोटा कटऑफ** मर्यादा विचारात घ्या: | सादरीकरण | गणना | उर्वरित | सूचित वापरलेले | | :------------------------------ | :------------------------------------------------- | :-----: | :--------------------------------------: | | **कच्चा JSON (`?format=json`)** | अपस्ट्रीम स्नॅपशॉट (`quotas[window]`) | **40%** | **60%** | | **मजकूर स्वरूप (`NN% left`)** | `((40 - 25) / (100 - 25)) * 100 = (15 / 75) * 100` | **20%** | **80%** (`100 - remaining` गणना केल्यास) | - **मजकूर 20% शिल्लक का दाखवतो:** खात्यावर शिल्लक असलेल्या 40% प्रत्यक्ष कोट्यापैकी 25% कटऑफ धोरणाद्वारे राखीव ठेवला जातो. राउटरने या कनेक्शनकडे रूटिंग थांबवण्यापूर्वी कॉलरकडे वापरण्यायोग्य 75% मोकळ्या क्षमतेपैकी केवळ 15% शिल्लक आहे. स्केलिंग हे सुनिश्चित करते की रूटिंग थांबेल त्याच वेळी कनेक्शन संपुष्टात आल्याचे (`0% left`) दर्शवेल. - **JSON कच्ची मूल्ये का जतन करतो:** JSON पेलोड प्रदात्याचा अचूक स्नॅपशॉट (`UsageSnapshot`) परत करतो, जेणेकरून बाह्य साधनांना सर्व्हर-साइड हानिकारक स्केलिंगशिवाय सत्याधारित अपस्ट्रीम वापर आणि कनेक्शन-स्तरीय `quotaWindowThresholds` उपलब्ध होतील. #### ग्राहक स्थलांतर मार्गदर्शन जर एखाद्या बाह्य एकत्रीकरणाने (जसे की संपादक प्लगइन किंवा एजंट एक्स्टेंशन) यापूर्वी मजकूर एंडपॉइंट (`NN% left`) स्क्रेप केला असेल आणि वापरलेली टक्केवारी `100 - NN` म्हणून मोजली असेल, तर `?format=json`कडे स्थलांतर करण्याचा अर्थ: - कच्ची JSON मूल्ये वाचल्याने **प्रत्यक्ष अपस्ट्रीम वापर** दिसेल (वरील उदाहरणात 60% वापरलेले). - एकत्रीकरणाला मजकूर एंडपॉइंटचे वापरण्यायोग्य-भत्ता शब्दार्थ जतन करायचे असल्यास, ते कनेक्शन-स्तरीय ओव्हरराइडसाठी `quotaWindowThresholds` वापरून प्रभावी उर्वरित सूत्र क्लायंट-साइडवर मूल्यांकित करू शकते. --- ## सिमॅंटिक कॅश ```bash # कॅशची आकडेवारी मिळवा GET /api/cache/stats # सर्व कॅश साफ करा DELETE /api/cache/stats ``` प्रतिसादाचे उदाहरण: ```json { "semanticCache": { "memorySize": 42, "memoryMaxSize": 500, "dbSize": 128, "hitRate": 0.65 }, "idempotency": { "activeKeys": 3, "windowMs": 5000 } } ``` ### विलंबावरील परिणाम सिमॅंटिक कॅश HIT प्रतिसाद **अपस्ट्रीम कॉलशिवाय** कॅशमधून देते, त्यामुळे नोंदवलेला `X-OmniRoute-Response-Latency` जवळजवळ शून्य असतो (मूळ अपस्ट्रीम विलंब कितीही असला तरी). विलंबाबाबत संवेदनशील क्लायंटनी (बेंचमार्किंग, p50/p99 निरीक्षण) `X-OmniRoute-Cache-Latency` प्रतिसाद हेडर तपासावे: | मूल्य | अर्थ | | ------------- | ----------------------------------------------------------- | | `synthetic` | प्रतिसाद कॅशमधून दिला; हा विलंब वास्तविक अपस्ट्रीम वेळ नाही | | _(अनुपस्थित)_ | वास्तविक अपस्ट्रीम कॉलमधून मिळालेला प्रतिसाद | ### प्रत्येक-की कॅश बायपास API की `cacheDefaultMode` द्वारे सिमॅंटिक कॅश वाचनातून बाहेर पडण्याचा पर्याय निवडू शकतात: | मूल्य | वर्तन | | -------- | -------------------------------------------------- | | `legacy` | सामान्य कॅश वर्तन (डीफॉल्ट) | | `bypass` | कॅश लुकअप पूर्णपणे वगळा; नेहमी अपस्ट्रीमवर कॉल करा | की तयार करताना (`POST /api/keys`) सेट करा किंवा (`PATCH /api/keys/[id]`) अद्ययावत करा: ```json { "cacheDefaultMode": "bypass" } ``` ### प्रत्येक-विनंती बायपास की सेटिंग्जची पर्वा न करता कोणतीही विनंती कॅश बायपास करू शकते: ``` X-OmniRoute-No-Cache: true ``` --- ## डॅशबोर्ड आणि व्यवस्थापन व्यवस्थापन मार्ग (`/api/*`, सार्वजनिक प्रमाणीकरण/लॉगिन वगळता) सामान्य अनुमान API कीद्वारे **अधिकृत केले जात नाहीत**. क्रेडेन्शियलचे प्रकार, स्कोप आणि curl उदाहरणांसाठी: [व्यवस्थापन प्रमाणीकरण](../guides/MANAGEMENT-AUTH.md). ### प्रमाणीकरण | एंडपॉइंट | पद्धत | वर्णन | | ----------------------------- | ------- | --------------------- | | `/api/auth/login` | POST | लॉगिन | | `/api/auth/logout` | POST | लॉगआउट | | `/api/settings/require-login` | GET/PUT | आवश्यक लॉगिन टॉगल करा | ### प्रदाता व्यवस्थापन | एंडपॉइंट | पद्धत | वर्णन | | --------------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | `/api/providers` | GET/POST | प्रदात्यांची यादी मिळवा / प्रदाता तयार करा | | `/api/providers/[id]` | GET/PUT/DELETE | प्रदाता व्यवस्थापित करा | | `/api/providers/[id]/test` | POST | प्रदात्याच्या कनेक्शनची चाचणी करा | | `/api/providers/[id]/models` | GET | प्रदात्याच्या मॉडेलची यादी मिळवा | | `/api/providers/validate` | POST | प्रदाता कॉन्फिगरेशन प्रमाणित करा | | `/api/providers/bulk` | POST | एका प्रदात्यासाठी API की मोठ्या प्रमाणात जोडा | | `/api/providers/import` | POST | पार्स केलेल्या CSV/JSON फाइलमधून विविध प्रकारच्या प्रदात्यांची यादी आयात करा (#6836); प्रत्येक ओळीसाठी आंशिक-अपयश परिणाम | | `/api/provider-nodes*` | विविध | प्रदाता नोड व्यवस्थापन | | `/api/provider-models` | GET/POST/PUT/PATCH/DELETE | सानुकूल मॉडेल आणि प्रत्येक मॉडेलनुसार ओव्हरराइड (जोडणे, अपडेट करणे, लपवणे/दाखवणे, हटवणे) | | `/api/provider-models/validate-and-add` | POST | व्यवस्थापनाद्वारे प्रमाणित, स्वैच्छिक कठोर-कनेक्शन प्रमाणीकरण आणि अणुस्तरीय सानुकूल-मॉडेल नोंदणी; [मॉडेल प्रमाणीकरण](../guides/MODEL-VALIDATION.md) पहा | सिंक्रोनाइझ/आयात केलेल्या मॉडेलसाठी, `PUT /api/provider-models` हे `provider`, `modelId` आणि `maxOutputTokenOverride` स्वीकारते: धन पूर्णांक मॅन्युअल आउटपुट-टोकन मर्यादा सेट करतो आणि `null` ती हटवून डीफॉल्ट पुनर्स्थापित करतो. `GET /api/provider-models?provider=` ही मूल्ये `modelOutputOverrides` मध्ये परत करतो, ज्यामध्ये सानुकूल-मॉडेल पंक्ती नसलेली मॉडेलदेखील समाविष्ट असतात. ओव्हरराइड रनटाइम `max_output_tokens` क्षमता वापरते आणि मॉडेल पुन्हा सिंक्रोनाइझ केल्यानंतरही कायम राहते. OpenAI-सुसंगत प्रदाता पृष्ठावर याच संपादन/हटवण्याच्या नियंत्रणांची सुविधा आहे आणि स्पष्ट व्हिजन समर्थन असलेली मॉडेल चिन्हांकित केली जातात. सानुकूल Chat Completions नोड स्पष्ट रीझनिंग ऑप्ट-आउट्सना अपस्ट्रीम बॅकएंडनुसार रूपांतरित करतात. यशस्वी कनेक्शन चाचणी प्रत्येक अचूक मॉडेल ID साठी चॅट-टेम्पलेट नियंत्रणे आपोआप निवडते, ज्याच्या `/models` नोंदीने ओळखले जाणारे `owned_by` मूल्य सिद्ध केले आहे: `vllm`, `sglang` किंवा `llamacpp`. पारदर्शक OpenAI-सुसंगत रॅपर्स मूळ मॉडेल नोंद नेस्टेड `openai` ऑब्जेक्टमध्ये जतन करू शकतात; शोध अशा कमाल तीन आवरणांमधून पुढे जातो. गहाळ, अज्ञात किंवा परस्परविरोधी मालकी असलेली मॉडेल सामान्य OpenAI वर्तन कायम ठेवतात. शोध विद्यमान कॅटलॉग विनंतीचा पुनर्वापर करतो, कोणतेही पूर्णता टोकन निर्माण करत नाही आणि कनेक्शन एंडपॉइंट बदलल्यावर अवैध ठरतो. हा मेटाडेटा उघड न करणाऱ्या बॅकएंडसाठी वर्तन निश्चित करण्याकरिता विद्यमान आंशिक प्रदाता अपडेट API वापरा: ```json { "providerSpecificData": { "reasoningControl": "chat-template" } } ``` तो बॉडी `PUT /api/providers/` सह पाठवा. त्या कनेक्शनवर, `none` हा स्पष्ट रीझनिंग प्रयत्न `chat_template_kwargs.thinking=false` आणि `chat_template_kwargs.enable_thinking=false` म्हणून पाठवला जातो. सर्व्हर-साइड रीझनिंग नियमाने एखादा प्रयत्न सक्तीचा केल्याशिवाय, स्पष्ट नेटिव्ह टेम्पलेट मूल्ये अधिकृत राहतात. हे सेटिंग फक्त तेव्हाच लागू होते जेव्हा सानुकूल OpenAI-सुसंगत कनेक्शन Chat Completions बॉडी पाठवते; Responses विनंत्या आणि सामान्य प्रदाते त्यांचा नेटिव्ह विनंती आकार कायम ठेवतात. सामान्य OpenAI `reasoning_effort` पासथ्रूची सक्ती करण्यासाठी `reasoningControl` हे `openai` वर सेट करा किंवा स्वयंचलित शोध वापरण्यासाठी ते वगळा/`null` वर सेट करा. Claude Code auto-mode classifier विनंत्यांमध्ये कोणतीही स्पष्ट reasoning नियंत्रणे नसतील, तेव्हा त्यांच्यासाठी डीफॉल्ट native thinking अक्षम केले जाते. शोधण्यासाठी model नावे किंवा completion मर्यादा नव्हे, तर Claude-format विनंत्यांमधील classifier चा system marker वापरला जातो. स्पष्ट body नियंत्रणे, समर्थित effort/thinking headers, routing नियम आणि निश्चित केलेला model effort यांचे विद्यमान प्राधान्य कायम राहते. दोन्ही classifier टप्पे त्यांचे prompts, completion मर्यादा, stop sequences आणि वास्तविक upstream permission निर्णय कायम ठेवतात; दुसरा टप्पा अजूनही त्याचे विनंती केलेले दृश्यमान reasoning सामान्य मजकूर म्हणून तयार करू शकतो. ### OAuth प्रवाह | Endpoint | पद्धत | वर्णन | | -------------------------------- | ----- | ---------------------- | | `/api/oauth/[provider]/[action]` | विविध | Provider-विशिष्ट OAuth | ### Routing आणि Config | Endpoint | पद्धत | वर्णन | | --------------------- | -------- | ----------------------------------- | | `/api/models/alias` | GET/POST | Model उपनावे | | `/api/models/catalog` | GET | Provider + प्रकारानुसार सर्व models | | `/api/combos*` | विविध | Combo व्यवस्थापन | | `/api/keys*` | विविध | API key व्यवस्थापन | | `/api/pricing` | GET | Model किंमत निर्धारण | ### वापर आणि Analytics | Endpoint | पद्धत | वर्णन | | -------------------------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `/api/usage/history` | GET | वापराचा इतिहास | | `/api/usage/logs` | GET | वापराचे logs | | `/api/usage/request-logs` | GET | विनंती-स्तरीय logs | | `/api/usage/[connectionId]` | GET | प्रत्येक connection चा वापर | | `/api/usage/token-limits` | GET/POST/DELETE | प्रत्येक API key साठी token-limit budgets | | `/api/usage/model-latency-stats` | GET | प्रत्येक provider/model साठी rolling latency aggregate (avg/p50/p95/p99, यशाचा दर); filters: `windowHours`/`minSamples`/`maxRows`/`provider`/`model` (#6873) | | `/api/usage/cache-health` | GET | `call_logs` वरील prompt-cache health सारांश — write/read गुणोत्तर, p50/p90/p99 write-size वितरण, heavy-write एकाग्रता, प्रत्येक model नुसार विभागणी आणि `healthy`/`degraded`/`thrash`/`no-data` निर्णय; query params `range` (`1h`\|`24h`\|`7d`\|`30d`, डीफॉल्ट `24h`) आणि पर्यायी `model` (#8827) | ### API key परवानग्या `PATCH /api/keys/{id}` विद्यमान key च्या परवानग्या अद्ययावत करते. प्रत्येक `/api/keys*` route प्रमाणे, यासाठी inference key नव्हे तर management authorization आवश्यक आहे ([Management Authentication](../guides/MANAGEMENT-AUTH.md) पहा). तुम्हाला बदलायची असलेली fieldsच पाठवा; यांपैकी कोणतेही field नसलेली विनंती `No valid fields to update` सह नाकारली जाते. स्वीकारली जाणारी fields `src/shared/validation/schemas/keys.ts` मधील `updateKeyPermissionsSchema` द्वारे परिभाषित केली आहेत. | फील्ड | प्रकार | नोंदी | | ------------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | `name` | स्ट्रिंग, 1-200 वर्ण | | | `isActive` | बूलियन | | | `isBanned` | बूलियन | | | `expiresAt` | ISO 8601 दिनांक-वेळ किंवा `null` | `null` कालबाह्यता काढून टाकते | | `modelAccessMode` | `all` \| `restricted` | मोड `all` असताना `allowedModels` रिकामे असणे आवश्यक आहे | | `allowedModels`, `blockedModels` | स्ट्रिंग्सचा अॅरे, कमाल 1000 | | | `allowedCombos` | स्ट्रिंग्सचा अॅरे, कमाल 500 | की कोणते कॉम्बो कॉल करू शकते हे नियंत्रित करते; थेट मॉडेल्स `modelAccessMode` / `allowedModels` द्वारे नियंत्रित केली जातात | | `connectionAccessMode` | `all` \| `restricted` | `restricted` असताना `allowedConnections` रिकामे नसणे आणि `all` असताना रिकामे असणे आवश्यक आहे | | `allowedConnections` | UUIDs चा अॅरे, कमाल 100 | | | `allowAutoCombos` | बूलियन | `false` या कीसह `auto/*` मॉडेल्ससाठीच्या विनंत्या नाकारते; ज्या कींसाठी हे कधीही सेट केलेले नाही त्यांना परवानगी असते | | `catalogScope` | `all` \| `combos` \| `models` | या कीसाठी `GET /v1/models` काय सूचीबद्ध करते (केवळ कॉम्बो, केवळ मॉडेल्स किंवा दोन्ही); की काय कॉल करू शकते हे यामुळे बदलत नाही | | `noLog`, `autoResolve` | बूलियन | | | `throttleDelayMs` | पूर्णांक, 0-300000 | | | `maxSessions` | पूर्णांक, 0-10000 | | | `rateLimits` | `{ limit, window }` चा अॅरे (धन पूर्णांक, कमाल 50) किंवा `null` | `null` मर्यादा काढून टाकते | | `accessSchedule` | वेळापत्रक ऑब्जेक्ट किंवा `null` | `null` वेळापत्रक काढून टाकते | | `scopes` | स्ट्रिंग्सचा अॅरे, कमाल 32 | | | `allowedEndpoints` | स्ट्रिंग्सचा अॅरे, कमाल 20 | | | `streamDefaultMode` | `legacy` \| `json` | | | `cacheDefaultMode` | `legacy` \| `bypass` | [प्रति-की कॅश बायपास](#per-key-cache-bypass) पहा | | `compressionEnabled` | बूलियन | | | `codexServiceMode` | Codex सेवा मोडपैकी एक | | | `disableNonPublicModels` | बूलियन | | | `allowUsageCommand` | boolean | | | `usageLimitEnabled` | boolean | | | `dailyUsageLimitUsd`, `weeklyUsageLimitUsd` | number >= 0 किंवा `null` | | | `chaosModeEnabled` | boolean | | ```bash curl -X PATCH "$OMNIROUTE_URL/api/keys/$KEY_ID" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "allowAutoCombos": false, "catalogScope": "combos" }' ``` ### सेटिंग्ज | एंडपॉइंट | पद्धत | वर्णन | | ------------------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `/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 | विनंती लॉगच्या पंक्ती आणि स्थानिक कॉल-लॉग कलाकृती साफ करा | ### संदर्भ आणि कम्प्रेशन | एंडपॉइंट | पद्धत | वर्णन | | -------------------------------------- | -------------- | -------------------------------------------------------------------------- | | `/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`, आणि शेवटच्या वापराची वेळ (रीस्टार्ट केल्यावर रीसेट होते; व्यवस्थापन प्रमाणीकरण) | | `/api/modality-bridge/video/runtime` | GET | व्यवस्थापन प्रमाणीकरण/प्रोबपूर्वी कठोर विश्वसनीय-लूपबॅक तपासणी; निर्जंतुक केलेली FFmpeg/ffprobe उपलब्धता आणि आवृत्त्या (संचयित करू नका) | | `/api/modality-bridge/video/extract` | POST | अंतर्गत प्रमाणीकृत विश्वसनीय-लूपबॅक बाइट ब्रोकर; 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 फाइल अपलोड करणे (`?dryRun=true` केवळ प्रमाणीकरण करते) | | `/api/db-backups/exportAll` | GET | संपूर्ण बॅकअप .tar.gz संग्रहणाच्या स्वरूपात डाउनलोड करणे | `/api/db-backups/export`, `/api/db-backups/exportAll` आणि `/api/settings/export-json` हे संचयित केलेली प्रत्येक क्रेडेन्शियल देतात, त्यामुळे त्यांना डॅशबोर्ड सत्र किंवा स्थानिक CLI आवश्यक आहे (किंवा लॉगिन अक्षम केलेले असणे आवश्यक आहे). कोणत्याही व्याप्तीच्या API की आणि `oma_` प्रवेश टोकनना `403` मिळतो. `/api/db-backups/export`, `/api/db-backups/exportAll` and `/api/settings/export-json` hand out every stored credential, so they require the dashboard session or the local CLI (or login disabled). API keys of any scope and `oma_` access tokens get `403`. The restores hold the same boundary: `POST /api/db-backups/import` (`dryRun=true` included), `POST /api/db-backups` (restore by id) and `POST /api/settings/import-json` replace the live database or settings, so a machine credential gets `403` there too; `omniroute sync import` sends the local CLI credential. ### क्लाउड सिंक | Endpoint | Method | वर्णन | | ---------------------- | ------ | ------------------ | | `/api/sync/cloud` | विविध | क्लाउड सिंक कार्ये | | `/api/sync/initialize` | POST | सिंक प्रारंभ करणे | | `/api/cloud/*` | विविध | क्लाउड व्यवस्थापन | ### टनेल्स | Endpoint | पद्धत | वर्णन | | -------------------------- | ----- | ----------------------------------------------------------------------- | | `/api/tunnels/cloudflared` | GET | डॅशबोर्डसाठी Cloudflare Quick Tunnel ची स्थापना/रनटाइम स्थिती वाचा | | `/api/tunnels/cloudflared` | POST | Cloudflare Quick Tunnel सक्षम किंवा अक्षम करा (`action=enable/disable`) | | `/api/tunnels/ngrok` | GET | डॅशबोर्डसाठी ngrok Tunnel ची रनटाइम स्थिती वाचा | | `/api/tunnels/ngrok` | POST | ngrok Tunnel सक्षम किंवा अक्षम करा (`action=enable/disable`) | ### CLI साधने | Endpoint | पद्धत | वर्णन | | ---------------------------------- | ----- | ------------------- | | `/api/cli-tools/claude-settings` | GET | Claude CLI स्थिती | | `/api/cli-tools/codex-settings` | GET | Codex CLI स्थिती | | `/api/cli-tools/droid-settings` | GET | Droid CLI स्थिती | | `/api/cli-tools/openclaw-settings` | GET | OpenClaw CLI स्थिती | | `/api/cli-tools/runtime/[toolId]` | GET | सामान्य CLI रनटाइम | CLI प्रतिसादांमध्ये पुढील गोष्टी समाविष्ट असतात: `installed`, `runnable`, `command`, `commandPath`, `runtimeMode`, `reason`. ### ACP एजंट | Endpoint | पद्धत | वर्णन | | ----------------- | ------ | ---------------------------------------------------------- | | `/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 | पद्धत | वर्णन | | --------------------------------- | --------- | ---------------------------------------------------------------------------------------------------- | | `/api/resilience` | GET/PATCH | विनंती रांग, कनेक्शन कूलडाउन, प्रदाता ब्रेकर आणि प्रतीक्षा सेटिंग्ज मिळवा/अद्ययावत करा | | `/api/resilience/reset` | POST | प्रदाता सर्किट ब्रेकर रीसेट करा | | `/api/resilience/model-cooldowns` | GET | उर्वरित वेळेनुसार क्रमबद्ध केलेले सक्रिय प्रति-(प्रदाता, कनेक्शन, मॉडेल) लॉकआउट सूचीबद्ध करा | | `/api/resilience/model-cooldowns` | DELETE | मॉडेल लॉकआउट साफ करा — मुख्य भागात `{provider, model}` किंवा सर्वकाही पुसण्यासाठी `{all: true}` द्या | | `/api/rate-limits` | GET | प्रति-खाते दर मर्यादा स्थिती | | `/api/rate-limit` | GET | जागतिक दर मर्यादा कॉन्फिगरेशन | > सर्व चार `/api/resilience/*` मार्गांसाठी **व्यवस्थापन प्रमाणीकरण** (`requireManagementAuth`) आवश्यक आहे. प्रदाता ब्रेकर, कनेक्शन कूलडाउन आणि मॉडेल लॉकआउट यांच्यातील संपूर्ण तपशीलासाठी [लवचिकता (विस्तारित)](#resilience-extended) पहा. ### मूल्यमापने | Endpoint | पद्धत | वर्णन | | ------------ | -------- | -------------------------------------------- | | `/api/evals` | GET/POST | मूल्यमापन संच सूचीबद्ध करा / मूल्यमापन चालवा | ### धोरणे | Endpoint | पद्धत | वर्णन | | --------------- | --------------- | ----------------------------- | | `/api/policies` | GET/POST/DELETE | राउटिंग धोरणे व्यवस्थापित करा | ### अनुपालन | Endpoint | पद्धत | वर्णन | | --------------------------- | ----- | ----------------------------------- | | `/api/compliance/audit-log` | GET | अनुपालन ऑडिट लॉग (शेवटच्या N नोंदी) | ### v1beta (Gemini-सुसंगत) | Endpoint | पद्धत | वर्णन | | -------------------------- | ----- | ------------------------------------ | | `/v1beta/models` | GET | Gemini स्वरूपातील मॉडेल सूचीबद्ध करा | | `/v1beta/models/{...path}` | POST | Gemini `generateContent` एंडपॉइंट | मूळ Gemini SDK सुसंगततेची अपेक्षा करणाऱ्या क्लायंटसाठी हे एंडपॉइंट Gemini च्या API स्वरूपाचे प्रतिबिंब करतात. ### अंतर्गत / प्रणाली API | Endpoint | पद्धत | वर्णन | | ------------------------ | ----- | ------------------------------------------------------- | | `/api/init` | GET | अनुप्रयोग प्रारंभ तपासणी (प्रथम वापरावेळी वापरली जाते) | | `/api/tags` | GET | Ollama-सुसंगत मॉडेल टॅग (Ollama क्लायंटसाठी) | | `/api/restart` | POST | सर्व्हर सुरळीतपणे रीस्टार्ट करण्याची प्रक्रिया सुरू करा | | `/api/shutdown` | POST | सर्व्हर सुरळीतपणे बंद करण्याची प्रक्रिया सुरू करा | | `/api/system/env/repair` | POST | OAuth प्रदाता पर्यावरण चल दुरुस्त करा | | `/api/system/version` | GET | वर्तमान/नवीनतम आवृत्ती, अद्ययावत स्थिती, प्रकाशन चॅनेल | | `/api/system/version` | POST | नवीनतम आवृत्तीसाठी उपयोजन-जागरूक अद्यतन सुरू करा | > **टीप:** हे एंडपॉइंट प्रणालीद्वारे अंतर्गतरीत्या किंवा Ollama क्लायंट सुसंगततेसाठी वापरले जातात. सामान्यतः अंतिम वापरकर्ते त्यांना कॉल करत नाहीत. ### OAuth पर्यावरण दुरुस्ती _(v3.6.1+)_ ```bash POST /api/system/env/repair Content-Type: application/json { "provider": "claude-code" } ``` विशिष्ट प्रदात्यासाठी गहाळ किंवा खराब झालेले OAuth पर्यावरण चल दुरुस्त करते. पुढील प्रतिसाद मिळतो: ```json { "success": true, "repaired": ["CLAUDE_CODE_OAUTH_CLIENT_ID", "CLAUDE_CODE_OAUTH_CLIENT_SECRET"], "backupPath": "/home/user/.omniroute/backups/env-repair-2026-04-11.bak" } ``` ### आवृत्ती आणि प्रकाशन चॅनेल ```bash GET /api/system/version ``` केवळ लूपबॅकसाठी व्यवस्थापन मार्ग (admin प्रमाणीकरण). सध्या चालू असलेली आवृत्ती, नवीनतम प्रकाशित आवृत्ती आणि स्वयंचलित-अद्यतन स्थिती परत करतो. `releaseChannel` आणि `channels` ही अतिरिक्त फील्ड आहेत (rail 3.8.54); `channel` चा अर्थ पूर्वीप्रमाणेच आहे — डॅशबोर्ड अपडेटर वापरत असलेली उपयोजन पद्धत (`npm`, `source` किंवा `docker-compose`). ```json { "current": "3.8.52", "latest": "3.8.52", "updateAvailable": false, "channel": "npm", "autoUpdateSupported": true, "autoUpdateError": null, "news": null, "releaseChannel": "latest", "channels": { "latest": "3.8.52", "next": "3.8.53-rc.1" } } ``` - `releaseChannel` — चालू बिल्डचे npm चॅनेल: `-nightly.*` आवृत्त्यांसाठी `nightly`, इतर पूर्व-प्रकाशनांसाठी (`-rc.*`, `-beta.*`, `-alpha.*`) `next`, `channels.latest` पेक्षा जुन्या प्रमुख आवृत्तीच्या स्थिर आवृत्तीसाठी `lts`, अन्यथा `latest`. हे नियम `scripts/release/dist-tag.mjs` प्रमाणेच आहेत, जे प्रकाशनाच्या वेळी npm dist-tag निवडते. - `channels` — `npm view omniroute dist-tags` मधून मिळणारा प्रत्येक dist-tag चा प्रकाशित नवीनतम संदर्भ (registry HTTP फॉलबॅक), `latest` प्रमाणेच 10-मिनिटांच्या TTL सह कॅश केला जातो. `latest` नेहमी उपस्थित असतो (`latest` फील्डवर फॉलबॅक होतो, त्यानंतर `"unavailable"`); `next`, `nightly` आणि `lts` फक्त संबंधित dist-tag अस्तित्वात असतानाच दिसतात. `Cache-Control: no-cache` विनंती दोन्ही लुकअप रिफ्रेश करते. चॅनेल मॉडेल (`latest` = 4.0 GA पर्यंत v3, `next` = rc, `nightly` = `develop` बिल्ड्स, `lts` = 4.0 GA नंतरचे v3 पॅचेस) `docs/ops/RELEASE_STRATEGY.md` मध्ये वर्णन केले आहे. --- ## ऑडिओ लिप्यंतरण ```bash POST /v1/audio/transcriptions Authorization: Bearer your-api-key Content-Type: multipart/form-data ``` कॉन्फिगर केलेल्या कोणत्याही STT प्रदात्याचा वापर करून ऑडिओ फाइल्सचे लिप्यंतरण करा. पाथचा पहिला सेगमेंट मूळ प्रदाता निवडतो (`openai/…`, `deepgram/…`). दुसऱ्या विक्रेत्याचे मॉडेल पुन्हा निर्यात करणारे गेटवे पूर्णपणे पात्र id वापरतात (`openrouter/deepgram/nova-3`). **विनंती:** ```bash curl -X POST http://localhost:20128/v1/audio/transcriptions \ -H "Authorization: Bearer your-api-key" \ -F "file=@recording.mp3" \ -F "model=openai/whisper-1" ``` **प्रतिसाद:** ```json { "text": "Hello, this is the transcribed audio content.", "task": "transcribe", "language": "en", "duration": 12.5 } ``` **उदाहरणार्थ मॉडेल ids:** `openai/whisper-1` (OpenAI की आवश्यक आहे), `openrouter/deepgram/nova-3` (OpenRouter की आवश्यक आहे), `deepgram/nova-3` (मूळ Deepgram की आवश्यक आहे). केवळ `deepgram/nova-3` विनंती OpenRouter वापरत **नाही**. **समर्थित स्वरूपे:** `mp3`, `wav`, `m4a`, `flac`, `ogg`, `webm`. --- ## Ollama सुसंगतता Ollama चे API स्वरूप वापरणाऱ्या क्लायंटसाठी: ```bash # चॅट एंडपॉइंट (Ollama स्वरूप) POST /v1/api/chat # मॉडेल सूची (Ollama स्वरूप) GET /api/tags ``` विनंत्या Ollama आणि अंतर्गत स्वरूपांदरम्यान स्वयंचलितपणे रूपांतरित केल्या जातात. ## टोकनयुक्त VS Code / हेडरविरहित उपनावे जेव्हा एखादे इंटिग्रेशन `Authorization` हेडर अंतर्भूत करू शकत नाही आणि API की बेस URL मध्ये एम्बेड करणे आवश्यक असते, तेव्हा ही उपनावे वापरा. ```bash # OpenAI-शैलीतील कॅटलॉग उपनाव GET /api/v1/vscode/{token}/ GET /api/v1/vscode/{token}/models # OpenAI-शैलीतील चॅट उपनावे POST /api/v1/vscode/{token}/chat/completions POST /api/v1/vscode/{token}/responses # Ollama-शैलीतील उपनावे POST /api/v1/vscode/{token}/api/chat GET /api/v1/vscode/{token}/api/tags ``` उदाहरण: ```bash curl https://your-host.example/api/v1/vscode/YOUR_API_KEY/models curl -X POST https://your-host.example/api/v1/vscode/YOUR_API_KEY/chat/completions \ -H "Content-Type: application/json" \ -d '{"model":"auto","messages":[{"role":"user","content":"hello"}]}' ``` नोंदी: - टोकनयुक्त उपनावे `/v1/*` आणि `/api/tags` प्रमाणेच हँडलर्स पुन्हा वापरतात; प्रतिसादांची संरचना तशीच राहते. - क्लायंट कस्टम हेडर्सना समर्थन देत असेल, तेव्हा शक्यतो `Authorization: Bearer ...` वापरा. - URL-आधारित टोकन्स रिव्हर्स-प्रॉक्सी लॉग्स, ब्राउझर इतिहास आणि OmniRoute च्या बाहेरील टेलिमेट्रीमध्ये दिसू शकतात. त्यांना डीफॉल्ट प्रमाणीकरण पद्धत न मानता सुसंगतता पर्याय म्हणून वापरा. --- ## टेलिमेट्री ```bash # लेटन्सी टेलिमेट्रीचा सारांश मिळवा (प्रत्येक प्रदात्यासाठी p50/p95/p99) GET /api/telemetry/summary ``` **प्रतिसाद:** ```json { "providers": { "claudeCode": { "p50": 245, "p95": 890, "p99": 1200, "count": 150 }, "github": { "p50": 180, "p95": 620, "p99": 950, "count": 320 } } } ``` --- ## बजेट ```bash # सर्व API कीजसाठी बजेटची स्थिती मिळवा GET /api/usage/budget # बजेट सेट किंवा अपडेट करा POST /api/usage/budget Content-Type: application/json { "apiKeyId": "key-123", "dailyLimitUsd": 5.00, "weeklyLimitUsd": 30.00, "monthlyLimitUsd": 100.00, "warningThreshold": 0.8, "resetInterval": "monthly" } ``` > **स्कीमा नोंदी** (`setBudgetSchema`): `apiKeyId` आवश्यक आहे; `dailyLimitUsd`, `weeklyLimitUsd` किंवा `monthlyLimitUsd` यांपैकी किमान एक शून्यापेक्षा जास्त असणे आवश्यक आहे. ऐच्छिक फील्ड्स: `warningThreshold` (0–1), `resetInterval` (`daily` | `weekly` | `monthly`), `resetTime` (`HH:MM`). जुनी `{keyId, limit, period}` संरचना `400 Bad Request` परत करते. ## टोकन मर्यादा प्रत्येक API कीसाठी **टोकन** बजेट (वरील 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. मॉडेलचे निराकरण केले जाते (थेट provider/model किंवा alias/combo) 4. खात्याच्या उपलब्धतेनुसार फिल्टरिंग करून स्थानिक DB मधून क्रेडेन्शियल्स निवडली जातात 5. चॅटसाठी: `handleChatCore` सिमॅंटिक/सिग्नेचर कॅश तपासतो आणि combo कॉम्प्रेशन सेटिंग्जचे निराकरण करतो 6. सक्षम केलेले असताना प्रदाता रूपांतरणापूर्वी सक्रिय कॉम्प्रेशन चालते (`lite`, Caveman, RTK, किंवा त्यांचे एकत्रित स्टॅक) 7. प्रदाता एक्झिक्युटर अपस्ट्रीम विनंती पाठवतो 8. प्रतिसाद परत क्लायंटच्या स्वरूपात रूपांतरित केला जातो (चॅट) किंवा जसाच्या तसा परत केला जातो (एम्बेडिंग्ज/प्रतिमा/ऑडिओ) 9. वापर, कॉम्प्रेशन विश्लेषण आणि विनंती लॉग नोंदवले जातात 10. त्रुटी आल्यास combo नियमांनुसार फॉलबॅक लागू केला जातो संपूर्ण आर्किटेक्चर संदर्भ: [`ARCHITECTURE.md`](../architecture/ARCHITECTURE.md) --- ## Combo व्यवस्थापन उच्च-स्तरीय रूटिंग combos (`/api/combos*` अंतर्गत आधीच सारांशित केलेले) मॉडेल id पॅटर्नवरून 1:1 मॅपदेखील केले जाऊ शकतात, ज्यामुळे OpenAI-शैलीतील मॉडेल id चे combo कडे पारदर्शक पुनर्निर्देशन करता येते. | पद्धत | पाथ | वर्णन | | ------ | -------------------------------- | ------------------------------------------------------------------------------- | | GET | `/api/model-combo-mappings` | सर्व model→combo मॅपिंग्जची यादी दाखवा | | POST | `/api/model-combo-mappings` | मॅपिंग तयार करा — बॉडी: `{pattern, comboId, priority?, enabled?, description?}` | | GET | `/api/model-combo-mappings/[id]` | एक मॅपिंग मिळवा | | PUT | `/api/model-combo-mappings/[id]` | विद्यमान मॅपिंगची फील्ड्स अद्ययावत करा | | DELETE | `/api/model-combo-mappings/[id]` | मॅपिंग काढून टाका | **प्रमाणीकरण:** व्यवस्थापन सत्र/API की (`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`). --- ## नोंदणीकृत कीज (स्वयं-व्यवस्थापन) दैनिक/ताशी कोट्यांसह, बॅकिंग प्रदाता/खात्याविरुद्ध API कीज जारी करण्यासाठी आणि रोटेट करण्यासाठी स्वयं-की व्यवस्थापन उपप्रणालीद्वारे वापरले जाते. | पद्धत | पाथ | वर्णन | | ------ | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | GET | `/api/v1/registered-keys` | नोंदणीकृत कीजची सूची (केवळ मास्क केलेला उपसर्ग) | | POST | `/api/v1/registered-keys` | नवीन नोंदणीकृत की जारी करा — बॉडी: `{name, provider?, accountId?, idempotencyKey?, expiresAt?, dailyBudget?, hourlyBudget?}`. रॉ की **फक्त एकदाच** परत करते. कोटा नाकारल्यास `429` परत करते. | | GET | `/api/v1/registered-keys/[id]` | नोंदणीकृत कीचा मेटाडेटा मिळवा (रॉ सामग्री नाही) | | DELETE | `/api/v1/registered-keys/[id]` | नोंदणीकृत की रद्द करा | | POST | `/api/v1/registered-keys/[id]/revoke` | स्पष्ट रद्दीकरण एंडपॉइंट (DELETE प्रमाणेच परिणाम) | **प्रमाणीकरण:** व्यवस्थापन सत्र/API की (`requireManagementAuth`) — `/api/keys` प्रमाणेच गार्ड: डॅशबोर्ड सत्र, स्थानिक CLI टोकन किंवा `manage`/`admin` स्कोप असलेली API की; केवळ इन्फरन्ससाठी असलेल्या API कीजना `403` मिळते. `/v1/quotas/check` आणि `/v1/issues/report` हे देखील पहा. --- ## एजंट्स प्रोटोकॉल OmniRoute वापरकर्त्यांच्या वतीने दूरस्थपणे कार्यान्वित केलेली क्लाउड एजंट कार्ये (Claude Code, Codex Cloud, OpenHands इ.). | पद्धत | पथ | वर्णन | | ------ | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | GET | `/api/v1/agents/tasks` | कार्यांची यादी — पर्यायी `?provider=`, `?status=`, `?limit=` (1–500, डीफॉल्ट 50) | | POST | `/api/v1/agents/tasks` | कार्य तयार करा — `CreateCloudAgentTaskSchema` द्वारे मुख्य भागाचे प्रमाणीकरण (`providerId`, `prompt`, `source`, `options?`). कार्य आवरणासह `201` परत करते | | DELETE | `/api/v1/agents/tasks?id=...` | कार्य हटवा | | GET | `/api/v1/agents/tasks/[id]` | कार्य वाचा — `external_id` सेट केलेला असताना अपस्ट्रीम क्लाउड एजंटकडून स्थिती समकालिकपणे रिफ्रेश करते | | POST | `/api/v1/agents/tasks/[id]` | विभेदित कृती: `{action: "approve"}`, `{action: "message", message}`, किंवा `{action: "cancel"}` | | DELETE | `/api/v1/agents/tasks/[id]` | id नुसार विशिष्ट कार्य हटवा | > **प्रमाणीकरण:** प्रत्येक पद्धतीसाठी व्यवस्थापन प्रमाणीकरण आवश्यक आहे (`requireCloudAgentManagementAuth`). v3.8.0 पूर्वी यांसाठी प्रमाणीकरण आवश्यक नव्हते — ब्रेकिंग बदलासाठी कमिट `588a0333` पहा. ```bash # Claude Code क्लाउड कार्य तयार करा curl -X POST http://localhost:20128/api/v1/agents/tasks \ -H "Authorization: Bearer your-management-key" \ -H "Content-Type: application/json" \ -d '{"providerId":"claude-code-cloud","prompt":"Fix the failing test","source":{"repo":"...","branch":"..."}}' ``` --- ## व्यवस्थापन प्रॉक्सी प्रदाता, खाती किंवा जागतिक स्तरावर नियुक्त करता येणारे आउटबाउंड HTTP(S)/SOCKS प्रॉक्सी. | पद्धत | पथ | वर्णन | | ------ | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | GET | `/api/v1/management/proxies` | प्रॉक्सींची यादी (`?id=` सह एक प्रॉक्सी परत करते; `?id=&where_used=1` सह नियुक्ती आलेख परत करते) | | POST | `/api/v1/management/proxies` | प्रॉक्सी तयार करा — `createProxyRegistrySchema` द्वारे मुख्य भागाचे प्रमाणीकरण | | PATCH | `/api/v1/management/proxies` | प्रॉक्सी अद्ययावत करा — `updateProxyRegistrySchema` द्वारे मुख्य भागाचे प्रमाणीकरण (`id` आवश्यक) | | DELETE | `/api/v1/management/proxies?id=...&force=1` | प्रॉक्सी हटवा (नियुक्त्या विलग करण्यासाठी `force=1` वापरा) | | GET | `/api/v1/management/proxies/assignments` | नियुक्त्यांची यादी — `proxy_id`, `scope`, `scope_id` नुसार फिल्टर करता येते; कनेक्शनसाठी सक्रिय प्रॉक्सी शोधण्यासाठी `resolve_connection_id=` पाठवा | | PUT | `/api/v1/management/proxies/assignments` | नियुक्त करा — `proxyAssignmentSchema` द्वारे मुख्य भागाचे प्रमाणीकरण (`{scope, scopeId?, proxyId?}`). डिस्पॅचर कॅशे साफ करते | | PUT | `/api/v1/management/proxies/bulk-assign` | मोठ्या प्रमाणात नियुक्त करा — `bulkProxyAssignmentSchema` द्वारे मुख्य भागाचे प्रमाणीकरण (`{scope, scopeIds[], proxyId?}`) | | GET | `/api/v1/management/proxies/health?hours=24` | कालावधीत प्रॉक्सीची एकत्रित स्थिती (यशस्वी/अयशस्वी मोजणी, विलंब) | **प्रमाणीकरण:** प्रत्येक मार्गावर व्यवस्थापन सत्र/API की आवश्यक आहे (`requireManagementAuth`). > कार्याच्या वर्णनातील `POST /api/v1/management/proxies/[id]/assignments` आणि `POST /api/v1/management/proxies/[id]/health` हे वर दाखवलेल्या सपाट `/assignments` आणि `/health` मार्गांद्वारे हाताळले जातात — कोडबेसमध्ये प्रत्येक id साठी स्वतंत्र उपमार्ग नाहीत. --- ## लवचिकता (विस्तारित) OmniRoute तात्पुरत्या अपयशांसाठी तीन स्वतंत्र यंत्रणा उपलब्ध करून देते; खालील व्यवस्थापन एंडपॉइंट्स ऑपरेटर्सना त्यांची स्थिती वाचण्याची आणि ती अधिलिखित करण्याची सुविधा देतात: | व्याप्ती | स्थिती संचयन | वाचन | रीसेट / साफ करणे | | --------------- | ---------------------------------------- | ----------------------------------------- | ------------------------------------------------------------------- | | प्रदाता ब्रेकर | `domain_circuit_breakers` + इन-मेमरी | `/api/monitoring/health` | `POST /api/resilience/reset` | | कनेक्शन कूलडाउन | प्रदाता कनेक्शन्सवरील `rateLimitedUntil` | `/api/rate-limits`, `/api/providers/[id]` | (आवश्यकतेनुसार पुन्हा सक्षम होते; प्रदात्याच्या PUT द्वारे साफ करा) | | मॉडेल लॉकआउट | इन-मेमरी मॉडेल-उपलब्धता रजिस्ट्री | `GET /api/resilience/model-cooldowns` | `DELETE /api/resilience/model-cooldowns` | `PATCH /api/resilience`, `providerBreaker.oauth` आणि `providerBreaker.apikey` अंतर्गत प्रदाता ब्रेकर अधिलिखने स्वीकारते. प्रत्येक प्रोफाइल `degradationThreshold`, `failureThreshold`, आणि `resetTimeoutMs` यांना समर्थन देते; हीच फील्ड्स Dashboard → Settings → Resilience मध्ये उपलब्ध आहेत. ```bash # एका मॉडेलचा लॉकआउट साफ करा curl -X DELETE http://localhost:20128/api/resilience/model-cooldowns \ -H "Cookie: auth_token=..." \ -H "Content-Type: application/json" \ -d '{"provider":"openai","model":"gpt-4o-mini"}' # सर्व लॉकआउट्स पूर्णपणे साफ करा curl -X DELETE http://localhost:20128/api/resilience/model-cooldowns \ -H "Cookie: auth_token=..." \ -d '{"all":true}' ``` संपूर्ण संकल्पनात्मक संदर्भ आणि ब्रेकरची डीफॉल्ट मूल्ये: [`CLAUDE.md`](../../CLAUDE.md) → "Resilience Runtime State" पहा. --- ## कौशल्ये सानुकूल एक्झिक्युटेबल हँडलर्सद्वारे 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 द्वारे प्रमाणित केलेली body: `{content, key, type?, sessionId?, apiKeyId?, metadata?, expiresAt?}` | | GET | `/api/memory/[id]` | एक मेमरी मिळवा | | DELETE | `/api/memory/[id]` | मेमरी हटवा | | GET | `/api/memory/health` | मेमरी उपप्रणालीचे आरोग्य (DB कनेक्टिव्हिटी, embeddings backend, vector index स्थिती) | **प्रमाणीकरण:** व्यवस्थापन सत्र/API की (`requireManagementAuth`). `type` enum: `FACTUAL`, `EPISODIC`, `SEMANTIC`, `PROCEDURAL` (`src/lib/memory/types.ts` मधील `MemoryType` पाहा). --- ## MCP सर्व्हर OmniRoute मध्ये 3 transports (stdio, SSE, streamable-http) आणि व्याप्तीबद्ध साधनांसह अंतर्भूत Model Context Protocol सर्व्हर समाविष्ट आहे. खालील dashboard endpoints स्थिती/audit डेटा वाचतात आणि HTTP transports ना प्रॉक्सी करतात. | पद्धत | पथ | वर्णन | | ------ | ---------------------- | ------------------------------------------------------------------------------------------------ | -------------------- | | GET | `/api/mcp/status` | Heartbeat, transport, ऑनलाइन स्थिती, शेवटचा कॉल, प्रमुख साधने, 24 तासांचा यशाचा दर | | GET | `/api/mcp/tools` | `name`, `description`, `scopes`, `phase`, `auditLevel`, `sourceEndpoints` सह MCP साधनांची सूची | | GET | `/api/mcp/sse` | SSE transport साठी SSE stream उघडा (MCP अक्षम असल्यास किंवा transport जुळत नसल्यास `503` परत करतो) | | POST | `/api/mcp/sse` | SSE transport वर JSON-RPC frame पाठवा | | GET | `/api/mcp/stream` | Streamable HTTP transport ची SSE बाजू उघडा (सर्व्हरद्वारे सुरू केलेले संदेश) | | POST | `/api/mcp/stream` | Streamable HTTP transport वर JSON-RPC frame पाठवा | | DELETE | `/api/mcp/stream` | Streamable HTTP सत्र समाप्त करा | | GET | `/api/mcp/audit` | audit log क्वेरी करा — `?limit=`, `?offset=`, `?tool=`, `?success=true | false`, `?apiKeyId=` | | GET | `/api/mcp/audit/stats` | एकत्रित audit आकडेवारी (एकूण संख्या, यशाचा दर, सरासरी कालावधी, प्रमुख साधने) | **प्रमाणीकरण:** `sse`/`stream` transports MCP-विशिष्ट प्रमाणीकरण पृष्ठभागाचा सन्मान करतात (`mcp` scope असलेली Bearer API की); `status`/`tools`/`audit*` routes dashboard वरून वाचता येतात (dashboard host पर्यंत पोहोचण्याव्यतिरिक्त कोणतेही अतिरिक्त प्रमाणीकरण आवश्यक नाही). > दोन्ही HTTP transports `settings.mcpEnabled` आणि `settings.mcpTransport` द्वारे नियंत्रित केले जातात — transport जुळत नसल्यास `400`, तर MCP अक्षम स्थितीत `503` परत केले जाते. --- ## A2A सर्व्हर OmniRoute तपासणी/डॅशबोर्ड वापरासाठी REST रॅपरसह A2A (Agent-to-Agent) JSON-RPC 2.0 एंडपॉइंट उपलब्ध करून देते. ### JSON-RPC ```bash POST /a2a Authorization: Bearer your-api-key # OMNIROUTE_API_KEY सेट केलेले नसल्यास ऐच्छिक Content-Type: application/json { "jsonrpc": "2.0", "id": 1, "method": "message/send", "params": { "skill": "smart-routing", "messages": [{"role": "user", "content": "Route this coding task"}] } } ``` समर्थित पद्धती (सर्व `settings.a2aEnabled` द्वारे नियंत्रित): | पद्धत | वर्णन | | ---------------- | ----------------------------------------------------------------- | | `message/send` | समकालिक कौशल्य अंमलबजावणी; `{task, artifacts, metadata}` परत करते | | `message/stream` | त्याच कौशल्य संचाची स्ट्रीमिंग SSE अंमलबजावणी | | `tasks/get` | `taskId` द्वारे कार्य मिळवा | | `tasks/cancel` | `taskId` द्वारे कार्य रद्द करा | अंगभूत कौशल्ये: `smart-routing`, `quota-management`, `provider-discovery`, `cost-analysis`, `health-report`. ### एजंट कार्ड ```bash GET /.well-known/agent.json ``` सार्वजनिक A2A एजंट कार्ड (नाव, वर्णन, क्षमता, कौशल्य कॅटलॉग, प्रमाणीकरण योजना) परत करते — 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` वापरतो. --- ## Cloud, Evals आणि Assess | पद्धत | पथ | वर्णन | | ------ | ------------------------------- | ------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------- | | 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` | अंगभूत eval संच + सर्वात अलीकडील रन सूचीबद्ध करा | | POST | `/api/evals` | eval रन सुरू करा | | POST | `/api/evals/suites` | सानुकूल eval संच तयार करा — बॉडीचे प्रमाणीकरण `evalSuiteSaveSchema` द्वारे केले जाते | | GET | `/api/evals/suites/[id]` | सानुकूल eval संच मिळवा | **प्रमाणीकरण:** `/api/cloud/auth` थेट Bearer की सत्यापित करते आणि केवळ `manage` / `admin` व्याप्ती असलेल्या कीसाठी प्रत्येक कनेक्शनची मास्क केलेली की आणि `projectId` परत करते; इतर `/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, commandCode, devin-cli इ.) व्यवस्थापित करा. संपूर्ण यादीसाठी [प्रदाता संदर्भ](./PROVIDER_REFERENCE.md) पहा. | पद्धत | पथ | वर्णन | | ----- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | GET | `/api/cli-tools/all-statuses` | सर्व CLI साधनांची स्थिती (स्थापित, आवृत्ती, शेवटचे आढळलेले) | | GET | `/api/cli-tools/status` | एका CLI साधनाच्या स्थितीचा तपशील (`?tool=` क्वेरी) | | POST | `/api/cli-tools/apply` | साधनाचे व्युत्पन्न कॉन्फिगरेशन लिहा (`dryRun` पूर्वावलोकन करते; कंटेनरीकृत असताना `422` + `containerEphemeralTarget`; `migration` लेगसी Codex YAML नोंदवते) | | GET | `/api/cli-tools/backups` | CLI साधनांच्या कॉन्फिगरेशन बॅकअपची यादी करा | | POST | `/api/cli-tools/backups` | सर्व CLI साधनांच्या कॉन्फिगरेशनचा बॅकअप तयार करा | | POST | `/api/cli-tools/backups` | पुनर्संचयित करा: बॉडीमध्ये `{tool, backupId}` असलेला हाच एंडपॉइंट तो बॅकअप पुनर्संचयित करतो | | GET | `/api/cli-tools/antigravity-mitm` | Antigravity MITM प्रॉक्सीची स्थिती ("antigravity-mitm" CLI साधन) | | POST | `/api/cli-tools/antigravity-mitm/alias` | antigravity-mitm उपनावे कॉन्फिगर करा | **प्रमाणीकरण:** व्यवस्थापन सत्र आवश्यक आहे. --- ## एजंट कौशल्ये AI एजंट कौशल्ये व्यवस्थापित करा (OpenAI च्या सानुकूल GPTs प्रमाणे, पण एजंटसाठी). | पद्धत | पथ | वर्णन | | ------ | ---------------------------- | ---------------------------------------------------------------------------------------- | | GET | `/api/agent-skills` | सर्व एजंट कौशल्यांची यादी करा (अंगभूत + सानुकूल) | | GET | `/api/agent-skills/[id]` | विशिष्ट एजंट कौशल्य मिळवा | | POST | `/api/agent-skills` | सानुकूल एजंट कौशल्य तयार करा — बॉडी: `{name, description, prompt, model?, temperature?}` | | PUT | `/api/agent-skills/[id]` | सानुकूल एजंट कौशल्य अद्ययावत करा | | DELETE | `/api/agent-skills/[id]` | सानुकूल एजंट कौशल्य हटवा | | GET | `/api/agent-skills/[id]/raw` | मूळ प्रॉम्प्ट + मेटाडेटा मिळवा (अंमलबजावणीशिवाय) | | POST | `/api/agent-skills/generate` | नैसर्गिक भाषेतील वर्णनावरून AI वापरून नवीन कौशल्य व्युत्पन्न करा | **प्रमाणीकरण:** व्यवस्थापन सत्र किंवा व्यवस्थापन-व्याप्त API की आवश्यक आहे. --- ## कॅशे व्यवस्थापन सिमॅंटिक कॅशे आणि रीझनिंग कॅशे व्यवस्थापित करा. | पद्धत | पथ | वर्णन | | ------ | ---------------------- | ---------------------------------------------------------------------------------------------------------------------- | | GET | `/api/cache` | कॅशेचा आढावा: एकूण नोंदी, हिट दर, डिस्कवरील आकार | | GET | `/api/cache/entries` | कॅशे केलेल्या नोंदींची सूची (पृष्ठांकनासह) | | DELETE | `/api/cache/entries` | कॅशे नोंदी हटवा (क्वेरी पॅरामीटर्सनुसार फिल्टर करा) | | GET | `/api/cache/stats` | कॅशेची तपशीलवार आकडेवारी (प्रत्येक प्रदात्यानुसार, प्रत्येक मॉडेलनुसार) | | GET | `/api/cache/reasoning` | रीझनिंग कॅशेची स्थिती (रीझनिंग रिप्लेसाठी) | | DELETE | `/api/cache/reasoning` | रीझनिंग कॅशे साफ करा — क्वेरी पॅरामीटर्स: `?toolCallId=` (एकल) किंवा `?provider=

` किंवा पॅरामीटर्स नाहीत (सर्व) | **प्रमाणीकरण:** व्यवस्थापन सत्र आवश्यक आहे. --- ## मेमरी प्रणाली सततची मेमरी (FTS5 + व्हेक्टर एम्बेडिंग्ज) व्यवस्थापित करा. | पद्धत | पथ | वर्णन | | ------ | ------------------ | ------------------------------------------------------------------------------- | | GET | `/api/memory` | मेमरी नोंदींची सूची (स्कोप, प्रकार, शोध क्वेरीनुसार फिल्टर करा) | | POST | `/api/memory` | नवीन मेमरी नोंद तयार करा — बॉडी: `{scope, type, content, metadata?}` | | GET | `/api/memory/[id]` | विशिष्ट मेमरी नोंद मिळवा | | PUT | `/api/memory/[id]` | मेमरी नोंद अद्ययावत करा | | DELETE | `/api/memory/[id]` | मेमरी नोंद हटवा | | GET | `/api/memory?q=` | मेमरी शोधा (FTS5 + व्हेक्टर) — त्याच प्रतिसादामध्ये आकडेवारी समाविष्ट केली जाते | **प्रमाणीकरण:** व्यवस्थापन सत्र किंवा व्यवस्थापन-स्कोप असलेली API की आवश्यक आहे. --- ## वेबहुक्स इव्हेंट्ससाठी वेबहुक सदस्यत्वे व्यवस्थापित करा. | पद्धत | पथ | वर्णन | | ------ | ------------------------------- | -------------------------------------------------------------------- | | GET | `/api/webhooks` | सर्व वेबहुक सदस्यत्वांची सूची | | POST | `/api/webhooks` | वेबहुक सदस्यत्व तयार करा — बॉडी: `{url, events[], secret?, active?}` | | GET | `/api/webhooks/[id]` | विशिष्ट वेबहुक सदस्यत्व मिळवा | | PUT | `/api/webhooks/[id]` | वेबहुक सदस्यत्व अद्ययावत करा | | DELETE | `/api/webhooks/[id]` | वेबहुक सदस्यत्व हटवा | | GET | `/api/webhooks/[id]/deliveries` | वेबहुकसाठी वितरण इतिहासाची सूची (यशस्वी/अयशस्वी लॉग) | | POST | `/api/webhooks/[id]/test` | वेबहुकला चाचणी इव्हेंट पाठवा | **प्रमाणीकरण:** व्यवस्थापन सत्र आवश्यक आहे. सर्व इव्हेंट प्रकारांसाठी [वेबहुक्स फ्रेमवर्क](../frameworks/WEBHOOKS.md) पहा. --- ## कौशल्य फ्रेमवर्क कौशल्ये (एजंटिक विस्तार फ्रेमवर्क) व्यवस्थापित करा. | पद्धत | पथ | वर्णन | | ------ | ------------------------ | ----------------------------------------------------------------------------------------------- | | GET | `/api/skills` | स्थापित केलेल्या सर्व कौशल्यांची सूची (अंगभूत + सानुकूल) | | POST | `/api/skills/install` | स्थानिक पथ किंवा URL वरून कौशल्य स्थापित करा | | DELETE | `/api/skills/[id]` | कौशल्य विस्थापित करा | | PUT | `/api/skills/[id]` | कौशल्य सक्षम किंवा अक्षम करा — मुख्य भाग: `{enabled?: boolean, mode?: "on" \| "off" \| "auto"}` | | POST | `/api/skills/executions` | कौशल्य कार्यान्वित करा — मुख्य भाग: `{skillName, apiKeyId, input?, sessionId?}` | | GET | `/api/skills/executions` | सर्व कौशल्यांचा कार्यान्वयन इतिहास सूचीबद्ध करा (`?apiKeyId=` नुसार फिल्टर करा) | **प्रमाणीकरण:** व्यवस्थापन सत्र किंवा व्यवस्थापन-व्याप्ती असलेली API की आवश्यक आहे. संपूर्ण तपशीलांसाठी [कौशल्य फ्रेमवर्क](../frameworks/SKILLS.md) पहा. --- ## प्लगइन OmniRoute प्लगइन (तृतीय-पक्ष विस्तार) व्यवस्थापित करा. | पद्धत | पथ | वर्णन | | ------ | ---------------------------------- | ----------------------------------- | | GET | `/api/plugins` | स्थापित प्लगइनची सूची | | POST | `/api/plugins/marketplace/install` | मार्केटप्लेसमधून प्लगइन स्थापित करा | | DELETE | `/api/plugins/[name]` | प्लगइन विस्थापित करा | | POST | `/api/plugins/[name]/activate` | प्लगइन सक्रिय करा | | POST | `/api/plugins/[name]/deactivate` | प्लगइन निष्क्रिय करा | | GET | `/api/plugins/[name]/config` | प्लगइन कॉन्फिगरेशन मिळवा | | PUT | `/api/plugins/[name]/config` | प्लगइन कॉन्फिगरेशन अद्ययावत करा | **प्रमाणीकरण:** व्यवस्थापन सत्र आवश्यक आहे. संपूर्ण तपशीलांसाठी [प्लगइन फ्रेमवर्क](../frameworks/PLUGIN_SDK.md) पहा. --- ## शॅडो राउटिंग प्रदात्यांची शॅडो / A-B तुलना ही **स्वतंत्र REST पृष्ठभाग नाही** — ती कॉम्बो राउटिंगद्वारे कॉन्फिगर केली जाते ([ऑटो-कॉम्बो](../routing/AUTO-COMBO.md) पहा). प्रत्येक कॉम्बोसाठीची तुलना मेट्रिक्स `GET /api/combos/metrics` द्वारे उपलब्ध केली जातात. --- ## गार्डरेल्स रनटाइम गार्डरेल्सची (PII शोध, प्रॉम्प्ट इंजेक्शन शोध, व्हिजन ब्रिजिंग) तपासणी करा. गार्डरेल्स प्रत्येक विनंतीवर चालतात; प्रत्येक कॉलसाठी वगळण्याचा पर्याय `x-omniroute-disabled-guardrails` विनंती हेडरद्वारे उपलब्ध आहे — कायमस्वरूपी सक्षम/अक्षम करण्यासाठी कोणताही पृष्ठभाग नाही. | पद्धत | पथ | वर्णन | | ----- | ---------------------- | ------------------------------------------------------------------------------------------------ | | GET | `/api/guardrails` | नोंदणीकृत गार्डरेल्स आणि त्यांची स्थिती (नाव / सक्षम / प्राधान्य) सूचीबद्ध करा | | POST | `/api/guardrails/test` | नमुना इनपुटवर प्री-कॉल पाइपलाइनची ड्राय-रन चाचणी करा — मुख्य भाग: `{input, disabledGuardrails?}` | **प्रमाणीकरण:** व्यवस्थापन सत्र आवश्यक आहे. संपूर्ण तपशीलांसाठी [सुरक्षा > गार्डरेल्स](../security/GUARDRAILS.md) पहा. --- --- ## प्रमाणीकरण चार क्रेडेन्शियल प्रकारांसाठी (डॅशबोर्ड सत्र, स्थानिक CLI टोकन, `oma_live_…` Access Token, व्यवस्थापन-व्याप्ती असलेली API की) आणि ते इन्फरन्स कींपेक्षा कसे वेगळे आहेत हे जाणून घेण्यासाठी [व्यवस्थापन प्रमाणीकरण](../guides/MANAGEMENT-AUTH.md) पहा. - डॅशबोर्ड मार्ग (`/dashboard/*`) `auth_token` कुकी वापरतात - लॉगिन जतन केलेला पासवर्ड हॅश वापरते; उपलब्ध नसल्यास `INITIAL_PASSWORD` वापरला जातो - `requireLogin` हे `/api/settings/require-login` द्वारे बदलता येते - `REQUIRE_API_KEY=true` असताना `/v1/*` मार्गांना पर्यायाने Bearer API की आवश्यक असते - या संदर्भातील "व्यवस्थापन टोकन" / "व्यवस्थापन-व्याप्ती असलेली API की" म्हणजे त्या मार्गदर्शिकेतील प्रकारांपैकी एक — कोणताही अपरिभाषित अतिरिक्त गुप्त प्रकार नव्हे > **ब्रेकिंग बदल (v3.8.0)** — `/api/v1/agents/tasks/*` आणि कूलडाउन व्यवस्थापन एंडपॉइंट्सना आता **व्यवस्थापन प्रमाणीकरण** (डॅशबोर्ड `auth_token` कुकी किंवा व्यवस्थापन-व्याप्ती असलेली API की) आवश्यक आहे. पूर्वी प्रमाणीकरणाशिवाय हे मार्ग कॉल करणाऱ्या क्लायंटना `401 Unauthorized` प्रतिसाद मिळेल. कमिट `588a0333` (`fix(auth): require management auth for agent and cooldown APIs`) पहा.