mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-19 21:32:20 +03:00
1,104 mirrors rewritten over five passes of run-translation on the 22-source core set: the 14 sources edited since their translation, the 322 mirrors that were still English copies, and the frontmatter the old extractor leaked into the newer locales' bodies. The pipeline now caches per-`## `-section hashes and retranslates only changed sections, never reuses a section that is still English, rebuilds English-copy / leaked mirrors even when the source is unchanged, merges the state on save (parallel runs), and the drift gate (scoped to the core set) is blocking. Final audit: 0 stale, 0 English copies, 0 leaked frontmatter across 1,430 core mirrors. ⚠️ base-red inherited: #12732
1776 lines
131 KiB
Markdown
1776 lines
131 KiB
Markdown
# API Reference (Azərbaycan dili)
|
||
|
||
🌐 **Languages:** 🇺🇸 [English](../../../../reference/API_REFERENCE.md) · 🇪🇹 [am](../../../am/docs/reference/API_REFERENCE.md) · 🇸🇦 [ar](../../../ar/docs/reference/API_REFERENCE.md) · 🇧🇬 [bg](../../../bg/docs/reference/API_REFERENCE.md) · 🇧🇩 [bn](../../../bn/docs/reference/API_REFERENCE.md) · 🇨🇿 [cs](../../../cs/docs/reference/API_REFERENCE.md) · 🇩🇰 [da](../../../da/docs/reference/API_REFERENCE.md) · 🇩🇪 [de](../../../de/docs/reference/API_REFERENCE.md) · 🇬🇷 [el](../../../el/docs/reference/API_REFERENCE.md) · 🇪🇸 [es](../../../es/docs/reference/API_REFERENCE.md) · 🇪🇪 [et](../../../et/docs/reference/API_REFERENCE.md) · 🇮🇷 [fa](../../../fa/docs/reference/API_REFERENCE.md) · 🇫🇮 [fi](../../../fi/docs/reference/API_REFERENCE.md) · 🇫🇷 [fr](../../../fr/docs/reference/API_REFERENCE.md) · 🇮🇪 [ga](../../../ga/docs/reference/API_REFERENCE.md) · 🇮🇳 [gu](../../../gu/docs/reference/API_REFERENCE.md) · 🇳🇬 [ha](../../../ha/docs/reference/API_REFERENCE.md) · 🇮🇱 [he](../../../he/docs/reference/API_REFERENCE.md) · 🇮🇳 [hi](../../../hi/docs/reference/API_REFERENCE.md) · 🇭🇷 [hr](../../../hr/docs/reference/API_REFERENCE.md) · 🇭🇺 [hu](../../../hu/docs/reference/API_REFERENCE.md) · 🇦🇲 [hy](../../../hy/docs/reference/API_REFERENCE.md) · 🇮🇩 [id](../../../id/docs/reference/API_REFERENCE.md) · 🇳🇬 [ig](../../../ig/docs/reference/API_REFERENCE.md) · 🇮🇹 [it](../../../it/docs/reference/API_REFERENCE.md) · 🇯🇵 [ja](../../../ja/docs/reference/API_REFERENCE.md) · 🇬🇪 [ka](../../../ka/docs/reference/API_REFERENCE.md) · 🇰🇭 [km](../../../km/docs/reference/API_REFERENCE.md) · 🇮🇳 [kn](../../../kn/docs/reference/API_REFERENCE.md) · 🇰🇷 [ko](../../../ko/docs/reference/API_REFERENCE.md) · 🇱🇹 [lt](../../../lt/docs/reference/API_REFERENCE.md) · 🇱🇻 [lv](../../../lv/docs/reference/API_REFERENCE.md) · 🇮🇳 [ml](../../../ml/docs/reference/API_REFERENCE.md) · 🇮🇳 [mr](../../../mr/docs/reference/API_REFERENCE.md) · 🇲🇾 [ms](../../../ms/docs/reference/API_REFERENCE.md) · 🇲🇹 [mt](../../../mt/docs/reference/API_REFERENCE.md) · 🇲🇲 [my](../../../my/docs/reference/API_REFERENCE.md) · 🇳🇵 [ne](../../../ne/docs/reference/API_REFERENCE.md) · 🇳🇱 [nl](../../../nl/docs/reference/API_REFERENCE.md) · 🇳🇴 [no](../../../no/docs/reference/API_REFERENCE.md) · 🇮🇳 [or](../../../or/docs/reference/API_REFERENCE.md) · 🇮🇳 [pa](../../../pa/docs/reference/API_REFERENCE.md) · 🇵🇭 [phi](../../../phi/docs/reference/API_REFERENCE.md) · 🇵🇱 [pl](../../../pl/docs/reference/API_REFERENCE.md) · 🇵🇹 [pt](../../../pt/docs/reference/API_REFERENCE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/reference/API_REFERENCE.md) · 🇷🇴 [ro](../../../ro/docs/reference/API_REFERENCE.md) · 🇷🇺 [ru](../../../ru/docs/reference/API_REFERENCE.md) · 🇱🇰 [si](../../../si/docs/reference/API_REFERENCE.md) · 🇸🇰 [sk](../../../sk/docs/reference/API_REFERENCE.md) · 🇸🇮 [sl](../../../sl/docs/reference/API_REFERENCE.md) · 🇷🇸 [sr](../../../sr/docs/reference/API_REFERENCE.md) · 🇸🇪 [sv](../../../sv/docs/reference/API_REFERENCE.md) · 🇰🇪 [sw](../../../sw/docs/reference/API_REFERENCE.md) · 🇮🇳 [ta](../../../ta/docs/reference/API_REFERENCE.md) · 🇮🇳 [te](../../../te/docs/reference/API_REFERENCE.md) · 🇹🇭 [th](../../../th/docs/reference/API_REFERENCE.md) · 🇹🇷 [tr](../../../tr/docs/reference/API_REFERENCE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/reference/API_REFERENCE.md) · 🇵🇰 [ur](../../../ur/docs/reference/API_REFERENCE.md) · 🇺🇿 [uz](../../../uz/docs/reference/API_REFERENCE.md) · 🇻🇳 [vi](../../../vi/docs/reference/API_REFERENCE.md) · 🇳🇬 [yo](../../../yo/docs/reference/API_REFERENCE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/reference/API_REFERENCE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/reference/API_REFERENCE.md)
|
||
|
||
---
|
||
|
||
🌐 **Dillər:** 🇺🇸 [English](./API_REFERENCE.md) | 🇪🇹 [አማርኛ](../i18n/am/docs/reference/API_REFERENCE.md) | 🇸🇦 [العربية](../i18n/ar/docs/reference/API_REFERENCE.md) | 🇦🇿 [Azərbaycan dili](../i18n/az/docs/reference/API_REFERENCE.md) | 🇧🇬 [Български](../i18n/bg/docs/reference/API_REFERENCE.md) | 🇧🇩 [বাংলা](../i18n/bn/docs/reference/API_REFERENCE.md) | 🇨🇿 [Čeština](../i18n/cs/docs/reference/API_REFERENCE.md) | 🇩🇰 [Dansk](../i18n/da/docs/reference/API_REFERENCE.md) | 🇩🇪 [Deutsch](../i18n/de/docs/reference/API_REFERENCE.md) | 🇬🇷 [Ελληνικά](../i18n/el/docs/reference/API_REFERENCE.md) | 🇪🇸 [Español](../i18n/es/docs/reference/API_REFERENCE.md) | 🇪🇪 [Eesti](../i18n/et/docs/reference/API_REFERENCE.md) | 🇮🇷 [فارسی](../i18n/fa/docs/reference/API_REFERENCE.md) | 🇫🇮 [Suomi](../i18n/fi/docs/reference/API_REFERENCE.md) | 🇫🇷 [Français](../i18n/fr/docs/reference/API_REFERENCE.md) | 🇮🇪 [Gaeilge](../i18n/ga/docs/reference/API_REFERENCE.md) | 🇮🇳 [ગુજરાતી](../i18n/gu/docs/reference/API_REFERENCE.md) | 🇳🇬 [Hausa](../i18n/ha/docs/reference/API_REFERENCE.md) | 🇮🇱 [עברית](../i18n/he/docs/reference/API_REFERENCE.md) | 🇮🇳 [हिन्दी](../i18n/hi/docs/reference/API_REFERENCE.md) | 🇭🇷 [Hrvatski](../i18n/hr/docs/reference/API_REFERENCE.md) | 🇭🇺 [Magyar](../i18n/hu/docs/reference/API_REFERENCE.md) | 🇦🇲 [Հայերեն](../i18n/hy/docs/reference/API_REFERENCE.md) | 🇮🇩 [Bahasa Indonesia](../i18n/id/docs/reference/API_REFERENCE.md) | 🇳🇬 [Igbo](../i18n/ig/docs/reference/API_REFERENCE.md) | 🇮🇹 [Italiano](../i18n/it/docs/reference/API_REFERENCE.md) | 🇯🇵 [日本語](../i18n/ja/docs/reference/API_REFERENCE.md) | 🇬🇪 [ქართული](../i18n/ka/docs/reference/API_REFERENCE.md) | 🇰🇭 [ខ្មែរ](../i18n/km/docs/reference/API_REFERENCE.md) | 🇮🇳 [ಕನ್ನಡ](../i18n/kn/docs/reference/API_REFERENCE.md) | 🇰🇷 [한국어](../i18n/ko/docs/reference/API_REFERENCE.md) | 🇱🇹 [Lietuvių](../i18n/lt/docs/reference/API_REFERENCE.md) | 🇱🇻 [Latviešu](../i18n/lv/docs/reference/API_REFERENCE.md) | 🇮🇳 [മലയാളം](../i18n/ml/docs/reference/API_REFERENCE.md) | 🇮🇳 [मराठी](../i18n/mr/docs/reference/API_REFERENCE.md) | 🇲🇾 [Bahasa Melayu](../i18n/ms/docs/reference/API_REFERENCE.md) | 🇲🇹 [Malti](../i18n/mt/docs/reference/API_REFERENCE.md) | 🇲🇲 [မြန်မာ](../i18n/my/docs/reference/API_REFERENCE.md) | 🇳🇵 [नेपाली](../i18n/ne/docs/reference/API_REFERENCE.md) | 🇳🇱 [Nederlands](../i18n/nl/docs/reference/API_REFERENCE.md) | 🇳🇴 [Norsk](../i18n/no/docs/reference/API_REFERENCE.md) | 🇮🇳 [ଓଡ଼ିଆ](../i18n/or/docs/reference/API_REFERENCE.md) | 🇮🇳 [ਪੰਜਾਬੀ](../i18n/pa/docs/reference/API_REFERENCE.md) | 🇵🇭 [Filipino](../i18n/phi/docs/reference/API_REFERENCE.md) | 🇵🇱 [Polski](../i18n/pl/docs/reference/API_REFERENCE.md) | 🇵🇹 [Português (Portugal)](../i18n/pt/docs/reference/API_REFERENCE.md) | 🇧🇷 [Português (Brasil)](../i18n/pt-BR/docs/reference/API_REFERENCE.md) | 🇷🇴 [Română](../i18n/ro/docs/reference/API_REFERENCE.md) | 🇷🇺 [Русский](../i18n/ru/docs/reference/API_REFERENCE.md) | 🇱🇰 [සිංහල](../i18n/si/docs/reference/API_REFERENCE.md) | 🇸🇰 [Slovenčina](../i18n/sk/docs/reference/API_REFERENCE.md) | 🇸🇮 [Slovenščina](../i18n/sl/docs/reference/API_REFERENCE.md) | 🇷🇸 [Српски](../i18n/sr/docs/reference/API_REFERENCE.md) | 🇸🇪 [Svenska](../i18n/sv/docs/reference/API_REFERENCE.md) | 🇰🇪 [Kiswahili](../i18n/sw/docs/reference/API_REFERENCE.md) | 🇮🇳 [தமிழ்](../i18n/ta/docs/reference/API_REFERENCE.md) | 🇮🇳 [తెలుగు](../i18n/te/docs/reference/API_REFERENCE.md) | 🇹🇭 [ไทย](../i18n/th/docs/reference/API_REFERENCE.md) | 🇹🇷 [Türkçe](../i18n/tr/docs/reference/API_REFERENCE.md) | 🇺🇦 [Українська](../i18n/uk-UA/docs/reference/API_REFERENCE.md) | 🇵🇰 [اردو](../i18n/ur/docs/reference/API_REFERENCE.md) | 🇺🇿 [Oʻzbekcha](../i18n/uz/docs/reference/API_REFERENCE.md) | 🇻🇳 [Tiếng Việt](../i18n/vi/docs/reference/API_REFERENCE.md) | 🇳🇬 [Yorùbá](../i18n/yo/docs/reference/API_REFERENCE.md) | 🇨🇳 [中文 (简体)](../i18n/zh-CN/docs/reference/API_REFERENCE.md) | 🇹🇼 [中文 (繁體)](../i18n/zh-TW/docs/reference/API_REFERENCE.md)
|
||
|
||
OmniRoute API üçün əsas istinad sənədi. Bu sənəd açıq `/v1` interfeysini və ən çox istifadə olunan idarəetmə son nöqtələrini əhatə edir; maşın tərəfindən oxuna bilən [`docs/openapi.yaml`](../openapi.yaml) faylı və `src/app/api/` altındakı marşrut ağacı tam mənbələrdir.
|
||
|
||
---
|
||
|
||
## Mündəricat
|
||
|
||
- [Çat tamamlamaları](#chat-completions)
|
||
- [Eksklüziv idarə olunan sessiya icarələri](#exclusive-managed-session-leases)
|
||
- [Embeddinqlər](#embeddings)
|
||
- [Şəkil generasiyası](#image-generation)
|
||
- [Sənədlərin OCR emalı](#document-ocr)
|
||
- [Modellərin siyahısı](#list-models)
|
||
- [Provayder plaqini manifesti](#provider-plugin-manifest)
|
||
- [Uyğunluq endpoint-ləri](#compatibility-endpoints)
|
||
- [Fayllar API-si](#files-api)
|
||
- [Paketlər API-si](#batches-api)
|
||
- [Axtarış API-si](#search-api)
|
||
- [WebSocket axını](#websocket-streaming)
|
||
- [Kvotalar və problemlərin bildirilməsi](#quotas--issues-reporting)
|
||
- [Semantik keş](#semantic-cache)
|
||
- [İdarə paneli və idarəetmə](#dashboard--management)
|
||
- [Kombinasiyaların idarə edilməsi](#combo-management)
|
||
- [Vebhuklar](#webhooks)
|
||
- [Qeydiyyatdan keçmiş açarlar (avtomatik idarəetmə)](#registered-keys-auto-management)
|
||
- [Agentlər protokolu](#agents-protocol)
|
||
- [İdarəetmə proksiləri](#management-proxies)
|
||
- [Dayanıqlılıq (genişləndirilmiş)](#resilience-extended)
|
||
- [Bacarıqlar](#skills)
|
||
- [Yaddaş](#memory)
|
||
- [MCP serveri](#mcp-server)
|
||
- [A2A serveri](#a2a-server)
|
||
- [Bulud, qiymətləndirmələr və dəyərləndirmə](#cloud-evals--assess)
|
||
- [Sorğuların emalı](#request-processing)
|
||
- [Autentifikasiya](#authentication)
|
||
|
||
---
|
||
|
||
## Çat tamamlamaları
|
||
|
||
```bash
|
||
POST /v1/chat/completions
|
||
Authorization: Bearer your-api-key
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"model": "cc/claude-opus-4-6",
|
||
"messages": [
|
||
{"role": "user", "content": "Funksiya yaz..."}
|
||
],
|
||
"stream": true
|
||
}
|
||
```
|
||
|
||
### Fərdi başlıqlar
|
||
|
||
| Başlıq | İstiqamət | Təsvir |
|
||
| ------------------------ | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| `X-OmniRoute-No-Cache` | Sorğu | Keşi keçmək üçün `true` olaraq təyin edin |
|
||
| `x-omniroute-no-memory` | Sorğu | Bu sorğu üçün yaddaş və bacarıqların daxil edilməsini ötürmək məqsədilə `true` olaraq təyin edin (keşdən istifadənin dayandırılmasına bənzəyir; hər çağırış üzrə token/xərc yükünün qarşısını alır) |
|
||
| `X-OmniRoute-Progress` | Sorğu | Gedişat hadisələri üçün `true` olaraq təyin edin |
|
||
| `X-Session-Id` | Sorğu | Xarici sessiya yaxınlığı üçün sabit sessiya açarı |
|
||
| `x_session_id` | Sorğu | Alt xətli variant da qəbul edilir (birbaşa HTTP) |
|
||
| `X-OmniRoute-Session-Id` | Sorğu | Çağıran tərəfin təqdim etdiyi sessiya/söhbət teqi (həmçinin yaddaşa ötürülür). Mövcud olduqda, hər sessiya üzrə xərclərin aid edilməsi üçün olduğu kimi `call_logs.session_tag` sahəsində saxlanılır (#8249) — olmadıqda heç vaxt yaradılmır |
|
||
| `Idempotency-Key` | Sorğu | Dublikatların aradan qaldırılması açarı (5s pəncərə) |
|
||
| `X-Request-Id` | Sorğu | Alternativ dublikatların aradan qaldırılması açarı |
|
||
| `X-OmniRoute-Cache` | Cavab | `HIT` və ya `MISS` (axınsız rejimdə) |
|
||
| `X-OmniRoute-Idempotent` | Cavab | Dublikat aradan qaldırılıbsa `true` |
|
||
| `X-OmniRoute-Progress` | Cavab | Gedişatın izlənməsi aktivdirsə `enabled` |
|
||
| `X-OmniRoute-Session-Id` | Cavab | OmniRoute tərəfindən istifadə edilən faktiki sessiya ID-si |
|
||
| `X-OmniRoute-Request-Id` | Cavab | Sorğunun korrelyasiya ID-si (məlum olduqda) |
|
||
| `X-OmniRoute-Version` | Cavab | OmniRoute yığım versiyası (həmişə mövcuddur) |
|
||
| `X-OmniRoute-Cost-Saved` | Cavab | `HIT` zamanı keşin qənaət etdirdiyi USD məbləği (yalnız keş uyğunluqları) |
|
||
| `X-OmniRoute-Decision` | Cavab | Marşrutlaşdırma izi: `strategy=<name>; provider=<alias>; latency_ms=<n>` (`<name>` kombinasiya strategiyasıdır və ya kombinasiya olmayan sorğu üçün `single` olur) — tamamlanma cavablarında həmişə mövcuddur |
|
||
|
||
> Nginx qeydi: alt xətli başlıqlardan (məsələn, `x_session_id`) istifadə edirsinizsə, `underscores_in_headers on;` parametrini aktivləşdirin.
|
||
|
||
> **Xərc telemetriyası başlıqları:** axınsız uğurlu cavablar həmçinin `X-OmniRoute-*` xərc telemetriyası dəstini ehtiva edir — `X-OmniRoute-Response-Cost` (USD, vergüldən sonra sabit 10 rəqəm; pulsuz/qiymətləndirilməmiş sorğular üçün `0.0000000000`), `X-OmniRoute-Tokens-In` / `X-OmniRoute-Tokens-Out`, `X-OmniRoute-Model`, `X-OmniRoute-Provider`, `X-OmniRoute-Latency-Ms`, `X-OmniRoute-Cache-Hit` və `X-OmniRoute-Fallback-Attempts` (yalnız > 0 olduqda), həmçinin `X-OmniRoute-Request-Id` və `X-OmniRoute-Version`. Bunlar çat tamamlamaları, `/v1/responses`, `/v1/messages`, **həmçinin media son nöqtələri** — `/v1/embeddings`, `/v1/images/generations`, `/v1/audio/speech`, `/v1/audio/transcriptions`, `/v1/rerank`, `/v1/videos/generations`, `/v1/music/generations` və `/v1/moderations` (xərc həmişə `0` olur) tərəfindən qaytarılır. Qiymətlər mövcud olduqda media xərci modallıq üzrə (hər şəkil, hər saniyə, hər simvol, hər axtarış vahidi üçün) hesablanır, əks halda `0` olur (xəta zamanı sorğuya icazə verilir).
|
||
|
||
> **Keş uyğunluğu üçün xərc semantikası:** semantik keşdə uyğunluq olduqda (`X-OmniRoute-Cache-Hit: true`) yuxarı səviyyəli xidmətə heç bir çağırış edilmir, buna görə də `X-OmniRoute-Response-Cost` dəyəri `0.0000000000` olur (keş uyğunluğuna xidmət göstərməyin **əlavə** xərci). İlkin/əks halda yaranacaq xərc ayrıca `X-OmniRoute-Cost-Saved` başlığında bildirilir. Hesablaşma sistemləri `X-OmniRoute-Response-Cost` dəyərlərini toplamalıdır (keş uyğunluqlarının xərci yoxdur); keş analitikası isə `X-OmniRoute-Cost-Saved` dəyərlərini aqreqasiya edə bilər.
|
||
|
||
## Eksklüziv idarə olunan sessiya icarələri
|
||
|
||
Eksklüziv idarə olunan sessiya icarəsi seçim əsasında aktivləşdirilən, klientdən asılı olmayan marşrutlaşdırma müqaviləsidir: bir aktiv sahib
|
||
bir uyğun OmniRoute bağlantısını saxlayır. Bu, modeli icarəyə vermir, OAuth tələb etmir, konkret
|
||
klienti müəyyənləşdirmir və ya konkret provayder tələb etmir.
|
||
|
||
Autentifikasiya edən API açarı `lease:exclusive` əhatə dairəsinə və açıq şəkildə göstərilmiş, boş olmayan
|
||
`allowedConnections` siyahısına malik olmalıdır. Verilənlər bazasının mutasiya sərhədi açar
|
||
yaradılarkən və qismən yenilənərkən hər iki sahənin birlikdə olmasını təmin edir.
|
||
|
||
```http
|
||
POST /api/v1/session-leases
|
||
Authorization: Bearer <managed-api-key>
|
||
Content-Type: application/json
|
||
X-OmniRoute-Lease-Owner: vlo_<43-base64url-characters>
|
||
|
||
{"action":"acquire","model":"glm/glm-4.6"}
|
||
```
|
||
|
||
Uğurlu əldəetmə, yeniləmə və buraxma cavabları vaxt möhürlərini, `state` sahəsini və dəqiq müsbət
|
||
`generation` dəyərini göstərir, lakin seçilmiş bağlantını və ya giriş məlumatlarını heç vaxt göstərmir. Yeniləmə və buraxma zamanı
|
||
nəsil JSON gövdəsində təqdim olunur:
|
||
|
||
```json
|
||
{ "action": "renew", "generation": 1 }
|
||
```
|
||
|
||
```json
|
||
{ "action": "release", "generation": 1, "reason": "OWNER_EXIT" }
|
||
```
|
||
|
||
Aktiv icarə sahibi cari bağlantısı üçün məxfiliyi qoruyan ekran metadatasını açıq şəkildə tələb edə bilər:
|
||
|
||
```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"
|
||
}
|
||
}
|
||
```
|
||
|
||
Seçim əsasında aktivləşdirilən bu status əməliyyatı bir verilənlər bazası tranzaksiyasında qeyri-şəffaf sahib, autentifikasiya edilmiş idarə olunan API açarı və dəqiq
|
||
aktiv nəsil ilə məhdudlaşdırılır. `displayName` yalnız boşluqları kəsilmiş, konfiqurasiya olunmuş
|
||
bağlantı adıdır; təhlükəsiz konfiqurasiya olunmuş ad mövcud olmadıqda bu, `null` olur. OmniRoute e-poçt ünvanını və ya yaradılmış
|
||
hesab identifikatorunu heç vaxt onunla əvəz etmir. Provayder dəyəri həssas olmayan ekran etiketidir və heç vaxt
|
||
yaradılmış uyğun provayder identifikatoru deyil. Giriş məlumatları, tokenlər, kukilər, xam bağlantı və ya API
|
||
açarı identifikatorları, sahib heşləri, məhdudlaşdırma sirləri və daxili marşrutlaşdırma məlumatları istisna edilir.
|
||
|
||
Yanlış açar, yanlış sahib, köhnəlmiş nəsil, çatışmayan, vaxtı bitmiş, buraxılmış və etibarsızlaşdırılmış axtarışların hamısı
|
||
bağlantı metadatası olmadan eyni `409 LEASE_FENCE_STALE` xətasını qaytarır. Tutum gözləmə cavabı almış klientin yoxlamaq üçün aktiv bağlantısı yoxdur. Marşrutlaşdırma aktiv icarəni dəyişdirdikdə,
|
||
eyni nəsil etibarlı qalır və status atomar şəkildə köhnə bağlantını deyil, yeni bağlantını qaytarır.
|
||
Mövcud klientlər dəyişməz qalır, çünki əldəetmə, yeniləmə, buraxma və gözləmə cavabları
|
||
əvvəlki strukturlarını qoruyur.
|
||
|
||
Bu server müqaviləsi standart OpenAI Codex `/status` davranışını dəyişmir. Standart Codex hazırda öz
|
||
model provayderini və daxili autentifikasiya/hesab vəziyyətini bildirir, lakin ixtiyari fərdi
|
||
provayder hesabı metadatasını göstərmir; gələcək klient inteqrasiyası bu əməliyyatı çağırmalı və
|
||
`connection.displayName` dəyərinin necə göstəriləcəyinə qərar verməlidir.
|
||
|
||
Bundan sonra hər idarə olunan inferensiya sorğusu hər iki idarəetmə başlığını təqdim edir:
|
||
|
||
```http
|
||
X-OmniRoute-Lease-Owner: vlo_<43-base64url-characters>
|
||
X-OmniRoute-Lease-Generation: 1
|
||
```
|
||
|
||
Dəqiq sahib, nəsil, aktiv bağlantı və autentifikasiya edilmiş API açarı hər dəstəklənən yuxarı axın
|
||
cəhdindən dərhal əvvəl məhdudlaşdırılır. Sahib və nəsli başqa açarla təkrar istifadə etmək, hətta həmin açar eyni bağlantıya icazə verdikdə belə
|
||
uğursuz olur. Xam sahib dəyərləri saxlanılmır, jurnala yazılmır, sorğu ani görüntüsündə qorunmur və ya
|
||
yuxarı axına ötürülmür.
|
||
|
||
Müvəqqəti rəqabət HTTP `429` cavabını `Retry-After` ilə birlikdə qaytarır:
|
||
|
||
```json
|
||
{
|
||
"state": "WAITING_FOR_CAPACITY",
|
||
"error": { "type": "lease_error", "code": "LEASE_CAPACITY_UNAVAILABLE" },
|
||
"reason": "NO_FREE_ELIGIBLE_CONNECTION",
|
||
"retryAfter": 30
|
||
}
|
||
```
|
||
|
||
Bu cavab yalnız adi uyğun dəstin boş olmadığını və hər bir boş namizədin
|
||
başqa sahibə aid aktiv icarə tərəfindən tutulduğunu bildirir. Dəstəklənməyən modellər/provayderlər, siyasət uyğunsuzluğu, gözləmə müddəti, kvota,
|
||
sağlamlıq və digər adi uyğunluq xətaları mövcud OmniRoute cavablarını qoruyur.
|
||
|
||
### `x-omniroute-compression`
|
||
|
||
Sıxılma planının hər sorğu üzrə əvəzlənməsi. Ən yüksək üstünlük — marşrutlaşdırma kombinasiyası
|
||
üzrə əvəzləməni, aktiv profili, avtomatik işə düşməni və paneldəki Defolt dəyəri üstələyir. Dəyərlər:
|
||
|
||
| Dəyər | Təsir |
|
||
| ------------- | ----------------------------------------------------------------------------------------------------------------------- |
|
||
| `off` | Bu sorğu üçün sıxılma yoxdur. |
|
||
| `default` | Paneldən əldə edilən Defolt profil (aktiv profili nəzərə almır). |
|
||
| `engine:<id>` | Aktiv olduqda tək mühərrik, məsələn, `engine:rtk`. |
|
||
| `<combo>` | Əvvəlcə ada görə (registrdən asılı olmayaraq), sonra isə identifikatora görə uyğunlaşdırılan adlandırılmış kombinasiya. |
|
||
|
||
Qeydlər:
|
||
|
||
- Naməlum dəyərlər nəzərə alınmır (sorğu heç vaxt rədd edilmir); həll prosesi adi operator üstünlüyünə keçir.
|
||
- Bir neçə kombinasiya eyni ada malikdirsə, deterministik uyğunluq üçün kombinasiyanın **id** dəyərini ötürün.
|
||
- Adı `off` və ya `default` olan kombinasiya adla seçilə bilməz (bu açar sözlər əvvəlcə şərh edilir); belə kombinasiyaya identifikatoru ilə istinad edin.
|
||
- Əsas sıxılma keçidi sərt maneədir: sıxılma qlobal olaraq deaktiv edildikdə, bu başlıq onu aktivləşdirə bilməz.
|
||
|
||
Tətbiq edilmiş plan cavab başlığında əks etdirilir:
|
||
|
||
```
|
||
X-OmniRoute-Compression: <mode>; source=<source>
|
||
```
|
||
|
||
burada `<source>` `request-header`, `routing-override`, `active-profile`, `auto-trigger`, `default` və ya `off` dəyərlərindən biridir.
|
||
|
||
---
|
||
|
||
## Embeddinqlər
|
||
|
||
```bash
|
||
POST /v1/embeddings
|
||
Authorization: Bearer your-api-key
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"model": "nebius/Qwen/Qwen3-Embedding-8B",
|
||
"input": "Yemək ləzzətli idi"
|
||
}
|
||
```
|
||
|
||
Mövcud provayderlər: Nebius, OpenAI, Mistral, Together AI, Fireworks, NVIDIA, **OpenRouter**, Jina AI.
|
||
|
||
Kataloq identifikatorları `provider/model` formatındadır (nümunə: `jina-ai/jina-embeddings-v5-omni-small`). Reyestrdə mövcud olan prefikssiz Jina model identifikatorları (məsələn, `jina-embeddings-v5-text-small`, `jina-reranker-v3.5`) da tanınır. Jina embed/rerank/classify/segment əvvəlcə idarəetmə panelindəki `jina-ai` giriş məlumatlarından istifadə edir; `JINA_AI_API_KEY` yalnız idarəetmə panelində açar olmadıqda ehtiyat variant kimi istifadə olunur. `jina-reader` kartı yalnız Reader / `r.jina.ai` üçündür (`POST /v1/web/fetch`) və heç vaxt embeddinq və ya yenidən sıralama xidmətləri göstərmir.
|
||
|
||
Multimodal dəstəyi elan edən reyestr modelləri həmçinin provayderdən asılı olmayan, strukturlaşdırılmış 32-yə qədər
|
||
element qəbul edir. Media elementi növləri `text`, `image`, `audio`, `video` və `document`-dir. Onların media `source`
|
||
dəyəri ya `{"type":"url","url":"https://..."}`, ya da
|
||
`{"type":"base64","data":"...","media_type":"..."}` formatındadır.
|
||
|
||
Jina v5 Omni (`jina-ai/jina-embeddings-v5-omni-small`, `jina-ai/jina-embeddings-v5-omni-nano`
|
||
və ailə aliası `jina-ai/jina-embeddings-v5-omni` → omni-small) həmçinin Jina-nın yerli
|
||
EmbeddingsV5Request sənədlərini qəbul edir və onları `https://api.jina.ai/v1/embeddings` ünvanına **dəyişdirilmədən ötürür**:
|
||
|
||
```json
|
||
{
|
||
"model": "jina-ai/jina-embeddings-v5-omni-small",
|
||
"task": "retrieval.query",
|
||
"normalized": true,
|
||
"input": [
|
||
{ "text": "qırmızı velosiped" },
|
||
{ "image": "https://example.com/bike.png" },
|
||
{
|
||
"content": [{ "text": "başlıq" }, { "image": "data:image/png;base64,..." }]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
Yerli `{ image | audio | video | pdf }` dəyərləri açıq HTTPS URL-si, `data:` URI-si və ya xam
|
||
base64 ola bilər. OmniRoute həmin obyektləri sətrə çevirmir və ya yerli şəkil URL-lərini özü əldə etmir — Jina açıq
|
||
medianı özü əldə edir. Əlavə Jina sahələri (`task`, `normalized`, `truncate`, `embedding_type`)
|
||
ötürülür. Yalnız mətn üçün nəzərdə tutulmuş Jina SKU-ları mətn olmayan sənədləri yenə də rədd edir.
|
||
|
||
Təhlükəsizlik və ötürmə məhdudiyyətləri:
|
||
|
||
- Uzaq media URL-ləri açıq HTTPS olmalıdır. Kanonik `{type,source:url}` elementləri
|
||
server tərəfində əldə edilir (yönləndirmələrin təkrar yoxlanması, vaxt limiti, ölçü limitləri, açıq DNS, bağlantının sabitlənməsi) və
|
||
provayder çağırışından əvvəl daxilə yerləşdirilir. Jina-nın yerli `{image:"https://..."}` elementləri
|
||
eyni açıq HTTPS yoxlamasından sonra olduğu kimi ötürülür; URL-ni Jina əldə edir.
|
||
- Daxilə yerləşdirilmiş base64 media hər element üçün dekodlaşdırılmış şəkildə 8 MiB, bütün sorğu üzrə isə dekodlaşdırılmış şəkildə 16 MiB ilə məhdudlaşır.
|
||
|
||
Provayder üçün çevirmə (kanonik elementlər heç vaxt dəyişdirilmədən ötürülmür):
|
||
|
||
- Jina multimodal modelləri: hər yuxarı səviyyəli element daxilə yerləşdirilmiş media üçün data URI-lərindən istifadə etməklə
|
||
bir modallıq açarlı obyektə (`text` / `image` / `audio` / `video` / `pdf`) çevrilir; hər
|
||
yuxarı səviyyəli element üçün bir vektor.
|
||
- Gemini Embedding 2 ailəsi: bir yuxarı səviyyəli massiv `content.parts` (`text` və ya `inline_data`) ilə vahid yerli
|
||
`models/{model}:embedContent` sorğusuna çevrilir.
|
||
- Açıq modallıq metadatası olmayan naməlum/dinamik modellər strukturlaşdırılmış girişi HTTP 400 xətası ilə rədd edir.
|
||
|
||
```json
|
||
{
|
||
"model": "jina-ai/jina-embeddings-v5-omni-small",
|
||
"input": [
|
||
{ "type": "text", "text": "Qırmızı velosiped" },
|
||
{
|
||
"type": "image",
|
||
"source": { "type": "url", "url": "https://example.com/bicycle.png" }
|
||
}
|
||
],
|
||
"dimensions": 512,
|
||
"encoding_format": "float"
|
||
}
|
||
```
|
||
|
||
Dəstəklənməyən model/modallıq kombinasiyaları elementi məcburi çevirmək əvəzinə HTTP 400 qaytarır. Köhnə sətir/token sorğularındakı girişlə əlaqəli olmayan
|
||
genişləndirmə sahələri dəyişdirilmədən ötürülməyə davam edir.
|
||
|
||
```bash
|
||
# Bütün embeddinq modellərini siyahıla
|
||
GET /v1/embeddings
|
||
```
|
||
|
||
---
|
||
|
||
## Şəkil yaratma
|
||
|
||
```bash
|
||
POST /v1/images/generations
|
||
Authorization: Bearer your-api-key
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"model": "openai/gpt-image-2",
|
||
"prompt": "A beautiful sunset over mountains",
|
||
"size": "1024x1024"
|
||
}
|
||
```
|
||
|
||
Mövcud provayderlər: OpenAI (GPT Image 2), xAI (Grok Image), Together AI (FLUX), Fireworks AI, Nebius (FLUX), Hyperbolic, NanoBanana, **OpenRouter**, SD WebUI (lokal), ComfyUI (lokal).
|
||
|
||
```bash
|
||
# Bütün şəkil modellərini siyahıya alın
|
||
GET /v1/images/generations
|
||
```
|
||
|
||
---
|
||
|
||
## Sənəd OCR-i
|
||
|
||
```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` prefiksi vasitəsilə OCR provayderini seçir; yalnız model identifikatoru (məs.
|
||
`mistral-ocr-latest`) göstərildikdə, o, qeydiyyatdan keçmiş provayderinə uyğunlaşdırılır, `model` buraxıldıqda isə standart olaraq
|
||
Mistral (`mistral-ocr-latest`) istifadə olunur. Qeydiyyatdan keçmiş provayderlər (`open-sse/config/ocrRegistry.ts`):
|
||
|
||
| Provayder identifikatoru | Model identifikatoru | `model` dəyəri | Qeydlər |
|
||
| ----------------------------- | -------------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
|
||
| `mistral` | `mistral-ocr-latest` | `mistral/mistral-ocr-latest` (və ya yalnız `mistral-ocr-latest`) | Sinxron — cavab yuxarı səviyyəli xidmətə edilən tək sorğudan birbaşa qaytarılır. |
|
||
| `azure-document-intelligence` | `prebuilt-read` | `azure-document-intelligence/prebuilt-read` | Asinxron yuxarı səviyyəli xidmət (`analyze` + sorğulama) — aşağıya baxın. |
|
||
| `vertex-deepseek-ocr` | `deepseek-ocr-maas` | `vertex-deepseek-ocr/deepseek-ocr-maas` | Sinxron, Vertex AI-ın `openapi/chat/completions` tərəfdaş son nöqtəsi vasitəsilə — autentifikasiya/URL üçün aşağıya baxın. |
|
||
|
||
Hər üç provayder eyni Mistral formatlı cavab gövdəsini qaytarır:
|
||
|
||
```json
|
||
{
|
||
"pages": [{ "index": 0, "markdown": "# Extracted text..." }],
|
||
"model": "mistral-ocr-latest",
|
||
"usage_info": { "pages_processed": 1 }
|
||
}
|
||
```
|
||
|
||
### Azure Document Intelligence sorğulama axını
|
||
|
||
Azure Document Intelligence xidmətinin `analyze` API-si asinxrondur: ilkin sorğu gövdə əvəzinə
|
||
`Operation-Location` başlığı qaytarır və nəticə sorğulanmalıdır. Emaledici
|
||
(`open-sse/handlers/ocr.ts`) həmin URL-i 30 cəhdədək hər saniyə sorğulayır, `ok` olmayan sorğulama cavabı və ya `"failed"` statusu zamanı dərhal uğursuz olur (sorğulamanı davam etdirmir) və
|
||
cəhd limiti bitdikdən sonra əməliyyat hələ də icra olunursa, `504` qaytarır. Yekun Azure cavabı
|
||
çağırana qaytarılmazdan əvvəl Mistral tərəfindən istifadə edilən eyni `pages`/`markdown` formatına
|
||
normallaşdırılır, buna görə də müştəri kodunun provayder üçün xüsusi hal tətbiq etməsinə ehtiyac yoxdur.
|
||
|
||
### Vertex AI DeepSeek OCR autentifikasiyası və son nöqtənin müəyyənləşdirilməsi
|
||
|
||
`vertex-deepseek-ocr`, OmniRoute-un söhbət/şəkil trafiki üçün artıq dəstəklədiyi eyni Vertex AI autentifikasiyasından
|
||
(`open-sse/executors/vertex.ts`) təkrar istifadə edir: bağlantının API açarı ya Service Account JSON etimadnaməsidir (JWT-bearer
|
||
axını vasitəsilə qısamüddətli OAuth giriş tokeni ilə dəyişdirilir), ya da olduğu kimi istifadə edilən, əvvəlcədən yaradılmış OAuth giriş tokenidir. Yuxarı səviyyəli xidmətin son nöqtə URL-i Vertex-in
|
||
ümumi `openapi/chat/completions` tərəfdaş son nöqtəsidir və bağlantının layihəsi ilə
|
||
regionu əsasında qurulur — açıq şəkildə göstərilmiş `providerSpecificData.project`/`providerSpecificData.region` həmişə üstünlük təşkil edir;
|
||
əks halda layihə Service Account JSON-dakı `project_id` əsasında müəyyənləşdirilir və region üçün
|
||
standart olaraq `us-central1` istifadə olunur. Hər iki müəyyənləşdirmə `open-sse/handlers/ocr.ts` daxilində
|
||
(`resolveVertexOcrAccessToken`, `resolveVertexOcrBaseUrl`) baş verir və `handleOcr` funksiyasına yönləndirilməzdən əvvəl
|
||
`src/app/api/v1/ocr/route.ts` tərəfindən istifadə olunur.
|
||
|
||
---
|
||
|
||
## Modelləri sadalayın
|
||
|
||
```bash
|
||
GET /v1/models
|
||
Authorization: Bearer your-api-key
|
||
|
||
→ Bütün çat, embedding və şəkil modellərini + kombinasiyaları OpenAI formatında qaytarır
|
||
```
|
||
|
||
### Model id prefiksləri (`?prefix=`)
|
||
|
||
Əksər modellər **provayder prefiksi** altında təqdim olunur. Hansı prefiksin əldə ediləcəyi
|
||
`MODELS_CATALOG_PREFIX_MODE` funksiya bayrağı ilə idarə olunur və sorğu parametri vasitəsilə
|
||
**hər sorğu üçün ayrıca** dəyişdirilə bilər — bu, server miqyasındakı parametri digər istifadəçilər
|
||
üçün dəyişmədən təmiz siyahı əldə etmək istəyən klient üçün faydalıdır:
|
||
|
||
```bash
|
||
GET /v1/models?prefix=alias # hər model üçün bir id — qısa alias prefiksi
|
||
GET /v1/models?prefix=dual # hər iki forma (serverin standart dəyəri)
|
||
GET /v1/models?prefix=canonical # yalnız tam provayder id-si prefiksi
|
||
```
|
||
|
||
| Rejim | Təqdim edir | Qeydlər |
|
||
| ----------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| `dual` | `cc/claude-sonnet-4-6` **və** `claude/claude-sonnet-4-6` | **Standart.** Hər iki id eyni modelə yönləndirilir; formalardan hər hansı birini sərt şəkildə kodlaşdırmış klient konfiqurasiyalarının işləməyə davam etməsi üçün saxlanılıb. Kataloqu təxminən ikiqat böyüdür. |
|
||
| `alias` | `cc/claude-sonnet-4-6` | Hər model üçün bir qeyd. Fərqli alias-ı olmayan provayderlər yenə də öz qeydlərini təqdim edir, buna görə heç nə itirilmir. |
|
||
| `canonical` | `claude/claude-sonnet-4-6` | Tam provayder id-si prefiksi altında hər model üçün bir qeyd. Fərqli alias-ı olmayan provayderlər (məsələn, `antigravity/…`, `agy/…`) burada da öz yeganə id-sini təqdim edir, buna görə heç nə itirilmir. |
|
||
|
||
`dual` rejimli güzgü sorğu parametri olmadan da müəyyən edilə bilər: o, əsas id-yə işarə edən
|
||
`parent` sahəsini ehtiva edir.
|
||
|
||
Model seçicisini göstərən klientlər `?prefix=alias` sorğulamalıdır — [OmniCopilot VS Code genişləndirməsi](../guides/VSCODE-COPILOT.md) də məhz bunu edir.
|
||
|
||
### Düşünməsiz model variantları
|
||
|
||
Düşünmə qabiliyyətli Claude modelləri üçün `/v1/models`, id-si `claude-3-omniroute-no-thinking/` prefiksi ilə başlayan **düşünməsiz** variantı da təqdim edir:
|
||
|
||
```
|
||
claude-3-omniroute-no-thinking/<provider>/<model>
|
||
```
|
||
|
||
Bu id-nin seçilməsi (məsələn, həmişə `thinking` bloku əlavə edən Claude Code konfiqurasiyasında) düşünmə prosesi söndürülməklə yenidən həqiqi `<provider>/<model>` modelinə yönləndirilir — `/v1/messages` yolunda `thinking:{type:"disabled"}` tətbiq edilir və ya `/v1/chat/completions` yolunda `reasoning`/`reasoning_effort` sahələri silinir. Variant yalnız düşünməni dəstəkləyən **və** `disabled` dəyərini qəbul edən Claude ailəsi modelləri üçün siyahıya daxil edilir (beləliklə, məsələn, `disabled` dəyərini rədd edən yalnız adaptiv modellər istisna olunur). Operatorlar `ModelSpec.noThinkingAlias` vasitəsilə hər model üçün variantı məcburi şəkildə aktivləşdirə və ya deaktivləşdirə bilərlər.
|
||
|
||
---
|
||
|
||
## Provayder Plagin Manifesti
|
||
|
||
```bash
|
||
GET /api/v1/provider-plugin-manifest
|
||
```
|
||
|
||
Bifrost, CLIProxyAPI və gələcək sidecar routerlər tərəfindən istifadə olunan, JSON üçün təhlükəsiz provayder plagin manifestini qaytarır. Cavab TypeScript provayder reyestrindən yaradılır və OAuth müştəri sirlərini, icra mühiti həllini, icraedici funksiyaları, sorğu başlıqlarını və hesab məlumatlarını bilərəkdən istisna edir.
|
||
|
||
Sidecar prosesdən kənarda işlədikdə və `open-sse/config/providerPluginManifestRegistry.ts` faylını birbaşa idxal edə bilmədikdə bu son nöqtədən istifadə edin.
|
||
|
||
---
|
||
|
||
## Uyğunluq Son Nöqtələri
|
||
|
||
| Metod | Yol | Format |
|
||
| ----- | ----------------------------------------- | ------------------------------------------ |
|
||
| 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 (redaktə/doldurma) |
|
||
| POST | `/v1/videos/generations` | OpenAI üslubunda video generasiyası |
|
||
| POST | `/v1/music/generations` | OpenAI üslubunda musiqi generasiyası |
|
||
| POST | `/v1/audio/transcriptions` | OpenAI Audio (nitqdən mətnə) |
|
||
| POST | `/v1/audio/speech` | OpenAI TTS (audio gövdəsi qaytarır) |
|
||
| POST | `/v1/rerank` | Cohere/Voyage üslubunda yenidən sıralama |
|
||
| POST | `/v1/classify` | Jina təsnifatı (`api.jina.ai`) |
|
||
| POST | `/v1/segment` | Jina seqmentatoru (`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 kataloq aliası |
|
||
| GET | `/api/v1/vscode/{token}/models` | OpenAI modellər aliası |
|
||
| POST | `/api/v1/vscode/{token}/chat/completions` | OpenAI tokenləşdirilmiş aliası |
|
||
| POST | `/api/v1/vscode/{token}/responses` | OpenAI Responses tokenləşdirilmiş aliası |
|
||
| POST | `/api/v1/vscode/{token}/api/chat` | Ollama tokenləşdirilmiş aliası |
|
||
| GET | `/api/v1/vscode/{token}/api/tags` | Ollama teqləri üçün tokenləşdirilmiş alias |
|
||
|
||
Bütün POST marşrutları eyni struktura uyğundur: `Bearer your-api-key` + Zod tərəfindən doğrulanan JSON gövdəsi (`v1RerankSchema`, `v1ModerationSchema`, `v1AudioSpeechSchema` və s.; `src/shared/validation/schemas.ts` faylına baxın). Sxem doğrulaması uğursuz olduqda 4xx qaytarılır.
|
||
|
||
`Authorization: Bearer ...` əlavə edə bilməyən müştərilər üçün OmniRoute API açarlarını URL daxilində də qəbul edir: ya sorğu sətri uyğunluğu (`?token=...`, `?apiKey=...`, `?api_key=...`, `?key=...`), ya da aşağıda sənədləşdirilmiş xüsusi `/api/v1/vscode/{token}/...` son nöqtələri vasitəsilə.
|
||
|
||
```bash
|
||
# Yenidən sıralama
|
||
POST /v1/rerank { "model": "jina-ai/jina-reranker-v3.5", "query": "...", "documents": ["..."] }
|
||
|
||
# Jina təsnifatı (Foundation API etimadnamələri)
|
||
POST /v1/classify { "model": "jina-embeddings-v5-text-small", "input": ["..."], "labels": ["a", "b"] }
|
||
|
||
# Jina seqmentatoru
|
||
POST /v1/segment { "content": "...", "return_chunks": true }
|
||
|
||
# Jina axtarışı (s.jina.ai; provayder aliasları: jina-search, jina-ai, jina)
|
||
POST /v1/search { "query": "...", "provider": "jina-search" }
|
||
|
||
# Moderasiya
|
||
POST /v1/moderations { "model": "omni-moderation-latest", "input": "..." }
|
||
|
||
# TTS — audio/mpeg (və ya tələb olunan formatda) gövdəsi qaytarır
|
||
POST /v1/audio/speech { "model": "openai/tts-1", "input": "Hello", "voice": "alloy" }
|
||
|
||
# Şəkil redaktəsi (multipart)
|
||
POST /v1/images/edits -F image=@input.png -F prompt="..." -F mask=@mask.png
|
||
|
||
# Video / musiqi generasiyası (provayder prefiksli model ID-si)
|
||
POST /v1/videos/generations { "model": "runway/gen-3", "prompt": "..." }
|
||
POST /v1/music/generations { "model": "suno/v3.5", "prompt": "..." }
|
||
```
|
||
|
||
### Xüsusi Provayder Marşrutları
|
||
|
||
```bash
|
||
POST /v1/providers/{provider}/chat/completions
|
||
POST /v1/providers/{provider}/embeddings
|
||
POST /v1/providers/{provider}/images/generations
|
||
```
|
||
|
||
Provayder prefiksi olmadıqda avtomatik əlavə edilir. Uyğun gəlməyən modellər `400` qaytarır.
|
||
|
||
---
|
||
|
||
## Files API
|
||
|
||
Paket giriş/çıxışı və fayl məqsədli yükləmələr üçün OpenAI ilə uyğun fayllar son nöqtəsi.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ------------------------ | ------------------------------------------------------------------------------------------------------------------ |
|
||
| POST | `/v1/files` | Fayl yükləyin (multipart: `file`, `purpose`, `expires_after[anchor]`, `expires_after[seconds]`) — maksimum 512 MiB |
|
||
| GET | `/v1/files` | Doğrulanmış API açarı üçün faylları siyahıya alın |
|
||
| GET | `/v1/files/[id]` | Faylın metadatasını əldə edin |
|
||
| DELETE | `/v1/files/[id]` | Faylı silin |
|
||
| GET | `/v1/files/[id]/content` | Faylın işlənməmiş məzmununu axınla geri qaytarın |
|
||
|
||
**Autentifikasiya:** Bearer API açarı — faylların əhatə dairəsi `getApiKeyRequestScope` vasitəsilə hər API açarı üzrə müəyyən edilir. Açar
|
||
yalnız öz fayllarını görür, endirir və silir; açarsız idarə paneli sessiyası bütün
|
||
instansiyanı oxuyur; sahibi olmayan fayla (anonim və ya idarə paneli sessiyası ilə yüklənmiş) sessiyasız
|
||
heç bir çağırıcıya giriş verilmir. `GET /v1/files`, hətta `REQUIRE_API_KEY=false` olduqda belə, bütün
|
||
icarəçilərin fayllarını siyahıya almaq əvəzinə anonim çağırışı və təqdim edilmiş, lakin
|
||
uyğunluğu müəyyən edilməyən açarı `401` ilə rədd edir (GHSA-m3hp-hq9g-fpmv, GHSA-2jm2-mpx8-6523).
|
||
|
||
---
|
||
|
||
## Batches API
|
||
|
||
OpenAI ilə uyğun paket emalı.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ------------------------- | -------------------------------------------------------------------------------------------------------------------- |
|
||
| POST | `/v1/batches` | Paket yaradın — gövdə `v1BatchCreateSchema` tərəfindən yoxlanılır (`input_file_id`, `endpoint`, `completion_window`) |
|
||
| GET | `/v1/batches` | Paketləri siyahıya alın |
|
||
| GET | `/v1/batches/[id]` | Paket statusunu və `request_counts` məlumatını əldə edin |
|
||
| DELETE | `/v1/batches/[id]` | Tamamlanmış/uğursuz paketi silin |
|
||
| POST | `/v1/batches/[id]/cancel` | Davam edən paketi ləğv edin |
|
||
|
||
**Autentifikasiya:** Bearer API açarı. Paketlərin əhatə dairəsi fayllarla eyni üçtərəfli
|
||
qayda əsasında hər API açarı üzrə müəyyən edilir: yalnız öz açarı, instansiya miqyasında idarə paneli sessiyası,
|
||
sahibi null olan qeydlərə isə sessiyasız heç bir çağırıcıya giriş verilmir (əldə etmə, silmə, ləğv etmə və
|
||
yaradılma zamanı `input_file_id` yoxlaması). `GET /v1/batches`, hətta `REQUIRE_API_KEY=false`
|
||
olduqda belə, anonim çağırışı `401` ilə rədd edir.
|
||
|
||
---
|
||
|
||
## Axtarış API-si
|
||
|
||
Veb/axtarış provayderləri üçün abstraksiya (Tavily, Brave, Exa, Serper və s.).
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ----- | ---------------------- | ------------------------------------------------------------------------------------------------------ |
|
||
| GET | `/v1/search` | Konfiqurasiya edilmiş axtarış provayderlərini və imkanlarını siyahıya alır |
|
||
| POST | `/v1/search` | Axtarış sorğusunu işə salır — gövdə `v1SearchSchema` ilə yoxlanılır, keşləmə/birləşdirməni dəstəkləyir |
|
||
| GET | `/v1/search/analytics` | Hər provayder üzrə uyğun nəticə/gecikmə/keş statistikası |
|
||
|
||
**Autentifikasiya:** Bearer API açarı (`extractApiKey` + `isValidApiKey`). Axtarış siyasəti `enforceApiKeyPolicy` vasitəsilə tətbiq edilir.
|
||
|
||
---
|
||
|
||
## Veb Məzmununu Əldəetmə API-si
|
||
|
||
Konfiqurasiya edilmiş veb məzmununu əldəetmə provayderi (Firecrawl, Jina
|
||
Reader, Tavily Extract, TinyFish Fetch, Nimble Extract) vasitəsilə URL-dən məzmun çıxarın.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ----- | --------------- | --------------------------------------------------------------- |
|
||
| POST | `/v1/web/fetch` | URL-i əldə edir/sıyır — gövdə `v1WebFetchSchema` ilə yoxlanılır |
|
||
|
||
**Autentifikasiya:** Bearer API açarı (`extractApiKey` + `isValidApiKey`). Siyasət `enforceApiKeyPolicy` vasitəsilə tətbiq edilir.
|
||
|
||
**Kvotanı nəzərə alan ehtiyat mexanizm (#8297):** açıq şəkildə `provider` göstərilmədikdə, hovuz
|
||
(`firecrawl` → `jina-reader` → `tavily-search` → `tinyfish` → `nimble-search`)
|
||
sabit prioritet sırası ilə (birincini doldurma prinsipi ilə) yoxlanılır — sürət limiti tətbiq edilmiş, lakin konfiqurasiya olunmuş provayder
|
||
sorğunu dərhal dayandırmaq əvəzinə ötürülür və yenidən cəhd edilə bilən/kvota ilə bağlı yuxarı axın xətası
|
||
(HTTP 429 həmişə; Firecrawl/Tavily/TinyFish-in kvota tipli pulsuz səviyyələri üçün 402/403 —
|
||
Jina Reader üçün deyil və sadə 400 səhv sorğu üçün heç vaxt deyil) sorğu zamanı
|
||
növbəti, hələ sınanmamış və etimadnaməsi olan provayderə keçidlə nəticələnir. Hovuzdakı bütün provayderlər
|
||
tükəndikdə, son nöqtə əvvəlki ümumi `400` əvəzinə tək bir `429` (`Retry-After`
|
||
başlığı ilə) qaytarır. Açıq şəkildə `provider` tələb edildikdə, **səssiz** ehtiyat keçid yoxdur — sürət limiti tətbiq edilmiş və ya nasaz açıq provayder
|
||
öz xətasını göstərir (sürət limiti tətbiq edilibsə `429`, əks halda yuxarı axın statusu).
|
||
|
||
---
|
||
|
||
## WebSocket Axını
|
||
|
||
```bash
|
||
GET /v1/ws?handshake=1
|
||
```
|
||
|
||
WebSocket yüksəltmə əlaqəsi qurma sorğusunu yoxlayır və naqil protokolunun nümunə mesajlarını (`request`, `cancel`) qaytarır. Faktiki WS freymləri Next.js marşrut cədvəlindən kənarda paketlənmiş WS serveri tərəfindən emal olunur.
|
||
|
||
**Autentifikasiya:** Əlaqə qurma zamanı Bearer API açarı.
|
||
|
||
### WebSocket üzərindən Responses API-si (yalnız codex)
|
||
|
||
```bash
|
||
# HTTP API-si ilə eyni host:port (standart olaraq 20128); bağlantını yüksəldin:
|
||
wscat -c "ws://localhost:20128/v1/responses?api_key=<OMNIROUTE_API_KEY>"
|
||
# (və ya: -H "Authorization: Bearer <OMNIROUTE_API_KEY>")
|
||
|
||
# İlk freym MÜTLƏQ response.create olmalıdır:
|
||
{ "type": "response.create", "model": "gpt-5.5", "input": [ { "role": "user", "content": "hi" } ] }
|
||
```
|
||
|
||
WebSocket üzərindən Responses API proksisi **yalnız `codex` ilə əlaqələndirilib** (ChatGPT
|
||
backend-i). O, API/idarəetmə paneli ilə eyni portda `/v1/responses`,
|
||
`/responses` və `/api/v1/responses` yollarını dinləyir. İlk `response.create` freymində
|
||
daxili `codex-responses-ws` körpüsü vasitəsilə autentifikasiya edir və hazırlıq görür, bir
|
||
codex OAuth bağlantısı seçir və `wreq-js` nəqliyyatı vasitəsilə
|
||
`wss://chatgpt.com/backend-api/codex/responses` ünvanına tunel yaradır.
|
||
**Codex olmayan modellər rədd edilir** (`codex_ws_provider_required`).
|
||
Kvota paylaşımı ilə marşrutlaşdırma üçün `model: "qtSd/<group>/codex/<model>"` istifadə edin. Bu funksiya
|
||
`app/server-ws.mjs` + `scripts/dev/responses-ws-proxy.mjs` + `src/app/api/internal/codex-responses-ws/route.ts` daxilində reallaşdırılıb.
|
||
|
||
**Autentifikasiya:** Əlaqə qurma zamanı Bearer API açarı. Paketlənmiş HTTP serveri (`server-ws.mjs`)
|
||
aktiv giriş nöqtəsi olmalıdır (`app/server-ws.mjs` mövcud olduqda standart olaraq belədir).
|
||
|
||
#### Model identifikatoru: sadə ChatGPT identifikatorundan istifadə edin (`codex/` prefiksi olmadan)
|
||
|
||
OpenAI **Codex CLI**, `supports_websockets = true` olduqda model adını müştəri tərəfində yoxlayır və
|
||
`codex/gpt-5.5` kimi **provayder prefiksli identifikatorları rədd edir**
|
||
(`The 'codex/gpt-5.5' model is not supported when using Codex with
|
||
a ChatGPT account`). **Sadə** identifikatoru göndərin (məsələn, `gpt-5.5`). OmniRoute körpüsü
|
||
yalnız codex üçündür, buna görə də yuxarı axına tunel yaratmazdan əvvəl sadə identifikatoru
|
||
codex modeli kimi yenidən müəyyənləşdirir (`resolveCodexWsModelInfo`) — baxmayaraq ki, sadə
|
||
`gpt-5.5` HTTP üzərindən əks halda başqa provayderə marşrutlaşdırılardı.
|
||
|
||
#### OpenAI Codex CLI-nin konfiqurasiyası
|
||
|
||
WebSocket dəstəyi olan fərdi provayderi `~/.codex/config.toml` faylına əlavə etməklə
|
||
Codex CLI-ni OmniRoute-a yönləndirin (mövcud konfiqurasiyaya toxunmamaq üçün ayrıca `CODEX_HOME`
|
||
istifadə edin):
|
||
|
||
```toml
|
||
model = "gpt-5.5" # sadə identifikator — "codex/gpt-5.5" DEYİL
|
||
model_provider = "omniroute"
|
||
|
||
[model_providers.omniroute]
|
||
name = "OmniRoute (WS)"
|
||
base_url = "http://localhost:20128/v1" # sonunda əyri xətt yoxdur; WS URL-i törədilir (istehsal mühitində https/wss istifadə edin)
|
||
wire_api = "responses" # 2026-cı ilin fevralından bəri dəstəklənən yeganə dəyər
|
||
supports_websockets = true # Responses-over-WS nəqliyyatını aktivləşdirir
|
||
env_key = "OMNIROUTE_API_KEY" # OmniRoute API açarını saxlayır (Bearer)
|
||
```
|
||
|
||
```bash
|
||
export OMNIROUTE_API_KEY=sk-... # OmniRoute API açarı (REQUIRE_API_KEY=false olarsa istənilən açar)
|
||
codex exec "Responda apenas: PONG"
|
||
```
|
||
|
||
CLI `base_url + /responses` ünvanını WebSocket-ə yüksəldir və OmniRoute onu
|
||
seçilmiş codex OAuth bağlantısına tunelləyir. Lokal serverlə başdan sona yoxlanılıb:
|
||
ChatGPT `codex.rate_limits` + `response.created` qaytarır və tamamlamanı axınla ötürür.
|
||
|
||
---
|
||
|
||
## Kvotalar və problemlərin bildirilməsi
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ----- | ------------------- | ----------------------------------------------------------------------------------------------- |
|
||
| GET | `/v1/quotas/check` | Qeydiyyatdan keçmiş açar təqdim edilməzdən əvvəl `provider` + `accountId` üçün kvotanı yoxlayır |
|
||
| POST | `/v1/issues/report` | Kvota/açar təqdimetmə xətasını GitHub-a bildirir (`GITHUB_ISSUES_REPO` + token tələb olunur) |
|
||
|
||
**Autentifikasiya:** Bearer API açarı (`isAuthenticated`).
|
||
|
||
---
|
||
|
||
## Özünəxidmət istifadəsi (`/api/usage/om-usage`)
|
||
|
||
İstənilən API açarı idarəetmə autentifikasiyası olmadan **öz** istifadəsini və kvotalarını oxuya bilər. Bu, müştərinin
|
||
(CLI, OmniCopilot paneli) açar sahibinə xərclərini göstərmək üçün istifadə etdiyi son nöqtədir.
|
||
|
||
```bash
|
||
# Mətn formatı (tarixi müqavilə — terminal üçün adi mətn)
|
||
curl -H "Authorization: Bearer <your-api-key>" \
|
||
http://localhost:20128/api/usage/om-usage
|
||
|
||
# Strukturlaşdırılmış format — UI tərəfindən istifadə olunan format
|
||
curl -H "Authorization: Bearer <your-api-key>" \
|
||
"http://localhost:20128/api/usage/om-usage?format=json"
|
||
```
|
||
|
||
Açarda **`allowUsageCommand`** aktiv olmalıdır (standart olaraq deaktivdir — idarəetmə panelinin API açarı
|
||
meneceri bunu hər açar üçün ayrıca dəyişir). Bu parametr olmadan son nöqtə `403` cavabı qaytarır.
|
||
|
||
`?format=json` diskriminasiya edilmiş struktur qaytarır ki, çağıran tərəf imtina cavabından heç vaxt məlumat sahəsi oxumasın.
|
||
Uğurlu olduqda:
|
||
|
||
```jsonc
|
||
{
|
||
"allowed": true,
|
||
// yalnız açar hər açar üzrə istifadə limitlərini (gündəlik/həftəlik USD) aktiv etdikdə mövcuddur:
|
||
"personal": {
|
||
"dailySpentUsd": 1.25,
|
||
"dailyLimitUsd": 5,
|
||
"dailyResetAtIso": "…",
|
||
"weeklySpentUsd": 8,
|
||
"weeklyLimitUsd": 20,
|
||
"weeklyResetAtIso": "…" /* … */,
|
||
},
|
||
// seçilmiş provayderin kvota anlıq görüntüsü və ya hələ heç nə keşlənməyibsə null:
|
||
"provider": {
|
||
"connectionId": "…",
|
||
"provider": "claude",
|
||
"plan": "…",
|
||
"quotas": {/* … */},
|
||
},
|
||
// UI-nin bir neçə provayderi yan-yana göstərə bilməsi üçün hər bağlantının anlıq görüntüsü:
|
||
"providers": [
|
||
{ "connectionId": "…", "provider": "claude" /* … */ },
|
||
{ "provider": "codex" /* … */ },
|
||
],
|
||
}
|
||
```
|
||
|
||
İmtina zamanı (`401` etibarsız açar / `403` icazə verilməyib) eyni marşrut
|
||
`{ "allowed": false, "error": { "message": "…" } }` qaytarır — mövcud, lakin boş `personal`/`provider`
|
||
(açara icazə verilib, lakin hələ heç nə əldə edilməyib) imtinadan fərqli vəziyyətdir və onları yalnız JSON formatı
|
||
fərqləndirir.
|
||
|
||
**Autentifikasiya:** çağıran tərəfin `isValidApiKey` ilə yoxlanılan öz Bearer API açarı — bu, `requireManagementAuth`
|
||
ilə qorunan idarəetmə interfeysi (`/api/keys/…`) _deyil_.
|
||
|
||
---
|
||
|
||
## Semantik keş
|
||
|
||
```bash
|
||
# Keş statistikasını əldə edin
|
||
GET /api/cache/stats
|
||
|
||
# Bütün keşləri təmizləyin
|
||
DELETE /api/cache/stats
|
||
```
|
||
|
||
Cavab nümunəsi:
|
||
|
||
```json
|
||
{
|
||
"semanticCache": {
|
||
"memorySize": 42,
|
||
"memoryMaxSize": 500,
|
||
"dbSize": 128,
|
||
"hitRate": 0.65
|
||
},
|
||
"idempotency": {
|
||
"activeKeys": 3,
|
||
"windowMs": 5000
|
||
}
|
||
}
|
||
```
|
||
|
||
### Gecikməyə təsiri
|
||
|
||
Semantik keşdə HIT olduqda cavab **yuxarı axın çağırışı olmadan**
|
||
keşdən təqdim edilir, buna görə də bildirilən `X-OmniRoute-Response-Latency`
|
||
ilkin yuxarı axın gecikməsindən asılı olmayaraq sıfıra yaxın olur. Gecikməyə həssas müştərilər
|
||
(performans sınaqları, p50/p99 monitorinqi) `X-OmniRoute-Cache-Latency`
|
||
cavab başlığını yoxlamalıdır:
|
||
|
||
| Dəyər | Mənası |
|
||
| ----------- | ------------------------------------------------------------------ |
|
||
| `synthetic` | Cavab keşdən təqdim edilib; gecikmə real yuxarı axın müddəti deyil |
|
||
| _(yoxdur)_ | Cavab real yuxarı axın çağırışından alınıb |
|
||
|
||
### Hər açar üzrə keşdən yan keçmə
|
||
|
||
API açarları `cacheDefaultMode` vasitəsilə semantik keş oxumalarından imtina edə bilər:
|
||
|
||
| Dəyər | Davranış |
|
||
| -------- | ----------------------------------------------------------------- |
|
||
| `legacy` | Normal keş davranışı (standart) |
|
||
| `bypass` | Keş axtarışını tamamilə ötürür; həmişə yuxarı axına müraciət edir |
|
||
|
||
Açar yaradılarkən (`POST /api/keys`) təyin edin və ya (`PATCH /api/keys/[id]`) yeniləyin:
|
||
|
||
```json
|
||
{ "cacheDefaultMode": "bypass" }
|
||
```
|
||
|
||
### Hər sorğu üzrə yan keçmə
|
||
|
||
İstənilən sorğu açar parametrlərindən asılı olmayaraq keşdən yan keçə bilər:
|
||
|
||
```
|
||
X-OmniRoute-No-Cache: true
|
||
```
|
||
|
||
---
|
||
|
||
## İdarəetmə paneli və idarəetmə
|
||
|
||
İdarəetmə marşrutları (`/api/*`, ictimai autentifikasiya/giriş istisna olmaqla) adi inferensiya API açarları ilə **avtorizasiya edilmir**. Etimadnamə ailələri, əhatə dairələri və curl nümunələri:
|
||
[İdarəetmə autentifikasiyası](../guides/MANAGEMENT-AUTH.md).
|
||
|
||
### Autentifikasiya
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| ----------------------------- | ------- | --------------------------------- |
|
||
| `/api/auth/login` | POST | Daxil olma |
|
||
| `/api/auth/logout` | POST | Çıxış |
|
||
| `/api/settings/require-login` | GET/PUT | Giriş tələbinin aktivləşdirilməsi |
|
||
|
||
### Provayderlərin idarə edilməsi
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| ---------------------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------- |
|
||
| `/api/providers` | GET/POST | Provayderləri siyahılamaq / yaratmaq |
|
||
| `/api/providers/[id]` | GET/PUT/DELETE | Provayderi idarə etmək |
|
||
| `/api/providers/[id]/test` | POST | Provayder bağlantısını sınaqdan keçirmək |
|
||
| `/api/providers/[id]/models` | GET | Provayder modellərini siyahılamaq |
|
||
| `/api/providers/validate` | POST | Provayder konfiqurasiyasını doğrulamaq |
|
||
| `/api/providers/bulk` | POST | BİR provayder üçün API açarlarını toplu şəkildə əlavə etmək |
|
||
| `/api/providers/import` | POST | Təhlil edilmiş CSV/JSON faylından heterogen provayder SİYAHISINI idxal etmək (#6836); hər sətir üzrə qismən xəta nəticələri |
|
||
| `/api/provider-nodes*` | Müxtəlif | Provayder qovşaqlarının idarə edilməsi |
|
||
| `/api/provider-models` | GET/POST/PATCH/DELETE | Fərdi modellər (əlavə etmək, yeniləmək, gizlətmək/göstərmək, silmək) |
|
||
|
||
### OAuth axınları
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| -------------------------------- | -------- | -------------------- |
|
||
| `/api/oauth/[provider]/[action]` | Müxtəlif | Provayderə xas OAuth |
|
||
|
||
### Marşrutlaşdırma və konfiqurasiya
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| --------------------- | -------- | ------------------------------------ |
|
||
| `/api/models/alias` | GET/POST | Model ləqəbləri |
|
||
| `/api/models/catalog` | GET | Provayder və növ üzrə bütün modellər |
|
||
| `/api/combos*` | Müxtəlif | Kombinasiyaların idarə edilməsi |
|
||
| `/api/keys*` | Müxtəlif | API açarlarının idarə edilməsi |
|
||
| `/api/pricing` | GET | Model qiymətləri |
|
||
|
||
### İstifadə və analitika
|
||
|
||
| Endpoint | Metod | Təsvir |
|
||
| -------------------------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| `/api/usage/history` | GET | İstifadə tarixçəsi |
|
||
| `/api/usage/logs` | GET | İstifadə jurnalları |
|
||
| `/api/usage/request-logs` | GET | Sorğu səviyyəli jurnallar |
|
||
| `/api/usage/[connectionId]` | GET | Hər bağlantı üzrə istifadə |
|
||
| `/api/usage/token-limits` | GET/POST/DELETE | Hər API açarı üzrə token limiti büdcələri |
|
||
| `/api/usage/model-latency-stats` | GET | Provayder/model üzrə sürüşən gecikmə aqreqatı (avg/p50/p95/p99, uğur faizi); filtrlər: `windowHours`/`minSamples`/`maxRows`/`provider`/`model` (#6873) |
|
||
| `/api/usage/cache-health` | GET | `call_logs` üzrə prompt keşinin sağlamlıq xülasəsi — yazma/oxuma nisbəti, yazma ölçüsünün p50/p90/p99 paylanması, intensiv yazmaların konsentrasiyası, model üzrə bölgü və `healthy`/`degraded`/`thrash`/`no-data` nəticəsi; sorğu parametrləri: `range` (`1h`\|`24h`\|`7d`\|`30d`, standart `24h`) və istəyə bağlı `model` (#8827) |
|
||
|
||
### Parametrlər
|
||
|
||
| Endpoint | Metod | Təsvir |
|
||
| ------------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| `/api/settings` | GET/PUT/PATCH | Ümumi parametrlər |
|
||
| `/api/settings/proxy` | GET/PUT | Şəbəkə proksisi konfiqurasiyası |
|
||
| `/api/settings/proxy/test` | POST | Proksi bağlantısını sınaqdan keçirmək |
|
||
| `/api/settings/ip-filter` | GET/PUT | İcazə verilən/bloklanan IP siyahısı |
|
||
| `/api/settings/thinking-budget` | GET/PUT | Düşünmə/əsaslandırma **sorğusu** üçün yenidən yazma rejimi (dəyişikliksiz ötürmə / avtomatik silmə / fərdi / adaptiv). Sıxılmadan asılı deyil. Baxın: [THINKING_BUDGET.md](../guides/THINKING_BUDGET.md). |
|
||
| `/api/settings/system-prompt` | GET/PUT | Qlobal sistem promptu |
|
||
| `/api/settings/compression` | GET/PUT | Qlobal sıxılma konfiqurasiyası |
|
||
| `/api/settings/purge-request-history` | POST | Sorğu jurnalı sətirlərini və lokal çağırış jurnalı artefaktlarını təmizləmək |
|
||
|
||
### Kontekst və sıxılma
|
||
|
||
| Endpoint | Metod | Təsvir |
|
||
| -------------------------------------- | -------------- | -------------------------------------------------------------------------------- |
|
||
| `/api/compression/preview` | POST | off/lite/standard/aggressive/ultra/RTK/stacked sıxılmasına önbaxış |
|
||
| `/api/compression/language-packs` | GET | Mövcud Caveman dil paketlərinin siyahısı |
|
||
| `/api/compression/rules` | GET | Caveman qaydalarının metadatasının siyahısı |
|
||
| `/api/context/caveman/config` | GET/PUT | Caveman-ə məxsus parametrlər üçün alternativ ad |
|
||
| `/api/context/rtk/config` | GET/PUT | Fərdi filtrlər və xam çıxışın saxlanması daxil olmaqla RTK-yə məxsus parametrlər |
|
||
| `/api/context/rtk/filters` | GET | RTK filtr kataloqu və fərdi filtr diaqnostikası |
|
||
| `/api/context/rtk/test` | POST | Mətn yükü üzərində RTK önbaxışını/sınağını işə salmaq |
|
||
| `/api/context/rtk/raw-output/[id]` | GET | Göstərici ID-si ilə saxlanılan redaktə edilmiş xam çıxışı oxumaq |
|
||
| `/api/context/combos` | GET/POST | Sıxılma kombinasiyalarının siyahısı/yaradılması |
|
||
| `/api/context/combos/[id]` | GET/PUT/DELETE | Sıxılma kombinasiyasının təfərrüatları/yenilənməsi/silinməsi |
|
||
| `/api/context/combos/[id]/assignments` | GET/PUT | Sıxılma kombinasiyalarını marşrutlaşdırma kombinasiyalarına təyin etmək |
|
||
| `/api/context/analytics` | GET | Sıxılma analitikası üçün alternativ ad |
|
||
|
||
### Monitorinq
|
||
|
||
| Endpoint | Metod | Təsvir |
|
||
| ------------------------------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| `/api/sessions` | GET | Aktiv sessiyaların izlənməsi |
|
||
| `/api/rate-limits` | GET | Hesab üzrə sorğu tezliyi limitləri |
|
||
| `/api/monitoring/health` | GET | Sağlamlıq yoxlaması + provayder xülasəsi (`catalogCount`, `configuredCount`, `activeCount`, `monitoredCount`). İdarəetmə görünüşünə `credentialHealth` daxildir: yoxlama keşi skalyarları, `failed>0` olduqda `failedConnections` və `staleDbNonOkCount` (SQLite-da qalıcı `test_status`, ölçü göstəricisi deyil). Baxın: [MONITORING_GUIDE.md](../ops/MONITORING_GUIDE.md#credentialhealth-probe-cache-vs-sqlite-test_status). |
|
||
| `/api/cache/stats` | GET/DELETE | Keş statistikası / təmizləmə |
|
||
| `/api/modality-bridge/stats` | GET | Yaddaşdaxili `attempts`, uğurlar/`bridged`, uğursuzluqlar, keş uyğunluqları, `totalLatencyMs`, `latencySamples`, nümunə sayına əsaslanan `averageLatencyMs` və son istifadə vaxtı (yenidən başladıldıqda sıfırlanır; idarəetmə autentifikasiyası) |
|
||
| `/api/modality-bridge/video/runtime` | GET | İdarəetmə autentifikasiyasından/yoxlamasından əvvəl etibarlı loopback üçün ciddi yoxlama; təmizlənmiş FFmpeg/ffprobe əlçatanlığı və versiyaları (no-store) |
|
||
| `/api/modality-bridge/video/extract` | POST | Daxili, autentifikasiya edilmiş, etibarlı loopback bayt brokeri; 50 MiB giriş, məhdud növbə/32 MiB çıxış, `503` tutum, `499` bağlantının kəsilməsi, `504` son müddət; ictimai fayl yükləmə API-si deyil |
|
||
|
||
### Ehtiyat nüsxələmə və ixrac/idxal
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| --------------------------- | ----- | ---------------------------------------------------------- |
|
||
| `/api/db-backups` | GET | Mövcud ehtiyat nüsxələri siyahıya alır |
|
||
| `/api/db-backups` | PUT | Əl ilə ehtiyat nüsxə yaradır |
|
||
| `/api/db-backups` | POST | Müəyyən ehtiyat nüsxədən bərpa edir |
|
||
| `/api/db-backups/export` | GET | Verilənlər bazasını .sqlite faylı kimi endirir |
|
||
| `/api/db-backups/import` | POST | Verilənlər bazasını əvəz etmək üçün .sqlite faylı yükləyir |
|
||
| `/api/db-backups/exportAll` | GET | Tam ehtiyat nüsxəni .tar.gz arxivi kimi endirir |
|
||
|
||
### Bulud Sinxronizasiyası
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| ---------------------- | -------- | ---------------------------------- |
|
||
| `/api/sync/cloud` | Müxtəlif | Bulud sinxronizasiya əməliyyatları |
|
||
| `/api/sync/initialize` | POST | Sinxronizasiyanı başladır |
|
||
| `/api/cloud/*` | Müxtəlif | Bulud idarəetməsi |
|
||
|
||
### Tunellər
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| -------------------------- | ----- | ---------------------------------------------------------------------------------- |
|
||
| `/api/tunnels/cloudflared` | GET | İdarəetmə paneli üçün Cloudflare Quick Tunnel quraşdırma/işləmə vəziyyətini oxuyur |
|
||
| `/api/tunnels/cloudflared` | POST | Cloudflare Quick Tunnel-i aktiv və ya deaktiv edir (`action=enable/disable`) |
|
||
| `/api/tunnels/ngrok` | GET | İdarəetmə paneli üçün ngrok Tunnel işləmə vəziyyətini oxuyur |
|
||
| `/api/tunnels/ngrok` | POST | ngrok Tunnel-i aktiv və ya deaktiv edir (`action=enable/disable`) |
|
||
|
||
### CLI Alətləri
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| ---------------------------------- | ----- | ---------------------- |
|
||
| `/api/cli-tools/claude-settings` | GET | Claude CLI vəziyyəti |
|
||
| `/api/cli-tools/codex-settings` | GET | Codex CLI vəziyyəti |
|
||
| `/api/cli-tools/droid-settings` | GET | Droid CLI vəziyyəti |
|
||
| `/api/cli-tools/openclaw-settings` | GET | OpenClaw CLI vəziyyəti |
|
||
| `/api/cli-tools/runtime/[toolId]` | GET | Ümumi CLI icra mühiti |
|
||
|
||
CLI cavablarına bunlar daxildir: `installed`, `runnable`, `command`, `commandPath`, `runtimeMode`, `reason`.
|
||
|
||
### ACP Agentləri
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| ----------------- | ------ | ------------------------------------------------------------------------------------ |
|
||
| `/api/acp/agents` | GET | Vəziyyətləri ilə birlikdə aşkarlanmış bütün agentləri (daxili + fərdi) siyahıya alır |
|
||
| `/api/acp/agents` | POST | Fərdi agent əlavə edir və ya aşkarlama keşini yeniləyir |
|
||
| `/api/acp/agents` | DELETE | `id` sorğu parametri ilə fərdi agenti silir |
|
||
|
||
GET cavabına `agents[]` (id, ad, binar fayl, versiya, quraşdırılıb, protokol, fərdidir) və `summary` (cəmi, quraşdırılıb, tapılmayıb, daxili, fərdi) daxildir.
|
||
|
||
### Dayanıqlılıq və Tezlik Məhdudiyyətləri
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| --------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------- |
|
||
| `/api/resilience` | GET/PATCH | Sorğu növbəsini, bağlantının gözləmə müddətini, provayder qoruyucusunu və gözləmə parametrlərini əldə edir/yeniləyir |
|
||
| `/api/resilience/reset` | POST | Provayder dövrə qoruyucularını sıfırlayır |
|
||
| `/api/resilience/model-cooldowns` | GET | Qalan vaxta görə sıralanmış aktiv (provayder, bağlantı, model) bloklamalarını siyahıya alır |
|
||
| `/api/resilience/model-cooldowns` | DELETE | Model bloklamasını təmizləyir — gövdə: `{provider, model}` və ya hər şeyi silmək üçün `{all: true}` |
|
||
| `/api/rate-limits` | GET | Hesab üzrə tezlik məhdudiyyəti vəziyyəti |
|
||
| `/api/rate-limit` | GET | Qlobal tezlik məhdudiyyəti konfiqurasiyası |
|
||
|
||
> Bütün dörd `/api/resilience/*` marşrutu **idarəetmə autentifikasiyası** (`requireManagementAuth`) tələb edir. Provayder qoruyucusu, bağlantının gözləmə müddəti və model bloklaması arasındakı fərqlərin tam izahı üçün [Dayanıqlılıq (genişləndirilmiş)](#resilience-extended) bölməsinə baxın.
|
||
|
||
### Qiymətləndirmələr
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| ------------ | -------- | -------------------------------------------------------------------- |
|
||
| `/api/evals` | GET/POST | Qiymətləndirmə dəstlərini siyahıya alır / qiymətləndirməni işə salır |
|
||
|
||
### Siyasətlər
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| --------------- | --------------- | ---------------------------------------- |
|
||
| `/api/policies` | GET/POST/DELETE | Marşrutlaşdırma siyasətlərini idarə edir |
|
||
|
||
### Uyğunluq
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| --------------------------- | ----- | ----------------------------------- |
|
||
| `/api/compliance/audit-log` | GET | Uyğunluq audit jurnalı (son N qeyd) |
|
||
|
||
### v1beta (Gemini ilə Uyğun)
|
||
|
||
| Son nöqtə | Metod | Təsvir |
|
||
| -------------------------- | ----- | ----------------------------------------- |
|
||
| `/v1beta/models` | GET | Modelləri Gemini formatında siyahıya alır |
|
||
| `/v1beta/models/{...path}` | POST | Gemini `generateContent` son nöqtəsi |
|
||
|
||
Bu son nöqtələr yerli Gemini SDK uyğunluğu gözləyən klientlər üçün Gemini API formatını təkrarlayır.
|
||
|
||
### Daxili / Sistem API-ləri
|
||
|
||
| Endpoint | Metod | Təsvir |
|
||
| ------------------------ | ----- | --------------------------------------------------------------------- |
|
||
| `/api/init` | GET | Tətbiqin başladılmasının yoxlanması (ilk işə salmada istifadə olunur) |
|
||
| `/api/tags` | GET | Ollama ilə uyğun model teqləri (Ollama klientləri üçün) |
|
||
| `/api/restart` | POST | Serverin təhlükəsiz şəkildə yenidən başladılmasını işə salır |
|
||
| `/api/shutdown` | POST | Serverin təhlükəsiz şəkildə dayandırılmasını işə salır |
|
||
| `/api/system/env/repair` | POST | OAuth provayderinin mühit dəyişənlərini bərpa edir |
|
||
|
||
> **Qeyd:** Bu endpoint-lər sistem tərəfindən daxili məqsədlər üçün və ya Ollama klientləri ilə uyğunluq üçün istifadə olunur. Adətən son istifadəçilər tərəfindən çağırılmır.
|
||
|
||
### OAuth Mühitinin Bərpası _(v3.6.1+)_
|
||
|
||
```bash
|
||
POST /api/system/env/repair
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"provider": "claude-code"
|
||
}
|
||
```
|
||
|
||
Müəyyən provayder üçün çatışmayan və ya zədələnmiş OAuth mühit dəyişənlərini bərpa edir. Aşağıdakı cavabı qaytarır:
|
||
|
||
```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"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Audio Transkripsiyası
|
||
|
||
```bash
|
||
POST /v1/audio/transcriptions
|
||
Authorization: Bearer your-api-key
|
||
Content-Type: multipart/form-data
|
||
```
|
||
|
||
Konfiqurasiya edilmiş istənilən STT provayderindən istifadə edərək audio faylları transkripsiya edin. Yolun ilk
|
||
seqmenti yerli provayderi seçir (`openai/…`, `deepgram/…`). Başqa təchizatçının
|
||
modelini yenidən təqdim edən şlüzlər ixtisaslaşdırılmış identifikatordan istifadə edir
|
||
(`openrouter/deepgram/nova-3`).
|
||
|
||
**Sorğu:**
|
||
|
||
```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"
|
||
```
|
||
|
||
**Cavab:**
|
||
|
||
```json
|
||
{
|
||
"text": "Hello, this is the transcribed audio content.",
|
||
"task": "transcribe",
|
||
"language": "en",
|
||
"duration": 12.5
|
||
}
|
||
```
|
||
|
||
**Model identifikatorlarına nümunələr:** `openai/whisper-1` (OpenAI açarı tələb edir),
|
||
`openrouter/deepgram/nova-3` (OpenRouter açarı tələb edir),
|
||
`deepgram/nova-3` (yerli Deepgram açarı tələb edir). Sadə
|
||
`deepgram/nova-3` sorğusu OpenRouter-dən **istifadə etmir**.
|
||
|
||
**Dəstəklənən formatlar:** `mp3`, `wav`, `m4a`, `flac`, `ogg`, `webm`.
|
||
|
||
---
|
||
|
||
## Ollama Uyğunluğu
|
||
|
||
Ollama API formatından istifadə edən klientlər üçün:
|
||
|
||
```bash
|
||
# Söhbət son nöqtəsi (Ollama formatı)
|
||
POST /v1/api/chat
|
||
|
||
# Modellərin siyahılanması (Ollama formatı)
|
||
GET /api/tags
|
||
```
|
||
|
||
Sorğular Ollama və daxili formatlar arasında avtomatik olaraq çevrilir.
|
||
|
||
## Tokenli VS Code / Başlıqsız Alíyaslar
|
||
|
||
İnteqrasiya `Authorization` başlığını əlavə edə bilmədikdə və API açarının baza URL-yə daxil edilməsinə ehtiyac olduqda bu alíyaslardan istifadə edin.
|
||
|
||
```bash
|
||
# OpenAI üslublu kataloq alíyası
|
||
GET /api/v1/vscode/{token}/
|
||
GET /api/v1/vscode/{token}/models
|
||
|
||
# OpenAI üslublu söhbət alíyasları
|
||
POST /api/v1/vscode/{token}/chat/completions
|
||
POST /api/v1/vscode/{token}/responses
|
||
|
||
# Ollama üslublu alíyaslar
|
||
POST /api/v1/vscode/{token}/api/chat
|
||
GET /api/v1/vscode/{token}/api/tags
|
||
```
|
||
|
||
Nümunə:
|
||
|
||
```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"}]}'
|
||
```
|
||
|
||
Qeydlər:
|
||
|
||
- Tokenli alíyaslar `/v1/*` və `/api/tags` ilə eyni emalçılardan yenidən istifadə edir; cavab strukturları eyni qalır.
|
||
- Klient fərdi başlıqları dəstəklədikdə `Authorization: Bearer ...` istifadəsinə üstünlük verin.
|
||
- URL əsaslı tokenlər əks-proksi jurnallarında, brauzer tarixçəsində və OmniRoute-dan kənar telemetriyada görünə bilər. Onlara standart autentifikasiya rejimi kimi deyil, uyğunluq seçimi kimi yanaşın.
|
||
|
||
---
|
||
|
||
## Telemetriya
|
||
|
||
```bash
|
||
# Gecikmə telemetriyasının xülasəsini əldə edin (hər provayder üzrə p50/p95/p99)
|
||
GET /api/telemetry/summary
|
||
```
|
||
|
||
**Cavab:**
|
||
|
||
```json
|
||
{
|
||
"providers": {
|
||
"claudeCode": { "p50": 245, "p95": 890, "p99": 1200, "count": 150 },
|
||
"github": { "p50": 180, "p95": 620, "p99": 950, "count": 320 }
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Büdcə
|
||
|
||
```bash
|
||
# Bütün API açarları üçün büdcə statusunu əldə edin
|
||
GET /api/usage/budget
|
||
|
||
# Büdcə təyin edin və ya yeniləyin
|
||
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"
|
||
}
|
||
```
|
||
|
||
> **Sxem qeydləri** (`setBudgetSchema`): `apiKeyId` məcburidir; `dailyLimitUsd`, `weeklyLimitUsd` və ya `monthlyLimitUsd` dəyərlərindən ən azı biri sıfırdan böyük olmalıdır. İxtiyari sahələr: `warningThreshold` (0–1), `resetInterval` (`daily` | `weekly` | `monthly`), `resetTime` (`HH:MM`). Köhnə `{keyId, limit, period}` strukturu `400 Bad Request` qaytarır.
|
||
|
||
## Token Limitləri
|
||
|
||
Hər API açarı üçün **token** büdcələri (yuxarıdakı USD əsaslı Büdcədən fərqlidir). Sorğu emalı yolunda birbaşa tətbiq olunur: açarın cari zaman pəncərəsindəki istifadəsi limitə çatdıqda sorğular `429 Too Many Requests` xətası ilə rədd edilir. Limitlər konkret `model`, `provider` üzrə məhdudlaşdırıla və ya açarın bütün istifadəsinə `global` şəkildə tətbiq oluna bilər; bir sorğuya bir neçə limit uyğun gəldikdə ən məhdudlaşdırıcı olan üstünlük qazanır.
|
||
|
||
```bash
|
||
# Açarın token limitlərini siyahıla (cari zaman pəncərəsi üzrə istifadə daxildir)
|
||
GET /api/usage/token-limits?apiKeyId=key-123
|
||
|
||
# Token limiti yarat və ya yenilə
|
||
POST /api/usage/token-limits
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"apiKeyId": "key-123",
|
||
"scopeType": "model",
|
||
"scopeValue": "openai/gpt-4o",
|
||
"tokenLimit": 1000000,
|
||
"resetInterval": "monthly",
|
||
"enabled": true
|
||
}
|
||
|
||
# Token limitini id üzrə sil
|
||
DELETE /api/usage/token-limits?id=tl-abc
|
||
```
|
||
|
||
> **Sxem qeydləri** (`setTokenLimitSchema`): `apiKeyId` və `scopeType` (`model` | `provider` | `global`) mütləqdir. `scopeType` dəyəri `global` olmadığı halda `scopeValue` mütləqdir (məsələn, `model` əhatə dairəsi üçün model id-si, `provider` əhatə dairəsi üçün provayder id-si). `tokenLimit` müsbət tam ədəd olmalıdır (sətirdən çevrilir). İxtiyari: `id` (yaratmaq üçün buraxın, yeniləmək üçün təqdim edin), `resetInterval` (`daily` | `weekly` | `monthly`, standart olaraq `monthly`), `resetTime` (`HH:MM`), `enabled` (standart olaraq `true`). `GET` cavabları hər limiti `tokensUsed`, `remaining`, `windowStart`, `periodStartAt` və `nextResetAt` ilə zənginləşdirir. Bu, idarəetmə sinfinə aid son nöqtədir (autentifikasiya mərkəzləşdirilmiş authz konveyeri tərəfindən tətbiq olunur).
|
||
|
||
## Sorğunun Emalı
|
||
|
||
1. Müştəri `/v1/*` ünvanına sorğu göndərir
|
||
2. Marşrut emalçısı `handleChat`, `handleEmbedding`, `handleAudioTranscription` və ya `handleImageGeneration` çağırır
|
||
3. Model müəyyənləşdirilir (birbaşa provayder/model və ya alias/kombinasiya)
|
||
4. Hesabın əlçatanlığına görə filtrləmə tətbiq edilməklə lokal verilənlər bazasından giriş məlumatları seçilir
|
||
5. Söhbət üçün: `handleChatCore` semantik/imza keşini yoxlayır və kombinasiya sıxışdırma parametrlərini müəyyənləşdirir
|
||
6. Aktiv olduqda proaktiv sıxışdırma provayder tərcüməsindən əvvəl işə salınır (`lite`, Caveman, RTK və ya üst-üstə tətbiq olunan üsullar)
|
||
7. Provayder icraçısı yuxarı axın sorğusunu göndərir
|
||
8. Cavab yenidən müştəri formatına çevrilir (söhbət) və ya olduğu kimi qaytarılır (yerləşdirmələr/şəkillər/audio)
|
||
9. İstifadə, sıxışdırma analitikası və sorğu jurnalları qeydə alınır
|
||
10. Xətalar zamanı kombinasiya qaydalarına uyğun olaraq ehtiyat mexanizm tətbiq edilir
|
||
|
||
Tam arxitektura istinadı: [`ARCHITECTURE.md`](../architecture/ARCHITECTURE.md)
|
||
|
||
---
|
||
|
||
## Kombinasiyaların İdarə Edilməsi
|
||
|
||
Daha yüksək səviyyəli marşrutlaşdırma kombinasiyaları (`/api/combos*` bölməsində artıq ümumiləşdirilib) model id-si nümunəsindən 1:1 nisbətində də uyğunlaşdırıla bilər; bu, OpenAI üslublu model id-sinin şəffaf şəkildə kombinasiyaya yönləndirilməsinə imkan verir.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | -------------------------------- | ------------------------------------------------------------------------------------ |
|
||
| GET | `/api/model-combo-mappings` | Bütün model→kombinasiya uyğunlaşdırmalarını siyahıla |
|
||
| POST | `/api/model-combo-mappings` | Uyğunlaşdırma yarat — gövdə: `{pattern, comboId, priority?, enabled?, description?}` |
|
||
| GET | `/api/model-combo-mappings/[id]` | Tək bir uyğunlaşdırmanı əldə et |
|
||
| PUT | `/api/model-combo-mappings/[id]` | Mövcud uyğunlaşdırmanın sahələrini yenilə |
|
||
| DELETE | `/api/model-combo-mappings/[id]` | Uyğunlaşdırmanı sil |
|
||
|
||
**Autentifikasiya:** idarəetmə sessiyası/API açarı (`requireManagementAuth`).
|
||
|
||
---
|
||
|
||
## Vebhuklar
|
||
|
||
OmniRoute hadisələri (sorğunun tamamlanması, kvotanın tükənməsi, açarın rotasiyası və s.) üçün gedən vebhuk abunəlikləri.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ------------------------- | ------------------------------------------------------------------------------ |
|
||
| GET | `/api/webhooks` | Vebhukları siyahılayır (məxfi açarlar `<prefix>...` şəklində maskalanır) |
|
||
| POST | `/api/webhooks` | Vebhuk yaradır — sorğu gövdəsi: `{url, events?: ["*"], secret?, description?}` |
|
||
| GET | `/api/webhooks/[id]` | Vebhuku əldə edir |
|
||
| PUT | `/api/webhooks/[id]` | url/events/secret/description sahələrini yeniləyir |
|
||
| DELETE | `/api/webhooks/[id]` | Vebhuku silir |
|
||
| POST | `/api/webhooks/[id]/test` | Vebhuk URL-inə sınaq məlumatları göndərir və çatdırılma statusunu qaytarır |
|
||
|
||
**Autentifikasiya:** idarəetmə sessiyası/API açarı (`requireManagementAuth`).
|
||
|
||
---
|
||
|
||
## Qeydiyyatdan Keçmiş Açarlar (Avtomatik İdarəetmə)
|
||
|
||
Gündəlik/saatlıq kvotalarla dəstəkləyici provayder/hesab vasitəsilə API açarlarını yaratmaq və rotasiya etmək üçün avtomatik açar idarəetmə altsistemi tərəfindən istifadə olunur.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||
| GET | `/api/v1/registered-keys` | Qeydiyyatdan keçmiş açarları siyahılayır (yalnız maskalanmış prefiks) |
|
||
| POST | `/api/v1/registered-keys` | Yeni qeydiyyatdan keçmiş açar yaradır — sorğu gövdəsi: `{name, provider?, accountId?, idempotencyKey?, expiresAt?, dailyBudget?, hourlyBudget?}`. Xam açarı **yalnız bir dəfə** qaytarır. Kvota rədd edildikdə `429` qaytarır. |
|
||
| GET | `/api/v1/registered-keys/[id]` | Qeydiyyatdan keçmiş açarın metadatasını əldə edir (xam məlumat olmadan) |
|
||
| DELETE | `/api/v1/registered-keys/[id]` | Qeydiyyatdan keçmiş açarı ləğv edir |
|
||
| POST | `/api/v1/registered-keys/[id]/revoke` | Açıq ləğvetmə son nöqtəsi (DELETE ilə eyni təsirə malikdir) |
|
||
|
||
**Autentifikasiya:** Bearer API açarı (`isAuthenticated`). Həmçinin `/v1/quotas/check` və `/v1/issues/report` ünvanlarına baxın.
|
||
|
||
---
|
||
|
||
## Agentlər Protokolu
|
||
|
||
OmniRoute istifadəçiləri adından uzaqdan icra edilən bulud agenti tapşırıqları (Claude Code, Codex Cloud, OpenHands və s.).
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||
| GET | `/api/v1/agents/tasks` | Tapşırıqları siyahıla — istəyə bağlı `?provider=`, `?status=`, `?limit=` (1–500, standart 50) |
|
||
| POST | `/api/v1/agents/tasks` | Tapşırıq yarat — sorğu gövdəsi `CreateCloudAgentTaskSchema` (`providerId`, `prompt`, `source`, `options?`) ilə yoxlanılır. Tapşırıq zərfi ilə `201` qaytarır |
|
||
| DELETE | `/api/v1/agents/tasks?id=...` | Tapşırığı sil |
|
||
| GET | `/api/v1/agents/tasks/[id]` | Tapşırığı oxu — `external_id` təyin edildikdə statusu yuxarı axındakı bulud agentindən sinxron şəkildə yeniləyir |
|
||
| POST | `/api/v1/agents/tasks/[id]` | Fərqləndirilmiş əməl: `{action: "approve"}`, `{action: "message", message}` və ya `{action: "cancel"}` |
|
||
| DELETE | `/api/v1/agents/tasks/[id]` | Konkret tapşırığı id üzrə sil |
|
||
|
||
> **Autentifikasiya:** hər metod üçün idarəetmə autentifikasiyası tələb olunur (`requireCloudAgentManagementAuth`). v3.8.0 versiyasından əvvəl bunlar autentifikasiya tələb etmirdi — geriyə uyğunluğu pozan dəyişiklik üçün `588a0333` kommitinə baxın.
|
||
|
||
```bash
|
||
# Claude Code bulud tapşırığı yaradın
|
||
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":"..."}}'
|
||
```
|
||
|
||
---
|
||
|
||
## İdarəetmə Proksiləri
|
||
|
||
Provayderlərə, hesablara və ya qlobal şəkildə təyin edilə bilən çıxış HTTP(S)/SOCKS proksiləri.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| GET | `/api/v1/management/proxies` | Proksiləri siyahıla (`?id=` ilə biri qaytarılır; `?id=&where_used=1` ilə təyinat qrafı qaytarılır) |
|
||
| POST | `/api/v1/management/proxies` | Proksi yarat — sorğu gövdəsi `createProxyRegistrySchema` ilə yoxlanılır |
|
||
| PATCH | `/api/v1/management/proxies` | Proksini yenilə — sorğu gövdəsi `updateProxyRegistrySchema` ilə yoxlanılır (`id` tələb olunur) |
|
||
| DELETE | `/api/v1/management/proxies?id=...&force=1` | Proksini sil (təyinatları ayırmaq üçün `force=1` istifadə edin) |
|
||
| GET | `/api/v1/management/proxies/assignments` | Təyinatları siyahıla — `proxy_id`, `scope`, `scope_id` üzrə filtrlənə bilər; bağlantı üçün aktiv proksini müəyyən etmək məqsədilə `resolve_connection_id=<id>` ötürün |
|
||
| PUT | `/api/v1/management/proxies/assignments` | Təyin et — sorğu gövdəsi `proxyAssignmentSchema` (`{scope, scopeId?, proxyId?}`) ilə yoxlanılır. Dispetçer keşini təmizləyir |
|
||
| PUT | `/api/v1/management/proxies/bulk-assign` | Kütləvi təyin et — sorğu gövdəsi `bulkProxyAssignmentSchema` (`{scope, scopeIds[], proxyId?}`) ilə yoxlanılır |
|
||
| GET | `/api/v1/management/proxies/health?hours=24` | Müəyyən vaxt aralığı üzrə ümumiləşdirilmiş proksi sağlamlığı (uğur/uğursuzluq sayları, gecikmə) |
|
||
|
||
**Autentifikasiya:** hər marşrutda idarəetmə sessiyası/API açarı tələb olunur (`requireManagementAuth`).
|
||
|
||
> Tapşırıq təsvirindəki `POST /api/v1/management/proxies/[id]/assignments` və `POST /api/v1/management/proxies/[id]/health` sorğularına yuxarıda göstərilən düz `/assignments` və `/health` marşrutları xidmət edir — kod bazasında hər id üçün ayrıca alt marşrutlar yoxdur.
|
||
|
||
---
|
||
|
||
## Dayanıqlılıq (genişləndirilmiş)
|
||
|
||
OmniRoute üç müstəqil müvəqqəti nasazlıq mexanizmi təqdim edir; aşağıdakı idarəetmə son nöqtələri operatorlara onları oxumağa və yenidən təyin etməyə imkan verir:
|
||
|
||
| Əhatə dairəsi | Vəziyyətin saxlanması | Oxuma | Sıfırlama / təmizləmə |
|
||
| ------------------ | -------------------------------------------- | ----------------------------------------- | ------------------------------------------------------------------------- |
|
||
| Provayder kəsicisi | `domain_circuit_breakers` + yaddaşdaxili | `/api/monitoring/health` | `POST /api/resilience/reset` |
|
||
| Bağlantı fasiləsi | Provayder bağlantılarında `rateLimitedUntil` | `/api/rate-limits`, `/api/providers/[id]` | (tənbəl şəkildə yenidən aktivləşir; provayder PUT sorğusu ilə təmizləyin) |
|
||
| Model bloklanması | Yaddaşdaxili model əlçatanlığı reyestri | `GET /api/resilience/model-cooldowns` | `DELETE /api/resilience/model-cooldowns` |
|
||
|
||
`PATCH /api/resilience`, `providerBreaker.oauth` və `providerBreaker.apikey` daxilində provayder kəsicisi üçün əvəzetmələri qəbul edir. Hər profil `degradationThreshold`, `failureThreshold` və `resetTimeoutMs` sahələrini dəstəkləyir; eyni sahələr İdarəetmə paneli → Parametrlər → Dayanıqlılıq bölməsində də təqdim olunur.
|
||
|
||
```bash
|
||
# Tək bir model bloklanmasını təmizləyin
|
||
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"}'
|
||
|
||
# Bütün bloklanmaları silin
|
||
curl -X DELETE http://localhost:20128/api/resilience/model-cooldowns \
|
||
-H "Cookie: auth_token=..." \
|
||
-d '{"all":true}'
|
||
```
|
||
|
||
Tam konseptual istinad və kəsicinin standart parametrləri üçün baxın: [`CLAUDE.md`](../../CLAUDE.md) → "Dayanıqlılığın İcra Müddəti Vəziyyəti".
|
||
|
||
---
|
||
|
||
## Bacarıqlar
|
||
|
||
OmniRoute-u fərdi icra edilə bilən emalçılarla genişləndirmək üçün bacarıq çərçivəsi və marketpleys inteqrasiyaları.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| GET | `/api/skills` | Quraşdırılmış bacarıqları siyahıya alın — `?q=`, `?mode=on\|off\|auto`, `?source=skillsmp\|skillssh\|local` üzrə filtrlənə və səhifələnə bilər |
|
||
| GET | `/api/skills/[id]` | Bir bacarığı əldə edin |
|
||
| PUT | `/api/skills/[id]` | Bacarığı yeniləyin (ad, təsvir, rejim, sxem, emalçı, teqlər) |
|
||
| DELETE | `/api/skills/[id]` | Bacarığı silin |
|
||
| POST | `/api/skills/install` | Bacarığı xam manifestdən quraşdırın — gövdə: `{name, version, description, schema:{input, output}, handlerCode, apiKeyId?}` |
|
||
| GET | `/api/skills/executions` | Son bacarıq icralarını siyahıya alın (girişlər, çıxışlar və müddəti əhatə edən audit izi) |
|
||
| GET | `/api/skills/marketplace?q=...` | SkillsMP marketpleysindən axtarış/populyar siyahı (`skillsmpApiKey` parametrini tələb edir) |
|
||
| POST | `/api/skills/marketplace/install` | SkillsMP-dən id üzrə bacarıq quraşdırın |
|
||
| GET | `/api/skills/skillssh?q=&limit=` | skills.sh reyestrində axtarış aparın |
|
||
| POST | `/api/skills/skillssh/install` | skills.sh-dan id üzrə bacarıq quraşdırın |
|
||
|
||
**Autentifikasiya:** idarəetmə sessiyası/API açarı. Marketpleys axtarış marşrutları idarəetmə autentifikasiyasını və ya Bearer API açarını (`isAuthenticated`) qəbul edir.
|
||
|
||
---
|
||
|
||
## Yaddaş
|
||
|
||
Hər API açarı / sessiya üzrə əhatə dairəsi məhdudlaşdırılmış davamlı söhbət/fakt yaddaşı anbarı.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
|
||
| GET | `/api/memory` | Yaddaş qeydlərini sadalayır — `?apiKeyId=`, `?type=`, `?sessionId=`, `?q=`, `offset/limit` və ya `page/limit` səhifələməsi ilə |
|
||
| POST | `/api/memory` | Yaddaş qeydi yaradır — gövdə Zod tərəfindən yoxlanılır: `{content, key, type?, sessionId?, apiKeyId?, metadata?, expiresAt?}` |
|
||
| GET | `/api/memory/[id]` | Bir yaddaş qeydini əldə edir |
|
||
| DELETE | `/api/memory/[id]` | Yaddaş qeydini silir |
|
||
| GET | `/api/memory/health` | Yaddaş altsisteminin vəziyyəti (DB bağlantısı, embeddings backend-i, vektor indeksinin vəziyyəti) |
|
||
|
||
**Autentifikasiya:** idarəetmə sessiyası/API açarı (`requireManagementAuth`). `type` enum-u: `FACTUAL`, `EPISODIC`, `SEMANTIC`, `PROCEDURAL` (`src/lib/memory/types.ts` daxilindəki `MemoryType`-a baxın).
|
||
|
||
---
|
||
|
||
## MCP Serveri
|
||
|
||
OmniRoute 3 nəqliyyat mexanizmi (stdio, SSE, streamable-http) və əhatə dairəsi məhdudlaşdırılmış alətləri olan daxili Model Context Protocol serveri ilə təchiz edilir. Aşağıdakı idarəetmə paneli endpoint-ləri vəziyyət/audit məlumatlarını oxuyur və HTTP nəqliyyatlarını proksi edir.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ---------------------- | ------------------------------------------------------------------------------------------------ | -------------------- |
|
||
| GET | `/api/mcp/status` | Ürək döyüntüsü, nəqliyyat, onlayn vəziyyət, son çağırış, ən çox istifadə olunan alətlər, 24 saatlıq uğur faizi |
|
||
| GET | `/api/mcp/tools` | `name`, `description`, `scopes`, `phase`, `auditLevel`, `sourceEndpoints` sahələri ilə MCP alətlərinin siyahısı |
|
||
| GET | `/api/mcp/sse` | SSE nəqliyyatı üçün SSE axını açır (MCP deaktivdirsə və ya nəqliyyat uyğun gəlmirsə, `503` qaytarır) |
|
||
| POST | `/api/mcp/sse` | SSE nəqliyyatında JSON-RPC çərçivəsi göndərir |
|
||
| GET | `/api/mcp/stream` | Streamable HTTP nəqliyyatının SSE tərəfini açır (server tərəfindən başladılan mesajlar) |
|
||
| POST | `/api/mcp/stream` | Streamable HTTP nəqliyyatında JSON-RPC çərçivəsi göndərir |
|
||
| DELETE | `/api/mcp/stream` | Streamable HTTP sessiyasını sonlandırır |
|
||
| GET | `/api/mcp/audit` | Audit jurnalını sorğulayır — `?limit=`, `?offset=`, `?tool=`, `?success=true | false`, `?apiKeyId=` |
|
||
| GET | `/api/mcp/audit/stats` | Ümumi audit statistikasını təqdim edir (ümumi saylar, uğur faizi, orta müddət, ən çox istifadə olunan alətlər) |
|
||
|
||
**Autentifikasiya:** `sse`/`stream` nəqliyyatları MCP-yə xas autentifikasiya səthinə tabedir (`mcp` əhatə dairəsinə malik Bearer API açarı); `status`/`tools`/`audit*` marşrutları idarəetmə panelindən oxuna bilər (idarəetmə paneli hostuna çıxışdan əlavə autentifikasiya tələb olunmur).
|
||
|
||
> Hər iki HTTP nəqliyyatı `settings.mcpEnabled` və `settings.mcpTransport` ilə məhdudlaşdırılır — nəqliyyat uyğunsuzluğu `400`, MCP-nin deaktiv vəziyyəti isə `503` qaytarır.
|
||
|
||
---
|
||
|
||
## A2A Serveri
|
||
|
||
OmniRoute yoxlama və idarəetmə panelində istifadə üçün REST örtüyü ilə yanaşı A2A (Agent-to-Agent) JSON-RPC 2.0 son nöqtəsi təqdim edir.
|
||
|
||
### JSON-RPC
|
||
|
||
```bash
|
||
POST /a2a
|
||
Authorization: Bearer your-api-key # OMNIROUTE_API_KEY təyin edilməyibsə, istəyə bağlıdır
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"jsonrpc": "2.0",
|
||
"id": 1,
|
||
"method": "message/send",
|
||
"params": {
|
||
"skill": "smart-routing",
|
||
"messages": [{"role": "user", "content": "Route this coding task"}]
|
||
}
|
||
}
|
||
```
|
||
|
||
Dəstəklənən metodlar (hamısı `settings.a2aEnabled` parametrindən asılıdır):
|
||
|
||
| Metod | Təsvir |
|
||
| ---------------- | -------------------------------------------------------------- |
|
||
| `message/send` | Sinxron bacarıq icrası; `{task, artifacts, metadata}` qaytarır |
|
||
| `message/stream` | Eyni bacarıq dəstinin axınlı SSE icrası |
|
||
| `tasks/get` | Tapşırığı `taskId` ilə əldə edir |
|
||
| `tasks/cancel` | Tapşırığı `taskId` ilə ləğv edir |
|
||
|
||
Daxili bacarıqlar: `smart-routing`, `quota-management`, `provider-discovery`, `cost-analysis`, `health-report`.
|
||
|
||
### Agent Kartı
|
||
|
||
```bash
|
||
GET /.well-known/agent.json
|
||
```
|
||
|
||
İctimai A2A agent kartını (ad, təsvir, imkanlar, bacarıq kataloqu, autentifikasiya sxemi) qaytarır — 1 saat müddətinə ictimai şəkildə keşlənir. Autentifikasiya tələb olunmur.
|
||
|
||
### REST köməkçiləri
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ----- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
||
| GET | `/api/a2a/status` | A2A aktivlik vəziyyəti + tapşırıq statistikası + keşlənmiş agent kartının xülasəsi |
|
||
| GET | `/api/a2a/tasks` | Tapşırıqları siyahılayır — `?state=submitted\|working\|completed\|failed\|cancelled`, `?skill=`, `?limit=` (≤200), `?offset=` |
|
||
| POST | `/api/a2a/tasks` | (REST köməkçisi kimi həyata keçirilməyib — JSON-RPC `message/send` vasitəsilə yaradın) |
|
||
| GET | `/api/a2a/tasks/[id]` | Bir tapşırığı əldə edir |
|
||
| POST | `/api/a2a/tasks/[id]/cancel` | Tapşırığı ləğv edir |
|
||
|
||
**Autentifikasiya:** REST köməkçiləri idarəetmə autentifikasiyası olmadan işləyir (idarəetmə panelindən oxuna bilər); JSON-RPC `/a2a` marşrutu konfiqurasiya edildiyi halda Bearer `OMNIROUTE_API_KEY` istifadə edir.
|
||
|
||
---
|
||
|
||
## Bulud, Evals və Assess
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ------------------------------- | ------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------- |
|
||
| POST | `/api/cloud/auth` | Bearer açarını yoxlayır və bulud sinxronizasiya müştəriləri üçün maskalanmış provayder bağlantıları + model aliasları qaytarır |
|
||
| POST | `/api/cloud/credentials/update` | Buludla sinxronlaşdırılmış provayder üçün şifrələnmiş giriş məlumatlarını yeniləyir |
|
||
| POST | `/api/cloud/model/resolve` | Lokal marşrutlaşdırma cədvəlindən istifadə edərək məntiqi model identifikatorunu konkret provayder/model ilə uyğunlaşdırır |
|
||
| GET | `/api/cloud/models/alias` | Bulud sinxronizasiyasına təqdim edilən model aliaslarını siyahılayır |
|
||
| GET | `/api/assess` | Ən son qiymətləndirmə kateqoriyalarını oxuyur (hər provayder/model üzrə) |
|
||
| POST | `/api/assess` | Qiymətləndirmə başladır — gövdə: `{scope: {type:"all"} | {type:"provider", providerId} | {type:"model", modelId}, trigger?}` |
|
||
| GET | `/api/evals` | Daxili eval dəstlərini + ən son icraları siyahılayır |
|
||
| POST | `/api/evals` | Eval icrasını başladır |
|
||
| POST | `/api/evals/suites` | Fərdi eval dəsti yaradır — gövdə `evalSuiteSaveSchema` tərəfindən yoxlanılır |
|
||
| GET | `/api/evals/suites/[id]` | Fərdi eval dəstini əldə edir |
|
||
|
||
**Autentifikasiya:** `/api/cloud/auth` Bearer açarını birbaşa yoxlayır; digər `/api/cloud/*`, `/api/evals/*` və `/api/assess` marşrutları idarəetmə sessiyası/API açarı tələb edir. `/api/assess` POST diskriminantlı birləşmə əhatə dairəsi sxemi ilə `validateBody` istifadə edir.
|
||
|
||
---
|
||
|
||
## ACP (Agent Client Protocol) İdarəetməsi
|
||
|
||
alt proseslər kimi. Bu son nöqtələr ACP agentlərinin aşkarlanmasını və fərdi agentlərin
|
||
qeydiyyatını idarə edir.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| GET | `/api/acp/agents` | Quraşdırma statusu, versiyası və binar faylı ilə birlikdə bütün məlum CLI agentlərini (daxili + fərdi) siyahıla |
|
||
| POST | `/api/acp/agents` | Fərdi ACP agentini qeydiyyatdan keçir və ya keşi yenilə — gövdə: `{id, name, binary, versionCommand, providerAlias, spawnArgs, protocol}` və ya `{action: "refresh"}` |
|
||
| DELETE | `/api/acp/agents` | Fərdi ACP agentini sil — sorğu parametri: `?id=<agentId>` |
|
||
|
||
**Cavab nümunəsi** (`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
|
||
}
|
||
```
|
||
|
||
**Autentifikasi:** İdarəetmə sessiyası (idarəetmə panelinin `auth_token` kukisi) və ya
|
||
idarəetmə əhatəli API açarı tələb olunur.
|
||
|
||
Tam təfərrüatlar üçün [ACP Çərçivəsinə](../frameworks/ACP.md) baxın.
|
||
|
||
---
|
||
|
||
## Analitika və Müşahidəolunma
|
||
|
||
Marşrutlaşdırma, sıxılma və provayder müxtəlifliyinin monitorinqi üçün real vaxt
|
||
analitika son nöqtələri. Bunlar `/dashboard/analytics/*` səhifələrinin işləməsini təmin edir.
|
||
|
||
### Avtomatik marşrutlaşdırma analitikası
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ----- | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- |
|
||
| GET | `/api/analytics/auto-routing` | Ümumi avtomatik marşrutlaşdırma statistikası: ümumi çağırışlar, strategiya bölgüsü, səviyyə bölgüsü, əsas provayderlər |
|
||
| GET | `/api/analytics/auto-routing?days=7` | Zaman pəncərəsi üzrə statistika (standart olaraq 24 saat) |
|
||
|
||
**Cavab nümunəsi**:
|
||
|
||
```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 }
|
||
]
|
||
}
|
||
```
|
||
|
||
### Sıxılma analitikası
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ----- | ---------------------------- | ---------------------------------------------------------------------------------------------------- |
|
||
| GET | `/api/analytics/compression` | Ümumi sıxılma statistikası: qənaət edilən tokenlər, qənaət faizi, rejim bölgüsü, mühərrik istifadəsi |
|
||
|
||
**Cavab nümunəsi**:
|
||
|
||
```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
|
||
}
|
||
}
|
||
```
|
||
|
||
### Provayder müxtəlifliyinin izlənməsi
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ----- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| GET | `/api/analytics/diversity` | Şennon entropiyasına əsaslanan müxtəliflik izləməsi: provayderlər üzrə paylanmanı ölçməklə vahid nasazlıq nöqtələrinin qarşısını alır |
|
||
|
||
**Cavab nümunəsi**:
|
||
|
||
```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"]
|
||
}
|
||
```
|
||
|
||
**Autentifikasi:** İdarəetmə sessiyası və ya idarəetmə əhatəli API açarı tələb olunur.
|
||
|
||
---
|
||
|
||
## Administrator Əməliyyatları
|
||
|
||
Əməliyyatların idarə edilməsi üçün yalnız administratorlara açıq son nöqtələr.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ----- | ------------------------ | ----------------------------------------------------------------------------------------------------------- |
|
||
| GET | `/api/admin/concurrency` | Cari paralellik limitlərini oxuyun (qlobal + hər provayder üzrə) |
|
||
| POST | `/api/admin/concurrency` | Paralellik limitlərini yeniləyin — sorğu gövdəsi: `{global?: number, perProvider?: Record<string, number>}` |
|
||
|
||
**Autentifikasiya:** Administrator səlahiyyətli idarəetmə sessiyası tələb olunur.
|
||
|
||
---
|
||
|
||
## CLI Alətlərinin İdarə Edilməsi
|
||
|
||
OmniRoute ilə inteqrasiya olunan CLI alətlərini (antigravity, chipotle, commandCode,
|
||
devin-cli və s.) idarə edin. Tam siyahı üçün [Provayder Arayışına](./PROVIDER_REFERENCE.md) baxın.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ----- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| GET | `/api/cli-tools/all-statuses` | Bütün CLI alətlərinin statusu (quraşdırılıb-quraşdırılmaması, versiya, son görülmə vaxtı) |
|
||
| GET | `/api/cli-tools/status` | Bir CLI aləti üçün ətraflı status (`?tool=` sorğusu) |
|
||
| POST | `/api/cli-tools/apply` | Alətin yaradılmış konfiqurasiyasını yazın (`dryRun` önizləmə təqdim edir; konteynerləşdirildikdə `422` + `containerEphemeralTarget`; `migration` köhnə Codex YAML-ını qeyd edir) |
|
||
| GET | `/api/cli-tools/backups` | CLI aləti konfiqurasiyalarının ehtiyat nüsxələrini siyahılayın |
|
||
| POST | `/api/cli-tools/backups` | Bütün CLI aləti konfiqurasiyalarının ehtiyat nüsxəsini yaradın |
|
||
| POST | `/api/cli-tools/backups` | Bərpa: sorğu gövdəsində `{tool, backupId}` olmaqla eyni son nöqtə həmin ehtiyat nüsxəni bərpa edir |
|
||
| GET | `/api/cli-tools/antigravity-mitm` | Antigravity MITM proksisinin statusu ("antigravity-mitm" CLI aləti) |
|
||
| POST | `/api/cli-tools/antigravity-mitm/alias` | antigravity-mitm aliaslarını konfiqurasiya edin |
|
||
|
||
**Autentifikasiya:** İdarəetmə sessiyası tələb olunur.
|
||
|
||
---
|
||
|
||
## Agent Bacarıqları
|
||
|
||
Süni intellekt agentlərinin bacarıqlarını idarə edin (OpenAI-ın fərdi GPT-lərinə bənzər, lakin agentlər üçün).
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ---------------------------- | ------------------------------------------------------------------------------------------------- |
|
||
| GET | `/api/agent-skills` | Bütün agent bacarıqlarını siyahılayın (daxili + fərdi) |
|
||
| GET | `/api/agent-skills/[id]` | Konkret agent bacarığını əldə edin |
|
||
| POST | `/api/agent-skills` | Fərdi agent bacarığı yaradın — sorğu gövdəsi: `{name, description, prompt, model?, temperature?}` |
|
||
| PUT | `/api/agent-skills/[id]` | Fərdi agent bacarığını yeniləyin |
|
||
| DELETE | `/api/agent-skills/[id]` | Fərdi agent bacarığını silin |
|
||
| GET | `/api/agent-skills/[id]/raw` | Emal edilməmiş promptu + metadatanı əldə edin (icra edilmədən) |
|
||
| POST | `/api/agent-skills/generate` | Təbii dil təsvirindən istifadə edərək süni intellekt vasitəsilə yeni bacarıq yaradın |
|
||
|
||
**Autentifikasiya:** İdarəetmə sessiyası və ya idarəetmə səlahiyyətli API açarı tələb olunur.
|
||
|
||
---
|
||
|
||
## Keşin idarə edilməsi
|
||
|
||
Semantik keşi və əsaslandırma keşini idarə edin.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
||
| GET | `/api/cache` | Keşə ümumi baxış: qeydlərin ümumi sayı, keşə düşmə nisbəti, diskdəki ölçü |
|
||
| GET | `/api/cache/entries` | Keşlənmiş qeydlərin siyahısı (səhifələmə ilə) |
|
||
| DELETE | `/api/cache/entries` | Keş qeydlərini silin (sorğu parametrlərinə görə filtrləyin) |
|
||
| GET | `/api/cache/stats` | Ətraflı keş statistikası (hər provayder və hər model üzrə) |
|
||
| GET | `/api/cache/reasoning` | Əsaslandırma keşinin statusu (əsaslandırmanın təkrar icrası üçün) |
|
||
| DELETE | `/api/cache/reasoning` | Əsaslandırma keşini təmizləyin — sorğu parametrləri: `?toolCallId=<id>` (tək), `?provider=<p>` və ya parametrsiz (hamısı) |
|
||
|
||
**Autentifikasiya:** İdarəetmə sessiyası tələb olunur.
|
||
|
||
---
|
||
|
||
## Yaddaş sistemi
|
||
|
||
Davamlı yaddaşı (FTS5 + vektor yerləşdirmələri) idarə edin.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ------------------ | ------------------------------------------------------------------------------------- |
|
||
| GET | `/api/memory` | Yaddaş qeydlərini sadalayın (əhatə dairəsi, növ və axtarış sorğusuna görə filtrləyin) |
|
||
| POST | `/api/memory` | Yeni yaddaş qeydi yaradın — gövdə: `{scope, type, content, metadata?}` |
|
||
| GET | `/api/memory/[id]` | Konkret yaddaş qeydini əldə edin |
|
||
| PUT | `/api/memory/[id]` | Yaddaş qeydini yeniləyin |
|
||
| DELETE | `/api/memory/[id]` | Yaddaş qeydini silin |
|
||
| GET | `/api/memory?q=` | Yaddaşda axtarış edin (FTS5 + vektor) — statistika eyni cavaba daxildir |
|
||
|
||
**Autentifikasiya:** İdarəetmə sessiyası və ya idarəetmə əhatəli API açarı tələb olunur.
|
||
|
||
---
|
||
|
||
## Vebhuklar
|
||
|
||
Hadisələr üçün vebhuk abunəliklərini idarə edin.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ------------------------------- | ------------------------------------------------------------------------------- |
|
||
| GET | `/api/webhooks` | Bütün vebhuk abunəliklərini sadalayın |
|
||
| POST | `/api/webhooks` | Vebhuk abunəliyi yaradın — gövdə: `{url, events[], secret?, active?}` |
|
||
| GET | `/api/webhooks/[id]` | Konkret vebhuk abunəliyini əldə edin |
|
||
| PUT | `/api/webhooks/[id]` | Vebhuk abunəliyini yeniləyin |
|
||
| DELETE | `/api/webhooks/[id]` | Vebhuk abunəliyini silin |
|
||
| GET | `/api/webhooks/[id]/deliveries` | Vebhuk üçün çatdırılma tarixçəsini sadalayın (uğurlu/uğursuz əməliyyat jurnalı) |
|
||
| POST | `/api/webhooks/[id]/test` | Vebhuka sınaq hadisəsi göndərin |
|
||
|
||
**Autentifikasiya:** İdarəetmə sessiyası tələb olunur.
|
||
|
||
Hadisə növlərinin tam siyahısı üçün [Vebhuklar çərçivəsinə](../frameworks/WEBHOOKS.md) baxın.
|
||
|
||
---
|
||
|
||
## Bacarıqlar Çərçivəsi
|
||
|
||
Bacarıqları (agent əsaslı genişləndirmələr çərçivəsini) idarə edin.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ------------------------ | -------------------------------------------------------------------------------------------------------- |
|
||
| GET | `/api/skills` | Bütün quraşdırılmış bacarıqları (daxili + fərdi) siyahıya alın |
|
||
| POST | `/api/skills/install` | Lokal yoldan və ya URL-dən bacarıq quraşdırın |
|
||
| DELETE | `/api/skills/[id]` | Bacarığı silin |
|
||
| PUT | `/api/skills/[id]` | Bacarığı aktivləşdirin və ya deaktiv edin — gövdə: `{enabled?: boolean, mode?: "on" \| "off" \| "auto"}` |
|
||
| POST | `/api/skills/executions` | Bacarığı icra edin — gövdə: `{skillName, apiKeyId, input?, sessionId?}` |
|
||
| GET | `/api/skills/executions` | Bütün bacarıqlar üçün icra tarixçəsini siyahıya alın (`?apiKeyId=` ilə filtrləyin) |
|
||
|
||
**Autentifikasiya:** İdarəetmə sessiyası və ya idarəetmə əhatəli API açarı tələb olunur.
|
||
|
||
Tam təfərrüatlar üçün [Bacarıqlar Çərçivəsinə](../frameworks/SKILLS.md) baxın.
|
||
|
||
---
|
||
|
||
## Plaginlər
|
||
|
||
OmniRoute plaginlərini (üçüncü tərəf genişləndirmələrini) idarə edin.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ------ | ---------------------------------- | -------------------------------------- |
|
||
| GET | `/api/plugins` | Quraşdırılmış plaginləri siyahıya alın |
|
||
| POST | `/api/plugins/marketplace/install` | Marketpleysdən plagin quraşdırın |
|
||
| DELETE | `/api/plugins/[name]` | Plagini silin |
|
||
| POST | `/api/plugins/[name]/activate` | Plagini aktivləşdirin |
|
||
| POST | `/api/plugins/[name]/deactivate` | Plagini deaktiv edin |
|
||
| GET | `/api/plugins/[name]/config` | Plagin konfiqurasiyasını əldə edin |
|
||
| PUT | `/api/plugins/[name]/config` | Plagin konfiqurasiyasını yeniləyin |
|
||
|
||
**Autentifikasiya:** İdarəetmə sessiyası tələb olunur.
|
||
|
||
Tam təfərrüatlar üçün [Plaginlər Çərçivəsinə](../frameworks/PLUGIN_SDK.md) baxın.
|
||
|
||
---
|
||
|
||
## Kölgə Marşrutlaşdırması
|
||
|
||
Provayderlərin kölgə / A-B müqayisəsi **müstəqil REST interfeysi deyil** — o, kombinə edilmiş marşrutlaşdırma vasitəsilə konfiqurasiya edilir (baxın: [Avtomatik Kombinasiya](../routing/AUTO-COMBO.md)). Hər kombinasiya üzrə müqayisə metrikləri `GET /api/combos/metrics` vasitəsilə təqdim olunur.
|
||
|
||
---
|
||
|
||
## Qoruyucu Mexanizmlər
|
||
|
||
İcra mühitinin qoruyucu mexanizmlərini (şəxsi identifikasiya məlumatlarının aşkarlanması, prompt inyeksiyasının aşkarlanması, görüntü körpülənməsi) yoxlayın. Qoruyucu mexanizmlər hər sorğuda işə düşür; hər çağırış üzrə imtina `x-omniroute-disabled-guardrails` sorğu başlığı vasitəsilə həyata keçirilir — daimi aktivləşdirmə/deaktivləşdirmə interfeysi yoxdur.
|
||
|
||
| Metod | Yol | Təsvir |
|
||
| ----- | ---------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
||
| GET | `/api/guardrails` | Qeydiyyatdan keçmiş qoruyucu mexanizmləri və onların statusunu (ad / aktivlik / prioritet) siyahıya alın |
|
||
| POST | `/api/guardrails/test` | Çağırışdan əvvəlki konveyeri nümunə giriş üzərində sınaq rejimində işlədin — gövdə: `{input, disabledGuardrails?}` |
|
||
|
||
**Autentifikasiya:** İdarəetmə sessiyası tələb olunur.
|
||
|
||
Tam təfərrüatlar üçün [Təhlükəsizlik > Qoruyucu Mexanizmlərə](../security/GUARDRAILS.md) baxın.
|
||
|
||
---
|
||
|
||
---
|
||
|
||
## Autentifikasiya
|
||
|
||
Dörd etimadnamə ailəsi (idarəetmə paneli sessiyası, lokal CLI tokeni, `oma_live_…` Giriş Tokeni, idarəetmə əhatəli API açarı) və onların inferensiya açarlarından necə fərqləndiyi haqqında məlumat üçün [İdarəetmə Autentifikasiyası](../guides/MANAGEMENT-AUTH.md) bölməsinə baxın.
|
||
|
||
- İdarəetmə paneli marşrutları (`/dashboard/*`) `auth_token` kukisindən istifadə edir
|
||
- Giriş saxlanılmış parol heşindən istifadə edir; ehtiyat variant kimi `INITIAL_PASSWORD` istifadə olunur
|
||
- `requireLogin` parametri `/api/settings/require-login` vasitəsilə aktiv və ya deaktiv edilə bilər
|
||
- `REQUIRE_API_KEY=true` olduqda `/v1/*` marşrutları istəyə bağlı olaraq Bearer API açarı tələb edir
|
||
- Bu arayışda “idarəetmə tokeni” / “idarəetmə əhatəli API açarı” həmin təlimatda göstərilən ailələrdən birini ifadə edir — ayrıca, müəyyən edilməmiş əlavə məxfi məlumat növünü deyil
|
||
|
||
> **Uyğunluğu pozan dəyişiklik (v3.8.0)** — `/api/v1/agents/tasks/*` və gözləmə müddətinin idarə edilməsi son nöqtələri artıq **idarəetmə autentifikasiyası** (idarəetmə panelinin `auth_token` kukisi və ya idarəetmə əhatəli API açarı) tələb edir. Əvvəllər bu marşrutları autentifikasiya olmadan çağıran klientlər `401 Unauthorized` cavabı alacaqlar. `588a0333` (`fix(auth): agent və gözləmə müddəti API-ləri üçün idarəetmə autentifikasiyası tələb et`) kommitinə baxın.
|