# API Reference (ਪੰਜਾਬੀ) 🌐 **Languages:** 🇺🇸 [English](../../../../reference/API_REFERENCE.md) · 🇪🇹 [am](../../../am/docs/reference/API_REFERENCE.md) · 🇸🇦 [ar](../../../ar/docs/reference/API_REFERENCE.md) · 🇦🇿 [az](../../../az/docs/reference/API_REFERENCE.md) · 🇧🇬 [bg](../../../bg/docs/reference/API_REFERENCE.md) · 🇧🇩 [bn](../../../bn/docs/reference/API_REFERENCE.md) · 🇧🇦 [bs](../../../bs/docs/reference/API_REFERENCE.md) · 🇨🇿 [cs](../../../cs/docs/reference/API_REFERENCE.md) · 🇩🇰 [da](../../../da/docs/reference/API_REFERENCE.md) · 🇩🇪 [de](../../../de/docs/reference/API_REFERENCE.md) · 🇬🇷 [el](../../../el/docs/reference/API_REFERENCE.md) · 🇪🇸 [es](../../../es/docs/reference/API_REFERENCE.md) · 🇪🇪 [et](../../../et/docs/reference/API_REFERENCE.md) · 🇮🇷 [fa](../../../fa/docs/reference/API_REFERENCE.md) · 🇫🇮 [fi](../../../fi/docs/reference/API_REFERENCE.md) · 🇫🇷 [fr](../../../fr/docs/reference/API_REFERENCE.md) · 🇮🇪 [ga](../../../ga/docs/reference/API_REFERENCE.md) · 🇮🇳 [gu](../../../gu/docs/reference/API_REFERENCE.md) · 🇳🇬 [ha](../../../ha/docs/reference/API_REFERENCE.md) · 🇮🇱 [he](../../../he/docs/reference/API_REFERENCE.md) · 🇮🇳 [hi](../../../hi/docs/reference/API_REFERENCE.md) · 🇭🇷 [hr](../../../hr/docs/reference/API_REFERENCE.md) · 🇭🇺 [hu](../../../hu/docs/reference/API_REFERENCE.md) · 🇦🇲 [hy](../../../hy/docs/reference/API_REFERENCE.md) · 🇮🇩 [id](../../../id/docs/reference/API_REFERENCE.md) · 🇳🇬 [ig](../../../ig/docs/reference/API_REFERENCE.md) · 🇮🇹 [it](../../../it/docs/reference/API_REFERENCE.md) · 🇯🇵 [ja](../../../ja/docs/reference/API_REFERENCE.md) · 🇬🇪 [ka](../../../ka/docs/reference/API_REFERENCE.md) · 🇰🇭 [km](../../../km/docs/reference/API_REFERENCE.md) · 🇮🇳 [kn](../../../kn/docs/reference/API_REFERENCE.md) · 🇰🇷 [ko](../../../ko/docs/reference/API_REFERENCE.md) · 🇱🇹 [lt](../../../lt/docs/reference/API_REFERENCE.md) · 🇱🇻 [lv](../../../lv/docs/reference/API_REFERENCE.md) · 🇮🇳 [ml](../../../ml/docs/reference/API_REFERENCE.md) · 🇮🇳 [mr](../../../mr/docs/reference/API_REFERENCE.md) · 🇲🇾 [ms](../../../ms/docs/reference/API_REFERENCE.md) · 🇲🇹 [mt](../../../mt/docs/reference/API_REFERENCE.md) · 🇲🇲 [my](../../../my/docs/reference/API_REFERENCE.md) · 🇳🇵 [ne](../../../ne/docs/reference/API_REFERENCE.md) · 🇳🇱 [nl](../../../nl/docs/reference/API_REFERENCE.md) · 🇳🇴 [no](../../../no/docs/reference/API_REFERENCE.md) · 🇮🇳 [or](../../../or/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` ਸੈੱਟ ਕਰੋ (no-cache ਦੇ ਅਨੁਰੂਪ; ਪ੍ਰਤੀ-ਕਾਲ ਟੋਕਨ/ਲਾਗਤ ਓਵਰਹੈੱਡ ਤੋਂ ਬਚਦਾ ਹੈ) | | `X-OmniRoute-Progress` | ਬੇਨਤੀ | ਪ੍ਰਗਤੀ ਇਵੈਂਟਾਂ ਲਈ `true` ਸੈੱਟ ਕਰੋ | | `X-Session-Id` | ਬੇਨਤੀ | ਬਾਹਰੀ ਸੈਸ਼ਨ ਐਫ਼ਿਨਿਟੀ ਲਈ ਸਟਿੱਕੀ ਸੈਸ਼ਨ ਕੁੰਜੀ | | `x_session_id` | ਬੇਨਤੀ | ਅੰਡਰਸਕੋਰ ਰੂਪ ਵੀ ਸਵੀਕਾਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ (ਸਿੱਧਾ HTTP) | | `X-OmniRoute-Session-Id` | ਬੇਨਤੀ | ਕਾਲਰ ਵੱਲੋਂ ਦਿੱਤਾ ਸੈਸ਼ਨ/ਗੱਲਬਾਤ ਟੈਗ (ਮੈਮੋਰੀ ਨੂੰ ਵੀ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ)। ਮੌਜੂਦ ਹੋਣ 'ਤੇ, ਪ੍ਰਤੀ-ਸੈਸ਼ਨ ਲਾਗਤ ਨਿਰਧਾਰਣ ਲਈ ਬਿਨਾਂ ਬਦਲਾਅ ਦੇ `call_logs.session_tag` ਵਿੱਚ ਸਥਾਈ ਤੌਰ 'ਤੇ ਸੰਭਾਲਿਆ ਜਾਂਦਾ ਹੈ (#8249) — ਗੈਰਹਾਜ਼ਰ ਹੋਣ 'ਤੇ ਕਦੇ ਵੀ ਤਿਆਰ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ | | `Idempotency-Key` | ਬੇਨਤੀ | ਡੀਡੁਪ ਕੁੰਜੀ (5s ਵਿੰਡੋ) | | `X-Request-Id` | ਬੇਨਤੀ | ਵਿਕਲਪਿਕ ਡੀਡੁਪ ਕੁੰਜੀ | | `X-OmniRoute-Cache` | ਜਵਾਬ | `HIT` ਜਾਂ `MISS` (ਗੈਰ-ਸਟ੍ਰੀਮਿੰਗ) | | `X-OmniRoute-Idempotent` | ਜਵਾਬ | ਜੇ ਡੀਡੁਪਲੀਕੇਟ ਕੀਤਾ ਗਿਆ ਹੋਵੇ ਤਾਂ `true` | | `X-OmniRoute-Progress` | ਜਵਾਬ | ਜੇ ਪ੍ਰਗਤੀ ਟ੍ਰੈਕਿੰਗ ਚਾਲੂ ਹੋਵੇ ਤਾਂ `enabled` | | `X-OmniRoute-Session-Id` | ਜਵਾਬ | OmniRoute ਦੁਆਰਾ ਵਰਤੀ ਗਈ ਪ੍ਰਭਾਵੀ ਸੈਸ਼ਨ 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`। ਉਸ ਇੰਜਣ ਲਈ ਪ੍ਰਤੀ-ਬੇਨਤੀ ਵਿਕਲਪਿਕ। | | `` | ਇੱਕ ਨਾਮਿਤ ਕੰਬੋ, ਪਹਿਲਾਂ ਨਾਮ (ਕੇਸ-ਅਸੰਵੇਦਨਸ਼ੀਲ) ਦੁਆਰਾ, ਫਿਰ ਆਈਡੀ ਦੁਆਰਾ ਮੇਲ ਖਾਂਦਾ ਹੈ। | ਨੋਟਸ: - ਅਣਜਾਣ ਮੁੱਲਾਂ ਨੂੰ ਅਣਡਿੱਠ ਕੀਤਾ ਜਾਂਦਾ ਹੈ (ਬੇਨਤੀ ਨੂੰ ਕਦੇ ਵੀ ਰੱਦ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ); ਰੈਜ਼ੋਲੂਸ਼ਨ ਆਮ ਆਪਰੇਟਰ ਤਰਜੀਹ 'ਤੇ ਆ ਜਾਂਦਾ ਹੈ। - ਜੇਕਰ ਕਈ ਕੰਬੋਜ਼ ਇੱਕ ਨਾਮ ਸਾਂਝਾ ਕਰਦੇ ਹਨ, ਤਾਂ ਇੱਕ ਨਿਰਧਾਰਤ ਮੈਚ ਲਈ ਕੰਬੋ **id** ਪਾਸ ਕਰੋ। - ਇੱਕ ਕੰਬੋ ਜਿਸਦਾ ਨਾਮ `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`) ਅਤੇ ਕਦੇ ਵੀ embeddings ਜਾਂ rerank ਮੁਹੱਈਆ ਨਹੀਂ ਕਰਦਾ। ਮਲਟੀਮੋਡਲ ਸਮਰਥਨ ਦਰਸਾਉਣ ਵਾਲੇ ਰਜਿਸਟਰੀ ਮਾਡਲ ਵੱਧ ਤੋਂ ਵੱਧ 32 ਪ੍ਰਦਾਤਾ-ਨਿਰਪੱਖ ਸੰਰਚਿਤ ਆਈਟਮਾਂ ਵੀ ਸਵੀਕਾਰ ਕਰਦੇ ਹਨ। ਮੀਡੀਆ ਆਈਟਮ ਕਿਸਮਾਂ `text`, `image`, `audio`, `video`, ਅਤੇ `document` ਹਨ। ਉਨ੍ਹਾਂ ਦਾ ਮੀਡੀਆ `source` ਜਾਂ ਤਾਂ `{"type":"url","url":"https://..."}` ਹੁੰਦਾ ਹੈ ਜਾਂ `{"type":"base64","data":"...","media_type":"..."}`। Jina v5 Omni (`jina-ai/jina-embeddings-v5-omni-small`, `jina-ai/jina-embeddings-v5-omni-nano`, ਅਤੇ ਫੈਮਿਲੀ ਉਪਨਾਮ `jina-ai/jina-embeddings-v5-omni` → omni-small) Jina ਦੇ ਮੂਲ EmbeddingsV5Request ਦਸਤਾਵੇਜ਼ ਵੀ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ ਅਤੇ ਉਨ੍ਹਾਂ ਨੂੰ **ਬਿਨਾਂ ਬਦਲਾਅ ਦੇ ਅੱਗੇ ਭੇਜਦਾ ਹੈ** `https://api.jina.ai/v1/embeddings` ਵੱਲ: ```json { "model": "jina-ai/jina-embeddings-v5-omni-small", "task": "retrieval.query", "normalized": true, "input": [ { "text": "a red bicycle" }, { "image": "https://example.com/bike.png" }, { "content": [{ "text": "caption" }, { "image": "data:image/png;base64,..." }] } ] } ``` ਮੂਲ `{ image | audio | video | pdf }` ਮੁੱਲ ਇੱਕ ਜਨਤਕ HTTPS URL, ਇੱਕ `data:` URI, ਜਾਂ ਕੱਚਾ base64 ਹੋ ਸਕਦੇ ਹਨ। OmniRoute ਇਨ੍ਹਾਂ ਆਬਜੈਕਟਾਂ ਨੂੰ ਸਟ੍ਰਿੰਗ ਵਿੱਚ ਨਹੀਂ ਬਦਲਦਾ ਜਾਂ ਮੂਲ image URLs ਨੂੰ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕਰਦਾ — Jina ਜਨਤਕ ਮੀਡੀਆ ਨੂੰ ਖੁਦ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ। ਵਾਧੂ Jina ਫੀਲਡ (`task`, `normalized`, `truncate`, `embedding_type`) ਅੱਗੇ ਭੇਜੇ ਜਾਂਦੇ ਹਨ। ਸਿਰਫ਼ ਟੈਕਸਟ ਵਾਲੇ Jina SKUs ਅਜੇ ਵੀ ਗੈਰ-ਟੈਕਸਟ ਦਸਤਾਵੇਜ਼ਾਂ ਨੂੰ ਅਸਵੀਕਾਰ ਕਰਦੇ ਹਨ। ਸੁਰੱਖਿਆ ਅਤੇ ਟ੍ਰਾਂਸਪੋਰਟ ਸੀਮਾਵਾਂ: - ਰਿਮੋਟ ਮੀਡੀਆ URLs ਜਨਤਕ HTTPS ਹੋਣੇ ਲਾਜ਼ਮੀ ਹਨ। ਕੈਨੋਨਿਕਲ `{type,source:url}` ਆਈਟਮਾਂ ਨੂੰ ਸਰਵਰ ਪਾਸੇ ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ (ਰੀਡਾਇਰੈਕਟ ਦੀ ਮੁੜ-ਪ੍ਰਮਾਣਿਕਤਾ, ਟਾਈਮਆਉਟ, ਆਕਾਰ ਸੀਮਾਵਾਂ, ਜਨਤਕ DNS, ਕਨੈਕਸ਼ਨ ਪਿਨਿੰਗ) ਅਤੇ ਪ੍ਰਦਾਤਾ ਕਾਲ ਤੋਂ ਪਹਿਲਾਂ ਇਨਲਾਈਨ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। Jina ਦੇ ਮੂਲ `{image:"https://..."}` ਆਈਟਮਾਂ ਨੂੰ ਉਸੇ ਜਨਤਕ-HTTPS ਜਾਂਚ ਤੋਂ ਬਾਅਦ ਜਿਵੇਂ ਦਾ ਤਿਵੇਂ ਅੱਗੇ ਭੇਜਿਆ ਜਾਂਦਾ ਹੈ; Jina URL ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ। - ਇਨਲਾਈਨ base64 ਮੀਡੀਆ ਪ੍ਰਤੀ ਆਈਟਮ ਡੀਕੋਡ ਕੀਤੇ 8 MiB ਅਤੇ ਪੂਰੀ ਬੇਨਤੀ ਵਿੱਚ ਡੀਕੋਡ ਕੀਤੇ 16 MiB ਤੱਕ ਸੀਮਿਤ ਹੈ। ਪ੍ਰਦਾਤਾ ਰੂਪਾਂਤਰਨ (ਕੈਨੋਨਿਕਲ ਆਈਟਮਾਂ ਨੂੰ ਕਦੇ ਵੀ ਬਿਨਾਂ ਬਦਲਾਅ ਦੇ ਅੱਗੇ ਨਹੀਂ ਭੇਜਿਆ ਜਾਂਦਾ): - Jina ਮਲਟੀਮੋਡਲ ਮਾਡਲ: ਹਰ ਸਿਖਰਲੇ-ਪੱਧਰ ਦੀ ਆਈਟਮ ਇਨਲਾਈਨ ਮੀਡੀਆ ਲਈ data URIs ਵਰਤਦਿਆਂ ਇੱਕ ਮੋਡੈਲਿਟੀ-ਕੁੰਜੀ ਵਾਲਾ ਆਬਜੈਕਟ (`text` / `image` / `audio` / `video` / `pdf`) ਬਣ ਜਾਂਦੀ ਹੈ; ਪ੍ਰਤੀ ਸਿਖਰਲੇ-ਪੱਧਰ ਦੀ ਆਈਟਮ ਇੱਕ ਵੈਕਟਰ। - Gemini Embedding 2 ਫੈਮਿਲੀ: ਇੱਕ ਸਿਖਰਲੇ-ਪੱਧਰ ਦੀ ਐਰੇ `content.parts` (`text` ਜਾਂ `inline_data`) ਵਾਲੀ ਇੱਕੋ ਮੂਲ `models/{model}:embedContent` ਬੇਨਤੀ ਬਣ ਜਾਂਦੀ ਹੈ। - 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 ਪ੍ਰਦਾਤਾ ਚੁਣਦਾ ਹੈ; ਸਿਰਫ਼ ਮਾਡਲ id (ਉਦਾਹਰਨ ਲਈ, `mistral-ocr-latest`) ਆਪਣੇ ਰਜਿਸਟਰ ਕੀਤੇ ਪ੍ਰਦਾਤਾ ਨਾਲ ਰਿਜ਼ਾਲਵ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਜੇ `model` ਨਾ ਦਿੱਤਾ ਗਿਆ ਹੋਵੇ ਤਾਂ ਇਹ ਮੂਲ ਰੂਪ ਵਿੱਚ Mistral (`mistral-ocr-latest`) ਵਰਤਦਾ ਹੈ। ਰਜਿਸਟਰ ਕੀਤੇ ਪ੍ਰਦਾਤਾ (`open-sse/config/ocrRegistry.ts`): | ਪ੍ਰਦਾਤਾ id | ਮਾਡਲ id | `model` ਦਾ ਮੁੱਲ | ਟਿੱਪਣੀਆਂ | | ----------------------------- | -------------------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | | `mistral` | `mistral-ocr-latest` | `mistral/mistral-ocr-latest` (ਜਾਂ ਸਿਰਫ਼ `mistral-ocr-latest`) | ਸਮਕਾਲੀ — ਜਵਾਬ ਸਿੱਧਾ ਇੱਕੋ ਅੱਪਸਟ੍ਰੀਮ ਕਾਲ ਤੋਂ ਵਾਪਸ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। | | `azure-document-intelligence` | `prebuilt-read` | `azure-document-intelligence/prebuilt-read` | ਅਸਮਕਾਲੀ ਅੱਪਸਟ੍ਰੀਮ (`analyze` + ਪੋਲ) — ਹੇਠਾਂ ਦੇਖੋ। | | `vertex-deepseek-ocr` | `deepseek-ocr-maas` | `vertex-deepseek-ocr/deepseek-ocr-maas` | ਸਮਕਾਲੀ, Vertex AI ਦੇ `openapi/chat/completions` ਪਾਰਟਨਰ ਐਂਡਪੌਇੰਟ ਰਾਹੀਂ — ਪ੍ਰਮਾਣੀਕਰਨ/URL ਲਈ ਹੇਠਾਂ ਦੇਖੋ। | ਤਿੰਨੇ ਪ੍ਰਦਾਤਾ ਇੱਕੋ Mistral-ਆਕਾਰ ਵਾਲੀ ਬਾਡੀ ਵਿੱਚ ਜਵਾਬ ਦਿੰਦੇ ਹਨ: ```json { "pages": [{ "index": 0, "markdown": "# Extracted text..." }], "model": "mistral-ocr-latest", "usage_info": { "pages_processed": 1 } } ``` ### Azure Document Intelligence ਪੋਲ ਪ੍ਰਵਾਹ Azure Document Intelligence ਦਾ `analyze` API ਅਸਮਕਾਲੀ ਹੈ: ਸ਼ੁਰੂਆਤੀ ਬੇਨਤੀ ਬਾਡੀ ਦੀ ਬਜਾਏ ਇੱਕ `Operation-Location` ਹੈਡਰ ਵਾਪਸ ਕਰਦੀ ਹੈ, ਅਤੇ ਨਤੀਜੇ ਲਈ ਪੋਲ ਕਰਨਾ ਲਾਜ਼ਮੀ ਹੈ। ਹੈਂਡਲਰ (`open-sse/handlers/ocr.ts`) ਉਸ URL ਨੂੰ ਹਰ ਸਕਿੰਟ, ਵੱਧ ਤੋਂ ਵੱਧ 30 ਕੋਸ਼ਿਸ਼ਾਂ ਤੱਕ ਪੋਲ ਕਰਦਾ ਹੈ, ਕਿਸੇ non-`ok` ਪੋਲ ਜਵਾਬ ਜਾਂ `"failed"` ਸਥਿਤੀ ਉੱਤੇ ਤੁਰੰਤ ਅਸਫਲ ਹੋ ਜਾਂਦਾ ਹੈ (ਪੋਲ ਕਰਨਾ ਜਾਰੀ ਨਹੀਂ ਰੱਖਦਾ), ਅਤੇ ਜੇ ਕੋਸ਼ਿਸ਼ਾਂ ਦੀ ਸੀਮਾ ਖ਼ਤਮ ਹੋਣ ਤੋਂ ਬਾਅਦ ਵੀ ਕਾਰਵਾਈ ਚੱਲ ਰਹੀ ਹੋਵੇ ਤਾਂ `504` ਵਾਪਸ ਕਰਦਾ ਹੈ। ਅੰਤਿਮ Azure ਜਵਾਬ ਨੂੰ ਕਾਲਰ ਨੂੰ ਵਾਪਸ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ Mistral ਵੱਲੋਂ ਵਰਤੇ ਜਾਂਦੇ ਉਸੇ `pages`/`markdown` ਰੂਪ ਵਿੱਚ ਨਾਰਮਲਾਈਜ਼ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਇਸ ਲਈ ਕਲਾਇੰਟ ਕੋਡ ਨੂੰ ਪ੍ਰਦਾਤਾ ਲਈ ਵਿਸ਼ੇਸ਼ ਕੇਸ ਬਣਾਉਣ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ। ### Vertex AI DeepSeek OCR ਪ੍ਰਮਾਣੀਕਰਨ ਅਤੇ ਐਂਡਪੌਇੰਟ ਰਿਜ਼ੋਲਿਊਸ਼ਨ `vertex-deepseek-ocr` ਉਹੀ Vertex AI ਪ੍ਰਮਾਣੀਕਰਨ ਦੁਬਾਰਾ ਵਰਤਦਾ ਹੈ ਜਿਸਦਾ OmniRoute ਪਹਿਲਾਂ ਹੀ ਚੈਟ/ਚਿੱਤਰ ਟ੍ਰੈਫ਼ਿਕ (`open-sse/executors/vertex.ts`) ਲਈ ਸਮਰਥਨ ਕਰਦਾ ਹੈ: ਕਨੈਕਸ਼ਨ ਦੀ API ਕੁੰਜੀ ਜਾਂ ਤਾਂ Service Account JSON ਕ੍ਰਿਡੈਂਸ਼ੀਅਲ ਹੁੰਦੀ ਹੈ (ਜਿਸਨੂੰ JWT-bearer ਪ੍ਰਵਾਹ ਰਾਹੀਂ ਥੋੜ੍ਹੇ ਸਮੇਂ ਲਈ ਵੈਧ OAuth ਐਕਸੈੱਸ ਟੋਕਨ ਨਾਲ ਬਦਲਿਆ ਜਾਂਦਾ ਹੈ) ਜਾਂ ਪਹਿਲਾਂ ਤੋਂ ਬਣਿਆ OAuth ਐਕਸੈੱਸ ਟੋਕਨ ਹੁੰਦਾ ਹੈ, ਜੋ ਜਿਵੇਂ ਹੈ ਤਿਵੇਂ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਅੱਪਸਟ੍ਰੀਮ ਐਂਡਪੌਇੰਟ URL, Vertex ਦਾ ਆਮ `openapi/chat/completions` ਪਾਰਟਨਰ ਐਂਡਪੌਇੰਟ ਹੈ, ਜੋ ਕਨੈਕਸ਼ਨ ਦੇ ਪ੍ਰੋਜੈਕਟ ਅਤੇ ਰੀਜਨ ਤੋਂ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ — ਸਪਸ਼ਟ `providerSpecificData.project`/`providerSpecificData.region` ਨੂੰ ਹਮੇਸ਼ਾ ਤਰਜੀਹ ਮਿਲਦੀ ਹੈ; ਨਹੀਂ ਤਾਂ ਪ੍ਰੋਜੈਕਟ Service Account JSON ਦੇ `project_id` ਤੋਂ ਲਿਆ ਜਾਂਦਾ ਹੈ ਅਤੇ ਰੀਜਨ ਮੂਲ ਰੂਪ ਵਿੱਚ `us-central1` ਹੁੰਦਾ ਹੈ। ਦੋਵੇਂ ਰਿਜ਼ੋਲਿਊਸ਼ਨ `open-sse/handlers/ocr.ts` (`resolveVertexOcrAccessToken`, `resolveVertexOcrBaseUrl`) ਵਿੱਚ ਹੁੰਦੇ ਹਨ, ਜਿਨ੍ਹਾਂ ਨੂੰ `handleOcr` ਵੱਲ ਭੇਜਣ ਤੋਂ ਪਹਿਲਾਂ `src/app/api/v1/ocr/route.ts` ਵਰਤਦਾ ਹੈ। --- ## ਮਾਡਲਾਂ ਦੀ ਸੂਚੀ ```bash GET /v1/models Authorization: Bearer your-api-key → OpenAI ਫਾਰਮੈਟ ਵਿੱਚ ਸਾਰੇ ਚੈਟ, ਐਮਬੈਡਿੰਗ ਅਤੇ ਚਿੱਤਰ ਮਾਡਲ + ਕੰਬੋ ਵਾਪਸ ਕਰਦਾ ਹੈ ``` ### ਮਾਡਲ id ਪ੍ਰੀਫਿਕਸ (`?prefix=`) ਜ਼ਿਆਦਾਤਰ ਮਾਡਲ ਇੱਕ **ਪ੍ਰਦਾਤਾ ਪ੍ਰੀਫਿਕਸ** ਅਧੀਨ ਦਰਸਾਏ ਜਾਂਦੇ ਹਨ। ਤੁਹਾਨੂੰ ਕਿਹੜਾ ਪ੍ਰੀਫਿਕਸ ਮਿਲਦਾ ਹੈ, ਇਹ `MODELS_CATALOG_PREFIX_MODE` ਫੀਚਰ ਫਲੈਗ ਦੁਆਰਾ ਨਿਯੰਤਰਿਤ ਹੁੰਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਇੱਕ ਕੁਐਰੀ ਪੈਰਾਮੀਟਰ ਨਾਲ **ਹਰ ਬੇਨਤੀ ਲਈ** ਓਵਰਰਾਈਡ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ — ਇਹ ਉਸ ਕਲਾਇੰਟ ਲਈ ਲਾਭਦਾਇਕ ਹੈ ਜੋ ਬਾਕੀ ਸਾਰਿਆਂ ਵਾਸਤੇ ਸਰਵਰ-ਵਿਆਪੀ ਸੈਟਿੰਗ ਬਦਲੇ ਬਿਨਾਂ ਇੱਕ ਸਾਫ਼ ਸੂਚੀ ਚਾਹੁੰਦਾ ਹੈ: ```bash GET /v1/models?prefix=alias # ਹਰ ਮਾਡਲ ਲਈ ਇੱਕ id — ਛੋਟਾ ਉਪਨਾਮ ਪ੍ਰੀਫਿਕਸ GET /v1/models?prefix=dual # ਦੋਵੇਂ ਰੂਪ (ਸਰਵਰ ਦਾ ਡਿਫਾਲਟ) GET /v1/models?prefix=canonical # ਸਿਰਫ਼ ਪੂਰਾ ਪ੍ਰਦਾਤਾ-id ਪ੍ਰੀਫਿਕਸ ``` | ਮੋਡ | ਜਾਰੀ ਕਰਦਾ ਹੈ | ਨੋਟਸ | | ----------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `dual` | `cc/claude-sonnet-4-6` **ਅਤੇ** `claude/claude-sonnet-4-6` | **ਡਿਫਾਲਟ।** ਦੋਵੇਂ ids ਇੱਕੋ ਮਾਡਲ ਵੱਲ ਰੂਟ ਕਰਦੇ ਹਨ; ਇਸਨੂੰ ਇਸ ਲਈ ਰੱਖਿਆ ਗਿਆ ਹੈ ਤਾਂ ਜੋ ਕਿਸੇ ਵੀ ਰੂਪ ਨੂੰ ਹਾਰਡਕੋਡ ਕਰਨ ਵਾਲੀਆਂ ਕਲਾਇੰਟ ਸੰਰਚਨਾਵਾਂ ਕੰਮ ਕਰਦੀਆਂ ਰਹਿਣ। ਇਹ ਕੈਟਾਲਾਗ ਨੂੰ ਲਗਭਗ ਦੁੱਗਣਾ ਕਰਦਾ ਹੈ। | | `alias` | `cc/claude-sonnet-4-6` | ਹਰ ਮਾਡਲ ਲਈ ਇੱਕ ਐਂਟਰੀ। ਵੱਖਰਾ ਉਪਨਾਮ ਨਾ ਰੱਖਣ ਵਾਲੇ ਪ੍ਰਦਾਤਾ ਵੀ ਆਪਣੀ ਐਂਟਰੀ ਜਾਰੀ ਕਰਦੇ ਹਨ, ਇਸ ਲਈ ਕੁਝ ਵੀ ਗੁੰਮ ਨਹੀਂ ਹੁੰਦਾ। | | `canonical` | `claude/claude-sonnet-4-6` | ਪੂਰੇ ਪ੍ਰਦਾਤਾ-id ਪ੍ਰੀਫਿਕਸ ਹੇਠ ਹਰ ਮਾਡਲ ਲਈ ਇੱਕ ਐਂਟਰੀ। ਵੱਖਰਾ ਉਪਨਾਮ ਨਾ ਰੱਖਣ ਵਾਲੇ ਪ੍ਰਦਾਤਾ (ਉਦਾਹਰਨ ਲਈ `antigravity/…`, `agy/…`) ਇੱਥੇ ਵੀ ਆਪਣਾ ਇਕਲੌਤਾ id ਜਾਰੀ ਕਰਦੇ ਹਨ, ਇਸ ਲਈ ਕੁਝ ਵੀ ਗੁੰਮ ਨਹੀਂ ਹੁੰਦਾ। | ਕਿਸੇ `dual`-ਮੋਡ ਮਿਰਰ ਨੂੰ ਕੁਐਰੀ ਪੈਰਾਮੀਟਰ ਤੋਂ ਬਿਨਾਂ ਵੀ ਪਛਾਣਿਆ ਜਾ ਸਕਦਾ ਹੈ: ਇਸ ਵਿੱਚ ਮੁੱਖ id ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਇੱਕ `parent` ਫੀਲਡ ਹੁੰਦਾ ਹੈ। ਮਾਡਲ ਚੋਣਕਾਰ ਦਿਖਾਉਣ ਵਾਲੇ ਕਲਾਇੰਟਾਂ ਨੂੰ `?prefix=alias` ਦੀ ਬੇਨਤੀ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ — ਇਹੀ [OmniCopilot VS Code ਐਕਸਟੈਂਸ਼ਨ](../guides/VSCODE-COPILOT.md) ਕਰਦਾ ਹੈ। ### ਵੱਖਰੇ ਤੌਰ 'ਤੇ ਲੁਕਾਏ ਗਏ ਚੈਟ ਮਾਡਲ ਆਪਣੇ ਪ੍ਰਦਾਤਾ ਪੰਨੇ 'ਤੇ **ਲੁਕਿਆ ਹੋਇਆ** ਵਜੋਂ ਚਿੰਨ੍ਹਿਤ ਮਾਡਲ ਨੂੰ ਕੈਟਾਲਾਗ ਵਿੱਚੋਂ ਬਾਹਰ ਰੱਖਿਆ ਜਾਂਦਾ ਹੈ ਅਤੇ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਬੇਨਤੀ ਕੀਤੇ ਜਾਣ 'ਤੇ HTTP `404` / `model_not_found` ਨਾਲ ਅਸਵੀਕਾਰ ਕਰ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ। ਜਾਂਚ ਹੱਲ ਕੀਤੇ ਗਏ ਪ੍ਰਦਾਤਾ ਅਤੇ ਮਾਡਲ ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ, ਜਿਸ ਵਿੱਚ ਪ੍ਰਦਾਤਾ ਉਪਨਾਮ, ਅਨੁਕੂਲ-ਪ੍ਰਦਾਤਾ ਨੋਡ ਪ੍ਰੀਫਿਕਸ ਅਤੇ ਕਨੈਕਸ਼ਨ ਡਿਫਾਲਟ ਸ਼ਾਮਲ ਹਨ। ਕੋਈ ਕੰਬੋ ਲੁਕਾਏ ਹੋਏ ਟਾਰਗੇਟਾਂ ਨੂੰ ਛੱਡ ਦਿੰਦਾ ਹੈ ਅਤੇ ਦਿਸਣਯੋਗ ਸਹੋਦਰ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦਾ ਹੈ; ਜਦੋਂ ਕੋਈ ਚਲਾਉਣਯੋਗ ਟਾਰਗੇਟ ਬਾਕੀ ਨਹੀਂ ਰਹਿੰਦਾ, ਤਾਂ ਇਹ ਉਹੀ ਗਲਤੀ ਕੋਡ ਵਾਪਸ ਕਰਦਾ ਹੈ। ਲੁਕਾਅ ਹਟਾਉਣਾ ਅਗਲੀ ਬੇਨਤੀ ਤੋਂ ਪ੍ਰਭਾਵੀ ਹੁੰਦਾ ਹੈ। ਸਿਰਫ਼-ਚਿੱਤਰ ਦਿੱਖ ਓਵਰਰਾਈਡ ਉਸੇ ID ਵਾਲੇ ਚੈਟ ਮਾਡਲ ਨੂੰ ਨਹੀਂ ਲੁਕਾਉਂਦੇ। ਇਹ ਵੱਖਰੀ ਮਾਡਲ ਸੈਟਿੰਗ [ਮਾਡਲ ਐਕਸਪੋਜ਼ਰ ਮਨਜ਼ੂਰੀ/ਇਨਕਾਰ ਸੂਚੀਆਂ](../routing/MODEL_EXPOSURE_LIST.md) ਤੋਂ ਅਲੱਗ ਹੈ, ਜੋ ਸਪਸ਼ਟ ਡਿਸਪੈਚ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਦਿਆਂ ਕੈਟਾਲਾਗ ਵਿਗਿਆਪਨ ਅਤੇ ਆਟੋ-ਰੂਟਿੰਗ ਉਮੀਦਵਾਰਾਂ ਨੂੰ ਫਿਲਟਰ ਕਰਦੀਆਂ ਹਨ। API-ਕੁੰਜੀ ਮਾਡਲ ਇਜਾਜ਼ਤਾਂ ਸੁਤੰਤਰ ਤੌਰ 'ਤੇ ਲਾਗੂ ਹੁੰਦੀਆਂ ਰਹਿੰਦੀਆਂ ਹਨ। ਡਿਫਾਲਟ ਕੈਟਾਲਾਗ ਪ੍ਰੀਫਿਕਸ ਮੋਡ `dual` ਹੀ ਰਹਿੰਦਾ ਹੈ। ### ਬਿਨਾਂ-ਸੋਚ ਵਾਲੇ ਮਾਡਲ ਵੇਰੀਐਂਟ ਸੋਚਣ ਦੀ ਸਮਰੱਥਾ ਵਾਲੇ Claude ਮਾਡਲਾਂ ਲਈ, `/v1/models` ਇੱਕ **ਬਿਨਾਂ-ਸੋਚ ਵਾਲਾ** ਵੇਰੀਐਂਟ ਵੀ ਦਰਸਾਉਂਦਾ ਹੈ, ਜਿਸਦੇ id ਅੱਗੇ `claude-3-omniroute-no-thinking/` ਲੱਗਿਆ ਹੁੰਦਾ ਹੈ: ``` claude-3-omniroute-no-thinking// ``` ਇਸ id ਨੂੰ ਚੁਣਨਾ (ਉਦਾਹਰਨ ਲਈ, ਇੱਕ Claude Code ਸੰਰਚਨਾ ਵਿੱਚ ਜੋ ਹਮੇਸ਼ਾ `thinking` ਬਲਾਕ ਜੋੜਦੀ ਹੈ) ਤਰਕ ਨੂੰ ਦਬਾ ਕੇ ਵਾਪਸ ਅਸਲ `/` ਵਜੋਂ ਹੱਲ ਹੁੰਦਾ ਹੈ — `/v1/messages` ਪਾਥ 'ਤੇ `thinking:{type:"disabled"}`, ਜਾਂ `/v1/chat/completions` ਪਾਥ 'ਤੇ `reasoning`/`reasoning_effort` ਫੀਲਡ ਹਟਾ ਦਿੱਤੇ ਜਾਂਦੇ ਹਨ। ਇਹ ਵੇਰੀਐਂਟ ਸਿਰਫ਼ ਉਹਨਾਂ Claude-ਪਰਿਵਾਰ ਮਾਡਲਾਂ ਲਈ ਸੂਚੀਬੱਧ ਹੁੰਦਾ ਹੈ ਜੋ ਸੋਚਣ ਦਾ ਸਮਰਥਨ ਕਰਦੇ ਹਨ **ਅਤੇ** `disabled` ਦਾ ਸਨਮਾਨ ਕਰਦੇ ਹਨ (ਇਸ ਲਈ, ਉਦਾਹਰਨ ਵਜੋਂ, ਸਿਰਫ਼-ਅਨੁਕੂਲੀ ਮਾਡਲ ਜੋ `disabled` ਨੂੰ ਅਸਵੀਕਾਰ ਕਰਦੇ ਹਨ, ਬਾਹਰ ਰੱਖੇ ਜਾਂਦੇ ਹਨ)। ਓਪਰੇਟਰ `ModelSpec.noThinkingAlias` ਰਾਹੀਂ ਹਰ ਮਾਡਲ ਲਈ ਵੇਰੀਐਂਟ ਨੂੰ ਚਾਲੂ ਜਾਂ ਬੰਦ ਕਰਨ ਲਈ ਮਜਬੂਰ ਕਰ ਸਕਦੇ ਹਨ। --- ## ਪ੍ਰਦਾਤਾ ਪਲੱਗਇਨ ਮੈਨਿਫੈਸਟ ```bash GET /api/v1/provider-plugin-manifest ``` Bifrost, CLIProxyAPI ਅਤੇ ਭਵਿੱਖ ਦੇ sidecar ਰਾਊਟਰਾਂ ਦੁਆਰਾ ਵਰਤਿਆ ਜਾਣ ਵਾਲਾ JSON-ਸੁਰੱਖਿਅਤ ਪ੍ਰਦਾਤਾ ਪਲੱਗਇਨ ਮੈਨਿਫੈਸਟ ਵਾਪਸ ਕਰਦਾ ਹੈ। ਜਵਾਬ TypeScript ਪ੍ਰਦਾਤਾ ਰਜਿਸਟਰੀ ਤੋਂ ਤਿਆਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਜਾਣ-ਬੁੱਝ ਕੇ OAuth ਕਲਾਇੰਟ ਸੀਕ੍ਰੇਟ, ਰਨਟਾਈਮ ਵਾਤਾਵਰਣ ਰੈਜ਼ੋਲਿਊਸ਼ਨ, ਐਗਜ਼ੀਕਿਊਟਰ ਫੰਕਸ਼ਨ, ਬੇਨਤੀ ਹੈਡਰ ਅਤੇ ਖਾਤਾ ਡਾਟਾ ਸ਼ਾਮਲ ਨਹੀਂ ਕਰਦਾ। ਇਸ ਐਂਡਪੌਇੰਟ ਦੀ ਵਰਤੋਂ ਉਦੋਂ ਕਰੋ ਜਦੋਂ ਕੋਈ sidecar ਪ੍ਰਕਿਰਿਆ ਤੋਂ ਬਾਹਰ ਚੱਲਦਾ ਹੋਵੇ ਅਤੇ ਸਿੱਧੇ ਤੌਰ 'ਤੇ `open-sse/config/providerPluginManifestRegistry.ts` ਨੂੰ ਇੰਪੋਰਟ ਨਾ ਕਰ ਸਕੇ। --- ## ਅਨੁਕੂਲਤਾ ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਪਾਥ | ਫਾਰਮੈਟ | | ---- | ----------------------------------------- | ----------------------------------- | | POST | `/v1/chat/completions` | OpenAI | | POST | `/v1/messages` | Anthropic | | POST | `/v1/responses` | OpenAI Responses | | POST | `/v1/embeddings` | OpenAI | | POST | `/v1/images/generations` | OpenAI Images | | POST | `/v1/images/edits` | OpenAI Images (ਸੰਪਾਦਨ/ਇਨਪੇਂਟ) | | POST | `/v1/videos/generations` | OpenAI-ਸ਼ੈਲੀ ਵੀਡੀਓ ਜਨਰੇਸ਼ਨ | | POST | `/v1/music/generations` | OpenAI-ਸ਼ੈਲੀ ਸੰਗੀਤ ਜਨਰੇਸ਼ਨ | | POST | `/v1/audio/transcriptions` | OpenAI Audio (STT) | | POST | `/v1/audio/speech` | OpenAI TTS (ਆਡੀਓ ਬਾਡੀ ਵਾਪਸ ਕਰਦਾ ਹੈ) | | POST | `/v1/rerank` | Cohere/Voyage-ਸ਼ੈਲੀ ਰੀਰੈਂਕ | | POST | `/v1/classify` | Jina ਵਰਗੀਕਰਨ (`api.jina.ai`) | | POST | `/v1/segment` | Jina ਸੈਗਮੈਂਟਰ (`segment.jina.ai`) | | POST | `/v1/moderations` | OpenAI Moderations | | GET | `/v1/models` | OpenAI | | POST | `/v1/messages/count_tokens` | Anthropic | | GET | `/v1beta/models` | Gemini | | POST | `/v1beta/models/{...path}` | Gemini generateContent | | POST | `/v1/api/chat` | Ollama | | GET | `/api/v1/vscode/{token}/` | OpenAI ਕੈਟਾਲੌਗ ਉਪਨਾਮ | | GET | `/api/v1/vscode/{token}/models` | OpenAI ਮਾਡਲ ਉਪਨਾਮ | | POST | `/api/v1/vscode/{token}/chat/completions` | OpenAI ਟੋਕਨਾਈਜ਼ਡ ਉਪਨਾਮ | | POST | `/api/v1/vscode/{token}/responses` | OpenAI Responses ਟੋਕਨਾਈਜ਼ਡ ਉਪਨਾਮ | | POST | `/api/v1/vscode/{token}/api/chat` | Ollama ਟੋਕਨਾਈਜ਼ਡ ਉਪਨਾਮ | | GET | `/api/v1/vscode/{token}/api/tags` | Ollama ਟੈਗ ਟੋਕਨਾਈਜ਼ਡ ਉਪਨਾਮ | ਸਾਰੇ 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 # ਵੀਡੀਓ / ਸੰਗੀਤ ਜਨਰੇਸ਼ਨ (ਪ੍ਰਦਾਤਾ-ਪ੍ਰੀਫਿਕਸ ਵਾਲੀ ਮਾਡਲ id) POST /v1/videos/generations { "model": "runway/gen-3", "prompt": "..." } POST /v1/music/generations { "model": "kie/suno-v4.0", "prompt": "..." } ``` > **ਰੀਰੈਂਕ ਪ੍ਰਦਾਤਾ ਨੋਡ:** `POST /v1/rerank` OpenAI-ਅਨੁਕੂਲ ਪ੍ਰਦਾਤਾ ਨੋਡਾਂ ਵੱਲ ਵੀ ਰੂਟ ਕਰਦਾ ਹੈ > (oMLX, vLLM, Infinity, ਗੇਟਵੇ ਦੇ ਪਿੱਛੇ TEI, …), ਜਿਨ੍ਹਾਂ ਨੂੰ `/` ਵਜੋਂ ਸੰਬੋਧਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਲੂਪਬੈਕ > ਨੋਡ (`localhost`, `127.0.0.1`, `172.16.0.0/12`) ਹਮੇਸ਼ਾ ਯੋਗ ਹੁੰਦੇ ਹਨ, ਅਤੇ ਉਹ ਹੋਸਟਨੇਮ ਵੀ ਯੋਗ ਹਨ ਜਿਨ੍ਹਾਂ ਨੂੰ > ਓਪਰੇਟਰ `OMNIROUTE_LOCAL_PROVIDER_NODE_HOSTS` ਵਿੱਚ ਸੂਚੀਬੱਧ ਕਰਦਾ ਹੈ (ਉਦਾਹਰਨ ਲਈ Docker/Compose ਸੇਵਾ ਨਾਮ > ਜਿਵੇਂ `http://reranker:8080/v1`; ਇਨ੍ਹਾਂ ਨੂੰ ਸਿੱਧੇ ਕਾਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਕਦੇ ਵੀ `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` | ਫ਼ਾਈਲ ਅੱਪਲੋਡ ਕਰੋ (ਮਲਟੀਪਾਰਟ: `file`, `purpose`, `expires_after[anchor]`, `expires_after[seconds]`) — ਵੱਧ ਤੋਂ ਵੱਧ 512 MiB | | GET | `/v1/files` | ਪ੍ਰਮਾਣਿਤ API ਕੁੰਜੀ ਲਈ ਫ਼ਾਈਲਾਂ ਦੀ ਸੂਚੀ ਵੇਖੋ | | GET | `/v1/files/[id]` | ਫ਼ਾਈਲ ਦਾ ਮੈਟਾਡੇਟਾ ਪ੍ਰਾਪਤ ਕਰੋ | | DELETE | `/v1/files/[id]` | ਫ਼ਾਈਲ ਮਿਟਾਓ | | GET | `/v1/files/[id]/content` | ਕੱਚੀ ਫ਼ਾਈਲ ਸਮੱਗਰੀ ਨੂੰ ਵਾਪਸ ਸਟ੍ਰੀਮ ਕਰੋ | **ਪ੍ਰਮਾਣੀਕਰਨ:** ਬੇਅਰਰ API ਕੁੰਜੀ — ਫ਼ਾਈਲਾਂ ਦਾ ਦਾਇਰਾ `getApiKeyRequestScope` ਰਾਹੀਂ ਹਰੇਕ API ਕੁੰਜੀ ਅਨੁਸਾਰ ਨਿਰਧਾਰਤ ਹੁੰਦਾ ਹੈ। ਇੱਕ ਕੁੰਜੀ ਸਿਰਫ਼ ਆਪਣੀਆਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਵੇਖ, ਡਾਊਨਲੋਡ ਅਤੇ ਮਿਟਾ ਸਕਦੀ ਹੈ; ਕੁੰਜੀ ਤੋਂ ਬਿਨਾਂ ਡੈਸ਼ਬੋਰਡ ਸੈਸ਼ਨ ਪੂਰੀ ਇੰਸਟੈਂਸ ਨੂੰ ਪੜ੍ਹ ਸਕਦਾ ਹੈ; ਬਿਨਾਂ ਮਾਲਕ ਵਾਲੀ ਫ਼ਾਈਲ (ਅਗਿਆਤ ਜਾਂ ਡੈਸ਼ਬੋਰਡ-ਸੈਸ਼ਨ ਅੱਪਲੋਡ) ਹਰੇਕ ਗੈਰ-ਸੈਸ਼ਨ ਕਾਲਰ ਲਈ ਅਸਵੀਕਾਰ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। `GET /v1/files` ਕਿਸੇ ਅਗਿਆਤ ਕਾਲਰ ਨੂੰ — ਅਤੇ ਦਿੱਤੀ ਗਈ ਅਜਿਹੀ ਕੁੰਜੀ ਨੂੰ ਜਿਸਦਾ ਨਿਪਟਾਰਾ ਨਹੀਂ ਹੁੰਦਾ — `401` ਨਾਲ ਅਸਵੀਕਾਰ ਕਰਦਾ ਹੈ, ਭਾਵੇਂ `REQUIRE_API_KEY=false` ਹੋਵੇ, ਹਰ ਟੈਨੈਂਟ ਦੀਆਂ ਫ਼ਾਈਲਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਉਣ ਦੀ ਬਜਾਏ (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 ਕੁੰਜੀ ਅਨੁਸਾਰ, ਫ਼ਾਈਲਾਂ ਵਾਲੇ ਉਸੇ ਤਿੰਨ-ਪੱਖੀ ਨਿਯਮ ਹੇਠ ਨਿਰਧਾਰਤ ਹੁੰਦਾ ਹੈ: ਕੇਵਲ ਆਪਣੀ ਕੁੰਜੀ, ਡੈਸ਼ਬੋਰਡ ਸੈਸ਼ਨ ਲਈ ਪੂਰੇ ਇੰਸਟੈਂਸ ਤੱਕ ਪਹੁੰਚ, ਅਤੇ null-owner ਰਿਕਾਰਡਾਂ ਲਈ ਹਰੇਕ ਗੈਰ-ਸੈਸ਼ਨ ਕਾਲਰ ਨੂੰ ਇਨਕਾਰ (ਪ੍ਰਾਪਤ ਕਰਨ, ਮਿਟਾਉਣ, ਰੱਦ ਕਰਨ ਅਤੇ ਬਣਾਉਣ ਵੇਲੇ `input_file_id` ਜਾਂਚ ਲਈ)। `GET /v1/batches`, `REQUIRE_API_KEY=false` ਹੋਣ ਦੇ ਬਾਵਜੂਦ, ਕਿਸੇ ਅਗਿਆਤ ਕਾਲਰ ਨੂੰ `401` ਨਾਲ ਅਸਵੀਕਾਰ ਕਰਦਾ ਹੈ। --- ## Search API ਵੈੱਬ/ਖੋਜ ਪ੍ਰਦਾਤਾ ਐਬਸਟ੍ਰੈਕਸ਼ਨ (Tavily, Brave, Exa, Serper, ਆਦਿ)। | ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ | | ---- | ---------------------- | ----------------------------------------------------------------------------------------------------------- | | GET | `/v1/search` | ਕੌਂਫ਼ਿਗਰ ਕੀਤੇ ਖੋਜ ਪ੍ਰਦਾਤਿਆਂ + ਸਮਰੱਥਾਵਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਓ | | POST | `/v1/search` | ਖੋਜ ਕਵੇਰੀ ਚਲਾਓ — ਬਾਡੀ ਨੂੰ `v1SearchSchema` ਦੁਆਰਾ ਪ੍ਰਮਾਣਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਕੈਸ਼ਿੰਗ/ਕੋਐਲੇਸਿੰਗ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ | | GET | `/v1/search/analytics` | ਹਰੇਕ ਪ੍ਰਦਾਤਾ ਲਈ ਹਿੱਟ/ਲੇਟੈਂਸੀ/ਕੈਸ਼ ਅੰਕੜੇ | **ਪ੍ਰਮਾਣੀਕਰਨ:** Bearer API ਕੁੰਜੀ (`extractApiKey` + `isValidApiKey`)। ਖੋਜ ਨੀਤੀ ਨੂੰ `enforceApiKeyPolicy` ਰਾਹੀਂ ਲਾਗੂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। --- ## Web Fetch API ਕਿਸੇ ਸੰਰਚਿਤ web-fetch ਪ੍ਰਦਾਤਾ (Firecrawl, Jina Reader, Tavily Extract, TinyFish Fetch, Nimble Extract) ਰਾਹੀਂ URL ਤੋਂ ਸਮੱਗਰੀ ਕੱਢੋ। | ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ | | ---- | --------------- | --------------------------------------------------------------------------------- | | POST | `/v1/web/fetch` | URL ਨੂੰ ਪ੍ਰਾਪਤ/ਸਕ੍ਰੇਪ ਕਰੋ — ਬੌਡੀ ਦੀ ਪੁਸ਼ਟੀ `v1WebFetchSchema` ਦੁਆਰਾ ਕੀਤੀ ਜਾਂਦੀ ਹੈ | **ਪ੍ਰਮਾਣੀਕਰਨ:** Bearer API ਕੁੰਜੀ (`extractApiKey` + `isValidApiKey`)। ਨੀਤੀ `enforceApiKeyPolicy` ਰਾਹੀਂ ਲਾਗੂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। **ਕੋਟਾ-ਸਚੇਤ ਫਾਲਬੈਕ (#8297):** ਜਦੋਂ ਕੋਈ ਸਪਸ਼ਟ `provider` ਨਹੀਂ ਦਿੱਤਾ ਜਾਂਦਾ, ਤਾਂ ਪੂਲ (`firecrawl` → `jina-reader` → `tavily-search` → `tinyfish` → `nimble-search`) ਨੂੰ ਸਥਿਰ ਤਰਜੀਹੀ ਕ੍ਰਮ (ਪਹਿਲਾਂ-ਭਰੋ) ਵਿੱਚ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ — ਦਰ-ਸੀਮਿਤ-ਪਰ-ਸੰਰਚਿਤ ਪ੍ਰਦਾਤੇ ਨੂੰ ਬੇਨਤੀ ਤੁਰੰਤ ਰੋਕਣ ਦੀ ਬਜਾਏ ਛੱਡ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਮੁੜ-ਕੋਸ਼ਿਸ਼ਯੋਗ/ਕੋਟਾ-ਸੰਬੰਧੀ ਅੱਪਸਟ੍ਰੀਮ ਅਸਫਲਤਾ (HTTP 429 ਹਮੇਸ਼ਾ; Firecrawl/Tavily/TinyFish ਦੀਆਂ ਕੋਟਾ-ਸ਼ੈਲੀ ਮੁਫ਼ਤ ਟੀਅਰਾਂ ਲਈ 402/403 — Jina Reader ਲਈ ਨਹੀਂ, ਅਤੇ ਸਧਾਰਨ 400 ਗਲਤ ਬੇਨਤੀ ਲਈ ਕਦੇ ਨਹੀਂ) ਬੇਨਤੀ ਦੇ ਸਮੇਂ ਅਗਲੇ ਅਣਅਜ਼ਮਾਏ, ਪ੍ਰਮਾਣ-ਪੱਤਰ ਵਾਲੇ ਪ੍ਰਦਾਤੇ ਵੱਲ ਚਲੀ ਜਾਂਦੀ ਹੈ। ਜਦੋਂ ਪੂਲ ਦੇ ਸਾਰੇ ਪ੍ਰਦਾਤੇ ਖ਼ਤਮ ਹੋ ਜਾਂਦੇ ਹਨ, ਤਾਂ ਐਂਡਪੌਇੰਟ ਪਿਛਲੇ ਆਮ `400` ਦੀ ਬਜਾਏ ਇੱਕੋ `429` (`Retry-After` ਹੈਡਰ ਸਮੇਤ) ਵਾਪਸ ਕਰਦਾ ਹੈ। ਜਦੋਂ ਕਿਸੇ ਸਪਸ਼ਟ `provider` ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਕੋਈ ਚੁੱਪ ਫਾਲਬੈਕ **ਨਹੀਂ** ਹੁੰਦਾ — ਦਰ-ਸੀਮਿਤ ਜਾਂ ਅਸਫਲ ਹੋਣ ਵਾਲਾ ਸਪਸ਼ਟ ਪ੍ਰਦਾਤਾ ਆਪਣੀ ਤਰੁੱਟੀ ਦਿਖਾਉਂਦਾ ਹੈ (ਦਰ-ਸੀਮਿਤ ਹੋਣ 'ਤੇ `429`, ਨਹੀਂ ਤਾਂ ਅੱਪਸਟ੍ਰੀਮ ਸਥਿਤੀ)। --- ## WebSocket ਸਟ੍ਰੀਮਿੰਗ ```bash GET /v1/ws?handshake=1 ``` WebSocket ਅੱਪਗ੍ਰੇਡ ਹੈਂਡਸ਼ੇਕ ਦੀ ਪੁਸ਼ਟੀ ਕਰਦਾ ਹੈ ਅਤੇ ਵਾਇਰ ਪ੍ਰੋਟੋਕੋਲ ਦੇ ਉਦਾਹਰਨ ਸੁਨੇਹੇ (`request`, `cancel`) ਵਾਪਸ ਕਰਦਾ ਹੈ। ਅਸਲ WS ਫ੍ਰੇਮਾਂ ਨੂੰ Next.js ਰੂਟ ਸਾਰਣੀ ਤੋਂ ਬਾਹਰ ਬੰਡਲ ਕੀਤੇ WS ਸਰਵਰ ਦੁਆਰਾ ਸੰਭਾਲਿਆ ਜਾਂਦਾ ਹੈ। **ਪ੍ਰਮਾਣੀਕਰਨ:** ਹੈਂਡਸ਼ੇਕ ਦੌਰਾਨ Bearer API ਕੁੰਜੀ। ### WebSocket ਉੱਤੇ Responses API (ਸਿਰਫ਼ codex) ```bash # HTTP API ਵਾਲਾ ਉਹੀ ਹੋਸਟ:ਪੋਰਟ (ਡਿਫਾਲਟ 20128); ਕਨੈਕਸ਼ਨ ਨੂੰ ਅੱਪਗ੍ਰੇਡ ਕਰੋ: wscat -c "ws://localhost:20128/v1/responses?api_key=" # (ਜਾਂ: -H "Authorization: Bearer ") # ਪਹਿਲਾ ਫ੍ਰੇਮ response.create ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ: { "type": "response.create", "model": "gpt-5.5", "input": [ { "role": "user", "content": "hi" } ] } ``` Responses-API-over-WebSocket ਪ੍ਰੌਕਸੀ **ਸਿਰਫ਼ `codex` ਨਾਲ** ਜੁੜੀ ਹੋਈ ਹੈ (ChatGPT ਬੈਕਐਂਡ)। ਇਹ API/ਡੈਸ਼ਬੋਰਡ ਵਾਲੇ ਉਸੇ ਪੋਰਟ ਉੱਤੇ `/v1/responses`, `/responses`, ਅਤੇ `/api/v1/responses` ਪਾਥਾਂ 'ਤੇ ਸੁਣਦੀ ਹੈ। ਪਹਿਲੇ `response.create` ਫ੍ਰੇਮ ਉੱਤੇ ਇਹ ਅੰਦਰੂਨੀ `codex-responses-ws` ਬ੍ਰਿਜ ਰਾਹੀਂ ਪ੍ਰਮਾਣੀਕਰਨ + ਤਿਆਰੀ ਕਰਦੀ ਹੈ, ਇੱਕ codex OAuth ਕਨੈਕਸ਼ਨ ਚੁਣਦੀ ਹੈ, ਅਤੇ `wreq-js` ਟ੍ਰਾਂਸਪੋਰਟ ਰਾਹੀਂ `wss://chatgpt.com/backend-api/codex/responses` ਤੱਕ ਟਨਲ ਬਣਾਉਂਦੀ ਹੈ। **ਗੈਰ-codex ਮਾਡਲ ਅਸਵੀਕਾਰ ਕੀਤੇ ਜਾਂਦੇ ਹਨ** (`codex_ws_provider_required`)। ਕੋਟਾ-ਸਾਂਝ ਰੂਟਿੰਗ ਲਈ `model: "qtSd//codex/"` ਵਰਤੋ। ਇਸਨੂੰ `app/server-ws.mjs` + `scripts/dev/responses-ws-proxy.mjs` + `src/app/api/internal/codex-responses-ws/route.ts` ਵਿੱਚ ਲਾਗੂ ਕੀਤਾ ਗਿਆ ਹੈ। **ਪ੍ਰਮਾਣੀਕਰਨ:** ਹੈਂਡਸ਼ੇਕ ਦੌਰਾਨ Bearer API ਕੁੰਜੀ। ਬੰਡਲ ਕੀਤਾ HTTP ਸਰਵਰ (`server-ws.mjs`) ਸਰਗਰਮ ਐਂਟਰੀਪੌਇੰਟ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ (ਜਦੋਂ `app/server-ws.mjs` ਮੌਜੂਦ ਹੁੰਦੀ ਹੈ ਤਾਂ ਡਿਫਾਲਟ ਤੌਰ 'ਤੇ ਇਹੀ ਹੁੰਦਾ ਹੈ)। #### ਮਾਡਲ id: ਸਧਾਰਨ ChatGPT id ਵਰਤੋ (`codex/` ਪ੍ਰੀਫਿਕਸ ਤੋਂ ਬਿਨਾਂ) OpenAI **Codex CLI**, ਜਦੋਂ `supports_websockets = true` ਹੋਵੇ, ਤਾਂ ਮਾਡਲ ਨਾਮ ਦੀ ਕਲਾਇੰਟ-ਪਾਸੇ ਪੁਸ਼ਟੀ ਕਰਦੀ ਹੈ ਅਤੇ `codex/gpt-5.5` ਵਰਗੀਆਂ **ਪ੍ਰਦਾਤਾ-ਪ੍ਰੀਫਿਕਸ ਵਾਲੀਆਂ ids ਨੂੰ ਅਸਵੀਕਾਰ ਕਰਦੀ ਹੈ** (`The 'codex/gpt-5.5' model is not supported when using Codex with a ChatGPT account`)। **ਸਧਾਰਨ** id (ਜਿਵੇਂ `gpt-5.5`) ਭੇਜੋ। OmniRoute ਦਾ ਬ੍ਰਿਜ ਸਿਰਫ਼ codex ਲਈ ਹੈ, ਇਸ ਲਈ ਇਹ ਅੱਪਸਟ੍ਰੀਮ ਟਨਲ ਬਣਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਸਧਾਰਨ id ਨੂੰ codex ਮਾਡਲ ਵਜੋਂ ਮੁੜ-ਰਿਜ਼ਾਲਵ ਕਰਦਾ ਹੈ (`resolveCodexWsModelInfo`) — ਭਾਵੇਂ ਸਧਾਰਨ `gpt-5.5` ਨੂੰ HTTP ਉੱਤੇ ਨਹੀਂ ਤਾਂ ਕਿਸੇ ਹੋਰ ਪ੍ਰਦਾਤੇ ਵੱਲ ਰੂਟ ਕੀਤਾ ਜਾਂਦਾ। #### OpenAI Codex CLI ਨੂੰ ਸੰਰਚਿਤ ਕਰਨਾ Codex CLI ਨੂੰ OmniRoute ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਨ ਲਈ `~/.codex/config.toml` ਵਿੱਚ WebSocket ਸਮਰਥਨ ਵਾਲਾ ਇੱਕ ਕਸਟਮ ਪ੍ਰਦਾਤਾ ਜੋੜੋ (ਮੌਜੂਦਾ ਸੰਰਚਨਾ ਨੂੰ ਬਦਲਣ ਤੋਂ ਬਚਣ ਲਈ ਵੱਖਰਾ `CODEX_HOME` ਵਰਤੋ): ```toml model = "gpt-5.5" # ਸਧਾਰਨ id — "codex/gpt-5.5" ਨਹੀਂ model_provider = "omniroute" [model_providers.omniroute] name = "OmniRoute (WS)" base_url = "http://localhost:20128/v1" # ਅੰਤ ਵਿੱਚ ਸਲੈਸ਼ ਨਹੀਂ; WS URL ਇਸ ਤੋਂ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ (ਪ੍ਰੋਡਕਸ਼ਨ ਵਿੱਚ https/wss ਵਰਤੋ) wire_api = "responses" # Feb 2026 ਤੋਂ ਇਕੱਲਾ ਸਮਰਥਿਤ ਮੁੱਲ supports_websockets = true # Responses-over-WS ਟ੍ਰਾਂਸਪੋਰਟ ਨੂੰ ਸਮਰੱਥ ਕਰਦਾ ਹੈ env_key = "OMNIROUTE_API_KEY" # OmniRoute API ਕੁੰਜੀ (Bearer) ਰੱਖਦਾ ਹੈ ``` ```bash export OMNIROUTE_API_KEY=sk-... # ਇੱਕ OmniRoute API ਕੁੰਜੀ (ਜੇ REQUIRE_API_KEY=false ਹੋਵੇ ਤਾਂ ਕੋਈ ਵੀ ਕੁੰਜੀ) codex exec "Responda apenas: PONG" ``` CLI, `base_url + /responses` ਨੂੰ WebSocket ਵਿੱਚ ਅੱਪਗ੍ਰੇਡ ਕਰਦੀ ਹੈ ਅਤੇ OmniRoute ਇਸਨੂੰ ਚੁਣੇ ਹੋਏ codex OAuth ਕਨੈਕਸ਼ਨ ਤੱਕ ਟਨਲ ਕਰਦਾ ਹੈ। ਸਥਾਨਕ ਸਰਵਰ ਨਾਲ ਸ਼ੁਰੂ ਤੋਂ ਅੰਤ ਤੱਕ ਪੁਸ਼ਟੀ ਕੀਤੀ ਗਈ: ChatGPT `codex.rate_limits` + `response.created` ਵਾਪਸ ਕਰਦਾ ਹੈ ਅਤੇ ਪੂਰਨਤਾ ਨੂੰ ਸਟ੍ਰੀਮ ਕਰਦਾ ਹੈ। --- ## ਕੋਟੇ ਅਤੇ ਸਮੱਸਿਆਵਾਂ ਦੀ ਰਿਪੋਰਟਿੰਗ | ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ | | ---- | ------------------- | ----------------------------------------------------------------------------------------------- | | GET | `/v1/quotas/check` | ਰਜਿਸਟਰਡ ਕੁੰਜੀ ਜਾਰੀ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ `provider` + `accountId` ਲਈ ਕੋਟੇ ਦੀ ਪੂਰਵ-ਪੁਸ਼ਟੀ ਕਰੋ | | POST | `/v1/issues/report` | ਕੋਟੇ/ਕੁੰਜੀ ਜਾਰੀ ਕਰਨ ਦੀ ਅਸਫਲਤਾ ਦੀ GitHub ਨੂੰ ਰਿਪੋਰਟ ਕਰੋ (`GITHUB_ISSUES_REPO` + ਟੋਕਨ ਲੋੜੀਂਦਾ ਹੈ) | **ਪ੍ਰਮਾਣੀਕਰਨ:** ਬੇਅਰਰ 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` ਵਿੱਚ ਸਟੋਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ (ਜਾਂ ਸਰਵਰ ਡਿਫਾਲਟ) | | **ਮੁੱਖ ਉਪਭੋਗਤਾ** | ਇੰਟਰਐਕਟਿਵ CLIs, ਟਰਮੀਨਲ ਪ੍ਰੌਂਪਟ, ਮਨੁੱਖੀ ਓਪਰੇਟਰ | ਪ੍ਰੋਗਰਾਮੈਟਿਕ ਇੰਟੀਗ੍ਰੇਸ਼ਨ, ਡੈਸ਼ਬੋਰਡ, ਵਿਸ਼ਲੇਸ਼ਣ, ਬਿਲਿੰਗ ਟ੍ਰੈਕਰ | #### ਕਟੌਫ਼ ਅਨੁਕੂਲਨ ਫ਼ਾਰਮੂਲਾ 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/*`, ਜਨਤਕ auth/login ਤੋਂ ਇਲਾਵਾ) ਸਧਾਰਨ inference API ਕੁੰਜੀਆਂ ਦੁਆਰਾ **ਅਧਿਕਾਰਤ ਨਹੀਂ** ਹੁੰਦੇ। ਕ੍ਰੈਡੈਂਸ਼ੀਅਲ ਸ਼੍ਰੇਣੀਆਂ, ਸਕੋਪ ਅਤੇ curl ਉਦਾਹਰਨਾਂ: [ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣੀਕਰਨ](../guides/MANAGEMENT-AUTH.md)। ### ਪ੍ਰਮਾਣੀਕਰਨ | Endpoint | Method | Description | | ----------------------------- | ------- | ------------------------- | | `/api/auth/login` | POST | ਲੌਗ ਇਨ | | `/api/auth/logout` | POST | ਲੌਗ ਆਉਟ | | `/api/settings/require-login` | GET/PUT | ਲਾਜ਼ਮੀ ਲੌਗਇਨ ਨੂੰ ਟੌਗਲ ਕਰੋ | ### ਪ੍ਰਦਾਤਾ ਪ੍ਰਬੰਧਨ | Endpoint | Method | Description | | --------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | `/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-ਅਨੁਕੂਲ ਪ੍ਰਦਾਤਾ ਪੰਨਾ ਉਹੀ ਸੰਪਾਦਨ/ਹਟਾਉਣ ਨਿਯੰਤਰਣ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ ਅਤੇ ਸਪਸ਼ਟ vision ਸਮਰਥਨ ਵਾਲੇ ਮਾਡਲਾਂ ਨੂੰ ਚਿੰਨ੍ਹਿਤ ਕਰਦਾ ਹੈ। ਕਸਟਮ Chat Completions ਨੋਡ ਸਪਸ਼ਟ reasoning opt-out ਨੂੰ ਅੱਪਸਟ੍ਰੀਮ ਬੈਕਐਂਡ ਮੁਤਾਬਕ ਢਾਲਦੇ ਹਨ। ਇੱਕ ਸਫਲ ਕਨੈਕਸ਼ਨ ਟੈਸਟ ਹਰ ਉਸ ਸਟੀਕ ਮਾਡਲ ID ਲਈ ਆਪਣੇ-ਆਪ chat-template ਨਿਯੰਤਰਣ ਚੁਣਦਾ ਹੈ, ਜਿਸਦੀ `/models` ਐਂਟਰੀ ਕਿਸੇ ਮਾਨਤਾ-ਪ੍ਰਾਪਤ `owned_by` ਮੁੱਲ ਨੂੰ ਸਾਬਤ ਕਰਦੀ ਹੈ: `vllm`, `sglang`, ਜਾਂ `llamacpp`। ਪਾਰਦਰਸ਼ੀ OpenAI-ਅਨੁਕੂਲ ਰੈਪਰ ਮੂਲ ਮਾਡਲ ਐਂਟਰੀ ਨੂੰ ਨੇਸਟ ਕੀਤੇ `openai` ਆਬਜੈਕਟ ਅੰਦਰ ਸੰਭਾਲ ਸਕਦੇ ਹਨ; ਖੋਜ ਵੱਧ ਤੋਂ ਵੱਧ ਤਿੰਨ ਅਜਿਹੇ ਐਨਵਲਪਾਂ ਦੀ ਪਾਲਣਾ ਕਰਦੀ ਹੈ। ਗੁੰਮ, ਅਣਜਾਣ, ਜਾਂ ਟਕਰਾਉਂਦੀ ਮਲਕੀਅਤ ਵਾਲੇ ਮਾਡਲ ਸਧਾਰਨ OpenAI ਵਿਹਾਰ ਕਾਇਮ ਰੱਖਦੇ ਹਨ। ਖੋਜ ਮੌਜੂਦਾ ਕੈਟਾਲੌਗ ਬੇਨਤੀ ਨੂੰ ਮੁੜ ਵਰਤਦੀ ਹੈ, ਕੋਈ completion ਟੋਕਨ ਪੈਦਾ ਨਹੀਂ ਕਰਦੀ, ਅਤੇ ਕਨੈਕਸ਼ਨ endpoint ਬਦਲਣ 'ਤੇ ਅਵੈਧ ਹੋ ਜਾਂਦੀ ਹੈ। ਅਜਿਹੇ ਬੈਕਐਂਡ ਲਈ ਵਿਹਾਰ ਨੂੰ ਨਿਸ਼ਚਿਤ ਕਰਨ ਵਾਸਤੇ ਜੋ ਇਹ metadata ਪ੍ਰਗਟ ਨਹੀਂ ਕਰਦਾ, ਮੌਜੂਦਾ ਅੰਸ਼ਕ ਪ੍ਰਦਾਤਾ ਅੱਪਡੇਟ API ਦੀ ਵਰਤੋਂ ਕਰੋ: ```json { "providerSpecificData": { "reasoningControl": "chat-template" } } ``` ਉਸ body ਨੂੰ `PUT /api/providers/` ਨਾਲ ਭੇਜੋ। ਉਸ ਕਨੈਕਸ਼ਨ ਉੱਤੇ, `none` ਦੀ ਸਪਸ਼ਟ reasoning effort ਨੂੰ `chat_template_kwargs.thinking=false` ਅਤੇ `chat_template_kwargs.enable_thinking=false` ਵਜੋਂ ਭੇਜਿਆ ਜਾਂਦਾ ਹੈ। ਸਪਸ਼ਟ ਮੂਲ template ਮੁੱਲ ਅਧਿਕਾਰਤ ਰਹਿੰਦੇ ਹਨ, ਜਦੋਂ ਤੱਕ ਸਰਵਰ-ਪਾਸੇ ਦਾ ਕੋਈ reasoning ਨਿਯਮ ਕਿਸੇ effort ਨੂੰ ਲਾਗੂ ਨਹੀਂ ਕਰਦਾ। ਇਹ ਸੈਟਿੰਗ ਕੇਵਲ ਉਦੋਂ ਲਾਗੂ ਹੁੰਦੀ ਹੈ ਜਦੋਂ ਕੋਈ ਕਸਟਮ OpenAI-ਅਨੁਕੂਲ ਕਨੈਕਸ਼ਨ Chat Completions body ਭੇਜਦਾ ਹੈ; Responses ਬੇਨਤੀਆਂ ਅਤੇ ਸਧਾਰਨ ਪ੍ਰਦਾਤਾ ਆਪਣੀ ਮੂਲ ਬੇਨਤੀ ਬਣਤਰ ਕਾਇਮ ਰੱਖਦੇ ਹਨ। ਸਧਾਰਨ OpenAI `reasoning_effort` passthrough ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ `reasoningControl` ਨੂੰ `openai` 'ਤੇ ਸੈੱਟ ਕਰੋ, ਜਾਂ ਸਵੈਚਾਲਿਤ ਖੋਜ ਵਰਤਣ ਲਈ ਇਸਨੂੰ ਛੱਡ ਦਿਓ/`null` 'ਤੇ ਸੈੱਟ ਕਰੋ। Claude Code auto-mode classifier ਬੇਨਤੀਆਂ ਵਿੱਚ, ਜਦੋਂ ਕੋਈ ਸਪਸ਼ਟ reasoning controls ਨਾ ਹੋਣ, ਤਾਂ ਡਿਫੌਲਟ native thinking ਨੂੰ ਅਸਮਰੱਥ ਕਰਨ ਦੀ ਮੰਗ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਪਛਾਣ ਮਾਡਲ ਨਾਮਾਂ ਜਾਂ completion limits ਦੀ ਬਜਾਏ Claude-format ਬੇਨਤੀਆਂ ਵਿੱਚ classifier ਦੇ system marker ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ। ਸਪਸ਼ਟ body controls, ਸਮਰਥਿਤ effort/thinking headers, routing rules, ਅਤੇ ਨਿਰਧਾਰਤ model effort ਆਪਣੀ ਮੌਜੂਦਾ ਤਰਜੀਹ ਬਰਕਰਾਰ ਰੱਖਦੇ ਹਨ। classifier ਦੇ ਦੋਵੇਂ ਪੜਾਅ ਆਪਣੇ prompts, completion limits, stop sequences, ਅਤੇ ਅਸਲ upstream permission verdicts ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਦੇ ਹਨ; ਦੂਜਾ ਪੜਾਅ ਹਾਲੇ ਵੀ ਆਪਣੀ ਮੰਗੀ ਹੋਈ ਦਿਖਣਯੋਗ reasoning ਨੂੰ ਆਮ ਟੈਕਸਟ ਵਜੋਂ ਤਿਆਰ ਕਰ ਸਕਦਾ ਹੈ। ### OAuth ਪ੍ਰਵਾਹ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | -------------------------------- | ------- | --------------------- | | `/api/oauth/[provider]/[action]` | ਵੱਖ-ਵੱਖ | ਪ੍ਰਦਾਤਾ-ਵਿਸ਼ੇਸ਼ OAuth | ### ਰੂਟਿੰਗ ਅਤੇ ਸੰਰਚਨਾ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | --------------------- | -------- | ------------------------------- | | `/api/models/alias` | GET/POST | ਮਾਡਲ ਉਪਨਾਮ | | `/api/models/catalog` | GET | ਪ੍ਰਦਾਤਾ + ਕਿਸਮ ਅਨੁਸਾਰ ਸਾਰੇ ਮਾਡਲ | | `/api/combos*` | ਵੱਖ-ਵੱਖ | ਕੌਂਬੋ ਪ੍ਰਬੰਧਨ | | `/api/keys*` | ਵੱਖ-ਵੱਖ | API ਕੁੰਜੀ ਪ੍ਰਬੰਧਨ | | `/api/pricing` | GET | ਮਾਡਲ ਕੀਮਤਾਂ | ### ਵਰਤੋਂ ਅਤੇ ਵਿਸ਼ਲੇਸ਼ਣ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | -------------------------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `/api/usage/history` | GET | ਵਰਤੋਂ ਦਾ ਇਤਿਹਾਸ | | `/api/usage/logs` | GET | ਵਰਤੋਂ ਲੌਗ | | `/api/usage/request-logs` | GET | ਬੇਨਤੀ-ਪੱਧਰੀ ਲੌਗ | | `/api/usage/[connectionId]` | GET | ਪ੍ਰਤੀ-ਕਨੈਕਸ਼ਨ ਵਰਤੋਂ | | `/api/usage/token-limits` | GET/POST/DELETE | ਪ੍ਰਤੀ-API-ਕੁੰਜੀ token-limit ਬਜਟ | | `/api/usage/model-latency-stats` | GET | ਪ੍ਰਤੀ-ਪ੍ਰਦਾਤਾ/ਮਾਡਲ latency ਦਾ rolling aggregate (avg/p50/p95/p99, ਸਫਲਤਾ ਦਰ); ਫਿਲਟਰ: `windowHours`/`minSamples`/`maxRows`/`provider`/`model` (#6873) | | `/api/usage/cache-health` | GET | `call_logs` ਉੱਤੇ prompt-cache ਦੀ ਸਥਿਤੀ ਦਾ ਸਾਰ — ਲਿਖਣ/ਪੜ੍ਹਨ ਅਨੁਪਾਤ, p50/p90/p99 ਲਿਖਤ-ਆਕਾਰ ਵੰਡ, ਭਾਰੀ-ਲਿਖਤ ਸੰਘਣਾਪਣ, ਪ੍ਰਤੀ-ਮਾਡਲ ਵੰਡ, ਅਤੇ ਇੱਕ `healthy`/`degraded`/`thrash`/`no-data` ਨਿਰਣਾ; query params `range` (`1h`\|`24h`\|`7d`\|`30d`, ਡਿਫੌਲਟ `24h`) ਅਤੇ ਵਿਕਲਪਿਕ `model` (#8827) | ### API ਕੁੰਜੀ ਅਨੁਮਤੀਆਂ `PATCH /api/keys/{id}` ਕਿਸੇ ਮੌਜੂਦਾ ਕੁੰਜੀ ਦੀਆਂ ਅਨੁਮਤੀਆਂ ਨੂੰ ਅੱਪਡੇਟ ਕਰਦਾ ਹੈ। ਹਰ `/api/keys*` ਰੂਟ ਵਾਂਗ, ਇਸ ਲਈ management authorization ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ ([ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣੀਕਰਨ](../guides/MANAGEMENT-AUTH.md) ਵੇਖੋ), inference key ਦੀ ਨਹੀਂ। ਸਿਰਫ਼ ਉਹੀ ਖੇਤਰ ਭੇਜੋ ਜਿਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ ਬਦਲਣਾ ਚਾਹੁੰਦੇ ਹੋ; ਇਨ੍ਹਾਂ ਵਿੱਚੋਂ ਕੋਈ ਵੀ ਖੇਤਰ ਨਾ ਰੱਖਣ ਵਾਲੀ ਬੇਨਤੀ ਨੂੰ `No valid fields to update` ਨਾਲ ਰੱਦ ਕਰ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ। ਸਵੀਕਾਰ ਕੀਤੇ ਖੇਤਰ `src/shared/validation/schemas/keys.ts` ਵਿੱਚ `updateKeyPermissionsSchema` ਦੁਆਰਾ ਪਰਿਭਾਸ਼ਿਤ ਕੀਤੇ ਗਏ ਹਨ। | ਫੀਲਡ | ਕਿਸਮ | ਨੋਟਸ | | ------------------------------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | | `name` | string, 1-200 ਅੱਖਰ | | | `isActive` | boolean | | | `isBanned` | boolean | | | `expiresAt` | ISO 8601 datetime ਜਾਂ `null` | `null` ਮਿਆਦ ਸਮਾਪਤੀ ਨੂੰ ਹਟਾ ਦਿੰਦਾ ਹੈ | | `modelAccessMode` | `all` \| `restricted` | ਜਦੋਂ ਮੋਡ `all` ਹੋਵੇ ਤਾਂ `allowedModels` ਖਾਲੀ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ | | `allowedModels`, `blockedModels` | strings ਦੀ array, ਵੱਧ ਤੋਂ ਵੱਧ 1000 | | | `allowedCombos` | strings ਦੀ array, ਵੱਧ ਤੋਂ ਵੱਧ 500 | ਇਹ ਨਿਯੰਤਰਿਤ ਕਰਦਾ ਹੈ ਕਿ key ਕਿਹੜੇ combos ਨੂੰ ਕਾਲ ਕਰ ਸਕਦੀ ਹੈ; ਸਿੱਧੇ models ਨੂੰ `modelAccessMode` / `allowedModels` ਦੁਆਰਾ ਨਿਯੰਤਰਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ | | `connectionAccessMode` | `all` \| `restricted` | `restricted` ਹੋਣ 'ਤੇ `allowedConnections` ਗੈਰ-ਖਾਲੀ ਅਤੇ `all` ਹੋਣ 'ਤੇ ਖਾਲੀ ਹੋਣਾ ਲਾਜ਼ਮੀ ਹੈ | | `allowedConnections` | UUIDs ਦੀ array, ਵੱਧ ਤੋਂ ਵੱਧ 100 | | | `allowAutoCombos` | boolean | ਇਸ key ਨਾਲ `auto/*` models ਲਈ ਬੇਨਤੀਆਂ ਨੂੰ `false` ਅਸਵੀਕਾਰ ਕਰਦਾ ਹੈ; ਜਿਨ੍ਹਾਂ keys ਨੇ ਇਸਨੂੰ ਕਦੇ ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ, ਉਹਨਾਂ ਨੂੰ ਆਗਿਆ ਹੈ | | `catalogScope` | `all` \| `combos` \| `models` | ਇਸ key ਲਈ `GET /v1/models` ਕੀ ਸੂਚੀਬੱਧ ਕਰਦਾ ਹੈ (ਸਿਰਫ਼ combos, ਸਿਰਫ਼ models, ਜਾਂ ਦੋਵੇਂ); ਇਹ ਇਸ ਗੱਲ ਨੂੰ ਨਹੀਂ ਬਦਲਦਾ ਕਿ key ਕੀ ਕਾਲ ਕਰ ਸਕਦੀ ਹੈ | | `noLog`, `autoResolve` | boolean | | | `throttleDelayMs` | integer, 0-300000 | | | `maxSessions` | integer, 0-10000 | | | `rateLimits` | `{ limit, window }` ਦੀ array (ਧਨਾਤਮਕ integers, ਵੱਧ ਤੋਂ ਵੱਧ 50) ਜਾਂ `null` | `null` ਸੀਮਾਵਾਂ ਨੂੰ ਹਟਾ ਦਿੰਦਾ ਹੈ | | `accessSchedule` | schedule object ਜਾਂ `null` | `null` schedule ਨੂੰ ਹਟਾ ਦਿੰਦਾ ਹੈ | | `scopes` | strings ਦੀ array, ਵੱਧ ਤੋਂ ਵੱਧ 32 | | | `allowedEndpoints` | strings ਦੀ array, ਵੱਧ ਤੋਂ ਵੱਧ 20 | | | `streamDefaultMode` | `legacy` \| `json` | | | `cacheDefaultMode` | `legacy` \| `bypass` | [ਪ੍ਰਤੀ-key cache bypass](#per-key-cache-bypass) ਵੇਖੋ | | `compressionEnabled` | boolean | | | `codexServiceMode` | Codex service modes ਵਿੱਚੋਂ ਇੱਕ | | | `disableNonPublicModels` | boolean | | | `allowUsageCommand` | boolean | | | `usageLimitEnabled` | boolean | | | `dailyUsageLimitUsd`, `weeklyUsageLimitUsd` | number >= 0 ਜਾਂ `null` | | | `chaosModeEnabled` | boolean | | ```bash curl -X PATCH "$OMNIROUTE_URL/api/keys/$KEY_ID" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "allowAutoCombos": false, "catalogScope": "combos" }' ``` ### ਸੈਟਿੰਗਾਂ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵਰਣਨ | | ------------------------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `/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 | ਕੰਪ੍ਰੈਸ਼ਨ ਵਿਸ਼ਲੇਸ਼ਣ ਉਪਨਾਮ | ### ਨਿਗਰਾਨੀ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | ------------------------------------ | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `/api/sessions` | GET | ਸਰਗਰਮ ਸੈਸ਼ਨ ਟ੍ਰੈਕਿੰਗ | | `/api/rate-limits` | GET | ਪ੍ਰਤੀ-ਖਾਤਾ ਦਰ ਸੀਮਾਵਾਂ | | `/api/monitoring/health` | GET | ਸਿਹਤ ਜਾਂਚ + ਪ੍ਰਦਾਤਾ ਸੰਖੇਪ (`catalogCount`, `configuredCount`, `activeCount`, `monitoredCount`)। ਪ੍ਰਬੰਧਨ ਦ੍ਰਿਸ਼ ਵਿੱਚ `credentialHealth` ਸ਼ਾਮਲ ਹੈ: ਪ੍ਰੋਬ-ਕੈਸ਼ ਸਕੇਲਰ, ਜਦੋਂ `failed>0` ਹੋਵੇ ਤਾਂ `failedConnections`, ਅਤੇ `staleDbNonOkCount` (SQLite ਸਟਿੱਕੀ `test_status`, ਗੇਜ ਨਹੀਂ)। [MONITORING_GUIDE.md](../ops/MONITORING_GUIDE.md#credentialhealth-probe-cache-vs-sqlite-test_status) ਵੇਖੋ। | | `/api/cache/stats` | GET/DELETE | ਕੈਸ਼ ਅੰਕੜੇ / ਸਾਫ਼ ਕਰੋ | | `/api/modality-bridge/stats` | GET | ਇਨ-ਮੈਮੋਰੀ `attempts`, ਸਫਲਤਾਵਾਂ/`bridged`, ਅਸਫਲਤਾਵਾਂ, ਕੈਸ਼ ਹਿੱਟ, `totalLatencyMs`, `latencySamples`, ਨਮੂਨਾ-ਆਧਾਰਿਤ `averageLatencyMs`, ਅਤੇ ਆਖਰੀ ਵਰਤੋਂ ਦਾ ਸਮਾਂ (ਰੀਸਟਾਰਟ 'ਤੇ ਰੀਸੈੱਟ ਹੁੰਦਾ ਹੈ; ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣੀਕਰਨ) | | `/api/modality-bridge/video/runtime` | GET | ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣੀਕਰਨ/ਪ੍ਰੋਬ ਤੋਂ ਪਹਿਲਾਂ ਸਖ਼ਤ ਭਰੋਸੇਯੋਗ-ਲੂਪਬੈਕ ਜਾਂਚ; ਸੈਨੀਟਾਈਜ਼ ਕੀਤੀ FFmpeg/ffprobe ਉਪਲਬਧਤਾ ਅਤੇ ਵਰਜਨ (ਨੋ-ਸਟੋਰ) | | `/api/modality-bridge/video/extract` | POST | ਅੰਦਰੂਨੀ ਪ੍ਰਮਾਣਿਤ ਭਰੋਸੇਯੋਗ-ਲੂਪਬੈਕ ਬਾਈਟ ਬ੍ਰੋਕਰ; 50 MiB ਇਨਪੁੱਟ, ਸੀਮਾਬੱਧ ਕਤਾਰ/32 MiB ਆਉਟਪੁੱਟ, `503` ਸਮਰੱਥਾ, `499` ਡਿਸਕਨੈਕਟ, `504` ਸਮਾਂ-ਸੀਮਾ; ਇਹ ਜਨਤਕ ਅੱਪਲੋਡ API ਨਹੀਂ ਹੈ | ### ਬੈਕਅੱਪ ਅਤੇ ਐਕਸਪੋਰਟ/ਇੰਪੋਰਟ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | --------------------------- | ---- | -------------------------------------------------------------------------------- | | `/api/db-backups` | GET | ਉਪਲਬਧ ਬੈਕਅੱਪਾਂ ਦੀ ਸੂਚੀ | | `/api/db-backups` | PUT | ਹੱਥੀਂ ਬੈਕਅੱਪ ਬਣਾਓ | | `/api/db-backups` | POST | ਕਿਸੇ ਖ਼ਾਸ ਬੈਕਅੱਪ ਤੋਂ ਬਹਾਲ ਕਰੋ | | `/api/db-backups/export` | GET | ਡੇਟਾਬੇਸ ਨੂੰ .sqlite ਫ਼ਾਈਲ ਵਜੋਂ ਡਾਊਨਲੋਡ ਕਰੋ | | `/api/db-backups/import` | POST | ਡੇਟਾਬੇਸ ਬਦਲਣ ਲਈ .sqlite ਫ਼ਾਈਲ ਅੱਪਲੋਡ ਕਰੋ (`?dryRun=true` ਸਿਰਫ਼ ਪ੍ਰਮਾਣਿਤ ਕਰਦਾ ਹੈ) | | `/api/db-backups/exportAll` | GET | ਪੂਰਾ ਬੈਕਅੱਪ .tar.gz ਆਰਕਾਈਵ ਵਜੋਂ ਡਾਊਨਲੋਡ ਕਰੋ | `/api/db-backups/export`, `/api/db-backups/exportAll` ਅਤੇ `/api/settings/export-json` ਹਰ ਸਟੋਰ ਕੀਤਾ ਕ੍ਰੈਡੈਂਸ਼ੀਅਲ ਦਿੰਦੇ ਹਨ, ਇਸ ਲਈ ਇਨ੍ਹਾਂ ਲਈ ਡੈਸ਼ਬੋਰਡ ਸੈਸ਼ਨ ਜਾਂ ਸਥਾਨਕ CLI (ਜਾਂ ਲੌਗਇਨ ਅਯੋਗ ਹੋਣਾ) ਲੋੜੀਂਦਾ ਹੈ। ਕਿਸੇ ਵੀ ਸਕੋਪ ਦੀਆਂ API ਕੁੰਜੀਆਂ ਅਤੇ `oma_` ਐਕਸੈੱਸ ਟੋਕਨਾਂ ਨੂੰ `403` ਮਿਲਦਾ ਹੈ। `/api/db-backups/export`, `/api/db-backups/exportAll` and `/api/settings/export-json` hand out every stored credential, so they require the dashboard session or the local CLI (or login disabled). API keys of any scope and `oma_` access tokens get `403`. The restores hold the same boundary: `POST /api/db-backups/import` (`dryRun=true` included), `POST /api/db-backups` (restore by id) and `POST /api/settings/import-json` replace the live database or settings, so a machine credential gets `403` there too; `omniroute sync import` sends the local CLI credential. ### ਕਲਾਉਡ ਸਿੰਕ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | ---------------------- | ------- | ------------------- | | `/api/sync/cloud` | ਵੱਖ-ਵੱਖ | ਕਲਾਉਡ ਸਿੰਕ ਕਾਰਵਾਈਆਂ | | `/api/sync/initialize` | POST | ਸਿੰਕ ਸ਼ੁਰੂ ਕਰੋ | | `/api/cloud/*` | ਵੱਖ-ਵੱਖ | ਕਲਾਉਡ ਪ੍ਰਬੰਧਨ | ### ਟਨਲਾਂ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | -------------------------- | ---- | -------------------------------------------------------------------------- | | `/api/tunnels/cloudflared` | GET | ਡੈਸ਼ਬੋਰਡ ਲਈ Cloudflare Quick Tunnel ਦੀ ਇੰਸਟਾਲੇਸ਼ਨ/ਰਨਟਾਈਮ ਸਥਿਤੀ ਪੜ੍ਹੋ | | `/api/tunnels/cloudflared` | POST | Cloudflare Quick Tunnel ਨੂੰ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰੋ (`action=enable/disable`) | | `/api/tunnels/ngrok` | GET | ਡੈਸ਼ਬੋਰਡ ਲਈ ngrok Tunnel ਦੀ ਰਨਟਾਈਮ ਸਥਿਤੀ ਪੜ੍ਹੋ | | `/api/tunnels/ngrok` | POST | ngrok Tunnel ਨੂੰ ਸਮਰੱਥ ਜਾਂ ਅਸਮਰੱਥ ਕਰੋ (`action=enable/disable`) | ### CLI ਟੂਲ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | ---------------------------------- | ---- | ------------------ | | `/api/cli-tools/claude-settings` | GET | Claude CLI ਸਥਿਤੀ | | `/api/cli-tools/codex-settings` | GET | Codex CLI ਸਥਿਤੀ | | `/api/cli-tools/droid-settings` | GET | Droid CLI ਸਥਿਤੀ | | `/api/cli-tools/openclaw-settings` | GET | OpenClaw CLI ਸਥਿਤੀ | | `/api/cli-tools/runtime/[toolId]` | GET | ਆਮ CLI ਰਨਟਾਈਮ | CLI ਜਵਾਬਾਂ ਵਿੱਚ ਇਹ ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ: `installed`, `runnable`, `command`, `commandPath`, `runtimeMode`, `reason`। ### ACP ਏਜੰਟ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | ----------------- | ------ | ------------------------------------------------------------- | | `/api/acp/agents` | GET | ਸਥਿਤੀ ਸਮੇਤ ਸਾਰੇ ਖੋਜੇ ਗਏ ਏਜੰਟਾਂ (ਬਿਲਟ-ਇਨ + ਕਸਟਮ) ਦੀ ਸੂਚੀ ਦਿਖਾਓ | | `/api/acp/agents` | POST | ਕਸਟਮ ਏਜੰਟ ਸ਼ਾਮਲ ਕਰੋ ਜਾਂ ਖੋਜ ਕੈਸ਼ ਨੂੰ ਤਾਜ਼ਾ ਕਰੋ | | `/api/acp/agents` | DELETE | `id` ਕਵੇਰੀ ਪੈਰਾਮੀਟਰ ਦੁਆਰਾ ਕਸਟਮ ਏਜੰਟ ਹਟਾਓ | GET ਜਵਾਬ ਵਿੱਚ `agents[]` (id, name, binary, version, installed, protocol, isCustom) ਅਤੇ `summary` (total, installed, notFound, builtIn, custom) ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ। ### ਲਚਕਤਾ ਅਤੇ ਦਰ ਸੀਮਾਵਾਂ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | --------------------------------- | --------- | ------------------------------------------------------------------------------------- | | `/api/resilience` | GET/PATCH | ਬੇਨਤੀ ਕਤਾਰ, ਕਨੈਕਸ਼ਨ ਕੂਲਡਾਊਨ, ਪ੍ਰਦਾਤਾ ਬ੍ਰੇਕਰ ਅਤੇ ਉਡੀਕ ਸੈਟਿੰਗਾਂ ਪ੍ਰਾਪਤ/ਅੱਪਡੇਟ ਕਰੋ | | `/api/resilience/reset` | POST | ਪ੍ਰਦਾਤਾ ਸਰਕਿਟ ਬ੍ਰੇਕਰ ਰੀਸੈੱਟ ਕਰੋ | | `/api/resilience/model-cooldowns` | GET | ਬਾਕੀ ਸਮੇਂ ਅਨੁਸਾਰ ਕ੍ਰਮਬੱਧ, ਪ੍ਰਤੀ-(ਪ੍ਰਦਾਤਾ, ਕਨੈਕਸ਼ਨ, ਮਾਡਲ) ਸਰਗਰਮ ਲੌਕਆਉਟਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਓ | | `/api/resilience/model-cooldowns` | DELETE | ਮਾਡਲ ਲੌਕਆਉਟ ਸਾਫ਼ ਕਰੋ — ਬਾਡੀ `{provider, model}` ਜਾਂ ਸਭ ਕੁਝ ਮਿਟਾਉਣ ਲਈ `{all: true}` | | `/api/rate-limits` | GET | ਪ੍ਰਤੀ-ਖਾਤਾ ਦਰ ਸੀਮਾ ਸਥਿਤੀ | | `/api/rate-limit` | GET | ਗਲੋਬਲ ਦਰ ਸੀਮਾ ਸੰਰਚਨਾ | > ਸਾਰੇ ਚਾਰ `/api/resilience/*` ਰੂਟਾਂ ਲਈ **ਪ੍ਰਬੰਧਨ ਪ੍ਰਮਾਣੀਕਰਨ** (`requireManagementAuth`) ਲੋੜੀਂਦਾ ਹੈ। ਪ੍ਰਦਾਤਾ ਬ੍ਰੇਕਰ ਬਨਾਮ ਕਨੈਕਸ਼ਨ ਕੂਲਡਾਊਨ ਬਨਾਮ ਮਾਡਲ ਲੌਕਆਉਟ ਦੇ ਪੂਰੇ ਵੇਰਵੇ ਲਈ [ਲਚਕਤਾ (ਵਿਸਤ੍ਰਿਤ)](#resilience-extended) ਵੇਖੋ। ### ਮੁਲਾਂਕਣ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | ------------ | -------- | ------------------------------------------ | | `/api/evals` | GET/POST | ਮੁਲਾਂਕਣ ਸੂਟਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਓ / ਮੁਲਾਂਕਣ ਚਲਾਓ | ### ਨੀਤੀਆਂ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | --------------- | --------------- | ---------------------------- | | `/api/policies` | GET/POST/DELETE | ਰੂਟਿੰਗ ਨੀਤੀਆਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ | ### ਅਨੁਪਾਲਨਾ | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | --------------------------- | ---- | -------------------------- | | `/api/compliance/audit-log` | GET | ਅਨੁਪਾਲਨਾ ਆਡਿਟ ਲੌਗ (ਆਖਰੀ N) | ### v1beta (Gemini-ਅਨੁਕੂਲ) | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | -------------------------- | ---- | --------------------------------------- | | `/v1beta/models` | GET | Gemini ਫਾਰਮੈਟ ਵਿੱਚ ਮਾਡਲਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਓ | | `/v1beta/models/{...path}` | POST | Gemini `generateContent` ਐਂਡਪੌਇੰਟ | ਇਹ ਐਂਡਪੌਇੰਟ ਉਹਨਾਂ ਕਲਾਇੰਟਾਂ ਲਈ Gemini ਦੇ API ਫਾਰਮੈਟ ਨੂੰ ਪ੍ਰਤੀਬਿੰਬਤ ਕਰਦੇ ਹਨ, ਜਿਨ੍ਹਾਂ ਨੂੰ ਮੂਲ Gemini SDK ਅਨੁਕੂਲਤਾ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ### ਅੰਦਰੂਨੀ / ਸਿਸਟਮ API | ਐਂਡਪੌਇੰਟ | ਵਿਧੀ | ਵੇਰਵਾ | | ------------------------ | ---- | ------------------------------------------------------------ | | `/api/init` | GET | ਐਪਲੀਕੇਸ਼ਨ ਸ਼ੁਰੂਆਤੀ ਜਾਂਚ (ਪਹਿਲੀ ਵਾਰ ਚਲਾਉਣ ਵੇਲੇ ਵਰਤੀ ਜਾਂਦੀ ਹੈ) | | `/api/tags` | GET | Ollama-ਅਨੁਕੂਲ ਮਾਡਲ ਟੈਗ (Ollama ਕਲਾਇੰਟਾਂ ਲਈ) | | `/api/restart` | POST | ਸਰਵਰ ਦੀ ਸੁਚੱਜੀ ਰੀਸਟਾਰਟ ਸ਼ੁਰੂ ਕਰੋ | | `/api/shutdown` | POST | ਸਰਵਰ ਦੀ ਸੁਚੱਜੀ ਬੰਦ ਪ੍ਰਕਿਰਿਆ ਸ਼ੁਰੂ ਕਰੋ | | `/api/system/env/repair` | POST | OAuth ਪ੍ਰਦਾਤਾ ਵਾਤਾਵਰਣ ਵੇਰੀਏਬਲਾਂ ਦੀ ਮੁਰੰਮਤ ਕਰੋ | | `/api/system/version` | GET | ਮੌਜੂਦਾ/ਨਵੀਨਤਮ ਵਰਜਨ, ਅੱਪਡੇਟ ਸਥਿਤੀ, ਰਿਲੀਜ਼ ਚੈਨਲ | | `/api/system/version` | POST | ਨਵੀਨਤਮ ਵਰਜਨ ਲਈ ਡਿਪਲੌਇਮੈਂਟ-ਜਾਗਰੂਕ ਅੱਪਡੇਟ ਸ਼ੁਰੂ ਕਰੋ | > **ਨੋਟ:** ਇਹ ਐਂਡਪੌਇੰਟ ਸਿਸਟਮ ਦੁਆਰਾ ਅੰਦਰੂਨੀ ਤੌਰ 'ਤੇ ਜਾਂ Ollama ਕਲਾਇੰਟ ਅਨੁਕੂਲਤਾ ਲਈ ਵਰਤੇ ਜਾਂਦੇ ਹਨ। ਆਮ ਤੌਰ 'ਤੇ ਅੰਤਿਮ ਉਪਭੋਗਤਾ ਇਨ੍ਹਾਂ ਨੂੰ ਕਾਲ ਨਹੀਂ ਕਰਦੇ। ### OAuth ਵਾਤਾਵਰਣ ਮੁਰੰਮਤ _(v3.6.1+)_ ```bash POST /api/system/env/repair Content-Type: application/json { "provider": "claude-code" } ``` ਕਿਸੇ ਖਾਸ ਪ੍ਰਦਾਤਾ ਲਈ ਗੁੰਮ ਜਾਂ ਖਰਾਬ OAuth ਵਾਤਾਵਰਣ ਵੇਰੀਏਬਲਾਂ ਦੀ ਮੁਰੰਮਤ ਕਰਦਾ ਹੈ। ਇਹ ਵਾਪਸ ਕਰਦਾ ਹੈ: ```json { "success": true, "repaired": ["CLAUDE_CODE_OAUTH_CLIENT_ID", "CLAUDE_CODE_OAUTH_CLIENT_SECRET"], "backupPath": "/home/user/.omniroute/backups/env-repair-2026-04-11.bak" } ``` ### ਵਰਜਨ ਅਤੇ ਰਿਲੀਜ਼ ਚੈਨਲ ```bash GET /api/system/version ``` ਸਿਰਫ਼ ਲੂਪਬੈਕ ਲਈ ਪ੍ਰਬੰਧਨ ਰੂਟ (ਐਡਮਿਨ ਪ੍ਰਮਾਣੀਕਰਨ)। ਚੱਲ ਰਿਹਾ ਵਰਜਨ, ਨਵੀਨਤਮ ਪ੍ਰਕਾਸ਼ਿਤ ਵਰਜਨ ਅਤੇ ਆਟੋ-ਅੱਪਡੇਟ ਸਥਿਤੀ ਵਾਪਸ ਕਰਦਾ ਹੈ। `releaseChannel` ਅਤੇ `channels` ਵਾਧੂ ਫ਼ੀਲਡ ਹਨ (rail 3.8.54); `channel` ਦਾ ਅਰਥ ਪਹਿਲਾਂ ਵਾਲਾ ਹੀ ਰਹਿੰਦਾ ਹੈ — ਉਹ ਡਿਪਲੌਇਮੈਂਟ ਮੋਡ ਜਿਸਨੂੰ ਡੈਸ਼ਬੋਰਡ ਅੱਪਡੇਟਰ ਵਰਤਦਾ ਹੈ (`npm`, `source` ਜਾਂ `docker-compose`)। ```json { "current": "3.8.52", "latest": "3.8.52", "updateAvailable": false, "channel": "npm", "autoUpdateSupported": true, "autoUpdateError": null, "news": null, "releaseChannel": "latest", "channels": { "latest": "3.8.52", "next": "3.8.53-rc.1" } } ``` - `releaseChannel` — ਚੱਲ ਰਹੇ ਬਿਲਡ ਦਾ npm ਚੈਨਲ: `-nightly.*` ਵਰਜਨਾਂ ਲਈ `nightly`, ਹੋਰ ਪ੍ਰੀ-ਰਿਲੀਜ਼ਾਂ (`-rc.*`, `-beta.*`, `-alpha.*`) ਲਈ `next`, `channels.latest` ਨਾਲੋਂ ਪੁਰਾਣੇ ਮੁੱਖ ਵਰਜਨ ਦੇ ਸਥਿਰ ਵਰਜਨ ਲਈ `lts`, ਨਹੀਂ ਤਾਂ `latest`। ਇਹ `scripts/release/dist-tag.mjs` ਵਾਲੇ ਹੀ ਨਿਯਮ ਹਨ, ਜੋ ਪ੍ਰਕਾਸ਼ਨ ਸਮੇਂ npm dist-tag ਚੁਣਦਾ ਹੈ। - `channels` — `npm view omniroute dist-tags` ਤੋਂ ਹਰੇਕ dist-tag ਦਾ ਪ੍ਰਕਾਸ਼ਿਤ ਨਵੀਨਤਮ ਸਿਰਾ (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 } ``` **ਮਾਡਲ id ਦੀਆਂ ਉਦਾਹਰਨਾਂ:** `openai/whisper-1` (ਇੱਕ OpenAI ਕੁੰਜੀ ਦੀ ਲੋੜ ਹੈ), `openrouter/deepgram/nova-3` (ਇੱਕ OpenRouter ਕੁੰਜੀ ਦੀ ਲੋੜ ਹੈ), `deepgram/nova-3` (ਇੱਕ ਮੂਲ Deepgram ਕੁੰਜੀ ਦੀ ਲੋੜ ਹੈ)। ਸਿਰਫ਼ `deepgram/nova-3` ਬੇਨਤੀ OpenRouter ਦੀ ਵਰਤੋਂ **ਨਹੀਂ** ਕਰਦੀ। **ਸਮਰਥਿਤ ਫਾਰਮੈਟ:** `mp3`, `wav`, `m4a`, `flac`, `ogg`, `webm`। --- ## Ollama ਅਨੁਕੂਲਤਾ Ollama ਦੇ API ਫਾਰਮੈਟ ਦੀ ਵਰਤੋਂ ਕਰਨ ਵਾਲੇ ਕਲਾਇੰਟਾਂ ਲਈ: ```bash # ਚੈਟ ਐਂਡਪੁਆਇੰਟ (Ollama ਫਾਰਮੈਟ) POST /v1/api/chat # ਮਾਡਲ ਸੂਚੀ (Ollama ਫਾਰਮੈਟ) GET /api/tags ``` ਬੇਨਤੀਆਂ ਨੂੰ Ollama ਅਤੇ ਅੰਦਰੂਨੀ ਫਾਰਮੈਟਾਂ ਵਿਚਕਾਰ ਆਪਣੇ-ਆਪ ਅਨੁਵਾਦ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ## ਟੋਕਨਾਈਜ਼ਡ VS Code / ਹੈਡਰ-ਰਹਿਤ ਉਪਨਾਮ ਜਦੋਂ ਕੋਈ ਇੰਟੀਗ੍ਰੇਸ਼ਨ `Authorization` ਹੈਡਰ ਸ਼ਾਮਲ ਨਹੀਂ ਕਰ ਸਕਦੀ ਅਤੇ API ਕੁੰਜੀ ਨੂੰ ਬੇਸ URL ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਤਾਂ ਇਹ ਉਪਨਾਮ ਵਰਤੋ। ```bash # OpenAI-ਸ਼ੈਲੀ ਕੈਟਾਲਾਗ ਉਪਨਾਮ GET /api/v1/vscode/{token}/ GET /api/v1/vscode/{token}/models # OpenAI-ਸ਼ੈਲੀ ਚੈਟ ਉਪਨਾਮ POST /api/v1/vscode/{token}/chat/completions POST /api/v1/vscode/{token}/responses # Ollama-ਸ਼ੈਲੀ ਉਪਨਾਮ POST /api/v1/vscode/{token}/api/chat GET /api/v1/vscode/{token}/api/tags ``` ਉਦਾਹਰਨ: ```bash curl https://your-host.example/api/v1/vscode/YOUR_API_KEY/models curl -X POST https://your-host.example/api/v1/vscode/YOUR_API_KEY/chat/completions \ -H "Content-Type: application/json" \ -d '{"model":"auto","messages":[{"role":"user","content":"hello"}]}' ``` ਨੋਟ: - ਟੋਕਨਾਈਜ਼ਡ ਉਪਨਾਮ `/v1/*` ਅਤੇ `/api/tags` ਵਾਲੇ ਉਹੀ ਹੈਂਡਲਰ ਮੁੜ ਵਰਤਦੇ ਹਨ; ਜਵਾਬਾਂ ਦੀ ਬਣਤਰ ਇੱਕੋ ਜਿਹੀ ਰਹਿੰਦੀ ਹੈ। - ਜਦੋਂ ਵੀ ਕਲਾਇੰਟ ਕਸਟਮ ਹੈਡਰਾਂ ਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੋਵੇ, `Authorization: Bearer ...` ਨੂੰ ਤਰਜੀਹ ਦਿਓ। - URL-ਆਧਾਰਿਤ ਟੋਕਨ OmniRoute ਤੋਂ ਬਾਹਰ ਰਿਵਰਸ-ਪ੍ਰੌਕਸੀ ਲੌਗਾਂ, ਬ੍ਰਾਊਜ਼ਰ ਇਤਿਹਾਸ ਅਤੇ ਟੈਲੀਮੈਟਰੀ ਵਿੱਚ ਦਿਖਾਈ ਦੇ ਸਕਦੇ ਹਨ। ਇਨ੍ਹਾਂ ਨੂੰ ਡਿਫੌਲਟ ਪ੍ਰਮਾਣੀਕਰਨ ਮੋਡ ਦੀ ਬਜਾਏ ਇੱਕ ਅਨੁਕੂਲਤਾ ਵਿਕਲਪ ਵਜੋਂ ਵਰਤੋ। --- ## ਟੈਲੀਮੈਟਰੀ ```bash # ਲੇਟੈਂਸੀ ਟੈਲੀਮੈਟਰੀ ਸੰਖੇਪ ਪ੍ਰਾਪਤ ਕਰੋ (ਹਰੇਕ ਪ੍ਰਦਾਤਾ ਲਈ p50/p95/p99) GET /api/telemetry/summary ``` **ਜਵਾਬ:** ```json { "providers": { "claudeCode": { "p50": 245, "p95": 890, "p99": 1200, "count": 150 }, "github": { "p50": 180, "p95": 620, "p99": 950, "count": 320 } } } ``` --- ## ਬਜਟ ```bash # ਸਾਰੀਆਂ API ਕੁੰਜੀਆਂ ਲਈ ਬਜਟ ਸਥਿਤੀ ਪ੍ਰਾਪਤ ਕਰੋ GET /api/usage/budget # ਬਜਟ ਸੈੱਟ ਜਾਂ ਅੱਪਡੇਟ ਕਰੋ POST /api/usage/budget Content-Type: application/json { "apiKeyId": "key-123", "dailyLimitUsd": 5.00, "weeklyLimitUsd": 30.00, "monthlyLimitUsd": 100.00, "warningThreshold": 0.8, "resetInterval": "monthly" } ``` > **ਸਕੀਮਾ ਨੋਟਸ** (`setBudgetSchema`): `apiKeyId` ਲਾਜ਼ਮੀ ਹੈ; `dailyLimitUsd`, `weeklyLimitUsd`, ਜਾਂ `monthlyLimitUsd` ਵਿੱਚੋਂ ਘੱਟੋ-ਘੱਟ ਇੱਕ ਦਾ ਮੁੱਲ ਸਿਫ਼ਰ ਤੋਂ ਵੱਧ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ਵਿਕਲਪਿਕ ਫ਼ੀਲਡ: `warningThreshold` (0–1), `resetInterval` (`daily` | `weekly` | `monthly`), `resetTime` (`HH:MM`)। ਪੁਰਾਣੀ `{keyId, limit, period}` ਬਣਤਰ `400 Bad Request` ਵਾਪਸ ਕਰਦੀ ਹੈ। ## ਟੋਕਨ ਸੀਮਾਵਾਂ ਪ੍ਰਤੀ-API-key **ਟੋਕਨ** ਬਜਟ (ਉੱਪਰ ਦਿੱਤੇ USD-ਅਧਾਰਿਤ ਬਜਟ ਤੋਂ ਵੱਖਰੇ)। ਬੇਨਤੀ ਪਾਥ 'ਤੇ ਹੀ ਲਾਗੂ ਕੀਤੇ ਜਾਂਦੇ ਹਨ: ਜਦੋਂ ਕਿਸੇ key ਦੀ ਮੌਜੂਦਾ ਵਿੰਡੋ ਵਰਤੋਂ ਆਪਣੀ ਸੀਮਾ ਤੱਕ ਪਹੁੰਚ ਜਾਂਦੀ ਹੈ, ਤਾਂ ਬੇਨਤੀਆਂ `429 Too Many Requests` ਨਾਲ ਰੱਦ ਕਰ ਦਿੱਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ। ਸੀਮਾਵਾਂ ਨੂੰ ਕਿਸੇ ਖਾਸ `model`, ਕਿਸੇ `provider` ਤੱਕ ਸੀਮਿਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਜਾਂ ਪੂਰੀ key ਉੱਤੇ `global` ਤੌਰ 'ਤੇ ਲਾਗੂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ; ਜਦੋਂ ਕਈ ਸੀਮਾਵਾਂ ਕਿਸੇ ਬੇਨਤੀ ਨਾਲ ਮੇਲ ਖਾਂਦੀਆਂ ਹਨ, ਤਾਂ ਸਭ ਤੋਂ ਸਖ਼ਤ ਸੀਮਾ ਲਾਗੂ ਹੁੰਦੀ ਹੈ। ```bash # ਕਿਸੇ key ਦੀਆਂ ਟੋਕਨ ਸੀਮਾਵਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਓ (ਲਾਈਵ ਵਿੰਡੋ ਵਰਤੋਂ ਸਮੇਤ) 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`) ਲਾਜ਼ਮੀ ਹਨ। `scopeValue` ਲਾਜ਼ਮੀ ਹੈ, ਜਦੋਂ ਤੱਕ `scopeType`, `global` ਨਾ ਹੋਵੇ (ਉਦਾਹਰਨ ਵਜੋਂ, `model` ਸਕੋਪ ਲਈ model id, ਅਤੇ `provider` ਸਕੋਪ ਲਈ provider id)। `tokenLimit` ਇੱਕ ਧਨਾਤਮਕ ਪੂਰਨ ਅੰਕ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ (string ਤੋਂ ਰੂਪਾਂਤਰਿਤ)। ਵਿਕਲਪਿਕ: `id` (ਬਣਾਉਣ ਲਈ ਛੱਡ ਦਿਓ, ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਦਿਓ), `resetInterval` (`daily` | `weekly` | `monthly`, ਮੂਲ ਮੁੱਲ `monthly`), `resetTime` (`HH:MM`), `enabled` (ਮੂਲ ਮੁੱਲ `true`)। `GET` ਜਵਾਬ ਹਰ ਸੀਮਾ ਵਿੱਚ `tokensUsed`, `remaining`, `windowStart`, `periodStartAt`, ਅਤੇ `nextResetAt` ਸ਼ਾਮਲ ਕਰਕੇ ਵਾਧੂ ਜਾਣਕਾਰੀ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ। ਇਹ ਇੱਕ ਪ੍ਰਬੰਧਨ-ਸ਼੍ਰੇਣੀ endpoint ਹੈ (ਪ੍ਰਮਾਣੀਕਰਨ authz pipeline ਦੁਆਰਾ ਕੇਂਦਰੀ ਤੌਰ 'ਤੇ ਲਾਗੂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ)। ## ਬੇਨਤੀ ਪ੍ਰੋਸੈਸਿੰਗ 1. Client `/v1/*` ਨੂੰ ਬੇਨਤੀ ਭੇਜਦਾ ਹੈ 2. Route handler, `handleChat`, `handleEmbedding`, `handleAudioTranscription`, ਜਾਂ `handleImageGeneration` ਨੂੰ ਕਾਲ ਕਰਦਾ ਹੈ 3. Model ਨੂੰ ਹੱਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ (ਸਿੱਧਾ provider/model ਜਾਂ alias/combo) 4. Account ਉਪਲਬਧਤਾ ਫਿਲਟਰਿੰਗ ਨਾਲ ਸਥਾਨਕ DB ਵਿੱਚੋਂ credentials ਚੁਣੇ ਜਾਂਦੇ ਹਨ 5. Chat ਲਈ: `handleChatCore` semantic/signature cache ਦੀ ਜਾਂਚ ਕਰਦਾ ਹੈ ਅਤੇ combo compression ਸੈਟਿੰਗਾਂ ਨੂੰ ਹੱਲ ਕਰਦਾ ਹੈ 6. ਸਮਰੱਥ ਹੋਣ 'ਤੇ provider translation ਤੋਂ ਪਹਿਲਾਂ proactive compression ਚੱਲਦੀ ਹੈ (`lite`, Caveman, RTK, ਜਾਂ stacked) 7. Provider executor upstream ਬੇਨਤੀ ਭੇਜਦਾ ਹੈ 8. ਜਵਾਬ ਨੂੰ ਵਾਪਸ client format ਵਿੱਚ ਅਨੁਵਾਦ ਕੀਤਾ ਜਾਂਦਾ ਹੈ (chat), ਜਾਂ ਜਿਵੇਂ ਹੈ ਤਿਵੇਂ ਵਾਪਸ ਕੀਤਾ ਜਾਂਦਾ ਹੈ (embeddings/images/audio) 9. ਵਰਤੋਂ, compression analytics, ਅਤੇ ਬੇਨਤੀ logs ਦਰਜ ਕੀਤੇ ਜਾਂਦੇ ਹਨ 10. ਗਲਤੀਆਂ ਹੋਣ 'ਤੇ combo ਨਿਯਮਾਂ ਅਨੁਸਾਰ fallback ਲਾਗੂ ਹੁੰਦਾ ਹੈ ਪੂਰਾ architecture ਹਵਾਲਾ: [`ARCHITECTURE.md`](../architecture/ARCHITECTURE.md) --- ## Combo ਪ੍ਰਬੰਧਨ ਉੱਚ-ਪੱਧਰੀ routing combos (ਜਿਨ੍ਹਾਂ ਦਾ ਸੰਖੇਪ ਪਹਿਲਾਂ ਹੀ `/api/combos*` ਹੇਠ ਦਿੱਤਾ ਗਿਆ ਹੈ) ਨੂੰ model id pattern ਤੋਂ 1:1 ਵੀ map ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਜਿਸ ਨਾਲ OpenAI-ਸ਼ੈਲੀ model id ਨੂੰ ਪਾਰਦਰਸ਼ੀ ਢੰਗ ਨਾਲ ਕਿਸੇ combo ਵੱਲ redirect ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। | ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ | | ------ | -------------------------------- | ---------------------------------------------------------------------------- | | GET | `/api/model-combo-mappings` | ਸਾਰੀਆਂ model→combo mappings ਦੀ ਸੂਚੀ ਦਿਖਾਓ | | POST | `/api/model-combo-mappings` | Mapping ਬਣਾਓ — body: `{pattern, comboId, priority?, enabled?, description?}` | | GET | `/api/model-combo-mappings/[id]` | ਇੱਕ mapping ਪ੍ਰਾਪਤ ਕਰੋ | | PUT | `/api/model-combo-mappings/[id]` | ਮੌਜੂਦਾ mapping ਦੇ fields ਅੱਪਡੇਟ ਕਰੋ | | DELETE | `/api/model-combo-mappings/[id]` | ਇੱਕ mapping ਹਟਾਓ | **ਪ੍ਰਮਾਣੀਕਰਨ:** management session/API key (`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 ਦੁਆਰਾ ਪ੍ਰਮਾਣਿਤ ਬਾਡੀ: `{content, key, type?, sessionId?, apiKeyId?, metadata?, expiresAt?}` | | GET | `/api/memory/[id]` | ਇੱਕ ਮੈਮੋਰੀ ਪ੍ਰਾਪਤ ਕਰੋ | | DELETE | `/api/memory/[id]` | ਇੱਕ ਮੈਮੋਰੀ ਮਿਟਾਓ | | GET | `/api/memory/health` | ਮੈਮੋਰੀ ਉਪ-ਸਿਸਟਮ ਦੀ ਸਿਹਤ (DB ਕਨੈਕਟੀਵਿਟੀ, ਐਮਬੈਡਿੰਗ ਬੈਕਐਂਡ, ਵੈਕਟਰ ਇੰਡੈਕਸ ਸਥਿਤੀ) | **ਪ੍ਰਮਾਣੀਕਰਨ:** ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ/API ਕੁੰਜੀ (`requireManagementAuth`)। `type` enum: `FACTUAL`, `EPISODIC`, `SEMANTIC`, `PROCEDURAL` (`src/lib/memory/types.ts` ਵਿੱਚ `MemoryType` ਵੇਖੋ)। --- ## MCP ਸਰਵਰ OmniRoute ਵਿੱਚ 3 ਟ੍ਰਾਂਸਪੋਰਟਾਂ (stdio, SSE, streamable-http) ਅਤੇ ਦਾਇਰਾ-ਨਿਰਧਾਰਤ ਟੂਲਾਂ ਵਾਲਾ ਇੱਕ ਐਮਬੈਡਡ Model Context Protocol ਸਰਵਰ ਸ਼ਾਮਲ ਹੈ। ਹੇਠਾਂ ਦਿੱਤੇ ਡੈਸ਼ਬੋਰਡ ਐਂਡਪੌਇੰਟ ਸਥਿਤੀ/ਆਡਿਟ ਡੇਟਾ ਪੜ੍ਹਦੇ ਹਨ ਅਤੇ HTTP ਟ੍ਰਾਂਸਪੋਰਟਾਂ ਨੂੰ ਪ੍ਰੌਕਸੀ ਕਰਦੇ ਹਨ। | ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ | | ------ | ---------------------- | ------------------------------------------------------------------------------------------------ | -------------------- | | GET | `/api/mcp/status` | ਹਾਰਟਬੀਟ, ਟ੍ਰਾਂਸਪੋਰਟ, ਔਨਲਾਈਨ ਸਥਿਤੀ, ਆਖਰੀ ਕਾਲ, ਪ੍ਰਮੁੱਖ ਟੂਲ, 24h ਸਫਲਤਾ ਦਰ | | GET | `/api/mcp/tools` | `name`, `description`, `scopes`, `phase`, `auditLevel`, `sourceEndpoints` ਸਮੇਤ MCP ਟੂਲਾਂ ਦੀ ਸੂਚੀ | | GET | `/api/mcp/sse` | SSE ਟ੍ਰਾਂਸਪੋਰਟ ਲਈ SSE ਸਟ੍ਰੀਮ ਖੋਲ੍ਹੋ (ਜੇ MCP ਅਯੋਗ ਹੋਵੇ ਜਾਂ ਟ੍ਰਾਂਸਪੋਰਟ ਮੇਲ ਨਾ ਖਾਏ ਤਾਂ `503` ਵਾਪਸ ਕਰਦਾ ਹੈ) | | POST | `/api/mcp/sse` | SSE ਟ੍ਰਾਂਸਪੋਰਟ ਉੱਤੇ JSON-RPC ਫ੍ਰੇਮ ਭੇਜੋ | | GET | `/api/mcp/stream` | Streamable HTTP ਟ੍ਰਾਂਸਪੋਰਟ ਦਾ SSE ਪਾਸਾ ਖੋਲ੍ਹੋ (ਸਰਵਰ ਦੁਆਰਾ ਸ਼ੁਰੂ ਕੀਤੇ ਸੁਨੇਹੇ) | | POST | `/api/mcp/stream` | Streamable HTTP ਟ੍ਰਾਂਸਪੋਰਟ ਉੱਤੇ JSON-RPC ਫ੍ਰੇਮ ਭੇਜੋ | | DELETE | `/api/mcp/stream` | ਇੱਕ Streamable HTTP ਸੈਸ਼ਨ ਸਮਾਪਤ ਕਰੋ | | GET | `/api/mcp/audit` | ਆਡਿਟ ਲੌਗ ਦੀ ਪੁੱਛਗਿੱਛ ਕਰੋ — `?limit=`, `?offset=`, `?tool=`, `?success=true | false`, `?apiKeyId=` | | GET | `/api/mcp/audit/stats` | ਸਮੂਹਿਕ ਆਡਿਟ ਅੰਕੜੇ (ਕੁੱਲ ਗਿਣਤੀਆਂ, ਸਫਲਤਾ ਦਰ, ਔਸਤ ਮਿਆਦ, ਪ੍ਰਮੁੱਖ ਟੂਲ) | **ਪ੍ਰਮਾਣੀਕਰਨ:** `sse`/`stream` ਟ੍ਰਾਂਸਪੋਰਟ MCP-ਵਿਸ਼ੇਸ਼ ਪ੍ਰਮਾਣੀਕਰਨ ਸਤਹ ਦੀ ਪਾਲਣਾ ਕਰਦੇ ਹਨ (`mcp` ਦਾਇਰੇ ਵਾਲੀ Bearer API ਕੁੰਜੀ); `status`/`tools`/`audit*` ਰੂਟ ਡੈਸ਼ਬੋਰਡ ਤੋਂ ਪੜ੍ਹੇ ਜਾ ਸਕਦੇ ਹਨ (ਡੈਸ਼ਬੋਰਡ ਹੋਸਟ ਤੱਕ ਪਹੁੰਚ ਤੋਂ ਇਲਾਵਾ ਕਿਸੇ ਵਾਧੂ ਪ੍ਰਮਾਣੀਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ)। > ਦੋਵੇਂ HTTP ਟ੍ਰਾਂਸਪੋਰਟ `settings.mcpEnabled` ਅਤੇ `settings.mcpTransport` ਦੁਆਰਾ ਨਿਯੰਤਰਿਤ ਹਨ — ਟ੍ਰਾਂਸਪੋਰਟ ਮੇਲ ਨਾ ਖਾਣ 'ਤੇ `400` ਵਾਪਸ ਹੁੰਦਾ ਹੈ, ਅਤੇ MCP ਅਯੋਗ ਹੋਣ ਦੀ ਸਥਿਤੀ ਵਿੱਚ `503` ਵਾਪਸ ਹੁੰਦਾ ਹੈ। --- ## A2A ਸਰਵਰ OmniRoute ਜਾਂਚ/ਡੈਸ਼ਬੋਰਡ ਦੀ ਵਰਤੋਂ ਲਈ ਇੱਕ A2A (Agent-to-Agent) JSON-RPC 2.0 ਐਂਡਪੌਇੰਟ ਦੇ ਨਾਲ ਇੱਕ REST ਰੈਪਰ ਉਪਲਬਧ ਕਰਾਉਂਦਾ ਹੈ। ### JSON-RPC ```bash POST /a2a Authorization: Bearer your-api-key # ਵਿਕਲਪਿਕ, ਜਦੋਂ ਤੱਕ OMNIROUTE_API_KEY ਸੈੱਟ ਨਾ ਹੋਵੇ Content-Type: application/json { "jsonrpc": "2.0", "id": 1, "method": "message/send", "params": { "skill": "smart-routing", "messages": [{"role": "user", "content": "Route this coding task"}] } } ``` ਸਮਰਥਿਤ ਵਿਧੀਆਂ (ਸਾਰੀਆਂ `settings.a2aEnabled` ਦੁਆਰਾ ਨਿਯੰਤਰਿਤ ਹਨ): | ਵਿਧੀ | ਵੇਰਵਾ | | ---------------- | -------------------------------------------------------------------- | | `message/send` | ਸਮਕਾਲੀ ਸਕਿੱਲ ਐਗਜ਼ੀਕਿਊਸ਼ਨ; `{task, artifacts, metadata}` ਵਾਪਸ ਕਰਦਾ ਹੈ | | `message/stream` | ਉਸੇ ਸਕਿੱਲ ਸੈੱਟ ਦਾ ਸਟ੍ਰੀਮਿੰਗ SSE ਐਗਜ਼ੀਕਿਊਸ਼ਨ | | `tasks/get` | `taskId` ਦੁਆਰਾ ਕੋਈ ਟਾਸਕ ਪ੍ਰਾਪਤ ਕਰੋ | | `tasks/cancel` | `taskId` ਦੁਆਰਾ ਕੋਈ ਟਾਸਕ ਰੱਦ ਕਰੋ | ਬਿਲਟ-ਇਨ ਸਕਿੱਲ: `smart-routing`, `quota-management`, `provider-discovery`, `cost-analysis`, `health-report`। ### ਏਜੰਟ ਕਾਰਡ ```bash GET /.well-known/agent.json ``` ਸਰਵਜਨਕ A2A ਏਜੰਟ ਕਾਰਡ (ਨਾਮ, ਵੇਰਵਾ, ਸਮਰੱਥਾਵਾਂ, ਸਕਿੱਲ ਕੈਟਾਲਾਗ, ਪ੍ਰਮਾਣੀਕਰਨ ਸਕੀਮ) ਵਾਪਸ ਕਰਦਾ ਹੈ — ਸਰਵਜਨਕ ਤੌਰ 'ਤੇ 1 ਘੰਟੇ ਲਈ ਕੈਸ਼ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਪ੍ਰਮਾਣੀਕਰਨ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ। ### REST ਸਹਾਇਕ | ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ | | ---- | ---------------------------- | --------------------------------------------------------------------------------------------------------------------- | | GET | `/api/a2a/status` | A2A ਸਮਰੱਥ + ਟਾਸਕ ਅੰਕੜੇ + ਕੈਸ਼ ਕੀਤੇ ਏਜੰਟ ਕਾਰਡ ਦਾ ਸੰਖੇਪ | | GET | `/api/a2a/tasks` | ਟਾਸਕ ਸੂਚੀਬੱਧ ਕਰੋ — `?state=submitted\|working\|completed\|failed\|cancelled`, `?skill=`, `?limit=` (≤200), `?offset=` | | POST | `/api/a2a/tasks` | (REST ਸਹਾਇਕ ਵਜੋਂ ਲਾਗੂ ਨਹੀਂ ਕੀਤਾ ਗਿਆ — JSON-RPC `message/send` ਰਾਹੀਂ ਬਣਾਓ) | | GET | `/api/a2a/tasks/[id]` | ਇੱਕ ਟਾਸਕ ਪ੍ਰਾਪਤ ਕਰੋ | | POST | `/api/a2a/tasks/[id]/cancel` | ਇੱਕ ਟਾਸਕ ਰੱਦ ਕਰੋ | **ਪ੍ਰਮਾਣੀਕਰਨ:** REST ਸਹਾਇਕ ਮੈਨੇਜਮੈਂਟ ਪ੍ਰਮਾਣੀਕਰਨ ਤੋਂ ਬਿਨਾਂ ਚੱਲਦੇ ਹਨ (ਡੈਸ਼ਬੋਰਡ ਦੁਆਰਾ ਪੜ੍ਹਨਯੋਗ); JSON-RPC `/a2a` ਰੂਟ, ਜੇ ਸੰਰਚਿਤ ਹੋਵੇ, ਤਾਂ Bearer `OMNIROUTE_API_KEY` ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। --- ## ਕਲਾਉਡ, ਮੁਲਾਂਕਣ ਅਤੇ ਆਕਲਨ | ਵਿਧੀ | ਪਾਥ | ਵੇਰਵਾ | | ------ | ------------------------------- | ------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------- | | POST | `/api/cloud/auth` | Bearer ਕੁੰਜੀ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ ਅਤੇ ਕਲਾਉਡ ਸਿੰਕ ਕਲਾਇੰਟਾਂ ਲਈ ਲੁਕਾਏ ਹੋਏ ਪ੍ਰਦਾਤਾ ਕਨੈਕਸ਼ਨ + ਮਾਡਲ ਉਪਨਾਮ ਵਾਪਸ ਕਰੋ | | POST | `/api/cloud/credentials/update` | ਕਲਾਉਡ ਨਾਲ ਸਿੰਕ ਕੀਤੇ ਪ੍ਰਦਾਤਾ ਲਈ ਇਨਕ੍ਰਿਪਟ ਕੀਤੇ ਕ੍ਰੈਡੈਂਸ਼ੀਅਲ ਅੱਪਡੇਟ ਕਰੋ | | POST | `/api/cloud/model/resolve` | ਸਥਾਨਕ ਰੂਟਿੰਗ ਸਾਰਣੀ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਲੌਜਿਕਲ ਮਾਡਲ id ਨੂੰ ਕਿਸੇ ਨਿਰਧਾਰਤ ਪ੍ਰਦਾਤਾ/ਮਾਡਲ ਨਾਲ ਹੱਲ ਕਰੋ | | GET | `/api/cloud/models/alias` | ਕਲਾਉਡ ਸਿੰਕ ਲਈ ਉਪਲਬਧ ਕਰਵਾਏ ਗਏ ਮਾਡਲ ਉਪਨਾਮਾਂ ਦੀ ਸੂਚੀ ਦਿਓ | | GET | `/api/assess` | ਨਵੀਨਤਮ ਆਕਲਨ ਵਰਗੀਕਰਨ ਪੜ੍ਹੋ (ਹਰੇਕ ਪ੍ਰਦਾਤਾ/ਮਾਡਲ ਲਈ) | | POST | `/api/assess` | ਇੱਕ ਆਕਲਨ ਚਲਾਓ — ਬਾਡੀ: `{scope: {type:"all"} | {type:"provider", providerId} | {type:"model", modelId}, trigger?}` | | GET | `/api/evals` | ਬਿਲਟ-ਇਨ ਮੁਲਾਂਕਣ ਸੂਟਾਂ + ਸਭ ਤੋਂ ਹਾਲੀਆ ਰਨਾਂ ਦੀ ਸੂਚੀ ਦਿਓ | | POST | `/api/evals` | ਇੱਕ ਮੁਲਾਂਕਣ ਰਨ ਟ੍ਰਿਗਰ ਕਰੋ | | POST | `/api/evals/suites` | ਇੱਕ ਕਸਟਮ ਮੁਲਾਂਕਣ ਸੂਟ ਬਣਾਓ — ਬਾਡੀ ਨੂੰ `evalSuiteSaveSchema` ਦੁਆਰਾ ਪ੍ਰਮਾਣਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ | | GET | `/api/evals/suites/[id]` | ਇੱਕ ਕਸਟਮ ਮੁਲਾਂਕਣ ਸੂਟ ਪ੍ਰਾਪਤ ਕਰੋ | **ਪ੍ਰਮਾਣੀਕਰਨ:** `/api/cloud/auth` ਇੱਕ Bearer ਕੁੰਜੀ ਨੂੰ ਸਿੱਧੇ ਤੌਰ 'ਤੇ ਪ੍ਰਮਾਣਿਤ ਕਰਦਾ ਹੈ ਅਤੇ ਸਿਰਫ਼ `manage` / `admin` ਸਕੋਪ ਵਾਲੀ ਕੁੰਜੀ ਲਈ ਹਰੇਕ ਕਨੈਕਸ਼ਨ ਦੀ ਲੁਕਾਈ ਹੋਈ ਕੁੰਜੀ ਅਤੇ `projectId` ਵਾਪਸ ਕਰਦਾ ਹੈ; ਹੋਰ `/api/cloud/*`, `/api/evals/*`, ਅਤੇ `/api/assess` ਰੂਟਾਂ ਲਈ ਪ੍ਰਬੰਧਨ ਸੈਸ਼ਨ/API ਕੁੰਜੀ ਲੋੜੀਂਦੀ ਹੈ। `/api/assess` POST, discriminated-union ਸਕੋਪ ਸਕੀਮਾ ਨਾਲ `validateBody` ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। --- ## ACP (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_…` ਐਕਸੈੱਸ ਟੋਕਨ, ਪ੍ਰਬੰਧਨ-ਸਕੋਪ ਵਾਲੀ 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`) ਵੇਖੋ।