Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- **feat(api-keys):** new `USAGE_LIMIT_IGNORE_UNPRICED` feature flag (Settings → Feature flags, off by default). When on, per-key USD usage quotas count models that have no price as $0 instead of failing closed (#12341), so keys that use subscription or free models without pricing rows are no longer reported and blocked as over quota. Priced spend is still enforced, and `dailyHasUnpricedUsage` / `weeklyHasUnpricedUsage` still report the unpriced usage ([#14799](https://github.com/diegosouzapw/OmniRoute/pull/14799)).
5 changes: 3 additions & 2 deletions docs/reference/FEATURE_FLAGS.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ A boolean flag is considered **enabled** when its effective value is `"true"`,

## Flag Catalog

80 flags across 6 categories. **Default** is the definition default — the value
81 flags across 6 categories. **Default** is the definition default — the value
used when neither a DB override nor an environment variable is present.

### Security (10)
Expand Down Expand Up @@ -91,14 +91,15 @@ used when neither a DB override nor an environment variable is present.
| `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS` | boolean | `true` | | Allow adding/validating providers on local/private addresses (127.0.0.1, localhost, LAN). On by default (local-first); disable for strict public-only blocking. Cloud-metadata stays blocked. |
| `ENABLE_CC_COMPATIBLE_PROVIDER` | boolean | `false` | ✓ | Enable Claude Code compatible provider mode. |

### Policies (5)
### Policies (6)

| Key | Type | Default | Description |
| ------------------------------- | ------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TOOL_POLICY_MODE` | enum | `disabled` | Tool-use policy enforcement mode. Values: `disabled`, `warn`, `block`. |
| `RATE_LIMIT_AUTO_ENABLE` | boolean | `false` | Automatically enable rate limiting based on usage patterns. |
| `DISABLE_CONTEXT_WINDOW_CHECKS` | boolean | `false` | Skip OmniRoute's local context-window / max-input-token check for direct single-model requests. Upstream limits still apply. |
| `CAPABILITY_FILTER_ENABLED` | boolean | `false` | Reject requests before dispatch when the target model lacks required capabilities (vision, tools, structured output, context window). Protects direct single-provider requests that bypass the combo-layer compatibility filter. |
| `USAGE_LIMIT_IGNORE_UNPRICED` | boolean | `false` | Count usage of models that have no price as $0 in per-key USD usage quotas instead of treating the quota as exceeded. Off by default: an unpriced model or routing alias can hide real spend, so the quota fails closed. |
| `RADAR_ENABLED` | boolean | `false` | Enable the OmniRoute Radar module (catalog feed screens and sync). Off by default; enabling only unlocks the UI — data sync remains a separate opt-in. |

### Runtime (33)
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/am.json
Original file line number Diff line number Diff line change
Expand Up @@ -13906,6 +13906,7 @@
}
},
"featureFlagCapabilityFilterEnabledDescription": "የታለመው ሞዴል አስፈላጊ ችሎታዎች (ምስል፣ መሣሪያዎች፣ የተዋቀረ ውጤት፣ የአውድ መስኮት) ከሌሉት፣ ጥያቄዎችን ከመላካቸው በፊት ውድቅ አድርግ። ይህ የጥምር-ንብርብር ተኳኋኝነት ማጣሪያን የሚያልፉ ቀጥተኛ የአንድ-አቅራቢ ጥያቄዎችን ይጠብቃል።",
"featureFlagUsageLimitIgnoreUnpricedDescription": "ኮታው እንደተላለፈ ከመቁጠር ይልቅ፣ በእያንዳንዱ ቁልፍ የUSD አጠቃቀም ኮታዎች ውስጥ ዋጋ የሌላቸውን ሞዴሎች አጠቃቀም እንደ $0 ይቁጠሩ። በነባሪ ጠፍቷል፦ ዋጋ የሌለው ሞዴል ወይም የማዞሪያ ተለዋጭ ስም ትክክለኛ ወጪን ሊደብቅ ስለሚችል ኮታው ተዘግቶ ይከሽፋል።",
"featureFlagDisableContextWindowChecksDescription": "ለቀጥተኛ የአንድ-ሞዴል ጥያቄዎች የOmniRouteን አካባቢያዊ የአውድ-መስኮት እና ከፍተኛ-የግቤት-ቶከን ማረጋገጫ ዝለል። የላይኛው ደረጃ አቅራቢዎች እውነተኛ ገደቦቻቸውን አሁንም ያስፈጽማሉ። የፕሮምፕት መጭመቅ እና የውጤት-ቶከን ገደቦች እንደነቁ ይቆያሉ።",
"featureFlagSearchStatsHideDeletedConnectionsDescription": "የፍለጋ ስታቲስቲክስ እና የቅርብ ጊዜ ፍለጋዎች አሁንም ንቁ ግንኙነት ያላቸውን አቅራቢዎች ብቻ ይቆጥራሉ (እንደ duckduckgo-free ያሉ ቁልፍ የማይፈልጉ አቅራቢዎች ሁልጊዜ ይቆጠራሉ)። ሲጠፋ፣ የአቅራቢ መታወቂያ ያለው እያንዳንዱ የተያዘ የፍለጋ ረድፍ እንዳለ ይቆያል።",
"publicSystem": {
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -13906,6 +13906,7 @@
}
},
"featureFlagCapabilityFilterEnabledDescription": "رفض الطلبات قبل الإرسال عندما يفتقر النموذج المستهدف إلى القدرات المطلوبة (الرؤية، الأدوات، المخرجات المنظمة، نافذة السياق). يحمي الطلبات المباشرة من مزود واحد التي تتجاوز فلتر توافق الطبقة المجمعة.",
"featureFlagUsageLimitIgnoreUnpricedDescription": "احتساب استخدام النماذج التي ليس لها سعر كـ $0 في حصص استخدام USD لكل مفتاح بدلًا من معاملة الحصة على أنها تم تجاوزها. معطّل افتراضيًا: يمكن لنموذج غير مسعر أو اسم مستعار للتوجيه أن يخفي الإنفاق الحقيقي، لذا تفشل الحصة في وضع الإغلاق.",
"featureFlagDisableContextWindowChecksDescription": "تخطي فحص OmniRoute المحلي لنافذة السياق والحد الأقصى لرموز الإدخال للطلبات المباشرة ذات النموذج الواحد. لا يزال المزوّدون الخارجيون يفرضون حدودهم الفعلية. يظل ضغط المطالبات والحد الأقصى لرموز الإخراج مفعّلين.",
"featureFlagSearchStatsHideDeletedConnectionsDescription": "لا تشمل إحصاءات البحث وعمليات البحث الأخيرة إلا المزوّدين الذين لا يزال لديهم اتصال نشط (أما المزوّدون الذين لا يحتاجون إلى مفتاح، مثل duckduckgo-free، فيتم احتسابهم دائمًا). يؤدي إيقاف هذا الخيار إلى الاحتفاظ بكل صف بحث محفوظ يتضمن معرّف مزوّد.",
"publicSystem": {
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/az.json
Original file line number Diff line number Diff line change
Expand Up @@ -13906,6 +13906,7 @@
}
},
"featureFlagCapabilityFilterEnabledDescription": "Tələb olunan imkanlar (görmə, alətlər, strukturlaşdırılmış çıxış, kontekst pəncərəsi) olmayan hədəf modelində göndərilmədən əvvəl tələbləri rədd edin. Kombinasiya qatının uyğunluq filtrini keçən birbaşa tək təminatçı tələblərini qoruyur.",
"featureFlagUsageLimitIgnoreUnpricedDescription": "Kvotanın aşıldığını hesab etmək əvəzinə, açar üzrə USD istifadə kvotalarında qiyməti olmayan modellərin istifadəsini $0 kimi hesablayın. Defolt olaraq deaktivdir: qiymətləndirilməmiş model və ya marşrutlaşdırma aliası real xərcləri gizlədə bilər, buna görə də kvota qapalı vəziyyətdə xəta verir.",
"featureFlagDisableContextWindowChecksDescription": "Birbaşa tək model sorğuları üçün OmniRoute-un lokal kontekst pəncərəsi və maksimum giriş tokeni yoxlamasını keçin. Yuxarı səviyyəli provayderlər faktiki limitlərini yenə də tətbiq edirlər. Sorğu sıxışdırması və çıxış tokeni limitləri aktiv qalır.",
"featureFlagSearchStatsHideDeletedConnectionsDescription": "Axtarış statistikası və son axtarışlar yalnız hələ də aktiv bağlantısı olan provayderləri nəzərə alır (duckduckgo-free kimi açarsız provayderlər həmişə nəzərə alınır). Söndürüldükdə provayder ID-si olan bütün saxlanılmış axtarış sətirləri qorunur.",
"publicSystem": {
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/bg.json
Original file line number Diff line number Diff line change
Expand Up @@ -13906,6 +13906,7 @@
}
},
"featureFlagCapabilityFilterEnabledDescription": "Отхвърлете заявките преди изпращане, когато целевият модел няма необходимите възможности (визия, инструменти, структурирани изходи, контекстен прозорец). Защитава директните заявки от един доставчик, които заобикалят филтъра за съвместимост на комбинирания слой.",
"featureFlagUsageLimitIgnoreUnpricedDescription": "Отчитане на потреблението на модели без цена като $0 в квотите за потребление в USD за всеки ключ, вместо квотата да се счита за надвишена. Изключено по подразбиране: модел без цена или псевдоним за маршрутизиране може да скрие реални разходи, затова квотата се затваря при грешка.",
"featureFlagDisableContextWindowChecksDescription": "Пропускане на локалната проверка на OmniRoute за контекстния прозорец и максималния брой входни токени при директни заявки към един модел. Външните доставчици продължават да налагат действителните си ограничения. Компресирането на подканите и ограниченията за изходните токени остават активни.",
"featureFlagSearchStatsHideDeletedConnectionsDescription": "Статистиката за търсенията и скорошните търсения отчитат само доставчици, които все още имат активна връзка (доставчиците без ключ, като duckduckgo-free, винаги се отчитат). При „Изключено“ се запазва всеки съхранен запис за търсене с идентификатор на доставчик.",
"publicSystem": {
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/bn.json
Original file line number Diff line number Diff line change
Expand Up @@ -13906,6 +13906,7 @@
}
},
"featureFlagCapabilityFilterEnabledDescription": "লক্ষ্য মডেলের প্রয়োজনীয় সক্ষমতা (দৃষ্টি, সরঞ্জাম, কাঠামোবদ্ধ আউটপুট, প্রসঙ্গ উইন্ডো) অনুপস্থিত থাকলে প্রেরণের আগে অনুরোধগুলি প্রত্যাখ্যান করুন। এটি কম্বো-লেয়ার সামঞ্জস্য ফিল্টারকে বাইপাস করা সরাসরি একক-প্রদানকারী অনুরোধগুলি রক্ষা করে।",
"featureFlagUsageLimitIgnoreUnpricedDescription": "কোটা অতিক্রান্ত হিসেবে বিবেচনা করার পরিবর্তে, প্রতি-কী USD ব্যবহারের কোটায় মূল্যবিহীন মডেলগুলোর ব্যবহার $0 হিসেবে গণনা করুন। ডিফল্টভাবে বন্ধ: একটি মূল্যহীন মডেল বা রাউটিং উপনাম প্রকৃত খরচ গোপন করতে পারে, তাই কোটা ফেইল ক্লোজড হয়।",
"featureFlagDisableContextWindowChecksDescription": "সরাসরি একক-মডেল অনুরোধের জন্য OmniRoute-এর স্থানীয় কনটেক্সট-উইন্ডো এবং সর্বোচ্চ-ইনপুট-টোকেন যাচাই এড়িয়ে যান। আপস্ট্রিম প্রোভাইডাররা এখনও তাদের প্রকৃত সীমা প্রয়োগ করে। প্রম্পট কম্প্রেশন এবং আউটপুট-টোকেন সীমা সক্রিয় থাকে।",
"featureFlagSearchStatsHideDeletedConnectionsDescription": "অনুসন্ধানের পরিসংখ্যান এবং সাম্প্রতিক অনুসন্ধানে শুধু সেইসব প্রদানকারীকে গণনা করা হয়, যাদের সংযোগ এখনও সক্রিয় রয়েছে (duckduckgo-free-এর মতো কী-বিহীন প্রদানকারীকে সবসময় গণনা করা হয়)। বন্ধ থাকলে প্রদানকারী ID-সহ সংরক্ষিত প্রতিটি অনুসন্ধান সারি রাখা হয়।",
"publicSystem": {
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/bs.json
Original file line number Diff line number Diff line change
Expand Up @@ -13906,6 +13906,7 @@
}
},
"featureFlagCapabilityFilterEnabledDescription": "Odbijte zahtjeve prije slanja kada ciljni model nema potrebne mogućnosti (vid, alati, strukturirani izlaz, kontekstni prozor). Štiti direktne zahtjeve jednog provajdera koji zaobilaze filter kompatibilnosti combo-sloja.",
"featureFlagUsageLimitIgnoreUnpricedDescription": "Računaj potrošnju modela koji nemaju cijenu kao $0 u USD kvotama potrošnje po ključu umjesto da se kvota tretira kao prekoračena. Podrazumijevano isključeno: model bez cijene ili alias za rutiranje može sakriti stvarnu potrošnju, pa se kvota automatski odbija.",
"featureFlagDisableContextWindowChecksDescription": "Preskoči lokalnu provjeru kontekstnog prozora i maksimalnog broja ulaznih tokena OmniRoute-a za direktne zahtjeve jednog modela. Upstream provajderi i dalje primjenjuju svoja stvarna ograničenja. Kompresija prompta i ograničenja izlaznih tokena ostaju aktivni.",
"featureFlagSearchStatsHideDeletedConnectionsDescription": "Statistike pretrage i nedavne pretrage računaju samo provajdere koji i dalje imaju aktivnu konekciju (provajderi bez ključa kao što je duckduckgo-free uvijek se računaju). Isključivanje zadržava svaki red pretrage sa ID-jem provajdera.",
"publicSystem": {
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/cs.json
Original file line number Diff line number Diff line change
Expand Up @@ -13906,6 +13906,7 @@
}
},
"featureFlagCapabilityFilterEnabledDescription": "Odmítnout požadavky před odesláním, když cílový model postrádá požadované schopnosti (vidění, nástroje, strukturovaný výstup, kontextové okno). Chrání přímé požadavky od jednotlivých poskytovatelů, které obcházejí filtr kompatibility kombinované vrstvy.",
"featureFlagUsageLimitIgnoreUnpricedDescription": "Započítávat využití modelů bez ceny jako $0 v kvótách využití v USD pro jednotlivé klíče namísto považování kvóty za překročenou. Ve výchozím nastavení vypnuto: neoceněný model nebo alias směrování může skrýt skutečnou útratu, takže kvóta selhává v uzavřeném stavu (fail closed).",
"featureFlagDisableContextWindowChecksDescription": "Přeskočit místní kontrolu velikosti kontextového okna a maximálního počtu vstupních tokenů v OmniRoute u přímých požadavků na jeden model. Poskytovatelé stále vynucují své skutečné limity. Komprese promptů a omezení počtu výstupních tokenů zůstávají aktivní.",
"featureFlagSearchStatsHideDeletedConnectionsDescription": "Statistiky vyhledávání a nedávná vyhledávání zahrnují pouze poskytovatele, kteří mají stále aktivní připojení (poskytovatelé bez klíče, jako je duckduckgo-free, se započítávají vždy). Vypnutí zachová všechny uchované řádky vyhledávání s ID poskytovatele.",
"publicSystem": {
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/da.json
Original file line number Diff line number Diff line change
Expand Up @@ -13906,6 +13906,7 @@
}
},
"featureFlagCapabilityFilterEnabledDescription": "Afvis anmodninger før afsendelse, når målmodellen mangler de nødvendige funktioner (vision, værktøjer, struktureret output, kontekstvindue). Beskytter direkte anmodninger fra en enkelt udbyder, der omgår kombinationslagets kompatibilitetsfilter.",
"featureFlagUsageLimitIgnoreUnpricedDescription": "Tæl forbrug af modeller uden pris som $0 i USD-forbrugskvoter pr. nøgle i stedet for at behandle kvoten som overskredet. Deaktiveret som standard: en model uden pris eller et routingalias kan skjule det reelle forbrug, så kvoten fejler lukket.",
"featureFlagDisableContextWindowChecksDescription": "Spring OmniRoute's lokale kontrol af kontekstvindue og maksimalt antal inputtokens over for direkte anmodninger til en enkelt model. Opstrømsudbydere håndhæver stadig deres faktiske grænser. Promptkomprimering og grænser for outputtokens forbliver aktive.",
"featureFlagSearchStatsHideDeletedConnectionsDescription": "Søgestatistik og seneste søgninger tæller kun udbydere, der stadig har en aktiv forbindelse (nøglefri udbydere såsom duckduckgo-free tæller altid med). Fra bevarer alle gemte søgerækker med et udbyder-id.",
"publicSystem": {
Expand Down
1 change: 1 addition & 0 deletions src/i18n/messages/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -13906,6 +13906,7 @@
}
},
"featureFlagCapabilityFilterEnabledDescription": "Lehnen Sie Anfragen ab, bevor sie versendet werden, wenn das Zielmodell über die erforderlichen Funktionen (Vision, Werkzeuge, strukturierte Ausgabe, Kontextfenster) nicht verfügt. Schützt direkte Einzelanbieteranfragen, die den Kombo-Schicht-Kompatibilitätsfilter umgehen.",
"featureFlagUsageLimitIgnoreUnpricedDescription": "Die Nutzung von Modellen ohne Preis in USD-Nutzungskontingenten pro Schlüssel als $0 zählen, anstatt das Kontingent als überschritten zu behandeln. Standardmäßig deaktiviert: Ein Modell ohne Preis oder ein Routing-Alias kann tatsächliche Ausgaben verbergen, sodass das Kontingent geschlossen fehlschlägt.",
"featureFlagDisableContextWindowChecksDescription": "Lokale Kontextfenster- und Maximaleingabetoken-Prüfung von OmniRoute für direkte Einzelmodell-Anfragen überspringen. Upstream-Anbieter erzwingen weiterhin ihre tatsächlichen Grenzen. Prompt-Komprimierung und Ausgabetoken-Grenzen bleiben aktiv.",
"featureFlagSearchStatsHideDeletedConnectionsDescription": "Suchstatistiken und kürzlich durchgeführte Suchen berücksichtigen nur Anbieter, die noch über eine aktive Verbindung verfügen (Anbieter ohne Schlüssel wie duckduckgo-free werden immer berücksichtigt). Bei „Aus“ wird jede gespeicherte Suchzeile mit einer Anbieter-ID beibehalten.",
"publicSystem": {
Expand Down
Loading
Loading