diff --git a/README.ar.md b/README.ar.md index 60b9e8edc5..59e413af25 100644 --- a/README.ar.md +++ b/README.ar.md @@ -1,13 +1,55 @@ -
- OmniRoute Dashboard - - # 🚀 OmniRoute — بوابة الذكاء الاصطناعي المجانية +# 🚀 OmniRoute — بوابة الذكاء الاصطناعي المجانية ### لا تتوقف أبدًا عن البرمجة. التوجيه الذكي إلى **نماذج الذكاء الاصطناعي المجانية ومنخفضة التكلفة** مع الرجوع التلقائي. -_وكيل واجهة برمجة التطبيقات العالمي الخاص بك — نقطة نهاية واحدة، وأكثر من 36 موفرًا، بدون أي توقف عن العمل._ +_وكيل API العالمي الخاص بك - نقطة نهاية واحدة، أكثر من 36 موفرًا، بدون توقف. الآن مع تنسيق الوكيل **MCP & A2A**._ -**إكمالات الدردشة • التضمينات • إنشاء الصور • الصوت • إعادة الترتيب • 100% TypeScript** +**إكمالات الدردشة • التضمينات • إنشاء الصور • الفيديو • الموسيقى • الصوت • إعادة الترتيب • خادم MCP • بروتوكول A2A • 100٪ TypeScript ** + +--- + +
+ +[![إصدار npm](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute) +[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute) +[![الترخيص](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE) +[![موقع الويب](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online) +[![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) + +[🌐 الموقع الإلكتروني](https://omniroute.online) • [🚀 البداية السريعة](#-quick-start) • [💡 الميزات](#-key-features) • [📖 المستندات](#-documentation) • [💰 التسعير](#-pricing-at-a-glance) • [💬 واتساب](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) + +
+ +🌐 **متوفر باللغة:** 🇺🇸 [الإنجليزية](README.md) | 🇧🇷 [البرتغالية (البرازيل)](README.pt-BR.md) | 🇪🇸 [الإسبانية](README.es.md) | 🇫🇷 [Français](README.fr.md) | 🇮🇹 [الإيطالية](README.it.md) | 🇷🇺 [Русский](README.ru.md) | 🇨🇳 [中文 (简体)](README.zh-CN.md) | 🇩🇪 [الألمانية](README.de.md) | 🇮🇳 [هندي](README.in.md) | 🇹🇭 [ไทย](README.th.md) | 🇺🇦 [أوكرانيا](README.uk-UA.md) | 🇸🇦 [العربية](README.ar.md) | 🇯🇵 [日本語](README.ja.md) | 🇻🇳 [تيانج فيت](README.vi.md) | 🇧🇬 [بلغارسكي](README.bg.md) | 🇩🇰 [الدانسك](README.da.md) | 🇫🇮 [سومي](README.fi.md) | 🇮🇱 [العربية](README.he.md) | 🇭🇺 [المجرية](README.hu.md) | 🇮🇩 [البهاسا الإندونيسية](README.id.md) | 🇰🇷 [한국어](README.ko.md) | 🇲🇾 [البهاسا ملايو](README.ms.md) | 🇳🇱 [هولندا](README.nl.md) | 🇳🇴 [نورسك](README.no.md) | 🇵🇹 [البرتغالية (البرتغال)](README.pt.md) | 🇷🇴 [روماني](README.ro.md) | 🇵🇱 [بولسكي](README.pl.md) | 🇸🇰 [سلوفينسينا](README.sk.md) | 🇸🇪 [سفينسكا](README.sv.md) | 🇵🇭 [فلبينية](README.phi.md) + +--- + +## 🖼️ لوحة التحكم الرئيسية + +
+ OmniRoute Dashboard +
+ +--- + +## 📸 معاينة لوحة التحكم + +
+انقر لرؤية لقطات شاشة لوحة القيادة + +| صفحة | لقطة شاشة | +| --------------------- | -------------------------------------------------- | +| ** مقدمو الخدمة ** | ![مقدمو الخدمة](docs/screenshots/01-providers.png) | +| **المجموعات** | ![المجموعات](docs/screenshots/02-combos.png) | +| **تحليلات** | ![تحليلات](docs/screenshots/03-analytics.png) | +| **الصحة** | ![الصحة](docs/screenshots/04-health.png) | +| **مترجم** | ![مترجم](docs/screenshots/05-translator.png) | +| **الإعدادات** | ![الإعدادات](docs/screenshots/06-settings.png) | +| **أدوات سطر الأوامر** | ![أدوات CLI](docs/screenshots/07-cli-tools.png) | +| **سجلات الاستخدام** | ![الاستخدام](docs/screenshots/08-usage.png) | +| **نقطة النهاية** | ![نقطة النهاية](docs/screenshots/09-endpoint.png) | + +
--- @@ -18,11 +60,10 @@ _قم بتوصيل أي أداة IDE أو CLI مدعومة بالذكاء الا @@ -64,49 +105,35 @@ _قم بتوصيل أي أداة IDE أو CLI مدعومة بالذكاء الا
- + OpenClaw
OpenClaw -

- ⭐ 205K +
⭐ 205K
@@ -41,7 +82,7 @@ _قم بتوصيل أي أداة IDE أو CLI مدعومة بالذكاء الا ZeroClaw
- ZeroClaw + زيرومخلب

⭐ 9.9K
Codex CLI
- Codex CLI + Codex

⭐ 60.8K
Claude Code
- Claude Code + كلود كود

⭐ 67.3K
Gemini CLI
- Gemini CLI + الجوزاء CLI

⭐ 94.7K
Kilo Code
- Kilo Code + كيلو كود

⭐ 15.5K
-📡 يتصل جميع الوكلاء عبر http://localhost:20128/v1 أو http://cloud.omniroute.online/v1 - تكوين واحد ونماذج غير محدودة و الحصة - ---- - -[![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute) -[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute) -[![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE) -[![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online) -[![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) - -[🌐 الموقع](https://omniroute.online) • [🚀 البداية السريعة](#-بداية-سريعة) • [💡 الميزات](#-الميزات-الرئيسية) • [📖 التوثيق](#-التوثيق) • [💰 الأسعار](#-لمحة-سريعة-عن-الأسعار) • [💬 WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) - -🌐 **متوفر باللغات:** 🇺🇸 [English](README.md) | 🇧🇷 [Português (Brasil)](README.pt-BR.md) | 🇪🇸 [Español](README.es.md) | 🇫🇷 [Français](README.fr.md) | 🇮🇹 [Italiano](README.it.md) | 🇷🇺 [Русский](README.ru.md) | 🇨🇳 [中文 (简体)](README.zh-CN.md) | 🇩🇪 [Deutsch](README.de.md) | 🇮🇳 [हिन्दी](README.in.md) | 🇹🇭 [ไทย](README.th.md) | 🇺🇦 [Українська](README.uk-UA.md) | 🇸🇦 [العربية](README.ar.md) | 🇯🇵 [日本語](README.ja.md) | 🇻🇳 [Tiếng Việt](README.vi.md) | 🇧🇬 [Български](README.bg.md) | 🇩🇰 [Dansk](README.da.md) | 🇫🇮 [Suomi](README.fi.md) | 🇮🇱 [עברית](README.he.md) | 🇭🇺 [Magyar](README.hu.md) | 🇮🇩 [Bahasa Indonesia](README.id.md) | 🇰🇷 [한국어](README.ko.md) | 🇲🇾 [Bahasa Melayu](README.ms.md) | 🇳🇱 [Nederlands](README.nl.md) | 🇳🇴 [Norsk](README.no.md) | 🇵🇹 [Português (Portugal)](README.pt.md) | 🇷🇴 [Română](README.ro.md) | 🇵🇱 [Polski](README.pl.md) | 🇸🇰 [Slovenčina](README.sk.md) | 🇸🇪 [Svenska](README.sv.md) | 🇵🇭 [Filipino](README.phi.md) - -
+📡 يتصل جميع الوكلاء عبر http://localhost:20128/v1 أو http://cloud.omniroute.online/v1 - تكوين واحد ونماذج غير محدودة و حصة --- @@ -114,8 +141,8 @@ _قم بتوصيل أي أداة IDE أو CLI مدعومة بالذكاء الا **توقف عن إهدار المال وضرب الحدود:** -- تنتهي صلاحية حصة الاشتراك غير المستخدمة كل شهر -- حدود الأسعار تمنعك من الترميز المتوسط +- تنتهي حصة الاشتراك غير المستخدمة كل شهر +- حدود معدل تمنعك من الترميز المتوسط - واجهات برمجة التطبيقات باهظة الثمن (20-50 دولارًا شهريًا لكل مزود) - التبديل اليدوي بين مقدمي الخدمة @@ -128,6 +155,17 @@ _قم بتوصيل أي أداة IDE أو CLI مدعومة بالذكاء الا --- +## 📧 الدعم> 💬 **انضم إلى مجتمعنا!** [مجموعة WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) - احصل على المساعدة وشارك النصائح وابق على اطلاع. + +- **الموقع الإلكتروني**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **المشاكل**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **واتساب**: [مجموعة المجتمع](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **المساهمة**: راجع [CONTRIBUTING.md](CONTRIBUTING.md)، أو افتح علاقة عامة، أو اختر `good first issue` +- **المشروع الأصلي**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 كيف يعمل ``` @@ -157,302 +195,567 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 ما يحله OmniRoute — 30 مشكلة حقيقية وحالات استخدام -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **يواجه كل مطور يستخدم أدوات الذكاء الاصطناعي هذه المشكلات يوميًا.** تم تصميم OmniRoute لحلها جميعًا — بدءًا من تجاوز التكاليف وحتى الكتل الإقليمية، ومن تدفقات OAuth المعطلة إلى عمليات البروتوكول وإمكانية مراقبة المؤسسة.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "أدفع مقابل اشتراك باهظ الثمن ولكن لا يزال يتم مقاطعتي بسبب الحدود" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +يدفع المطورون ما بين 20 إلى 200 دولار شهريًا مقابل Claude Pro أو Codex Pro أو GitHub Copilot. حتى عند الدفع، فإن الحصة لها حد أقصى — 5 ساعات من الاستخدام، أو حدود أسبوعية، أو حدود لسعر الدقيقة. في منتصف جلسة الترميز، يتوقف الموفر عن الاستجابة ويفقد المطور التدفق والإنتاجية. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **الاحتياطي الذكي ذو 4 طبقات** — في حالة نفاد حصة الاشتراك، تتم إعادة التوجيه تلقائيًا إلى مفتاح واجهة برمجة التطبيقات ← رخيص ← مجاني بدون أي تدخل يدوي +- **تتبع الحصص في الوقت الفعلي** — يُظهر استهلاك الرمز المميز في الوقت الفعلي مع العد التنازلي لإعادة التعيين (5 ساعات، يوميًا، وأسبوعيًا) +- **دعم الحسابات المتعددة** — حسابات متعددة لكل مزود مع نظام روبن تلقائي — عند نفاد الحساب، يتم التبديل إلى التالي +- **مجموعات مخصصة** — سلاسل احتياطية قابلة للتخصيص مع 6 إستراتيجيات موازنة (الملء أولاً، جولة روبن، P2C، عشوائي، الأقل استخدامًا، الأمثل من حيث التكلفة) +- **حصص الدستور الغذائي** — مراقبة حصص مساحة عمل الشركة/الفريق مباشرة في لوحة المعلومات
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "أحتاج إلى استخدام موفري خدمات متعددين ولكن لكل منهم واجهة برمجة تطبيقات مختلفة" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +يستخدم OpenAI تنسيقًا واحدًا، ويستخدم Claude (Anthropic) تنسيقًا آخر، ويستخدم Gemini تنسيقًا آخر. إذا أراد أحد المطورين اختبار النماذج من موفري خدمات مختلفين أو إجراء بديل فيما بينهم، فسيحتاج إلى إعادة تكوين مجموعات تطوير البرامج (SDK)، وتغيير نقاط النهاية، والتعامل مع التنسيقات غير المتوافقة. لدى موفري الخدمة المخصصين (FriendLI، NIM) نقاط نهاية نموذجية غير قياسية. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **نقطة النهاية الموحدة** — تعمل نقطة `http://localhost:20128/v1` واحدة كوكيل لجميع مقدمي الخدمة الذين يزيد عددهم عن 36 +- **تنسيق الترجمة** — تلقائي وشفاف: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **تطهير الاستجابة** — إزالة الحقول غير القياسية (`x_groq`، `usage_breakdown`، `service_tier`) التي تكسر OpenAI SDK v1.83+ +- **تطبيع الدور** — تحويل `developer` → `system` لمقدمي الخدمات غير التابعين لـ OpenAI؛ `system` → `user` لـ GLM/ERNIE +- **Think Tag Extraction** — يستخرج كتل `` من نماذج مثل DeepSeek R1 إلى `reasoning_content` القياسية +- **الإخراج المنظم لـ Gemini** — التحويل التلقائي `json_schema` → `responseMimeType`/`responseSchema` +- **الإعدادات الافتراضية لـ `stream` هي `false`** — تتماشى مع مواصفات OpenAI، وتتجنب SSE غير المتوقع في Python/Rust/Go SDKs
+ +
+🌐 3. "مزود الذكاء الاصطناعي الخاص بي يحظر منطقتي/بلدي" + +يقوم مقدمو الخدمة مثل OpenAI/Codex بحظر الوصول من مناطق جغرافية معينة. يحصل المستخدمون على أخطاء مثل `unsupported_country_region_territory` أثناء اتصالات OAuth وAPI. وهذا أمر محبط بشكل خاص للمطورين من البلدان النامية. + +**كيف يحل OmniRoute المشكلة:** + +- **تكوين الوكيل ثلاثي المستوى** — وكيل قابل للتكوين على 3 مستويات: عالمي (كل حركة المرور)، لكل مزود (موفر واحد فقط)، ولكل اتصال/مفتاح +- **شارات الوكيل المرمزة بالألوان** — المؤشرات المرئية: 🟢 الوكيل العالمي، 🟡 وكيل الموفر، 🔵 وكيل الاتصال، يظهر دائمًا عنوان IP +- **تبادل رمز OAuth عبر الوكيل** — يمر تدفق OAuth أيضًا عبر الوكيل، مما يؤدي إلى حل مشكلة `unsupported_country_region_territory` +- **اختبارات الاتصال عبر الوكيل** — تستخدم اختبارات الاتصال الوكيل الذي تم تكوينه (لا مزيد من التجاوز المباشر) +- **دعم SOCKS5** — دعم وكيل SOCKS5 الكامل للتوجيه الخارجي +- ** انتحال بصمة إصبع TLS ** — بصمة TLS تشبه المتصفح عبر `wreq-js` لتجاوز اكتشاف الروبوتات
-🌐 3. "My AI provider blocks my region/country" +🆓 4. "أريد استخدام الذكاء الاصطناعي للبرمجة ولكن ليس لدي المال" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +لا يستطيع الجميع دفع ما بين 20 إلى 200 دولار شهريًا مقابل اشتراكات الذكاء الاصطناعي. يحتاج الطلاب والمطورون من البلدان الناشئة والهواة والمستقلون إلى الوصول إلى نماذج عالية الجودة بدون تكلفة. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **موفرو الطبقة المجانية المضمنون** — دعم أصلي لمقدمي الخدمات المجانيين بنسبة 100%: iFlow (8 نماذج غير محدودة)، Qwen (3 نماذج غير محدودة)، Kiro (Claude مجانًا)، Gemini CLI (180 ألف/شهر مجانًا) +- **المجموعات المجانية فقط** — السلسلة `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = 0 USD/الشهر بدون أي توقف عن العمل +- **أرصدة NVIDIA NIM المجانية** — 1000 رصيد مجاني مدمج +- **استراتيجية التكلفة المحسنة** — استراتيجية التوجيه التي تختار تلقائيًا أرخص مزود متاح
-🆓 4. "I want to use AI for coding but I have no money" +🔒 5. "أحتاج إلى حماية بوابة الذكاء الاصطناعي الخاصة بي من الوصول غير المصرح به" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +عند تعريض بوابة AI للشبكة (LAN، VPS، Docker)، يمكن لأي شخص لديه العنوان استهلاك الرموز المميزة/الحصة النسبية للمطور. بدون الحماية، تكون واجهات برمجة التطبيقات (API) عرضة لإساءة الاستخدام والحقن الفوري وإساءة الاستخدام. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **إدارة مفاتيح واجهة برمجة التطبيقات** — الإنشاء والتدوير وتحديد النطاق لكل مزود من خلال صفحة `/dashboard/api-manager` المخصصة +- **أذونات على مستوى النموذج** — تقييد مفاتيح واجهة برمجة التطبيقات (API) على نماذج محددة (`openai/*`، أنماط أحرف البدل)، مع تبديل السماح للكل/تقييد +- **API Endpoint Protection** — اطلب مفتاحًا لـ `/v1/models` وقم بحظر موفري خدمة محددين من القائمة +- **Auth Guard + CSRF Protection** — جميع مسارات لوحة المعلومات محمية بالبرمجيات الوسيطة `withAuth` + رموز CSRF +- **محدد المعدل** — تحديد معدل لكل IP مع نوافذ قابلة للتكوين +- **تصفية IP** — القائمة المسموح بها/القائمة المحظورة للتحكم في الوصول +- **حماية الحقن الفوري** — التعقيم ضد أنماط المطالبة الضارة +- **تشفير AES-256-GCM** — بيانات الاعتماد مشفرة في حالة عدم النشاط
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🛑 6. "تعطل مزود الخدمة الخاص بي وفقدت تدفق الترميز الخاص بي"يمكن أن يصبح موفرو الذكاء الاصطناعي غير مستقرين، أو يعرضون أخطاء 5xx، أو يصلون إلى حدود المعدلات المؤقتة. إذا كان أحد المطورين يعتمد على موفر واحد، فسيتم مقاطعته. بدون قواطع الدائرة، يمكن أن تؤدي عمليات إعادة المحاولة المتكررة إلى تعطل التطبيق. -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +**كيف يحل OmniRoute المشكلة:** -**How OmniRoute solves it:** - -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **قاطع الدائرة الكهربائية لكل مزود** — فتح/إغلاق تلقائي مع حدود قابلة للتكوين وفترة تهدئة (مغلق/مفتوح/نصف مفتوح) +- **التراجع الأسي** — تأخير إعادة المحاولة التدريجي +- **مكافحة الرعد القطيع** — Mutex + حماية الإشارة ضد عواصف إعادة المحاولة المتزامنة +- **السلاسل الاحتياطية المجمعة** — إذا فشل الموفر الأساسي، فسيتم دخوله تلقائيًا عبر السلسلة دون أي تدخل +- **Combo Circuit Breaker** — التعطيل التلقائي لمقدمي الخدمات الفاشلين ضمن سلسلة التحرير والسرد +- **لوحة معلومات الصحة** — مراقبة وقت التشغيل، وحالات قاطع الدائرة، وعمليات التأمين، وإحصائيات ذاكرة التخزين المؤقت، ووقت الاستجابة p50/p95/p99
-🛑 6. "My provider went down and I lost my coding flow" +🔧 7. "تكوين كل أداة من أدوات الذكاء الاصطناعي أمر ممل ومتكرر" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +يستخدم المطورون Cursor وClaude Code وCodex CLI وOpenClaw وGemini CLI وKilo Code... تحتاج كل أداة إلى تكوين مختلف (نقطة نهاية واجهة برمجة التطبيقات، المفتاح، النموذج). تعد إعادة التكوين عند تبديل مقدمي الخدمات أو النماذج مضيعة للوقت. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **لوحة تحكم أدوات CLI** — صفحة مخصصة مع إعداد بنقرة واحدة لـ Claude Code، وCodex CLI، وOpenClaw، وKilo Code، وAntigravity، وCline +- **GitHub Copilot Config Generator** — يُنشئ `chatLanguageModels.json` لرمز VS مع اختيار نموذج مجمع +- **معالج الإعداد** — إعداد إرشادي من 4 خطوات للمستخدمين لأول مرة +- **نقطة نهاية واحدة، جميع الطرز** — قم بتكوين `http://localhost:20128/v1` مرة واحدة، وقم بالوصول إلى أكثر من 36 موفرًا
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔑 8. "إدارة رموز OAuth المميزة من موفري خدمات متعددين أمر جحيم" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Claude Code، وCodex، وGemini CLI، وCopilot — جميعهم يستخدمون OAuth 2.0 مع الرموز المميزة التي تنتهي صلاحيتها. يحتاج المطورون إلى إعادة المصادقة باستمرار، والتعامل مع `client_secret is missing`، و`redirect_uri_mismatch`، والفشل في الخوادم البعيدة. يعد OAuth على LAN/VPS مشكلة بشكل خاص. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **التحديث التلقائي للرمز المميز** — يتم تحديث رموز OAuth المميزة في الخلفية قبل انتهاء الصلاحية +- **OAuth 2.0 (PKCE) مدمج** — التدفق التلقائي لـ Claude Code وCodex وGemini CLI وCopilot وKiro وQwen وiFlow +- **OAuth متعدد الحسابات** — حسابات متعددة لكل مزود عبر استخراج الرمز المميز JWT/ID +- **OAuth LAN/Remote Fix** — اكتشاف IP الخاص لـ `redirect_uri` + وضع URL اليدوي للخوادم البعيدة +- **OAuth Behind Nginx** — يستخدم `window.location.origin` للتوافق مع الوكيل العكسي +- **دليل OAuth عن بعد** — دليل خطوة بخطوة لبيانات اعتماد Google Cloud على VPS/Docker
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +📊 9. "لا أعرف كم أنفق أو أين" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +يستخدم المطورون العديد من مقدمي الخدمات المدفوعة ولكن ليس لديهم رؤية موحدة للإنفاق. يمتلك كل مزود خدمة لوحة تحكم الفوترة الخاصة به، ولكن لا يوجد عرض موحد. التكاليف غير المتوقعة يمكن أن تتراكم. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **لوحة معلومات تحليلات التكلفة** — تتبع التكلفة لكل رمز مميز وإدارة الميزانية لكل مزود +- **حدود الميزانية لكل طبقة** — سقف الإنفاق لكل طبقة يؤدي إلى حدوث تراجع تلقائي +- **تكوين التسعير لكل نموذج** — أسعار قابلة للتكوين لكل نموذج- **إحصاءات الاستخدام لكل مفتاح API** — عدد الطلبات والطابع الزمني الأخير المستخدم لكل مفتاح +- **لوحة التحكم التحليلية** — بطاقات الإحصائيات، ومخطط استخدام النموذج، وجدول الموفر مع معدلات النجاح وزمن الاستجابة
-📊 9. "I don't know how much I'm spending or where" +🐛 10. "لا يمكنني تشخيص الأخطاء والمشكلات في مكالمات الذكاء الاصطناعي" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +عندما تفشل المكالمة، لا يعرف المطور ما إذا كان هناك حد للسعر، أو رمز مميز منتهي الصلاحية، أو تنسيق خاطئ، أو خطأ في الموفر. سجلات مجزأة عبر محطات مختلفة. وبدون إمكانية الملاحظة، يكون تصحيح الأخطاء عبارة عن تجربة وخطأ. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **لوحة تحكم السجلات الموحدة** — 4 علامات تبويب: سجلات الطلبات، وسجلات الوكيل، وسجلات التدقيق، ووحدة التحكم +- **عارض سجل وحدة التحكم** — عارض بنمط المحطة الطرفية في الوقت الفعلي مع مستويات مرمزة بالألوان، والتمرير التلقائي، والبحث، والتصفية +- **سجلات وكيل SQLite** — السجلات المستمرة التي تستمر حتى بعد إعادة تشغيل الخادم +- **ساحة المترجم** — 4 أوضاع لتصحيح الأخطاء: ساحة اللعب (ترجمة التنسيق)، اختبار الدردشة (ذهابًا وإيابًا)، منصة الاختبار (دفعة)، المراقبة المباشرة (في الوقت الفعلي) +- **قياس الطلب عن بعد** — زمن الاستجابة p50/p95/p99 + تتبع معرف طلب X +- **التسجيل المستند إلى الملف مع التدوير** — يلتقط جهاز اعتراض وحدة التحكم كل شيء إلى سجل JSON من خلال التدوير المستند إلى الحجم
-🐛 10. "I can't diagnose errors and problems in AI calls" +🏗️ 11. "إن نشر البوابة وصيانتها أمر معقد" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +يعد تثبيت وكيل AI وتكوينه وصيانته عبر بيئات مختلفة (محلية، VPS، Docker، سحابية) عملية كثيفة العمالة. مشاكل مثل المسارات المضمنة، `EACCES` في الدلائل، وتعارضات المنافذ، والبنيات عبر الأنظمة الأساسية تزيد من الاحتكاك. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **تثبيت npm الشامل** — `npm install -g omniroute && omniroute` — تم +- **منصة Docker المتعددة** — AMD64 + ARM64 الأصلي (Apple Silicon، AWS Graviton، Raspberry Pi) +- **ملفات تعريف Docker Compose** — `base` (لا توجد أدوات CLI) و`cli` (مع Claude Code وCodex وOpenClaw) +- **Electron Desktop App** — تطبيق أصلي لنظام التشغيل Windows/macOS/Linux مع علبة النظام، والتشغيل التلقائي، ووضع عدم الاتصال +- **وضع المنفذ المقسم** — واجهة برمجة التطبيقات ولوحة المعلومات على منافذ منفصلة للسيناريوهات المتقدمة (الوكيل العكسي، وشبكات الحاويات) +- **Cloud Sync** — مزامنة التكوين عبر الأجهزة عبر Cloudflare Workers +- **النسخ الاحتياطية لقاعدة البيانات** — النسخ الاحتياطي التلقائي لجميع الإعدادات واستعادتها وتصديرها واستيرادها
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🌍 12. "الواجهة باللغة الإنجليزية فقط وفريقي لا يتحدث الإنجليزية" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +تواجه الفرق في البلدان غير الناطقة باللغة الإنجليزية، وخاصة في أمريكا اللاتينية وآسيا وأوروبا، صعوبة في التعامل مع الواجهات التي تستخدم اللغة الإنجليزية فقط. تعمل حواجز اللغة على تقليل الاعتماد وزيادة أخطاء التكوين. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **لوحة المعلومات i18n — 30 لغة** — أكثر من 500 مفتاح مترجم بما في ذلك العربية والبلغارية والدنماركية والألمانية والإسبانية والفنلندية والفرنسية والعبرية والهندية والمجرية والإندونيسية والإيطالية واليابانية والكورية والماليزية والهولندية والنرويجية والبولندية والبرتغالية (PT/BR) والرومانية والروسية والسلوفاكية والسويدية والتايلاندية والأوكرانية والفيتنامية والصينية والفلبينية والإنجليزية +- **دعم RTL** — دعم من اليمين إلى اليسار للغتين العربية والعبرية +- **الملفات التمهيدية متعددة اللغات** — 30 ترجمة كاملة للوثائق +- **محدد اللغة** — رمز الكرة الأرضية في رأس الصفحة للتبديل في الوقت الفعلي
+ +
+🔄 13. "أحتاج إلى أكثر من مجرد الدردشة - أحتاج إلى التضمين والصور والصوت" + +الذكاء الاصطناعي ليس مجرد استكمال للدردشة. يحتاج المطورون إلى إنشاء صور، ونسخ الصوت، وإنشاء تضمينات لـ RAG، وإعادة ترتيب المستندات، والإشراف على المحتوى. تحتوي كل واجهة برمجة تطبيقات على نقطة نهاية وتنسيق مختلفين. + +**كيف يحل OmniRoute المشكلة:** + +- **التضمينات** — `/v1/embeddings` مع 6 موفري خدمة وأكثر من 9 نماذج +- **إنشاء الصور** — `/v1/images/generations` مع 10 موفرين وأكثر من 20 نموذجًا (OpenAI، وxAI، وTogether، وFireworks، وNebius، وHyperbolic، وNanoBanana، وAntigravity، وSD WebUI، وComfyUI) +- **تحويل النص إلى فيديو** — `/v1/videos/generations` — ComfyUI (AnimateDiff، SVD) وSD WebUI +- **تحويل النص إلى موسيقى** — `/v1/music/generations` — ComfyUI (فتح الصوت الثابت، MusicGen) +- **النسخ الصوتي** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM، HuggingFace، Qwen3 +- **تحويل النص إلى كلام** — `/v1/audio/speech` — ElevenLabs، وNvidia NIM، وHuggingFace، وCoqui، وTortoise، وQwen3، بالإضافة إلى مقدمي الخدمات الحاليين +- **الإشراف** — `/v1/moderations` — التحقق من سلامة المحتوى +- **إعادة الترتيب** — `/v1/rerank` — إعادة ترتيب مدى ملاءمة المستند +- **Responses API** — دعم `/v1/responses` الكامل لـ Codex
-🌍 12. "The interface is English-only and my team doesn't speak English" +🧪 14. "ليس لدي طريقة لاختبار ومقارنة الجودة عبر النماذج" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +يرغب المطورون في معرفة النموذج الأفضل لحالة الاستخدام الخاصة بهم - التعليمات البرمجية، والترجمة، والتفكير - ولكن المقارنة يدويًا بطيئة. لا توجد أدوات تقييم متكاملة. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- ** تقييمات LLM ** — اختبار المجموعة الذهبية مع 10 حالات محملة مسبقًا تغطي التحيات، والرياضيات، والجغرافيا، وإنشاء التعليمات البرمجية، والامتثال لـ JSON، والترجمة، وتخفيض السعر، والرفض الآمن +- **4 إستراتيجيات مطابقة** — `exact`، `contains`، `regex`، `custom` (وظيفة JS) +- **منصة اختبار ساحة المترجم** — اختبار الدفعات بمدخلات متعددة ومخرجات متوقعة، ومقارنة بين الموفرين +- **أداة اختبار الدردشة** — رحلة ذهابًا وإيابًا كاملة مع عرض الاستجابة المرئية +- **المراقبة المباشرة** — البث المباشر لجميع الطلبات المتدفقة عبر الوكيل
-🔄 13. "I need more than chat — I need embeddings, images, audio" +📈 15. "أحتاج إلى التوسع دون فقدان الأداء" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +مع نمو حجم الطلب، يؤدي عدم التخزين المؤقت لنفس الأسئلة إلى توليد تكاليف مكررة. دون العجز، طلبات مكررة معالجة النفايات. يجب احترام حدود الأسعار لكل مزود. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **ذاكرة التخزين المؤقت الدلالية** — تعمل ذاكرة التخزين المؤقت ذات المستويين (التوقيع + الدلالي) على تقليل التكلفة ووقت الاستجابة +- **صلاحية الطلب** — نافذة إلغاء البيانات المكررة لمدة 5 ثوانٍ للطلبات المتماثلة +- **الكشف عن حدود المعدل** — عدد الدورات في الدقيقة لكل مزود، والفجوة الدنيا، والحد الأقصى للتتبع المتزامن +- **حدود المعدل القابلة للتحرير** — الإعدادات الافتراضية القابلة للتكوين في الإعدادات → المرونة مع الثبات +- **ذاكرة التخزين المؤقت للتحقق من صحة مفتاح واجهة برمجة التطبيقات** — ذاكرة تخزين مؤقت ثلاثية الطبقات لأداء الإنتاج +- **لوحة معلومات الصحة مع القياس عن بعد** — زمن الاستجابة p50/p95/p99، وإحصائيات ذاكرة التخزين المؤقت، ووقت التشغيل
-🧪 14. "I have no way to test and compare quality across models" +🤖 16. "أريد التحكم في سلوك النموذج عالميًا"المطورون الذين يريدون جميع الاستجابات بلغة معينة، بنبرة معينة، أو يريدون الحد من الرموز المميزة للاستدلال. يعد تكوين هذا في كل أداة/طلب أمرًا غير عملي. -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +**كيف يحل OmniRoute المشكلة:** -**How OmniRoute solves it:** - -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **الحقن الفوري للنظام** — يتم تطبيق المطالبة العامة على جميع الطلبات +- **التحقق من صحة ميزانية التفكير** — التحكم في تخصيص الرمز المميز لكل طلب (العبور، التلقائي، المخصص، التكيفي) +- **6 إستراتيجيات التوجيه** — إستراتيجيات عالمية تحدد كيفية توزيع الطلبات +- **Wildcard Router** — يتم توجيه أنماط `provider/*` ديناميكيًا إلى أي مزود +- **تبديل تمكين/تعطيل التحرير والسرد** — تبديل المجموعات مباشرة من لوحة المعلومات +- **تبديل الموفر** — تمكين/تعطيل جميع اتصالات الموفر بنقرة واحدة +- **المقدمون المحظورون** — استبعاد موفري الخدمة المحددين من قائمة `/v1/models`
-📈 15. "I need to scale without losing performance" +🧰 17. "أحتاج إلى أدوات MCP كقدرات منتج من الدرجة الأولى" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +تعرض العديد من بوابات الذكاء الاصطناعي MCP فقط كتفاصيل تنفيذ مخفية. تحتاج الفرق إلى طبقة تشغيل مرئية ويمكن التحكم فيها. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- يظهر MCP في لوحة التحكم وعلامة تبويب بروتوكول نقطة النهاية +- صفحة إدارة MCP مخصصة تحتوي على العمليات والأدوات والنطاقات والتدقيق +- بداية سريعة مدمجة لـ `omniroute --mcp` وتأهيل العميل
-🤖 16. "I want to control model behavior globally" +🧠 18. "أحتاج إلى تنسيق A2A مع مسارات مهمة المزامنة + الدفق" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +تحتاج مسارات عمل الوكيل إلى ردود مباشرة وتنفيذ متدفق طويل الأمد مع التحكم في دورة الحياة. -**How OmniRoute solves it:** +**كيف يحل OmniRoute المشكلة:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- نقطة نهاية A2A JSON-RPC (`POST /a2a`) مع `message/send` و`message/stream` +- تدفق SSE مع انتشار الحالة الطرفية +- واجهات برمجة تطبيقات دورة حياة المهام لـ `tasks/get` و`tasks/cancel`
+
+🛰️ 19. "أحتاج إلى صحة عملية MCP حقيقية، وليس حالة تخمينية" + +تحتاج الفرق التشغيلية إلى معرفة ما إذا كان MCP حيًا بالفعل، وليس فقط ما إذا كان يمكن الوصول إلى واجهة برمجة التطبيقات (API). + +**كيف يحل OmniRoute المشكلة:** + +- ملف نبضات وقت التشغيل مع PID والطوابع الزمنية والنقل وعدد الأدوات ووضع النطاق +- واجهة برمجة تطبيقات حالة MCP التي تجمع بين نبضات القلب + النشاط الأخير +- بطاقات حالة واجهة المستخدم للعملية/وقت التشغيل/نضارة نبضات القلب + +
+ +
+📋 20. "أحتاج إلى تنفيذ أداة MCP قابلة للتدقيق" + +عندما تقوم الأدوات بتغيير التكوين أو تشغيل إجراءات العمليات، تحتاج الفرق إلى إمكانية التتبع الجنائي. + +**كيف يحل OmniRoute المشكلة:** + +- تسجيل التدقيق المدعوم من SQLite لاستدعاءات أداة MCP +- عوامل التصفية حسب الأداة، والنجاح/الفشل، ومفتاح API، وترقيم الصفحات +- جدول تدقيق لوحة المعلومات + إحصائيات نقاط النهاية للأتمتة + +
+ +
+🔐 21. "أحتاج إلى أذونات MCP محددة النطاق لكل عملية تكامل" + +يجب أن يتمتع العملاء المختلفون بإمكانية وصول أقل امتيازًا إلى فئات الأدوات. + +**كيف يحل OmniRoute المشكلة:** + +- 9 نطاقات MCP محببة للتحكم في الوصول إلى الأدوات +- إنفاذ النطاق والرؤية في واجهة مستخدم إدارة MCP +- الوضع الافتراضي الآمن للأدوات التشغيلية + +
+ +
⚙️ 22. "أحتاج إلى عناصر تحكم تشغيلية دون إعادة النشر" + +تحتاج الفرق إلى تغييرات سريعة في وقت التشغيل أثناء الحوادث أو أحداث التكلفة. + +**كيف يحل OmniRoute المشكلة:** + +- قم بتبديل تنشيط التحرير والسرد مباشرةً من لوحة معلومات MCP +- تطبيق ملفات تعريف المرونة من حزم السياسات المحددة مسبقًا +- إعادة ضبط حالة قاطع الدائرة من نفس لوحة العمليات + +
+ +
+🔄 23. "أحتاج إلى رؤية وإلغاء دورة حياة مهمة A2A المباشرة" + +وبدون رؤية دورة الحياة، يصبح من الصعب فرز حوادث المهام. + +**كيف يحل OmniRoute المشكلة:** + +- قائمة المهام/التصفية حسب الحالة/المهارة مع ترقيم الصفحات +- التعمق في البيانات الوصفية للمهمة، والأحداث، والتحف +- نقطة نهاية إلغاء المهمة وإجراء واجهة المستخدم مع التأكيد + +
+ +
+🌊 24. "أحتاج إلى مقاييس تيار نشطة لتحميل A2A" + +يتطلب تدفق سير العمل رؤية تشغيلية للتزامن والاتصالات المباشرة. + +**كيف يحل OmniRoute المشكلة:** + +- عدادات التدفق النشطة مدمجة في حالة A2A +- الطابع الزمني للمهمة الأخيرة وعدد كل ولاية +- بطاقات لوحة القيادة A2A لمراقبة العمليات في الوقت الفعلي + +
+ +
+🪪 25. "أحتاج إلى اكتشاف الوكيل القياسي للعملاء" + +يحتاج العملاء والمنسقون الخارجيون إلى بيانات تعريف يمكن قراءتها آليًا من أجل الإعداد. + +**كيف يحل OmniRoute المشكلة:** + +- بطاقة الوكيل معروضة في `/.well-known/agent.json` +- القدرات والمهارات الموضحة في واجهة المستخدم الإدارية +- تتضمن واجهة برمجة التطبيقات لحالة A2A بيانات تعريف الاكتشاف للأتمتة + +
+ +
+🧭 26. "أحتاج إلى إمكانية اكتشاف البروتوكول في تجربة المستخدم للمنتج" + +إذا لم يتمكن المستخدمون من اكتشاف أسطح البروتوكول، فسوف ينخفض جودة الاعتماد والدعم. + +**كيف يحل OmniRoute المشكلة:** + +- إدخالات الشريط الجانبي لـ MCP وA2A +- علامة تبويب بروتوكولات صفحة نقطة النهاية مع البدء السريع والحالة +- روابط من النظرة العامة إلى لوحات معلومات الإدارة المخصصة + +
+ +
+🧪 27. "أحتاج إلى التحقق من صحة البروتوكول الشامل مع عملاء حقيقيين" + +الاختبارات الوهمية ليست كافية للتحقق من توافق البروتوكول قبل الإصدار. + +**كيف يحل OmniRoute المشكلة:** + +- مجموعة E2E التي تعمل على تشغيل التطبيق وتستخدم نقل عميل MCP SDK الحقيقي +- اختبارات عميل A2A لاكتشاف التدفقات وإرسالها ودفقها والحصول عليها وإلغائها +- التحقق من التأكيدات ضد تدقيق MCP وواجهات برمجة تطبيقات مهام A2A + +
+ +
+📡 28. "أحتاج إلى إمكانية ملاحظة موحدة عبر جميع الواجهات" + +يؤدي تقسيم إمكانية المراقبة حسب البروتوكول إلى إنشاء نقاط عمياء وMTTR أطول. + +**كيف يحل OmniRoute المشكلة:** + +- لوحات معلومات/سجلات/تحليلات موحدة في منتج واحد +- الصحة + التدقيق + طلب القياس عن بعد عبر طبقات OpenAI وMCP وA2A +- واجهات برمجة التطبيقات التشغيلية للحالة والأتمتة + +
+ +
+💼 29. "أحتاج إلى وقت تشغيل واحد للوكيل + الأدوات + تنسيق الوكيل" + +يؤدي تشغيل العديد من الخدمات المنفصلة إلى زيادة تكلفة التشغيل وأوضاع الفشل. + +**كيف يحل OmniRoute المشكلة:**- وكيل متوافق مع OpenAI وخادم MCP وخادم A2A في مكدس واحد + +- المصادقة المشتركة والمرونة وتخزين البيانات وإمكانية الملاحظة +- نموذج سياسة متسق عبر جميع أسطح التفاعل + +
+ +
+🚀 30. "أحتاج إلى شحن عمليات سير عمل الوكيل دون امتداد كود الغراء" + +تفقد الفرق سرعتها عند دمج العديد من الخدمات والبرامج النصية المخصصة. + +**كيف يحل OmniRoute المشكلة:** + +- استراتيجية نقطة النهاية الموحدة للعملاء والوكلاء +- واجهات مستخدم لإدارة البروتوكول مدمجة ومسارات التحقق من صحة الدخان +- أسس جاهزة للإنتاج (الأمان، التسجيل، المرونة، النسخ الاحتياطي) + +
+ +### أمثلة لقواعد اللعبة (حالات الاستخدام المتكاملة) + +** قواعد اللعبة أ: زيادة الاشتراك المدفوع إلى الحد الأقصى + نسخة احتياطية رخيصة ** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**دليل التشغيل ب: مكدس البرمجة بدون تكلفة** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: سلسلة احتياطية تعمل دائمًا على مدار 24 ساعة طوال أيام الأسبوع** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**قواعد اللعبة د: عمليات العميل مع MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ بداية سريعة -**1. التثبيت عالميًا:** +### 1) التثبيت والتشغيل ```bash npm install -g omniroute omniroute ``` -🎉 تفتح لوحة التحكم في `http://localhost:20128` +يتم فتح لوحة المعلومات على `http://localhost:20128` ويكون عنوان URL الأساسي لواجهة برمجة التطبيقات هو `http://localhost:20128/v1`. -| الأمر | الوصف | -| ----------------------- | ----------------------------------------- | -| `omniroute` | بدء تشغيل الخادم (المنفذ الافتراضي 20128) | -| `omniroute --port 3000` | استخدم المنفذ المخصص | -| `omniroute --no-open` | لا تفتح المتصفح تلقائيًا | -| `omniroute --help` | عرض المساعدة | +| الأمر | الوصف | +| ----------------------- | ------------------------------------------------------------------------------------- | +| `omniroute` | بدء تشغيل الخادم (`PORT=20128` وواجهة برمجة التطبيقات ولوحة المعلومات على نفس المنفذ) | +| `omniroute --port 3000` | اضبط منفذ Canonical/API على 3000 | +| `omniroute --mcp` | بدء تشغيل خادم MCP (نقل stdio) | +| `omniroute --no-open` | لا تفتح المتصفح تلقائيًا | +| `omniroute --help` | عرض المساعدة | -**2. الاتصال بمزود مجاني: ** +وضع المنفذ المقسم الاختياري: -لوحة التحكم → الموفرون → الاتصال **Claude Code** أو **Antigravity** → تسجيل الدخول OAuth → تم! - -**3. استخدم في أداة CLI الخاصة بك:** - -``` -Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings: - Endpoint: http://localhost:20128/v1 - API Key: [copy from dashboard] - Model: if/kimi-k2-thinking +```bash +PORT=20128 DASHBOARD_PORT=20129 omniroute +# API: http://localhost:20128/v1 +# Dashboard: http://localhost:20129 ``` -**هذا كل شيء!** ابدأ البرمجة باستخدام نماذج الذكاء الاصطناعي المجانية. +### 2) قم بتوصيل مقدمي الخدمة وإنشاء مفتاح واجهة برمجة التطبيقات (API) الخاص بك -** البديل - تشغيل من المصدر: ** +1. افتح لوحة المعلومات → `Providers` وقم بتوصيل موفر واحد على الأقل (مفتاح OAuth أو API). +2. افتح لوحة المعلومات → `Endpoint` وقم بإنشاء مفتاح API. +3. (اختياري) افتح Dashboard → `Combos` وقم بتعيين السلسلة الاحتياطية. + +### 3) قم بتوجيه أداة الترميز الخاصة بك إلى OmniRoute + +```txt +Base URL: http://localhost:20128/v1 +API Key: [copy from Endpoint page] +Model: if/kimi-k2-thinking (or any provider/model prefix) +``` + +يعمل مع Claude Code، وCodex CLI، وGemini CLI، وCursor، وCline، وOpenClaw، وOpenCode، وحزم SDK المتوافقة مع OpenAI. + +### 4) تمكين البروتوكولات والتحقق من صحتها (الإصدار 2.0) + +**MCP (للعمليات التي تعتمد على الأدوات):** + +```bash +omniroute --mcp +``` + +ثم قم بتوصيل عميل MCP الخاص بك عبر `stdio` وأدوات الاختبار مثل: + +-`omniroute_get_health` -`omniroute_list_combos` + +**A2A (لسير العمل من وكيل إلى وكيل):** + +```bash +curl http://localhost:20128/.well-known/agent.json +``` + +```bash +curl -X POST http://localhost:20128/a2a \ + -H 'content-type: application/json' \ + -d '{"jsonrpc":"2.0","id":"quickstart","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Give me a short quota summary."}]}}' +``` + +### 5) التحقق من صحة كل شيء من البداية إلى النهاية (مستحسن) + +```bash +npm run test:protocols:e2e +``` + +يتحقق هذا الجناح من تدفقات عميل MCP وA2A الحقيقية مقابل تطبيق قيد التشغيل. + +### البديل: التشغيل من المصدر ```bash cp .env.example .env npm install -PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev +PORT=20128 DASHBOARD_PORT=20129 NEXT_PUBLIC_BASE_URL=http://localhost:20129 npm run dev ``` --- @@ -504,26 +807,38 @@ docker compose --profile cli up -d --- ---- +## 🖥️ -## 🖥️ تطبيق سطح المكتب — غير متصل ومتاح دائمًا +قم بتشغيل OmniRoute كتطبيق مستقل لسطح المكتب - لا توجد محطة طرفية أو متصفح أو إنترنت مطلوب للطرز المحلية. يتضمن التطبيق المعتمد على Electron ما يلي: -> 🆕 **جديد!** أصبح OmniRoute متاحًا الآن كـ **تطبيق سطح مكتب أصلي** لنظام Windows وmacOS وLinux. +- 🖥️ **النافذة الأصلية** — نافذة تطبيق مخصصة مع تكامل علبة النظام +- 🔄 **البدء التلقائي** — قم بتشغيل OmniRoute عند تسجيل الدخول إلى النظام +- 🔔 **الإشعارات الأصلية** — احصل على تنبيهات بشأن استنفاد الحصص أو مشكلات المزود +- ⚡ **التثبيت بنقرة واحدة** — NSIS (Windows)، DMG (macOS)، AppImage (Linux) +- 🌐 **وضع عدم الاتصال بالإنترنت** — يعمل بشكل كامل دون اتصال بالإنترنت مع الخادم المُجمَّع -- 🖥️ **نافذة أصلية** — نافذة مخصصة مع تكامل شريط النظام -- 🔄 **بدء تلقائي** — تشغيل OmniRoute عند تسجيل الدخول -- 🔔 **إشعارات أصلية** — تنبيهات عند نفاد الحصة -- ⚡ **تثبيت بنقرة واحدة** — NSIS (Windows)، DMG (macOS)، AppImage (Linux) -- 🌐 **وضع غير متصل** — يعمل بالكامل بدون إنترنت +### بداية سريعة ```bash -npm run electron:dev # وضع التطوير +# Development mode +npm run electron:dev + +# Build for your platform +npm run electron:build # Current platform npm run electron:build:win # Windows (.exe) -npm run electron:build:mac # macOS (.dmg) +npm run electron:build:mac # macOS (.dmg) — x64 & arm64 npm run electron:build:linux # Linux (.AppImage) ``` -📖 التوثيق الكامل: [`electron/README.md`](electron/README.md) +### علبة النظام + +عند تصغيره، يظل OmniRoute موجودًا في علبة النظام لديك من خلال الإجراءات السريعة: + +- فتح لوحة القيادة +- تغيير منفذ الخادم +- قم بإنهاء التطبيق + +📖 التوثيق الكامل : [`electron/README.md`](electron/README.md) --- @@ -548,239 +863,223 @@ npm run electron:build:linux # Linux (.AppImage) | | كوين | $0 | غير محدود | 3 نماذج مجانية | | | كيرو | $0 | غير محدود | كلود مجاني | -**💡 نصيحة احترافية:** ابدأ مع مجموعة Gemini CLI (180 ألفًا مجانًا شهريًا) + مجموعة iFlow (مجانية غير محدودة) = تكلفة 0 دولار! +**💡 نصيحة احترافية:** ابدأ مع Gemini CLI (180 ألفًا مجانًا شهريًا) + مجموعة iFlow (مجانية غير محدودة) = تكلفة 0 دولار! --- ## 💡 الميزات الرئيسية -### 🧠 التوجيه الأساسي والذكاء +تم تصميم OmniRoute v2.0 كمنصة تشغيلية، وليس مجرد وكيل ترحيل. -| ميزة | ماذا يفعل | -| --------------------------------- | ---------------------------------------------------------------------------------------------- | -| 🎯 **احتياطي ذكي من 4 طبقات** | المسار التلقائي: الاشتراك → مفتاح API → رخيص → مجاني | -| 📊 **تتبع الحصص في الوقت الفعلي** | عدد الرموز الحية + إعادة تعيين العد التنازلي لكل مزود | -| 🔄 **تنسيق الترجمة** | OpenAI ↔ كلود ↔ الجوزاء ↔ المؤشر ↔ كيرو سلس + تعقيم الاستجابة | -| 👥 **دعم الحسابات المتعددة** | حسابات متعددة لكل مزود مع اختيار ذكي | -| 🔄 **تحديث تلقائي للرمز** | يتم تحديث رموز OAuth المميزة تلقائيًا من خلال إعادة المحاولة | -| 🎨 **مجموعات مخصصة** | 6 إستراتيجيات: التعبئة أولاً، الجولة روبن، P2C، عشوائي، الأقل استخدامًا، الأمثل من حيث التكلفة | -| 🧩 **نماذج مخصصة** | أضف أي معرف نموذج إلى أي مزود | -| 🌐 **جهاز توجيه Wildcard** | قم بتوجيه أنماط `provider/*` إلى أي مزود ديناميكيًا | -| 🧠 **ميزانية التفكير** | أوضاع العبور والتلقائي والمخصص والتكيفي لنماذج الاستدلال | -| 🔀 **Model Aliases** | Auto-forward deprecated model IDs to current replacements (built-in + custom) | -| ⚡ **Background Degradation** | Auto-route background tasks (titles, summaries) to cheaper models | -| 💬 **الحقن الفوري للنظام** | يتم تطبيق موجه النظام العالمي على كافة الطلبات | -| 📄 **Responses API** | دعم واجهة برمجة تطبيقات استجابات OpenAI الكاملة (`/v1/responses`) لـ Codex | +### 🤖 عمليات الوكيل والبروتوكول (الإصدار 2.0)| ميزة | ماذا يفعل | + +| ------------------------------------ | -------------------------------------------------------------------------------- | +| 🔧 **خادم MCP (16 أداة)** | تتحكم أدوات IDE/agent في التوجيه والصحة والمجموعات والحدود والعمليات | +| 🤝 **خادم A2A (JSON-RPC + SSE)** | تنفيذ المهام من وكيل إلى وكيل مع تدفقات المزامنة والتدفق | +| 🧭 **لوحات المعلومات MCP/A2A** | صفحات إدارة مخصصة (`/dashboard/mcp`, `/dashboard/a2a`) | +| 🛰️ **نبضات وقت تشغيل MCP** | حالة العملية الحقيقية (معرف المنتج، وقت التشغيل، عمر نبضات القلب، النقل، وضع النطاق) | +| 📋 **مسار تدقيق MCP** | سجلات التدقيق القابلة للتصفية مع النجاح/الفشل والإسناد الرئيسي | +| 🔐 **تنفيذ نطاق MCP** | 9 أذونات نطاق تفصيلية للوصول إلى الأدوات الخاضعة للرقابة | +| 📡 **إدارة دورة حياة المهام A2A** | قائمة/تصفية المهام، فحص الأحداث/التحف، إلغاء المهام قيد التشغيل | +| 📋 **اكتشاف بطاقة الوكيل** | `/.well-known/agent.json` للاكتشاف التلقائي للعميل | +| 🧪 **أداة اختبار البروتوكول E2E** | يتدفق عميل MCP SDK + A2A الحقيقي في `test:protocols:e2e` | +| ⚙️ **ضوابط التشغيل** | مجموعة التبديل، وتطبيق ملفات تعريف المرونة، وإعادة ضبط القواطع من سطح تحكم واحد | + +### 🧠 التوجيه والاستخبارات + +| ميزة | ماذا يفعل | +| ----------------------------------------- | ------------------------------------------------------------ | +| 🎯 **احتياطي ذكي من 4 طبقات** | المسار التلقائي: الاشتراك → مفتاح API → رخيص → مجاني | +| 📊 **تتبع الحصص في الوقت الفعلي** | عدد الرموز الحية + إعادة تعيين العد التنازلي لكل مزود | +| 🔄 **تنسيق الترجمة** | OpenAI ↔ Claude ↔ Gemini ↔ الردود مع التحويلات الآمنة للمخطط | +| 👥 **دعم الحسابات المتعددة** | حسابات متعددة لكل مزود مع اختيار ذكي | +| 🔄 **تحديث تلقائي للرمز** | يتم تحديث رموز OAuth المميزة تلقائيًا من خلال إعادة المحاولة | +| 🎨 **مجموعات مخصصة** | 6 استراتيجيات موازنة + التحكم في السلسلة الاحتياطية | +| 🌐 **جهاز توجيه Wildcard** | التوجيه الديناميكي `provider/*` | +| 🧠 **التفكير في ضوابط الميزانية** | حدود التفكير المنطقي والتلقائي والمخصص والتكيفي | +| 🔀 **الأسماء المستعارة للنماذج** | مدمج + اسم مستعار للنموذج المخصص وأمان الترحيل | +| ⚡ **تدهور الخلفية** | قم بتوجيه مهام الخلفية ذات الأولوية المنخفضة إلى نماذج أرخص | +| 💬 **الحقن الفوري للنظام** | يتم تطبيق ضوابط السلوك العالمية بشكل متسق | +| 📄 **توافق واجهة برمجة التطبيقات للردود** | دعم `/v1/responses` الكامل لـ Codex وسير عمل الوكلاء المتقدم | ### 🎵 واجهات برمجة التطبيقات متعددة الوسائط -| ميزة | ماذا يفعل | -| -------------------------- | --------------------------------------------------------- | -| 🖼️ **إنشاء الصور** | `/v1/images/generations` — 4 مقدمي خدمات، أكثر من 9 نماذج | -| 📐 **المضامين** | `/v1/embeddings` — 6 مقدمي خدمات، أكثر من 9 نماذج | -| 🎤 **نسخ صوتي** | `/v1/audio/transcriptions` — متوافق مع الهمس | -| 🔊 **تحويل النص إلى كلام** | `/v1/audio/speech` — تركيب صوتي متعدد الموفرين | -| 🛡️ **اعتدالات** | `/v1/moderations` — فحوصات سلامة المحتوى | -| 🔀 **إعادة الترتيب** | `/v1/rerank` — إعادة ترتيب مدى صلة الوثيقة | +| ميزة | ماذا يفعل || -------------------------- | ------------------------------------------------------------- | +| 🖼️ **إنشاء الصور** | `/v1/images/generations` مع الواجهات الخلفية السحابية والمحلية | +| 📐 **المضامين** | `/v1/embeddings` للبحث وخطوط أنابيب RAG | +| 🎤 **نسخ صوتي** | `/v1/audio/transcriptions` (مقدمو خدمات الهمس والإضافيون) | +| 🔊 **تحويل النص إلى كلام** | `/v1/audio/speech` (محركات/موفرو متعددون) | +| 🎬 **توليد الفيديو** | `/v1/videos/generations` (سير عمل ComfyUI + SD WebUI) | +| 🎵 **جيل الموسيقى** | `/v1/music/generations` (سير عمل ComfyUI) | +| 🛡️ **اعتدالات** | فحوصات السلامة `/v1/moderations` | +| 🔀 **إعادة الترتيب** | `/v1/rerank` لقياس مدى الملاءمة | -### 🛡️ المرونة والأمان +### 🛡️ المرونة والأمن والحوكمة -| ميزة | ماذا يفعل | -| --------------------------------------------- | ------------------------------------------------------------------------------------------- | -| 🔌 **قاطع الدائرة** | فتح/إغلاق تلقائي لكل مزود مع حدود قابلة للتكوين | -| 🛡️ **القطيع المضاد للرعد** | الحد الأقصى لمعدل Mutex + الإشارة لموفري مفاتيح API | -| 🧠 **ذاكرة التخزين المؤقت الدلالية** | ذاكرة التخزين المؤقت ذات المستويين (التوقيع + الدلالي) تقلل التكلفة وزمن الوصول | -| ⚡ **طلب العجز** | نافذة 5s dedup للطلبات المكررة | -| 🔒 **انتحال بصمة الإصبع TLS** | تجاوز اكتشاف الروبوتات المستندة إلى TLS عبر wreq-js | -| 🌐 **تصفية IP** | القائمة المسموح بها/القائمة المحظورة للتحكم في الوصول إلى واجهة برمجة التطبيقات | -| 📊 **حدود المعدل القابلة للتحرير** | عدد الدورات في الدقيقة القابل للتكوين والفجوة الدنيا والحد الأقصى المتزامن على مستوى النظام | -| 💾 **Rate Limit Persistence** | Learned limits survive restarts via SQLite with 60s debounce + 24h staleness | -| 🔄 **Token Refresh Resilience** | Per-provider circuit breaker (5 fails→30min) + 30s timeout per attempt | -| 🛡 **حماية نقطة نهاية واجهة برمجة التطبيقات** | بوابة المصادقة + حظر الموفر لنقطة النهاية `/models` | -| 🔒 **رؤية الوكيل** | شارات مرمزة بالألوان: 🟢 عالمية، 🟡 مزود، 🔵 لكل اتصال مع عرض IP | -| 🌐 ** تكوين الوكيل ذو 3 مستويات ** | قم بتكوين الوكلاء على المستوى العالمي أو لكل مزود أو لكل اتصال | +| ميزة | ماذا يفعل | +| -------------------------------------------------------- | --------------------------------------------------------------------- | +| 🔌 **قواطع الدائرة** | رحلة/استرداد على مستوى الموفر مع عناصر التحكم في العتبة | +| 🛡️ **القطيع المضاد للرعد** | حماية Mutex + الإشارة في أحداث إعادة المحاولة/التقييم | +| 🧠 ** ذاكرة التخزين المؤقت الدلالية + التوقيع ** | تقليل التكلفة/زمن الوصول باستخدام طبقتين من ذاكرة التخزين المؤقت | +| ⚡ **طلب العجز** | نافذة الحماية المكررة | +| 🔒 **انتحال بصمة الإصبع TLS** | توافق أفضل مع مقدمي خدمات مكافحة الروبوتات الذين تمت تصفيتهم | +| 🌐 **تصفية IP** | التحكم في القائمة المسموح بها/القائمة المحظورة لعمليات النشر المكشوفة | +| 📊 **حدود المعدل القابلة للتحرير** | حدود عالمية/مستوى مزود قابلة للتكوين مع الثبات | +| 🔑 **إدارة مفاتيح واجهة برمجة التطبيقات + تحديد النطاق** | تأمين إصدار/تدوير المفتاح وضوابط النموذج/المزود | +| 🛡️ **محمية `/models`** | بوابة مصادقة اختيارية وإخفاء الموفر لكتالوج النماذج | ### 📊 إمكانية الملاحظة والتحليلات -| ميزة | ماذا يفعل | -| ------------------------------------ | -------------------------------------------------------------------------------------------- | -| 📝 **تسجيل الطلبات** | وضع التصحيح مع سجلات الطلب/الاستجابة الكاملة | -| 💾 **سجلات وكيل SQLite** | تستمر سجلات الوكيل المستمرة في إعادة تشغيل الخادم | -| 📊 **لوحة التحكم التحليلية** | مدعوم من إعادة التخطيط: بطاقات إحصائيات، مخطط استخدام النموذج، جدول الموفر | -| 📈 **تتبع التقدم** | الاشتراك في أحداث تقدم SSE للبث | -| 🧪 **تقييمات ماجستير إدارة الأعمال** | اختبار المجموعة الذهبية مع 4 إستراتيجيات المباراة | -| 🔍 **طلب القياس عن بعد** | تجميع زمن الوصول p50/p95/p99 + تتبع معرف طلب X | -| 📋 **لوحة تحكم السجلات** | صفحة موحدة مكونة من 4 علامات تبويب: سجلات الطلب، وسجلات الوكيل، وسجلات التدقيق، ووحدة التحكم | -| 🖥️ **عارض سجل وحدة التحكم** | عارض على النمط الطرفي في الوقت الفعلي مع مرشح المستوى والبحث والتمرير التلقائي | -| 📑 ** التسجيل المعتمد على الملفات ** | يلتقط جهاز اعتراض وحدة التحكم جميع المخرجات إلى ملف سجل JSON بالتدوير | -| 🏥 **لوحة المعلومات الصحية** | وقت تشغيل النظام، حالات قاطع الدائرة، عمليات الإغلاق، إحصائيات ذاكرة التخزين المؤقت | -| 💰 **تتبع التكلفة** | إدارة الميزانية + تكوين التسعير لكل نموذج | +| ميزة | ماذا يفعل | +| -------------------------------- | ------------------------------------------------------------------------- | +| 📝 **الطلب + تسجيل الوكيل** | الطلب/الاستجابة الكاملة وتسجيل الوكيل | +| 📋 **لوحة تحكم السجلات الموحدة** | طلب العروض والوكيل والتدقيق ووحدة التحكم في صفحة واحدة | +| 🔍 **طلب القياس عن بعد** | زمن الاستجابة p50/p95/p99 وطلب التتبع | +| 🏥 **لوحة المعلومات الصحية** | وقت التشغيل، حالات الكسارة، عمليات الإغلاق، إحصائيات ذاكرة التخزين المؤقت | +| 💰 **تتبع التكلفة** | ضوابط الميزانية ورؤية التسعير لكل نموذج | +| 📈 **تصورات التحليلات** | رؤى استخدام النموذج/الموفر وطرق عرض الاتجاه | +| 🧪 **إطار التقييم** | اختبار المجموعة الذهبية مع استراتيجيات المطابقة القابلة للتكوين | -### ☁️ النشر والمزامنة +### ☁️ النشر والمنصة -| ميزة | ماذا يفعل | -| ----------------------------------------- | ----------------------------------------------------------------------------- | -| 💾 **المزامنة السحابية** | مزامنة التكوين عبر الأجهزة عبر Cloudflare Workers | -| 🌐 **النشر في أي مكان** | المضيف المحلي، VPS، Docker، عمال Cloudflare | -| 🔑 **إدارة مفاتيح واجهة برمجة التطبيقات** | إنشاء مفاتيح واجهة برمجة التطبيقات وتدويرها ونطاقها لكل مزود | -| 🧙 **معالج الإعداد** | إعداد إرشادي من 4 خطوات للمستخدمين لأول مرة | -| 🔧 **لوحة تحكم أدوات CLI** | بنقرة واحدة قم بتكوين Claude، Codex، Cline، OpenClaw، Kilo، Antigravity | -| 🔄 **النسخ الاحتياطية لقاعدة البيانات** | النسخ الاحتياطي التلقائي والاستعادة والتصدير والاستيراد لجميع الإعدادات | -| 🌐 **التدويل** | i18n الكامل مع دعم next-intl — الإنجليزية + البرتغالية (البرازيل) | -| 🌍 **محدد اللغة** | أيقونة الكرة الأرضية في رأس الصفحة للتبديل بين اللغات في الوقت الفعلي (🇺🇸/🇧🇷) | -| 📂 **دليل البيانات المخصصة** | `DATA_DIR` env var لتجاوز مسار التخزين الافتراضي `~/.omniroute` | +| ميزة | ماذا يفعل | +| -------------------------------- | ------------------------------------------------ | --- | ------------------------ | ------------------------------- | +| 🌐 **النشر في أي مكان** | المضيف المحلي، VPS، Docker، البيئات السحابية | | 💾 **المزامنة السحابية** | مزامنة التكوين عبر عامل السحابة | +| 🔄 **النسخ الاحتياطي/الاستعادة** | تدفقات التصدير/الاستيراد والتعافي من الكوارث | +| 🧙 **معالج الإعداد** | الإعداد الموجه لأول مرة | +| 🔧 **لوحة تحكم أدوات CLI** | إعداد بنقرة واحدة لأدوات الترميز الشائعة | +| 🌐 **i18n (30 لغة)** | لوحة تحكم كاملة + دعم لغة المستندات مع تغطية RTL | +| 📂 **دليل البيانات المخصصة** | تجاوز `DATA_DIR` لموقع التخزين | -
-📖 تفاصيل الميزة +### ميزة الغوص العميق -### 🎯 نظام احتياطي ذكي مكون من 4 طبقات +#### إجراء احتياطي ذكي مع التحكم العملي في التكلفة -إنشاء مجموعات باستخدام خيار الرجوع التلقائي: - -``` +```txt Combo: "my-coding-stack" - 1. cc/claude-opus-4-6 (your subscription) - 2. nvidia/llama-3.3-70b (free NVIDIA API) - 3. glm/glm-4.7 (cheap backup, $0.6/1M) - 4. if/kimi-k2-thinking (free fallback) - -→ Auto switches when quota runs out or errors occur + 1. cc/claude-opus-4-6 + 2. nvidia/llama-3.3-70b + 3. glm/glm-4.7 + 4. if/kimi-k2-thinking ``` -### 📊 تتبع الحصص في الوقت الحقيقي +عند فشل الحصة أو المعدل أو الصحة، ينتقل OmniRoute تلقائيًا إلى المرشح التالي دون التبديل اليدوي. -- استهلاك الرمز المميز لكل مزود -- إعادة ضبط العد التنازلي (5 ساعات، يوميًا، أسبوعيًا) -- تقدير التكلفة للمستويات المدفوعة -- تقارير الإنفاق الشهرية +#### إدارة البروتوكول مرئية وقابلة للتشغيل -### 🔄 ترجمة التنسيق +- يمكن اكتشاف MCP + A2A في واجهة المستخدم والمستندات (غير مخفية) +- تعرض واجهات برمجة التطبيقات لحالة البروتوكول بيانات التشغيل المباشرة (`/api/mcp/*`، `/api/a2a/*`) +- تتضمن لوحات المعلومات إجراءات لعمليات اليوم الثاني (تبديل التحرير والسرد، وإعادة ضبط الكسارة، وإلغاء المهام) -ترجمة سلسة بين الصيغ: +#### سير عمل المترجم + التحقق من الصحة -- **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **استجابات OpenAI** -- ترسل أداة CLI الخاصة بك تنسيق OpenAI ← يترجم OmniRoute ← يتلقى الموفر التنسيق الأصلي -- يعمل مع أي أداة تدعم نقاط نهاية OpenAI المخصصة -- **تطهير الاستجابة** - يزيل الحقول غير القياسية من أجل توافق صارم مع OpenAI SDK -- **تطبيع الدور** — `developer` → `system` لغير OpenAI؛ `system` → `user` لطرز GLM/ERNIE -- **استخراج علامة التفكير** — كتل `` → `reasoning_content` لنماذج التفكير -- **الإخراج المنظم** — `json_schema` → الجوزاء `responseMimeType`/`responseSchema` +منطقة المترجم تشمل: -### 👥 دعم الحسابات المتعددة +- **الملعب**: طلب عمليات التحقق من التحويل +- **أداة اختبار الدردشة**: الطلب/الإجابة الكاملة ذهابًا وإيابًا +- **منصة الاختبار**: حالات متعددة في جولة واحدة +- **المراقبة المباشرة**: عرض حركة المرور في الوقت الحقيقي -- إضافة حسابات متعددة لكل مزود -- التوجيه التلقائي أو التوجيه على أساس الأولوية -- الرجوع إلى الحساب التالي عندما يصل أحد إلى الحصة +بالإضافة إلى التحقق من صحة البروتوكول مع عملاء حقيقيين عبر `npm run test:protocols:e2e`. -### 🔄 التحديث التلقائي للرموز +> 📖 **[قراءة خادم MCP](open-sse/mcp-server/README.md)** — مرجع الأداة، وتكوينات IDE، وأمثلة العميل +> +> 📖 **[ملف قراءة خادم A2A](src/lib/a2a/README.md)** — المهارات، وأساليب JSON-RPC، والبث، ودورة حياة المهمة -- يتم تحديث رموز OAuth المميزة تلقائيًا قبل انتهاء الصلاحية -- لا حاجة لإعادة المصادقة اليدوية -- تجربة سلسة عبر جميع مقدمي الخدمة +## 🧪 التقييمات (التقييمات) -### 🎨 مجموعات مخصصة +يشتمل OmniRoute على إطار تقييم مدمج لاختبار جودة استجابة LLM مقابل المجموعة الذهبية. يمكنك الوصول إليه عبر **Analytics → Evals** في لوحة التحكم. -- إنشاء مجموعات نماذج غير محدودة -- 6 إستراتيجيات: التعبئة أولاً، جولة روبن، قوة الاختيارين، العشوائية، الأقل استخدامًا، الأمثل من حيث التكلفة -- مشاركة المجموعات عبر الأجهزة باستخدام Cloud Sync +### الطقم الذهبي المدمج -### 🏥 لوحة المعلومات الصحية +تحتوي "OmniRoute Golden Set" المحملة مسبقًا على حالات اختبار لما يلي: -- حالة النظام (وقت التشغيل، الإصدار، استخدام الذاكرة) -- حالات قاطع الدائرة لكل مزود (مغلق/مفتوح/نصف مفتوح) -- حالة الحد الأقصى للسعر وعمليات الإغلاق النشطة -- إحصائيات ذاكرة التخزين المؤقت للتوقيع -- قياس الكمون عن بعد (ص50/ص95/ص99) + ذاكرة تخزين مؤقت سريعة -- إعادة ضبط الحالة الصحية بنقرة واحدة +- تحياتي، الرياضيات، الجغرافيا، توليد التعليمات البرمجية +- الامتثال لتنسيق JSON والترجمة وإنشاء تخفيض السعر +- رفض السلامة (المحتوى الضار)، العد، المنطق المنطقي -### 🔧 ملعب المترجم +### استراتيجيات التقييم -يشتمل OmniRoute على ساحة مترجم قوية مدمجة مع **4 أوضاع** لتصحيح الأخطاء واختبار ومراقبة ترجمات واجهة برمجة التطبيقات: - -| الوضع | الوصف | -| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **💻 الملعب** | ترجمة التنسيق المباشر - الصق أي نص طلب واجهة برمجة التطبيقات (API) وشاهد على الفور كيف يقوم OmniRoute بترجمته بين تنسيقات الموفر (OpenAI ↔ Claude ↔ Gemini ↔ Responses API). يتضمن أمثلة على القوالب والكشف التلقائي عن التنسيق. | -| **💬 اختبار الدردشة** | أرسل طلبات دردشة حقيقية من خلال OmniRoute وشاهد الرحلة الكاملة ذهابًا وإيابًا: مدخلاتك، والطلب المترجم، واستجابة الموفر، والرد المترجم. لا تقدر بثمن للتحقق من صحة توجيه التحرير والسرد. | -| **🧪 مقعد الاختبار** | وضع الاختبار المجمع - حدد حالات اختبار متعددة بمدخلات مختلفة ومخرجات متوقعة، وقم بتشغيلها كلها مرة واحدة، وقارن النتائج عبر الموفرين والنماذج. | -| **📱 مراقب مباشر** | مراقبة الطلبات في الوقت الفعلي - شاهد الطلبات الواردة أثناء تدفقها عبر OmniRoute، وشاهد ترجمات التنسيق التي تحدث مباشرة، وحدد المشكلات على الفور. | - -**الوصول:** لوحة المعلومات ← المترجم (الشريط الجانبي) - -### 💾 المزامنة السحابية - -- موفري المزامنة والمجموعات والإعدادات عبر الأجهزة -- مزامنة الخلفية التلقائية -- تخزين مشفر آمن - -
- ---- - -## 🎯 حالات الاستخدام - -### الحالة 1: "لدي اشتراك Claude Pro" - -**المشكلة:** تنتهي صلاحية الحصة غير المستخدمة، وحدود المعدل أثناء عملية الترميز المكثف - -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) - -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` - -### الحالة 2: "أريد تكلفة صفرية" - -**المشكلة:** لا أستطيع تحمل تكلفة الاشتراكات، وتحتاج إلى ترميز يعتمد على الذكاء الاصطناعي - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### الحالة 3: "أحتاج إلى تشفير على مدار 24 ساعة طوال أيام الأسبوع، دون انقطاع" - -**المشكلة:** المواعيد النهائية، لا أستطيع تحمل فترات التوقف عن العمل - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### الحالة 4: "أريد ذكاءً اصطناعيًا مجانيًا في OpenClaw" - -**المشكلة:** تحتاج إلى مساعد الذكاء الاصطناعي في تطبيقات المراسلة، مجانًا تمامًا - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| استراتيجية | الوصف | مثال | +| ---------- | ------------------------------------------------------------- | -------------------------------- | +| `exact` | يجب أن يتطابق الإخراج تمامًا مع | `"4"` | +| `contains` | يجب أن يحتوي الإخراج على سلسلة فرعية (غير حساسة لحالة الأحرف) | `"Paris"` | +| `regex` | يجب أن يتطابق الإخراج مع نمط regex | `"1.*2.*3"` | +| `custom` | ترجع دالة JS المخصصة صواب/خطأ | `(output) => output.length > 10` | --- ## 📖 دليل الإعداد +### إعداد البروتوكول (MCP + A2A) +
-💳 موفري الاشتراك +🧩 إعداد MCP (بروتوكول سياق النموذج) + +بدء نقل MCP في وضع stdio: + +```bash +omniroute --mcp +``` + +تدفق التحقق الموصى به: + +1. قم بتوصيل عميل MCP الخاص بك عبر stdio. +2. قم بتشغيل `omniroute_get_health`. +3. قم بتشغيل `omniroute_list_combos`. +4. افتح `/dashboard/mcp` لتأكيد نبضات القلب والنشاط والتدقيق. + +واجهات برمجة التطبيقات المفيدة للأتمتة: + +-`GET /api/mcp/status` -`GET /api/mcp/tools` -`GET /api/mcp/audit` -`GET /api/mcp/audit/stats` + +
+ +
🤝 إعداد A2A (Agent2Agent) + +اكتشف الوكيل: + +```bash +curl http://localhost:20128/.well-known/agent.json +``` + +إرسال مهمة: + +```bash +curl -X POST http://localhost:20128/a2a \ + -H 'content-type: application/json' \ + -d '{"jsonrpc":"2.0","id":"setup-a2a","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Summarize quota status."}]}}' +``` + +إدارة دورة الحياة: + +-`GET /api/a2a/status` -`GET /api/a2a/tasks` -`GET /api/a2a/tasks/:id` -`POST /api/a2a/tasks/:id/cancel` + +واجهة المستخدم التشغيلية: + +- `/dashboard/a2a` لإمكانية ملاحظة المهمة/الحالة/الدفق وإجراءات الدخان + +
+ +
+🧪 التحقق من صحة البروتوكول من طرف إلى طرف + +التحقق من صحة كلا البروتوكولين مع عملاء حقيقيين: + +```bash +npm run test:protocols:e2e +``` + +هذا يتحقق: + +- اتصال/قائمة/اتصال عميل MCP SDK +- اكتشاف A2A/إرسال/دفق/حصول على/إلغاء +- التحقق من البيانات في تدقيق MCP وواجهات برمجة التطبيقات لإدارة المهام A2A + +
+ +
+💳 مقدمي الاشتراك ### كلود كود (برو/ماكس) @@ -846,9 +1145,9 @@ Models: 1. قم بالتسجيل: [build.nvidia.com](https://build.nvidia.com) 2. احصل على مفتاح واجهة برمجة التطبيقات (API) مجانًا (يتضمن 1000 نقطة استدلال) 3. لوحة المعلومات → إضافة موفر → NVIDIA NIM: - - مفتاح واجهة برمجة التطبيقات: `nvapi-your-key` + - مفتاح API: `nvapi-your-key` -**النماذج:** `nvidia/llama-3.3-70b-instruct`، `nvidia/mistral-7b-instruct`، وأكثر من 50 طرازًا آخر +**النماذج:** `nvidia/llama-3.3-70b-instruct` و`nvidia/mistral-7b-instruct` وأكثر من 50 طرازًا آخر **نصيحة احترافية:** واجهة برمجة التطبيقات المتوافقة مع OpenAI — تعمل بسلاسة مع ترجمة تنسيق OmniRoute! @@ -889,7 +1188,7 @@ Models: 2. احصل على مفتاح API من خطة الترميز 3. لوحة المعلومات → إضافة مفتاح واجهة برمجة التطبيقات: - المزود: `glm` - - مفتاح واجهة برمجة التطبيقات: `your-key` + - مفتاح API: `your-key` **الاستخدام:** `glm/glm-4.7` @@ -918,22 +1217,22 @@ Models:
-🆓 موفرو الخدمة المجانية (النسخ الاحتياطي في حالات الطوارئ) +🆓 موفري الخدمة المجانية (النسخ الاحتياطي في حالات الطوارئ) -### iFlow (8 نماذج مجانية) +### iFlow (8 نماذج مجانية)```bash -```bash Dashboard → Connect iFlow → iFlow OAuth login → Unlimited usage Models: - if/kimi-k2-thinking - if/qwen3-coder-plus - if/glm-4.7 - if/minimax-m2 - if/deepseek-r1 -``` +if/kimi-k2-thinking +if/qwen3-coder-plus +if/glm-4.7 +if/minimax-m2 +if/deepseek-r1 + +```` ### كوين (3 موديلات مجانية) @@ -945,7 +1244,7 @@ Dashboard → Connect Qwen Models: qw/qwen3-coder-plus qw/qwen3-coder-flash -``` +```` ### كيرو (كلود فري) @@ -962,7 +1261,7 @@ Models:
-🎨 إنشاء مجموعات +🎨 إنشاء المجموعات ### مثال 1: زيادة الاشتراك إلى الحد الأقصى → النسخ الاحتياطي الرخيص @@ -993,7 +1292,7 @@ Cost: $0 forever!
-🔧 تكامل واجهة سطر الأوامر +🔧 تكامل CLI ### بيئة تطوير متكاملة للمؤشر @@ -1053,33 +1352,51 @@ Settings → API Configuration: Model: if/kimi-k2-thinking ``` +### الكود المفتوح + +**الخطوة 1:** أضف OmniRoute كموفر مخصص: + +```bash +opencode +/connect +# Select "Other" → Enter ID: "omniroute" → Enter your OmniRoute API key +``` + +**الخطوة 2:** إنشاء/تحرير `opencode.json` في جذر مشروعك: + +```json +{ + "$schema": "https://opencode.ai/config.json", + "provider": { + "omniroute": { + "npm": "@ai-sdk/openai-compatible", + "name": "OmniRoute", + "options": { + "baseURL": "http://localhost:20128/v1" + }, + "models": { + "cc/claude-sonnet-4-20250514": { "name": "Claude Sonnet 4" }, + "gg/gemini-2.5-pro": { "name": "Gemini 2.5 Pro" }, + "if/kimi-k2-thinking": { "name": "Kimi K2 (Free)" } + } + } + } +} +``` + +**الخطوة 3:** حدد النموذج في OpenCode: + +```bash +/models +# Select any OmniRoute model from the list +``` + +> **نصيحة:** أضف أي نموذج متوفر في نقطة نهاية OmniRoute `/v1/models` إلى قسم `models`. استخدم التنسيق `provider/model-id` من لوحة معلومات OmniRoute. +
--- -## 🧪 التقييمات (التقييمات) - -يشتمل OmniRoute على إطار تقييم مدمج لاختبار جودة استجابة LLM مقابل المجموعة الذهبية. يمكنك الوصول إليه عبر **Analytics → Evals** في لوحة التحكم. - -### الطقم الذهبي المدمج - -تحتوي "OmniRoute Golden Set" المحملة مسبقًا على 10 حالات اختبار تغطي: - -- تحياتي، الرياضيات، الجغرافيا، توليد التعليمات البرمجية -- الامتثال لتنسيق JSON والترجمة وتخفيض السعر -- رفض السلامة (المحتوى الضار)، العد، المنطق المنطقي - -### استراتيجيات التقييم - -| استراتيجية | الوصف | مثال | -| ---------- | ------------------------------------------------------------- | -------------------------------- | -| `exact` | يجب أن يتطابق الإخراج تمامًا مع | `"4"` | -| `contains` | يجب أن يحتوي الإخراج على سلسلة فرعية (غير حساسة لحالة الأحرف) | `"Paris"` | -| `regex` | يجب أن يتطابق الإخراج مع نمط regex | `"1.*2.*3"` | -| `custom` | ترجع دالة JS المخصصة صواب/خطأ | `(output) => output.length > 10` | - ---- - ## 🐛 استكشاف الأخطاء وإصلاحها
@@ -1106,15 +1423,18 @@ Settings → API Configuration: - تبديل النموذج الأساسي إلى GLM/MiniMax - استخدم الطبقة المجانية (Gemini CLI، iFlow) للمهام غير الحرجة -** لوحة المعلومات تفتح على منفذ خاطئ ** +**منافذ لوحة المعلومات/واجهة برمجة التطبيقات غير صحيحة** -- اضبط `PORT=20128` و`NEXT_PUBLIC_BASE_URL=http://localhost:20128` +- `PORT` هو المنفذ الأساسي الأساسي (ومنفذ API افتراضيًا) +- يتجاوز `API_PORT` مستمع واجهة برمجة التطبيقات (API) المتوافق مع OpenAI فقط +- يتجاوز `DASHBOARD_PORT` مستمع لوحة المعلومات/Next.js فقط +- قم بتعيين `NEXT_PUBLIC_BASE_URL` على لوحة المعلومات/عنوان URL العام (لعمليات الاسترجاعات عبر OAuth) **أخطاء المزامنة السحابية** - تحقق من نقاط `BASE_URL` لمثيلك قيد التشغيل -- تحقق من نقاط `CLOUD_URL` إلى نقطة نهاية السحابة المتوقعة -- احتفظ بقيم `NEXT_PUBLIC_*` متوافقة مع القيم من جانب الخادم +- تحقق من نقاط `CLOUD_URL` إلى نقطة النهاية السحابية المتوقعة +- حافظ على محاذاة قيم `NEXT_PUBLIC_*` مع القيم من جانب الخادم **تسجيل الدخول الأول لا يعمل** @@ -1123,31 +1443,29 @@ Settings → API Configuration: ** لا توجد سجلات الطلب ** -- اضبط `ENABLE_REQUEST_LOGS=true` في `.env` +- تعيين `ENABLE_REQUEST_LOGS=true` في `.env` **يظهر اختبار الاتصال "غير صالح" لمقدمي الخدمات المتوافقين مع OpenAI** -- لا يكشف العديد من مقدمي الخدمة عن نقطة النهاية `/models` +- لا يكشف العديد من مقدمي الخدمة عن نقطة نهاية `/models` - يتضمن OmniRoute v1.0.6+ التحقق الاحتياطي من خلال إكمال الدردشة -- تأكد من أن عنوان URL الأساسي يتضمن اللاحقة `/v1` +- تأكد من أن عنوان URL الأساسي يتضمن لاحقة `/v1` -### 🔐 OAuth em Servidor Remoto (إعداد OAuth عن بعد) +### 🔐 OAuth > **⚠️ هام لمستخدمي OmniRoute على VPS/Docker/servidor عن بعد** -### لماذا OAuth يفعل Antigravity / Gemini CLI في الخوادم البعيدة؟ +#### OAuth -تم إثبات **Antigravity** e **Gemini CLI** باستخدام **Google OAuth 2.0** للمصادقة. تطلب Google أن يتم استخدام `redirect_uri` دون تدفق OAuth ** على وجه التحديد ** إلى معرفات URI السابقة للمسح في تطبيق Google Cloud Console. - -نظرًا لأن اعتمادات OAuth المُدمجة ليست في OmniRoute، فهي عبارة عن سجلات \*\*apenas لـ عندما تصل إلى OmniRoute من خادم بعيد (على سبيل المثال: `https://omniroute.meuservidor.com`)، تحصل Google على مصادقة عبر: +نظرًا لأن اعتمادات OAuth المُدخلة ليست في OmniRoute، فهي عبارة عن سجلات **apenas لـ `localhost`**. عندما تصل إلى OmniRoute من خادم بعيد (على سبيل المثال: `https://omniroute.meuservidor.com`)، تحصل Google على مصادقة عبر: ``` Error 400: redirect_uri_mismatch ``` -### الحل: تكوين OAuth الخاص بك +#### الحل: تكوين OAuth الخاص بك يجب عليك إنشاء **OAuth 2.0 Client ID** على Google Cloud Console باستخدام URI لخادمك. @@ -1171,7 +1489,7 @@ Error 400: redirect_uri_mismatch https://seu-servidor.com/callback ``` -> استبدال `seu-servidor.com` بنطاقك أو IP الخاص بخادمك (بما في ذلك البوابة الضرورية، على سبيل المثال: `http://45.33.32.156:20128/callback`). +> استبدال `seu-servidor.com` بنطاقك أو IP بخادمك (بما في ذلك البوابة الضرورية، على سبيل المثال: `http://45.33.32.156:20128/callback`). **4. حفظ ونسخ كمعتمدة** @@ -1179,7 +1497,7 @@ https://seu-servidor.com/callback **5. تكوين كمتغيرات البيئة ** -لا يوجد `.env` (أو متغيرات بيئة Docker): +ليس لديك `.env` (أو في بيئة Docker المتنوعة): ```bash # Para Antigravity: @@ -1206,16 +1524,16 @@ docker restart omniroute لوحة المعلومات → الموفرون → Antigravity (ou Gemini CLI) → OAuth -Agora o Google redirecionará corretamente para `https://seu-servidor.com/callback` e a autenticação funcionará. +قم بإعادة توجيه Google بشكل صحيح إلى `https://seu-servidor.com/callback` ووظيفة المصادقة. --- -### الحل المؤقت (لم يتم تكوين الاعتمادات الخاصة) +#### الحل المؤقت (لم يتم تكوين الاعتمادات الخاصة) إذا لم ترغب في إنشاء بيانات اعتماد خاصة بك منذ الآن، فمن الممكن استخدام التدفق **دليل URL**: 1. يفتح OmniRoute عنوان URL لتفويض Google -2. قم بتفويض Google لإعادة التوجيه إلى `localhost` (لا يوجد خادم عن بعد) +2. قم بتفويض Google لإعادة توجيه `localhost` (لا يوجد خادم عن بعد) 3. **انسخ عنوان URL كاملاً** من شريط الإدخال في متصفحك (حتى لا يتم نقل الصفحة) 4. هذا هو عنوان URL الذي يظهر في وضع الاتصال بـ OmniRoute 5. انقر على **"الاتصال"** @@ -1226,55 +1544,46 @@ Agora o Google redirecionará corretamente para `https://seu-servidor.com/callba --- -## 🛠️ تيك ستاك +## 🛠️ -- **وقت التشغيل**: Node.js 18–22 LTS (⚠️ Node.js 24+ **غير مدعومة** — `better-sqlite3` الثنائيات الأصلية غير متوافقة) -- **اللغة**: TypeScript 5.9 — **TypeScript بنسبة 100%** عبر `src/` و`open-sse/` (الإصدار 1.0.6) +
+انقر لتوسيع تفاصيل حزمة التقنية + +- **وقت التشغيل**: Node.js 18–22 LTS (⚠️ Node.js 24+ **غير مدعومة** — الثنائيات الأصلية `better-sqlite3` غير متوافقة) +- **اللغة**: TypeScript 5.9 — **TypeScript بنسبة 100%** عبر `src/` و`open-sse/` (لا يوجد `any` في الوحدات الأساسية منذ الإصدار 2.0) - **الإطار**: Next.js 16 + React 19 + Tailwind CSS 4 -- **قاعدة البيانات**: LowDB (JSON) + SQLite (حالة المجال + سجلات الوكيل) +- **قاعدة البيانات**: LowDB (JSON) + SQLite (حالة المجال + سجلات الوكيل + تدقيق MCP + قرارات التوجيه) +- **المخططات**: Zod (التحقق من صحة الإدخال/الإخراج لأداة MCP، وعقود API) +- **البروتوكولات**: MCP (stdio/HTTP) + A2A v0.3 (JSON-RPC 2.0 + SSE) - **البث**: الأحداث المرسلة من الخادم (SSE) -- **المصادقة**: OAuth 2.0 (PKCE) + JWT + مفاتيح API -- **الاختبار**: مشغل اختبار Node.js (أكثر من 368 اختبارًا للوحدة) -- **CI/CD**: إجراءات GitHub (نشر npm التلقائي + Docker Hub عند الإصدار) +- **المصادقة**: OAuth 2.0 (PKCE) + JWT + مفاتيح API + ترخيص نطاق MCP +- **الاختبار**: مشغل اختبار Node.js + Vitest (أكثر من 900 اختبار بما في ذلك الوحدة والتكامل وE2E)- **CI/CD**: إجراءات GitHub (نشر npm التلقائي + Docker Hub عند الإصدار) - **الموقع الإلكتروني**: [omniroute.online](https://omniroute.online) - **الحزمة**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute) -- **عامل الميناء**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute) -- **المرونة**: قاطع الدائرة الكهربائية، والتراجع الأسي، وقطيع مضاد للرعد، وانتحال TLS +- **دوكر**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute) +- **المرونة**: قاطع الدائرة، والتراجع الأسي، وقطيع مكافحة الرعد، وانتحال TLS، والإصلاح الذاتي للتحرير والسرد التلقائي + +
--- ## 📖 التوثيق -| وثيقة | الوصف | -| -------------------------------------------- | --------------------------------------------- | -| [User Guide](docs/USER_GUIDE.md) | مقدمو الخدمات، والمجموعات، وتكامل CLI، والنشر | -| [API Reference](docs/API_REFERENCE.md) | جميع نقاط النهاية مع الأمثلة | -| [Troubleshooting](docs/TROUBLESHOOTING.md) | المشاكل والحلول الشائعة | -| [Architecture](docs/ARCHITECTURE.md) | بنية النظام والداخلية | -| [Contributing](CONTRIBUTING.md) | إعداد التطوير والمبادئ التوجيهية | -| [OpenAPI Spec](docs/openapi.yaml) | مواصفات OpenAPI 3.0 | -| [Security Policy](SECURITY.md) | الإبلاغ عن الثغرات الأمنية والممارسات الأمنية | -| [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | الدليل الكامل: إعداد VM + nginx + Cloudflare | -| [Features Gallery](docs/FEATURES.md) | جولة لوحة القيادة المرئية مع لقطات الشاشة | - -### 📸 معاينة لوحة التحكم - -
-انقر لرؤية لقطات شاشة لوحة المعلومات - -| صفحة | لقطة شاشة | -| --------------------- | ------------------------------------------------- | -| ** مقدمو الخدمة ** | ![Providers](docs/screenshots/01-providers.png) | -| **المجموعات** | ![Combos](docs/screenshots/02-combos.png) | -| **تحليلات** | ![Analytics](docs/screenshots/03-analytics.png) | -| **الصحة** | ![Health](docs/screenshots/04-health.png) | -| **مترجم** | ![Translator](docs/screenshots/05-translator.png) | -| **الإعدادات** | ![Settings](docs/screenshots/06-settings.png) | -| **أدوات سطر الأوامر** | ![CLI Tools](docs/screenshots/07-cli-tools.png) | -| **سجلات الاستخدام** | ![Usage](docs/screenshots/08-usage.png) | -| **نقطة النهاية** | ![Endpoint](docs/screenshots/09-endpoint.png) | - -
+| وثيقة | الوصف | +| --------------------------------------------------- | ----------------------------------------------------- | +| [دليل المستخدم](docs/USER_GUIDE.md) | مقدمو الخدمات، والمجموعات، وتكامل CLI، والنشر | +| [مرجع واجهة برمجة التطبيقات](docs/API_REFERENCE.md) | جميع نقاط النهاية مع الأمثلة | +| [خادم MCP](open-sse/mcp-server/README.md) | 16 أدوات MCP وتكوينات IDE وعملاء Python/TS/Go | +| [خادم A2A](src/lib/a2a/README.md) | بروتوكول JSON-RPC 2.0، المهارات، التدفق، إدارة المهام | +| [محرك التحرير والسرد التلقائي](docs/auto-combo.md) | تسجيل 6 عوامل، حزم الوضع، الشفاء الذاتي | +| [استكشاف الأخطاء وإصلاحها](docs/TROUBLESHOOTING.md) | المشاكل والحلول الشائعة | +| [الهندسة المعمارية](docs/ARCHITECTURE.md) | بنية النظام والداخلية | +| [مساهمة](CONTRIBUTING.md) | إعداد التطوير والمبادئ التوجيهية | +| [مواصفات OpenAPI](docs/openapi.yaml) | مواصفات OpenAPI 3.0 | +| [سياسة الأمان](SECURITY.md) | الإبلاغ عن الثغرات الأمنية والممارسات الأمنية | +| [نشر الجهاز الافتراضي](docs/VM_DEPLOYMENT_GUIDE.md) | الدليل الكامل: إعداد VM + nginx + Cloudflare | +| [معرض الميزات](docs/FEATURES.md) | جولة لوحة القيادة المرئية مع لقطات الشاشة | +| [قائمة مراجعة الإصدار](docs/RELEASE_CHECKLIST.md) | خطوات التحقق من صحة الإصدار المسبق | --- @@ -1291,33 +1600,20 @@ Agora o Google redirecionará corretamente para `https://seu-servidor.com/callba | ⚡ **الأداء** | 15+ | طبقة ذاكرة التخزين المؤقت المزدوجة، ذاكرة التخزين المؤقت السريعة، ذاكرة التخزين المؤقت للاستجابة، استمرار البث، واجهة برمجة التطبيقات الدفعية | | 🌐 **النظام البيئي** | 10+ | WebSocket API، إعادة تحميل التكوين السريع، مخزن التكوين الموزع، الوضع التجاري | -### 🔜قريبا +### 🔜قريبا- 🔗 **تكامل OpenCode** — دعم الموفر الأصلي لـ OpenCode AI IDE للترميز -- 🔗 **تكامل OpenCode** — دعم الموفر الأصلي لـ OpenCode AI IDE للترميز - 🔗 **تكامل TRAE** — الدعم الكامل لإطار تطوير TRAE AI - 📦 **Batch API** — معالجة الدفعات غير المتزامنة للطلبات المجمعة - 🎯 **التوجيه المعتمد على العلامات** — توجيه الطلبات بناءً على العلامات المخصصة والبيانات الوصفية - 💰 **إستراتيجية أقل تكلفة** — تحديد أرخص مزود متاح تلقائيًا -> 📝 مواصفات الميزات الكاملة متوفرة في [link](docs/new-features/) (217 مواصفات تفصيلية) - ---- - -## 📧 الدعم - -> 💬 **انضم إلى مجتمعنا!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — احصل على المساعدة وشارك النصائح وابق على اطلاع. - -- **الموقع الإلكتروني**: [omniroute.online](https://omniroute.online) -- **جيثب**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **المشاكل**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **واتساب**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **المشروع الأصلي**: [9router by decolua](https://github.com/decolua/9router) +> 📝 مواصفات الميزات الكاملة متوفرة في [`docs/new-features/`](docs/new-features/) (217 مواصفات تفصيلية) --- ## 👥 المساهمون -[![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) +[![المساهمون](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) ### كيفية المساهمة @@ -1333,7 +1629,7 @@ Agora o Google redirecionará corretamente para `https://seu-servidor.com/callba ```bash # Create a release — npm publish happens automatically -gh release create v1.0.6 --title "v1.0.6" --generate-notes +gh release create v2.0.0 --title "v2.0.0" --generate-notes ``` --- @@ -1360,8 +1656,13 @@ gh release create v1.0.6 --title "v1.0.6" --generate-notes ## 📄 الترخيص -ترخيص MIT - راجع [LICENSE](LICENSE) للحصول على التفاصيل. +ترخيص MIT - راجع [الترخيص](LICENSE) للحصول على التفاصيل. --- ---- +
+ تم تصميمه باستخدام ❤️ للمطورين الذين يبرمجون 24/7 +
+ omniroute.online +
+ diff --git a/README.bg.md b/README.bg.md index b7c85fed15..a44951c534 100644 --- a/README.bg.md +++ b/README.bg.md @@ -1,13 +1,55 @@ -
- OmniRoute Dashboard - - # 🚀 OmniRoute — Безплатният AI Gateway +# 🚀 OmniRoute — Безплатният AI Gateway ### Никога не спирайте да кодирате. Интелигентно маршрутизиране към **БЕЗПЛАТНИ и евтини AI модели** с автоматичен резервен вариант. -_Вашият универсален API прокси — една крайна точка, 36+ доставчици, нулев престой._ +_Вашият универсален API прокси — една крайна точка, 36+ доставчици, нулев престой. Сега с **MCP & A2A** агентска оркестрация._ -**Завършвания на чат • Вграждания • Генериране на изображения • Аудио • Прекласиране • 100% TypeScript** +**Завършвания на чат • Вграждания • Генериране на изображения • Видео • Музика • Аудио • Прекласиране • MCP сървър • A2A протокол • 100% TypeScript** + +--- + +
+ +[![npm версия](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute) +[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute) +[![Лиценз](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE) +[![Уебсайт](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online) +[![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) + +[🌐 Уебсайт](https://omniroute.online) • [🚀 Бърз старт](#-quick-start) • [💡 Функции](#-key-features) • [📖 Документи](#-documentation) • [💰 Ценообразуване](#-pricing-at-a-glance) • [💬 WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) + +
+ +🌐 **Налично на:** 🇺🇸 [английски](README.md) | 🇧🇷 [Португалски (Бразилия)](README.pt-BR.md) | 🇪🇸 [Испански] (README.es.md) | 🇫🇷 [Français](README.fr.md) | 🇮🇹 [италиански] (README.it.md) | 🇷🇺 [Русский](README.ru.md) | 🇨🇳 [中文 (简体)](README.zh-CN.md) | 🇩🇪 [Deutsch](README.de.md) | 🇮🇳 [हिन्दी] (README.in.md) | 🇹🇭 [ไทย](README.th.md) | 🇺🇦 [Українська](README.uk-UA.md) | 🇸🇦 [العربية](README.ar.md) | 🇯🇵 [日本語](README.ja.md) | 🇻🇳 [Tiếng Việt](README.vi.md) | 🇧🇬 [Български](README.bg.md) | 🇩🇰 [Dansk](README.da.md) | 🇫🇮 [Suomi](README.fi.md) | 🇮🇱 [עברית](README.he.md) | 🇭🇺 [маджарски] (README.hu.md) | 🇮🇩 [бахаса Индонезия](README.id.md) | 🇰🇷 [한국어](README.ko.md) | 🇲🇾 [Bahasa Melayu](README.ms.md) | 🇳🇱 [Нидерландия](README.nl.md) | 🇳🇴 [Norsk](README.no.md) | 🇵🇹 [Português (Португалия)](README.pt.md) | 🇷🇴 [Română](README.ro.md) | 🇵🇱 [Полски](README.pl.md) | 🇸🇰 [Slovenčina](README.sk.md) | 🇸🇪 [Svenska](README.sv.md) | 🇵🇭 [филипински] (README.phi.md) + +--- + +## 🖼️ Главно табло за управление + +
+ OmniRoute Dashboard +
+ +--- + +## 📸 Визуализация на таблото за управление + +
+Щракнете, за да видите екранни снимки на таблото + +| Страница | Екранна снимка | +| -------------------------- | ----------------------------------------------------- | +| **Доставчици** | ![Доставчици](docs/screenshots/01-providers.png) | +| **Комбота** | ![Комбота](docs/screenshots/02-combos.png) | +| **Анализ** | ![Анализ](docs/screenshots/03-analytics.png) | +| **Здраве** | ![Здраве](docs/screenshots/04-health.png) | +| **Преводач** | ![Преводач](docs/screenshots/05-translator.png) | +| **Настройки** | ![Настройки](docs/screenshots/06-settings.png) | +| **CLI инструменти** | ![CLI инструменти](docs/screenshots/07-cli-tools.png) | +| **Регистри за използване** | ![Използване](docs/screenshots/08-usage.png) | +| **Крайна точка** | ![Крайна точка](docs/screenshots/09-endpoint.png) | + +
--- @@ -18,11 +60,10 @@ _Свържете всеки базиран на AI IDE или CLI инстру
- + OpenClaw
OpenClaw -

- ⭐ 205K +
⭐ 205K
@@ -64,30 +105,30 @@ _Свържете всеки базиран на AI IDE или CLI инстру Codex CLI
- Codex CLI + Кодекс CLI

⭐ 60.8K
Claude Code
- Claude Code + Код на Клод

⭐ 67.3K
Gemini CLI
- Gemini CLI + Близнаци CLI

- ⭐ 94.7K + ⭐ 94,7K
Kilo Code
- Kilo Code + Kilo код

- ⭐ 15.5K + ⭐ 15,5K
@@ -96,20 +137,6 @@ _Свържете всеки базиран на AI IDE или CLI инстру --- -[![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute) -[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute) -[![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE) -[![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online) -[![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) - -[🌐 Website](https://omniroute.online) • [🚀 Quick Start](#-quick-start) • [💡 Features](#-key-features) • [📖 Docs](#-documentation) • [💰 Pricing](#-pricing-at-a-glance) • [💬 WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) - -🌐 **Available in:** 🇺🇸 [English](README.md) | 🇧🇷 [Português (Brasil)](README.pt-BR.md) | 🇪🇸 [Español](README.es.md) | 🇫🇷 [Français](README.fr.md) | 🇮🇹 [Italiano](README.it.md) | 🇷🇺 [Русский](README.ru.md) | 🇨🇳 [中文 (简体)](README.zh-CN.md) | 🇩🇪 [Deutsch](README.de.md) | 🇮🇳 [हिन्दी](README.in.md) | 🇹🇭 [ไทย](README.th.md) | 🇺🇦 [Українська](README.uk-UA.md) | 🇸🇦 [العربية](README.ar.md) | 🇯🇵 [日本語](README.ja.md) | 🇻🇳 [Tiếng Việt](README.vi.md) | 🇧🇬 [Български](README.bg.md) | 🇩🇰 [Dansk](README.da.md) | 🇫🇮 [Suomi](README.fi.md) | 🇮🇱 [עברית](README.he.md) | 🇭🇺 [Magyar](README.hu.md) | 🇮🇩 [Bahasa Indonesia](README.id.md) | 🇰🇷 [한국어](README.ko.md) | 🇲🇾 [Bahasa Melayu](README.ms.md) | 🇳🇱 [Nederlands](README.nl.md) | 🇳🇴 [Norsk](README.no.md) | 🇵🇹 [Português (Portugal)](README.pt.md) | 🇷🇴 [Română](README.ro.md) | 🇵🇱 [Polski](README.pl.md) | 🇸🇰 [Slovenčina](README.sk.md) | 🇸🇪 [Svenska](README.sv.md) | 🇵🇭 [Filipino](README.phi.md) - -
- ---- - ## 🤔 Защо OmniRoute? **Спрете да пилеете пари и да достигате лимити:** @@ -122,12 +149,23 @@ _Свържете всеки базиран на AI IDE или CLI инстру **OmniRoute решава това:** - ✅ **Увеличете максимално абонаментите** - Проследете квотата, използвайте всеки бит преди нулиране -- ✅ **Автоматичен резервен режим** - Абонамент → API ключ → Евтини → Безплатно, нулев престой +- ✅ **Автоматично възстановяване** - Абонамент → API ключ → Евтино → Безплатно, нулево време на престой - ✅ **Множество акаунти** - Кръгови сметки между акаунти на доставчик - ✅ **Универсален** - Работи с Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, всеки CLI инструмент --- +## 📧 Поддръжка> 💬 **Присъединете се към нашата общност!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Получавайте помощ, споделяйте съвети и бъдете в течение. + +- **Уебсайт**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Проблеми**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Група на общността](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Принос**: Вижте [CONTRIBUTING.md](CONTRIBUTING.md), отворете PR или изберете `good first issue` +- **Оригинален проект**: [9router от decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Как работи ``` @@ -157,309 +195,575 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Какво решава OmniRoute — 30 реални болни точки и случаи на употреба -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Всеки разработчик, използващ AI инструменти, се сблъсква с тези проблеми всеки ден.** OmniRoute е създаден, за да разреши всички тях — от преразход на разходите до регионални блокове, от повредени OAuth потоци до операции на протоколи и корпоративна наблюдаемост.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. „Плащам за скъп абонамент, но все още ме прекъсват ограничения“ -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Разработчиците плащат $20–200/месец за Claude Pro, Codex Pro или GitHub Copilot. Дори и да плащате, квотата има таван — 5 часа използване, седмични лимити или лимити на цените на минута. По средата на сесията на кодиране, доставчикът спира да отговаря и разработчикът губи поток и производителност. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-Tier Fallback** — Ако квотата за абонамент се изчерпи, автоматично пренасочва към API Key → Евтино → Безплатно с нулева ръчна намеса +- **Проследяване на квоти в реално време** — Показва потреблението на токени в реално време с обратно отброяване за нулиране (5 часа, ежедневно, седмично) +- **Поддръжка на няколко акаунта** — Множество акаунти на доставчик с автоматичен кръгов режим — когато единият свърши, превключва към следващия +- **Персонализирани комбинации** — Възможност за персонализиране на резервни вериги с 6 стратегии за балансиране (първо попълване, кръгово, P2C, произволно, най-малко използвано, оптимизирано по отношение на разходите) +- **Codex Business Quotas** — Мониторинг на квотите на работното пространство на бизнеса/екипа директно в таблото за управление
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. „Трябва да използвам няколко доставчика, но всеки има различен API“ -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI използва един формат, Claude (Anthropic) използва друг, Gemini още един. Ако разработчикът иска да тества модели от различни доставчици или резервен вариант между тях, той трябва да преконфигурира SDK, да промени крайните точки, да се справи с несъвместими формати. Персонализираните доставчици (FriendLI, NIM) имат крайни точки на нестандартен модел. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Unified Endpoint** — Единичен `http://localhost:20128/v1` служи като прокси за всички 36+ доставчици +- **Превод на формат** — Автоматично и прозрачно: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **Response Sanitization** — Премахва нестандартните полета (`x_groq`, `usage_breakdown`, `service_tier`), които нарушават OpenAI SDK v1.83+ +- **Нормализиране на ролята** — Преобразува `developer` → `system` за доставчици, които не са OpenAI; `system` → `user` за GLM/ERNIE +- **Think Tag Extraction** — Извлича `` блокове от модели като DeepSeek R1 в стандартизирани `reasoning_content` +- **Структуриран изход за Gemini** — `json_schema` → `responseMimeType`/`responseSchema` автоматично преобразуване +- **`stream` по подразбиране е `false`** — Подравнява се със спецификацията на OpenAI, като се избягват неочаквани SSE в SDK на Python/Rust/Go
+ +
+🌐 3. „Моят доставчик на AI блокира моя регион/държава“ + +Доставчици като OpenAI/Codex блокират достъпа от определени географски региони. Потребителите получават грешки като `unsupported_country_region_territory` по време на OAuth и API връзки. Това е особено разочароващо за разработчиците от развиващите се страни. + +**Как OmniRoute го решава:** + +- **3-Level Proxy Config** — Конфигурируем прокси на 3 нива: глобално (цял трафик), на доставчик (само един доставчик) и на връзка/ключ +- **Цветно кодирани прокси значки** — Визуални индикатори: 🟢 глобален прокси, 🟡 прокси на доставчик, 🔵 прокси за връзка, винаги показващ IP +- **OAuth Token Exchange Through Proxy** — OAuth потокът също минава през проксито, решавайки `unsupported_country_region_territory` +- **Тестове за връзка чрез прокси** — Тестовете за връзка използват конфигурирания прокси (без повече директен байпас) +- **SOCKS5 Support** — Пълна SOCKS5 прокси поддръжка за изходящо маршрутизиране +- **TLS Fingerprint Spoofing** — подобен на браузър TLS пръстов отпечатък чрез `wreq-js` за заобикаляне на откриването на ботове
-🌐 3. "My AI provider blocks my region/country" +🆓 4. „Искам да използвам AI за кодиране, но нямам пари“ -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Не всеки може да плаща $20-200/месец за абонаменти за AI. Студенти, разработчици от развиващи се страни, любители и фрийлансъри се нуждаят от достъп до качествени модели на нулева цена. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **Вградени доставчици на безплатни нива** — Вградена поддръжка за 100% безплатни доставчици: iFlow (8 неограничени модела), Qwen (3 неограничени модела), Kiro (Claude безплатно), Gemini CLI (180K/месец безплатно) +- **Безплатни само комбинации** — Верига `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/месец с нулев престой +- **NVIDIA NIM безплатни кредити** — интегрирани 1000 безплатни кредита +- **Стратегия за оптимизиране на разходите** — Стратегия за маршрутизиране, която автоматично избира най-евтиния наличен доставчик
-🆓 4. "I want to use AI for coding but I have no money" +🔒 5. „Трябва да защитя моя AI шлюз от неоторизиран достъп“ -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +При излагане на AI шлюз към мрежата (LAN, VPS, Docker), всеки с адреса може да използва токените/квотата на разработчика. Без защита приложните програмни интерфейси (API) са уязвими за злоупотреба, незабавно инжектиране и злоупотреба. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **API Key Management** — Генериране, ротация и обхват за всеки доставчик със специална страница `/dashboard/api-manager` +- **Разрешения на ниво модел** — Ограничете API ключовете до конкретни модели (`openai/*`, шаблони със заместващи символи), с превключвател Разрешаване на всички/Ограничаване +- **API Endpoint Protection** — Изискване на ключ за `/v1/models` и блокиране на определени доставчици от списъка +- **Auth Guard + CSRF Protection** — Всички маршрути на таблото са защитени с `withAuth` мидълуер + CSRF токени +- **Ограничител на скоростта** — Ограничаване на скоростта на IP с конфигурируеми прозорци +- **IP Filtering** — Списък с разрешени/списък с блокирани за контрол на достъпа +- **Prompt Injection Guard** — Дезинфекция срещу злонамерени бързи модели +- **AES-256-GCM криптиране** — Идентификационните данни са криптирани в покой
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🛑 6. „Доставчикът ми се срина и загубих потока на кодиране“ Доставчиците на AI могат да станат нестабилни, да върнат грешки 5xx или да достигнат временни лимити на скоростта. Ако разработчикът зависи от един доставчик, той е прекъснат. Без прекъсвачи многократните повторни опити могат да сринат приложението. -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +**Как OmniRoute го решава:** -**How OmniRoute solves it:** - -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Прекъсвач за всеки доставчик** — Автоматично отваряне/затваряне с конфигурируеми прагове и изчакване (затворено/отворено/полуотворено) +- **Exponential Backoff** — Прогресивни забавяния при повторен опит +- **Anti-Thundering Herd** — Mutex + семафорна защита срещу едновременни повторни бури +- **Combo Fallback Chains** — Ако основният доставчик се провали, автоматично преминава през веригата без намеса +- **Combo Circuit Breaker** — Автоматично деактивира неизправните доставчици в рамките на комбинирана верига +- **Health Dashboard** — Мониторинг на времето на работа, състояния на прекъсвачи, блокировки, статистика на кеша, латентност на p50/p95/p99
-🛑 6. "My provider went down and I lost my coding flow" +🔧 7. „Конфигурирането на всеки AI инструмент е досадно и повтарящо се“ -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Разработчиците използват Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Всеки инструмент се нуждае от различна конфигурация (крайна точка на API, ключ, модел). Преконфигурирането при смяна на доставчик или модел е загуба на време. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **CLI Tools Dashboard** — Специална страница с настройка с едно кликване за Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — Генерира `chatLanguageModels.json` за VS код с групов избор на модел +- **Onboarding Wizard** — Насочвана настройка в 4 стъпки за потребители за първи път +- **Една крайна точка, всички модели** — Конфигурирайте `http://localhost:20128/v1` веднъж, достъп до 36+ доставчици
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔑 8. „Управлението на OAuth токени от множество доставчици е ад“ -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Claude Code, Codex, Gemini CLI, Copilot — всички използват OAuth 2.0 с изтичащи токени. Разработчиците трябва постоянно да се удостоверяват повторно, да се справят с `client_secret is missing`, `redirect_uri_mismatch` и повреди на отдалечени сървъри. OAuth на LAN/VPS е особено проблематичен. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **Auto Token Refresh** — OAuth токените се опресняват във фонов режим преди изтичане +- **OAuth 2.0 (PKCE) Вграден** — Автоматичен поток за Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **Multi-Account OAuth** — Множество акаунти на доставчик чрез JWT/ID извличане на токени +- **OAuth LAN/Remote Fix** — Частно IP откриване за `redirect_uri` + ръчен URL режим за отдалечени сървъри +- **OAuth зад Nginx** — Използва `window.location.origin` за обратна прокси съвместимост +- **Отдалечено ръководство за OAuth** — Ръководство стъпка по стъпка за идентификационни данни на Google Cloud на VPS/Docker
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +📊 9. „Не знам колко харча или къде“ -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Разработчиците използват множество платени доставчици, но нямат унифициран поглед върху разходите. Всеки доставчик има собствено табло за таксуване, но няма консолидиран изглед. Неочакваните разходи могат да се натрупат. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Табло за анализ на разходите** — Проследяване на разходите за токени и управление на бюджета за доставчик +- **Бюджетни ограничения за ниво** — Таван на разходите за ниво, което задейства автоматично резервно връщане +- **Конфигурация на ценообразуване за модел** — Конфигурируеми цени за модел- **Статистика на използването на API ключ** — Брой заявки и последно използвано клеймо за всеки ключ +- **Табло за управление на анализи** — Статистически карти, диаграма на използването на модела, таблица на доставчика с проценти на успех и закъснение
-📊 9. "I don't know how much I'm spending or where" +🐛 10. „Не мога да диагностицирам грешки и проблеми в AI повиквания“ -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Когато обаждането е неуспешно, разработчикът не знае дали е ограничение на скоростта, изтекъл токен, грешен формат или грешка на доставчика. Фрагментирани регистрационни файлове в различни терминали. Без възможност за наблюдение отстраняването на грешки е метод проба-грешка. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Табло за управление на унифицирани регистрационни файлове** — 4 раздела: регистрационни файлове за заявки, регистрационни файлове за прокси, регистрационни файлове за одит, конзола +- **Console Log Viewer** — Преглед в стил терминал в реално време с цветно кодирани нива, автоматично превъртане, търсене, филтър +- **SQLite Proxy Logs** — Постоянни регистрационни файлове, които оцеляват при рестартиране на сървъра +- **Translator Playground** — 4 режима за отстраняване на грешки: Playground (превод на формат), Chat Tester (обиколно пътуване), Test Bench (партида), Live Monitor (в реално време) +- **Заявка за телеметрия** — p50/p95/p99 латентност + проследяване на X-Request-Id +- **Регистриране на базата на файлове с ротация** — Прехващачът на конзолата улавя всичко в JSON журнал с ротация, базирана на размера
-🐛 10. "I can't diagnose errors and problems in AI calls" +🏗️ 11. „Внедряването и поддържането на шлюза е сложно“ -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Инсталирането, конфигурирането и поддържането на AI прокси в различни среди (локални, VPS, Docker, облак) е трудоемко. Проблеми като твърдо кодирани пътища, `EACCES` в директории, конфликти на портове и междуплатформени компилации добавят триене. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **глобално инсталиране на npm** — `npm install -g omniroute && omniroute` — готово +- **Docker Multi-Platform** — роден AMD64 + ARM64 (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Docker Compose Profiles** — `base` (без CLI инструменти) и `cli` (с Claude Code, Codex, OpenClaw) +- **Electron Desktop App** — родно приложение за Windows/macOS/Linux със системна област, автоматично стартиране, офлайн режим +- **Split-Port Mode** — API и табло за управление на отделни портове за разширени сценарии (обратен прокси, контейнерна мрежа) +- **Cloud Sync** — Конфигуриране на синхронизиране между устройства чрез Cloudflare Workers +- **DB Backups** — Автоматично архивиране, възстановяване, експортиране и импортиране на всички настройки
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🌍 12. „Интерфейсът е само на английски и екипът ми не говори английски“ -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Екипите в неанглоговорящите страни, особено в Латинска Америка, Азия и Европа, се затрудняват с интерфейси само на английски. Езиковите бариери намаляват приемането и увеличават грешките в конфигурацията. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **Dashboard i18n — 30 езика** — Преведени всички 500+ клавиша, включително арабски, български, датски, немски, испански, фински, френски, иврит, хинди, унгарски, индонезийски, италиански, японски, корейски, малайски, холандски, норвежки, полски, португалски (PT/BR), румънски, руски, словашки, шведски, тайландски, украински, виетнамски, китайски, филипински, английски +- **RTL Support** — Поддръжка отдясно наляво за арабски и иврит +- **Многоезични READMEs** — 30 пълни превода на документация +- **Избор на език** — Икона на глобус в заглавката за превключване в реално време
+ +
+🔄 13. „Имам нужда от повече от чат — имам нужда от вграждания, изображения, аудио“ + +AI не е просто завършване на чат. Разработчиците трябва да генерират изображения, да транскрибират аудио, да създават вграждания за RAG, да прекласират документи и да модерират съдържание. Всеки API има различна крайна точка и формат. + +**Как OmniRoute го решава:** + +- **Вграждания** — `/v1/embeddings` с 6 доставчика и 9+ модела +- **Генериране на изображения** — `/v1/images/generations` с 10 доставчика и 20+ модела (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Текст към видео** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) и SD WebUI +- **Текст към музика** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Аудио транскрипция** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Текст-към-говор** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + съществуващи доставчици +- **Модерации** — `/v1/moderations` — Проверки за безопасност на съдържанието +- **Прекласиране** — `/v1/rerank` — Прекласиране на уместността на документа +- **API за отговори** — Пълна `/v1/responses` поддръжка за Codex
-🌍 12. "The interface is English-only and my team doesn't speak English" +🧪 14. „Нямам начин да тествам и сравнявам качеството между моделите“ -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Разработчиците искат да знаят кой модел е най-подходящ за техния случай на употреба – код, превод, разсъждения – но ръчното сравняване е бавно. Не съществуват интегрирани инструменти за оценка. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Оценки на LLM** — Тестване със златен комплект с 10 предварително заредени случая, обхващащи поздрави, математика, география, генериране на код, съответствие с JSON, превод, маркдаун, отказ за безопасност +- **4 стратегии за съвпадение** — `exact`, `contains`, `regex`, `custom` (JS функция) +- **Translator Playground Test Bench** — Пакетно тестване с множество входове и очаквани изходи, сравнение между доставчици +- **Chat Tester** — Пълно двупосочно пътуване с визуално изобразяване на отговора +- **Монитор на живо** — Поток в реално време на всички заявки, преминаващи през проксито
-🔄 13. "I need more than chat — I need embeddings, images, audio" +📈 15. „Трябва да мащабирам, без да губя производителност“ -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +Тъй като обемът на заявките нараства, без кеширане едни и същи въпроси генерират дублиращи се разходи. Без идемпотентност, дубликат иска обработка на отпадъци. Трябва да се спазват ограниченията за тарифите за всеки доставчик. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Семантичен кеш** — Двуслоен кеш (подпис + семантичен) намалява разходите и забавянето +- **Request Idempotency** — 5s прозорец за дедупликация за идентични заявки +- **Rate Limit Detection** — RPM на доставчик, минимална разлика и максимално едновременно проследяване +- **Редактируеми ограничения на скоростта** — Конфигурируеми настройки по подразбиране в Настройки → Устойчивост с постоянство +- **API Key Validation Cache** — 3-степенен кеш за производствена производителност +- **Здравно табло с телеметрия** — p50/p95/p99 латентност, статистика на кеша, ъптайм
-🧪 14. "I have no way to test and compare quality across models" +🤖 16. „Искам да контролирам поведението на модела глобално“ Разработчици, които искат всички отговори на конкретен език, със специфичен тон или искат да ограничат токените за мотивиране. Конфигурирането на това във всеки инструмент/заявка е непрактично. -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +**Как OmniRoute го решава:** -**How OmniRoute solves it:** - -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Инжектиране на системна подкана** — Глобална подкана, приложена към всички заявки +- **Thinking Budget Validation** — Разсъждаващ контрол на разпределението на токени за всяка заявка (преминаване, автоматично, персонализирано, адаптивно) +- **6 стратегии за маршрутизиране** — Глобални стратегии, които определят как се разпределят заявките +- **Wildcard Router** — моделите `provider/*` маршрутизират динамично към всеки доставчик +- **Combo Enable/Disable Toggle** — Превключвайте комбинации директно от таблото за управление +- **Превключване на доставчика** — Активирайте/деактивирайте всички връзки за доставчик с едно щракване +- **Блокирани доставчици** — Изключете определени доставчици от списъка `/v1/models`
-📈 15. "I need to scale without losing performance" +🧰 17. „Имам нужда от MCP инструменти като първокласни продуктови възможности“ -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +Много AI шлюзове разкриват MCP само като скрит детайл за изпълнение. Екипите се нуждаят от видим, управляем оперативен слой. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- MCP се появява в раздела за навигация на таблото за управление и протокол на крайна точка +- Специализирана страница за управление на MCP с процес, инструменти, обхвати и одит +- Вграден бърз старт за `omniroute --mcp` и включване на клиента
-🤖 16. "I want to control model behavior globally" +🧠 18. „Имам нужда от A2A оркестрация със синхронизиране + пътеки на задачи за поток“ -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Работните потоци на агентите се нуждаят както от директни отговори, така и от дълготрайно поточно изпълнение с контрол на жизнения цикъл. -**How OmniRoute solves it:** +**Как OmniRoute го решава:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- A2A JSON-RPC крайна точка (`POST /a2a`) с `message/send` и `message/stream` +- SSE поточно предаване с разпространение на състоянието на терминала +- API на жизнения цикъл на задачата за `tasks/get` и `tasks/cancel`
+
+🛰️ 19. „Имам нужда от реално състояние на MCP процес, а не от познат статус“ + +Оперативните екипи трябва да знаят дали MCP действително е жив, а не само дали API е достъпен. + +**Как OmniRoute го решава:** + +- Сърдечен файл по време на изпълнение с PID, времеви отпечатъци, транспорт, брой инструменти и режим на обхват +- API за състояние на MCP, комбиниращ сърдечен ритъм + скорошна активност +- Карти за състояние на потребителския интерфейс за свежест на процеса/време на работа/пулс + +
+ +
+📋 20. „Имам нужда от изпълнение на MCP инструмент с възможност за проверка“ + +Когато инструментите променят конфигурацията или задействат оперативни действия, екипите се нуждаят от криминалистична проследимост. + +**Как OmniRoute го решава:** + +- Поддържано от SQLite одитно регистриране за извиквания на MCP инструмент +- Филтрира по инструмент, успех/неуспех, API ключ и пагинация +- Таблица за одит на таблото + статистически крайни точки за автоматизация + +
+ +
+🔐 21. „Имам нужда от MCP разрешения с обхват за интеграция“ + +Различните клиенти трябва да имат най-малко привилегирован достъп до категории инструменти. + +**Как OmniRoute го решава:** + +- 9 гранулирани MCP обхвата за контролиран достъп до инструмента +- Налагане на обхват и видимост в потребителския интерфейс за управление на MCP +- Безопасна поза по подразбиране за оперативни инструменти + +
+ +
⚙️ 22. „Имам нужда от оперативни контроли без повторно разполагане“ + +Екипите се нуждаят от бързи промени във времето на изпълнение по време на инциденти или разходни събития. + +**Как OmniRoute го решава:** + +- Превключете комбо активирането директно от таблото за управление на MCP +- Прилагайте профили на устойчивост от предварително дефинирани пакети с правила +- Нулирайте състоянието на прекъсвача от същия операционен панел + +
+ +
+🔄 23. „Имам нужда от видимост и анулиране на жизнения цикъл на задачите A2A на живо“ + +Без видимост на жизнения цикъл инцидентите със задачи стават трудни за сортиране. + +**Как OmniRoute го решава:** + +- Списък със задачи/филтриране по състояние/умение с пагинация +- Разбивка на метаданни, събития и артефакти на задачи +- Крайна точка за анулиране на задача и действие на потребителския интерфейс с потвърждение + +
+ +
+🌊 24. „Имам нужда от показатели за активен поток за A2A натоварване“ + +Поточните работни потоци изискват оперативно вникване в паралелността и живите връзки. + +**Как OmniRoute го решава:** + +- Броячи на активни потоци, интегрирани в статуса A2A +- Времево клеймо на последната задача и брой на състоянието +- A2A карти на таблото за наблюдение на операциите в реално време + +
+ +
+🪪 25. „Имам нужда от стандартно откриване на агент за клиенти“ + +Външните клиенти и оркестраторите се нуждаят от машинночетими метаданни за включване. + +**Как OmniRoute го решава:** + +- Карта на агент, изложена на `/.well-known/agent.json` +- Възможности и умения, показани в потребителския интерфейс за управление +- API за състояние A2A включва метаданни за откриване за автоматизация + +
+ +
+🧭 26. „Имам нужда от откриваемост на протокола в UX на продукта“ + +Ако потребителите не могат да открият повърхности на протокола, качеството на приемане и поддръжка пада. + +**Как OmniRoute го решава:** + +- Записи в страничната лента за MCP и A2A +- Страница с крайна точка Раздел Протоколи с бърз старт и състояние +- Връзки от преглед към специални табла за управление + +
+ +
+🧪 27. „Имам нужда от валидиране на протокол от край до край с реални клиенти“ + +Фалшивите тестове не са достатъчни за валидиране на съвместимостта на протокола преди пускане. + +**Как OmniRoute го решава:** + +- E2E пакет, който зарежда приложение и използва реален MCP SDK клиентски транспорт +- Клиент A2A тества за потоци откриване, изпращане, поточно предаване, получаване и отмяна +- Кръстосана проверка на твърдения срещу MCP одит и API на A2A задачи + +
+ +
+📡 28. „Имам нужда от унифицирана наблюдаемост във всички интерфейси“ + +Разделянето на наблюдаемостта по протокол създава слепи зони и по-дълъг MTTR. + +**Как OmniRoute го решава:** + +- Унифицирани табла за управление/логове/аналитика в един продукт +- Здраве + одит + заявка за телеметрия в OpenAI, MCP и A2A слоеве +- Оперативни API за статус и автоматизация + +
+ +
+💼 29. „Имам нужда от едно време за изпълнение за прокси + инструменти + оркестрация на агенти“ + +Изпълнението на много отделни услуги увеличава оперативните разходи и режимите на отказ. + +**Как OmniRoute го решава:**- OpenAI-съвместим прокси, MCP сървър и A2A сървър в един стек + +- Споделено удостоверяване, устойчивост, съхранение на данни и възможност за наблюдение +- Последователен модел на политика във всички повърхности на взаимодействие + +
+ +
+🚀 30. „Трябва да изпратя агентски работни потоци без разрастване на лепен код“ + +Екипите губят скорост, когато свързват множество ad-hoc услуги и скриптове. + +**Как OmniRoute го решава:** + +- Единна стратегия за крайни точки за клиенти и агенти +- Вграден потребителски интерфейс за управление на протоколи и пътеки за проверка на дим +- Готови за производство основи (сигурност, регистриране, устойчивост, архивиране) + +
+ +### Примерни книги за игри (интегрирани случаи на употреба) + +**Playbook A: Увеличете максимално платения абонамент + евтино архивиране** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: Стек за кодиране с нулеви разходи** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: 24/7 винаги включена резервна верига** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: Операции на агент с MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Бърз старт -**1. Инсталирайте глобално:** +### 1) Инсталирайте и стартирайте ```bash npm install -g omniroute omniroute ``` -🎉 Таблото за управление се отваря на `http://localhost:20128` +Таблото за управление се отваря на `http://localhost:20128` и основният URL адрес на API е `http://localhost:20128/v1`. -| Команда | Описание | -| ----------------------- | ----------------------------------------------- | -| `omniroute` | Стартирайте сървър (порт по подразбиране 20128) | -| `omniroute --port 3000` | Използвайте персонализиран порт | -| `omniroute --no-open` | Без автоматично отваряне на браузъра | -| `omniroute --help` | Показване на помощ | +| Команда | Описание | +| ----------------------- | ---------------------------------------------------------------------------- | +| `omniroute` | Стартиране на сървър (`PORT=20128`, API и табло за управление на същия порт) | +| `omniroute --port 3000` | Задайте каноничен/API порт на 3000 | +| `omniroute --mcp` | Стартирайте MCP сървър (stdio транспорт) | +| `omniroute --no-open` | Без автоматично отваряне на браузъра | +| `omniroute --help` | Показване на помощ | -**2. Свържете БЕЗПЛАТЕН доставчик:** +Допълнителен режим на разделен порт: -Табло → Доставчици → Свържете **Claude Code** или **Antigravity** → OAuth влизане → Готово! - -**3. Използвайте във вашия CLI инструмент:** - -``` -Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings: - Endpoint: http://localhost:20128/v1 - API Key: [copy from dashboard] - Model: if/kimi-k2-thinking +```bash +PORT=20128 DASHBOARD_PORT=20129 omniroute +# API: http://localhost:20128/v1 +# Dashboard: http://localhost:20129 ``` -**Това е!** Започнете да кодирате с БЕЗПЛАТНИ AI модели. +### 2) Свържете доставчици и създайте своя API ключ -**Алтернатива — стартиране от източника:** +1. Отворете таблото за управление → `Providers` и свържете поне един доставчик (OAuth или API ключ). +2. Отворете таблото за управление → `Endpoint` и създайте API ключ. +3. (По избор) Отворете таблото за управление → `Combos` и задайте вашата резервна верига. + +### 3) Насочете вашия инструмент за кодиране към OmniRoute + +```txt +Base URL: http://localhost:20128/v1 +API Key: [copy from Endpoint page] +Model: if/kimi-k2-thinking (or any provider/model prefix) +``` + +Работи с Claude Code, Codex CLI, Gemini CLI, Cursor, Cline, OpenClaw, OpenCode и OpenAI-съвместими SDK. + +### 4) Активиране и валидиране на протоколи (v2.0) + +**MCP (за операции, управлявани от инструмент):** + +```bash +omniroute --mcp +``` + +След това свържете вашия MCP клиент през `stdio` и тествайте инструменти като: + +- `omniroute_get_health` +- `omniroute_list_combos` + +**A2A (за работни процеси от агент към агент):** + +```bash +curl http://localhost:20128/.well-known/agent.json +``` + +```bash +curl -X POST http://localhost:20128/a2a \ + -H 'content-type: application/json' \ + -d '{"jsonrpc":"2.0","id":"quickstart","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Give me a short quota summary."}]}}' +``` + +### 5) Валидирайте всичко от край до край (препоръчително) + +```bash +npm run test:protocols:e2e +``` + +Този пакет валидира реални MCP и A2A клиентски потоци срещу работещо приложение. + +### Алтернатива: стартирайте от източника ```bash cp .env.example .env npm install -PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev +PORT=20128 DASHBOARD_PORT=20129 NEXT_PUBLIC_BASE_URL=http://localhost:20129 npm run dev ``` --- ## 🐳 Докер -OmniRoute е наличен като публично изображение на Docker на [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute). +OmniRoute се предлага като публично изображение на Docker в [Docker Hub] (https://hub.docker.com/r/diegosouzapw/omniroute). **Бързо бягане:** @@ -504,27 +808,38 @@ docker compose --profile cli up -d --- ---- +## 🖥️ -## 🖥️ Desktop App — Offline & Always-On +Стартирайте OmniRoute като самостоятелно настолно приложение — без терминал, без браузър, без интернет, необходим за локалните модели. Базираното на Electron приложение включва: -> 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. +- 🖥️ **Собствен прозорец** — Специален прозорец на приложението с интеграция в системната област +- 🔄 **Автоматично стартиране** — Стартирайте OmniRoute при влизане в системата +- 🔔 **Нативни известия** — Получавайте сигнали за изчерпване на квотата или проблеми с доставчика +- ⚡ **Инсталиране с едно щракване** — NSIS (Windows), DMG (macOS), AppImage (Linux) +- 🌐 **Офлайн режим** — Работи напълно офлайн с пакетния сървър -- 🖥️ **Native Window** — Dedicated app window with system tray integration -- 🔄 **Auto-Start** — Launch OmniRoute on system login -- 🔔 **Native Notifications** — Get alerts for quota exhaustion or provider issues -- ⚡ **One-Click Install** — NSIS (Windows), DMG (macOS), AppImage (Linux) -- 🌐 **Offline Mode** — Works fully offline with bundled server +### Бърз старт ```bash -npm run electron:dev # Development mode +# Development mode +npm run electron:dev + +# Build for your platform npm run electron:build # Current platform npm run electron:build:win # Windows (.exe) -npm run electron:build:mac # macOS (.dmg) +npm run electron:build:mac # macOS (.dmg) — x64 & arm64 npm run electron:build:linux # Linux (.AppImage) ``` -📖 Full documentation: [`electron/README.md`](electron/README.md) +### Системна област + +Когато е минимизиран, OmniRoute живее в системната област с бързи действия: + +- Отворете таблото +- Промяна на сървърния порт +- Излезте от приложението + +📖 Пълна документация: [`electron/README.md`](electron/README.md) --- @@ -555,233 +870,223 @@ npm run electron:build:linux # Linux (.AppImage) ## 💡 Основни характеристики -### 🧠 Основно маршрутизиране и разузнаване +OmniRoute v2.0 е създаден като операционна платформа, а не просто релейно прокси. -| Характеристика | Какво прави | -| ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| 🎯 **Интелигентен 4-степенен резервен вариант** | Автоматичен маршрут: Абонамент → API ключ → Евтини → Безплатно | -| 📊 **Проследяване на квоти в реално време** | Брой токени на живо + нулиране на обратното броене на доставчик | -| 🔄 **Форматиране на превода** | OpenAI ↔ Клод ↔ Близнаци ↔ Курсор ↔ Киро безпроблемно + дезинфекция на отговора | -| 👥 **Поддръжка за множество акаунти** | Няколко акаунта на доставчик с интелигентен избор | -| 🔄 **Автоматично опресняване на токени** | OAuth токените се опресняват автоматично с повторен опит | -| 🎨 **Персонализирани комбинации** | 6 стратегии: първо попълване, кръгова система, p2c, произволна, най-малко използвана, оптимизирана по отношение на разходите | -| 🧩 **Персонализирани модели** | Добавете всеки модел ID към който и да е доставчик | -| 🌐 **Wildcard Router** | Насочвайте `provider/*` шаблони към всеки доставчик динамично | -| 🧠 **Мислен бюджет** | Преминаване, автоматичен, персонализиран и адаптивен режим за модели на разсъждение | -| 🔀 **Model Aliases** | Auto-forward deprecated model IDs to current replacements (built-in + custom) | -| ⚡ **Background Degradation** | Auto-route background tasks (titles, summaries) to cheaper models | -| 💬 **Системно бързо инжектиране** | Глобална системна подкана, приложена към всички заявки | -| 📄 **API за отговори** | Пълна поддръжка на OpenAI Responses API (`/v1/responses`) за Codex | +### 🤖 Операции на агент и протокол (v2.0)| Характеристика | Какво прави | + +| ------------------------------------ | -------------------------------------------------------------------------------- | +| 🔧 **MCP сървър (16 инструмента)** | Инструментите за IDE/агент контролират маршрутизиране, здраве, комбинации, ограничения и операции | +| 🤝 **A2A сървър (JSON-RPC + SSE)** | Изпълнение на задачи от агент към агент със синхронизиране и поточно предаване | +| 🧭 **MCP/A2A табла за управление** | Специализирани страници за управление (`/dashboard/mcp`, `/dashboard/a2a`) | +| 🛰️ **MCP Runtime Heartbeat** | Реално състояние на процеса (pid, време на работа, възраст на сърдечния ритъм, транспорт, режим на обхвата) | +| 📋 **MCP одитна пътека** | Филтрируеми журнали за одит с успех/неуспех и ключово приписване | +| 🔐 **Прилагане на обхват на MCP** | 9 подробни разрешения за обхват за контролиран достъп до инструменти | +| 📡 **A2A Управление на жизнения цикъл на задачите** | Списък/филтриране на задачи, проверка на събития/артефакти, отмяна на изпълнявани задачи | +| 📋 **Откриване на карта на агент** | `/.well-known/agent.json` за автоматично откриване на клиент | +| 🧪 **Протокол E2E Тестова система** | Истински MCP SDK + A2A клиентски потоци в `test:protocols:e2e` | +| ⚙️ **Оперативни контроли** | Превключете комбо, приложете профили на устойчивост, нулирайте прекъсвачите от една контролна повърхност | + +### 🧠 Маршрутизиране и разузнаване + +| Характеристика | Какво прави | +| ----------------------------------------------- | ---------------------------------------------------------------------------- | +| 🎯 **Интелигентен 4-степенен резервен вариант** | Автоматичен маршрут: Абонамент → API ключ → Евтини → Безплатно | +| 📊 **Проследяване на квоти в реално време** | Брой токени на живо + нулиране на обратното броене на доставчик | +| 🔄 **Форматиране на превода** | OpenAI ↔ Claude ↔ Gemini ↔ Отговори с безопасни за схема преобразувания | +| 👥 **Поддръжка за множество акаунти** | Няколко акаунта на доставчик с интелигентен избор | +| 🔄 **Автоматично опресняване на токени** | OAuth токените се опресняват автоматично с повторен опит | +| 🎨 **Персонализирани комбинации** | 6 стратегии за балансиране + резервен контрол на веригата | +| 🌐 **Wildcard Router** | `provider/*` динамично маршрутизиране | +| 🧠 **Мислене за контрол на бюджета** | Лимити за преминаване, автоматични, персонализирани и адаптивни разсъждения | +| 🔀 **Псевдоними на модели** | Вграден + персонализиран псевдоним на модела и безопасност на миграцията | +| ⚡ **Влошаване на фона** | Насочване на фонови задачи с нисък приоритет към по-евтини модели | +| 💬 **Системно бързо инжектиране** | Глобални контроли на поведението, прилагани последователно | +| 📄 **Съвместимост с API за отговори** | Пълна `/v1/responses` поддръжка за Codex и разширени агентни работни процеси | ### 🎵 Мултимодални API -| Характеристика | Какво прави | -| -------------------------------- | ----------------------------------------------------------- | -| 🖼️ **Генериране на изображения** | `/v1/images/generations` — 4 доставчика, 9+ модела | -| 📐 **Вграждания** | `/v1/embeddings` — 6 доставчика, 9+ модела | -| 🎤 **Аудио транскрипция** | `/v1/audio/transcriptions` — Съвместим с Whisper | -| 🔊 **Текст към говор** | `/v1/audio/speech` — Синтез на аудио с множество доставчици | -| 🛡️ **Модерации** | `/v1/moderations` — Проверки за безопасност на съдържанието | -| 🔀 **Прекласиране** | `/v1/rerank` — Прекласиране на уместността на документа | +| Характеристика | Какво прави || -------------------------- | ------------------------------------------------------------ | +| 🖼️ **Генериране на изображения** | `/v1/images/generations` с облак и локален бекенд | +| 📐 **Вграждания** | `/v1/embeddings` за търсене и RAG тръбопроводи | +| 🎤 **Аудио транскрипция** | `/v1/audio/transcriptions` (Whisper и допълнителни доставчици) | +| 🔊 **Текст към говор** | `/v1/audio/speech` (множество машини/доставчици) | +| 🎬 **Видео генериране** | `/v1/videos/generations` (работни процеси ComfyUI + SD WebUI) | +| 🎵 **Музикално поколение** | `/v1/music/generations` (работни процеси на ComfyUI) | +| 🛡️ **Модерации** | `/v1/moderations` проверки за безопасност | +| 🔀 **Прекласиране** | `/v1/rerank` за оценка на уместността | -### 🛡️ Устойчивост и сигурност +### 🛡️ Устойчивост, сигурност и управление -| Характеристика | Какво прави | -| -------------------------------------------- | ----------------------------------------------------------------------------------------------- | -| 🔌 **Прекъсвач** | Автоматично отваряне/затваряне за всеки доставчик с конфигурируеми прагове | -| 🛡️ **Anti-Thundering Herd** | Mutex + ограничение на скоростта на семафор за доставчици на API ключ | -| 🧠 **Семантичен кеш** | Двуслоен кеш (подпис + семантичен) намалява разходите и забавянето | -| ⚡ **Искане на идемпотентност** | 5s прозорец за дедупиране за дублирани заявки | -| 🔒 **TLS Fingerprint Spoofing** | Заобикаляне на TLS-базирано откриване на бот чрез wreq-js | -| 🌐 **IP филтриране** | Списък с разрешени/блокирани за контрол на достъпа до API | -| 📊 **Редактируеми ограничения на скоростта** | Конфигурируеми обороти в минута, минимална разлика и максимална едновременност на системно ниво | -| 💾 **Rate Limit Persistence** | Learned limits survive restarts via SQLite with 60s debounce + 24h staleness | -| 🔄 **Token Refresh Resilience** | Per-provider circuit breaker (5 fails→30min) + 30s timeout per attempt | -| 🛡 **API Endpoint Protection** | Удостоверяване + блокиране на доставчик за крайната точка `/models` | -| 🔒 **Прокси видимост** | Цветно кодирани значки: 🟢 глобален, 🟡 доставчик, 🔵 за връзка с IP дисплей | -| 🌐 **3-ниво на прокси конфигурация** | Конфигуриране на прокси сървъри на глобално ниво, на ниво доставчик или на ниво връзка | +| Характеристика | Какво прави | +| -------------------------------------------- | ---------------------------------------------------------------------- | +| 🔌 **Прекъсвачи** | Пътуване/възстановяване на ниво доставчик с прагови контроли | +| 🛡️ **Anti-Thundering Herd** | Защита на Mutex + семафор при събития за повторен опит/скорост | +| 🧠 **Семантичен + кеш на подписа** | Намаляване на разходите/закъснението с два кеш слоя | +| ⚡ **Искане на идемпотентност** | Дублиран защитен прозорец | +| 🔒 **TLS Fingerprint Spoofing** | По-добра съвместимост с доставчици, филтрирани срещу бот | +| 🌐 **IP филтриране** | Списък с разрешени/списъци с блокирани контроли за открити внедрявания | +| 📊 **Редактируеми ограничения на скоростта** | Конфигурируеми глобални/на ниво доставчик ограничения с постоянство | +| 🔑 **API Key Management + Scoping** | Сигурно издаване/ротация на ключове и контроли на модел/доставчик | +| 🛡️ **Защитен `/models`** | Опционално удостоверяване и скриване на доставчик за каталог на модели | ### 📊 Наблюдаемост и анализ -| Характеристика | Какво прави | -| ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| 📝 **Заявка за регистриране** | Режим на отстраняване на грешки с пълни журнали за заявки/отговори | -| 💾 **SQLite прокси регистрационни файлове** | Постоянните регистрационни файлове на прокси сървъра преживяват рестартиране на сървър | -| 📊 **Табло за управление на анализи** | Задвижва се от Recharts: статистически карти, диаграма за използване на модели, таблица на доставчик | -| 📈 **Проследяване на напредъка** | Включване на събития за прогрес на SSE за стрийминг | -| 🧪 **Оценки на LLM** | Тестване на златен сет с 4 стратегии за мач | -| 🔍 **Заявка за телеметрия** | p50/p95/p99 агрегиране на латентност + проследяване на X-Request-Id | -| 📋 **Табло за управление на регистрационни файлове** | Унифицирана страница с 4 раздела: регистрационни файлове на заявки, регистрационни файлове на прокси, регистрационни файлове за одит, конзола | -| 🖥️ **Console Log Viewer** | Визуализатор в стил терминал в реално време с филтър за ниво, търсене, автоматично превъртане | -| 📑 **Регистриране на базата на файлове** | Прихващачът на конзолата улавя целия изход в JSON лог файл с ротация | -| 🏥 **Здравно табло** | Работно време на системата, състояния на прекъсвачи, блокировки, статистика на кеша | -| 💰 **Проследяване на разходите** | Управление на бюджета + конфигурация на ценообразуване за модел | +| Характеристика | Какво прави | +| ---------------------------------------------------------------- | ------------------------------------------------------------------------ | +| 📝 **Заявка + Регистриране на прокси сървър** | Пълно регистриране на заявка/отговор и прокси | +| 📋 **Табло за управление на унифицирани регистрационни файлове** | Изгледи на заявка, прокси, одит и конзола на една страница | +| 🔍 **Заявка за телеметрия** | p50/p95/p99 латентност и проследяване на заявки | +| 🏥 **Здравно табло** | Време на работа, състояния на прекъсване, блокировки, статистика на кеша | +| 💰 **Проследяване на разходите** | Контрол на бюджета и видимост на ценообразуването за модел | +| 📈 **Аналитични визуализации** | Прозрения за използването на модел/доставчик и изгледи на тенденции | +| 🧪 **Рамка за оценка** | Тестване на златен набор с конфигурируеми стратегии за мач | -### ☁️ Внедряване и синхронизиране +### ☁️ Внедряване и платформа -| Характеристика | Какво прави | -| ----------------------------------------- | ---------------------------------------------------------------------------------------- | -| 💾 **Синхронизиране в облак** | Синхронизирайте конфигурацията между устройства чрез Cloudflare Workers | -| 🌐 **Разполагане навсякъде** | Localhost, VPS, Docker, Cloudflare Workers | -| 🔑 **API Key Management** | Генериране, завъртане и обхват на API ключове за всеки доставчик | -| 🧙 **Съветник за присъединяване** | Насочвана настройка в 4 стъпки за потребители за първи път | -| 🔧 **CLI Tools Dashboard** | Конфигурирайте с едно кликване Claude, Codex, Cline, OpenClaw, Kilo, Antigravity | -| 🔄 **Архивиране на DB** | Автоматично архивиране, възстановяване, експортиране и импортиране за всички настройки | -| 🌐 **Интернационализация** | Пълен i18n с next-intl — поддръжка на английски + португалски (Бразилия) | -| 🌍 **Избор на език** | Икона на глобус в заглавката за превключване на език в реално време (🇺🇸/🇧🇷) | -| 📂 **Директория с персонализирани данни** | `DATA_DIR` env променлива за замяна на пътя за съхранение по подразбиране `~/.omniroute` | +| Характеристика | Какво прави | +| ----------------------------------------- | ------------------------------------------------------------------------- | --- | ----------------------------- | ------------------------------------------------------ | +| 🌐 **Разполагане навсякъде** | Localhost, VPS, Docker, облачни среди | | 💾 **Синхронизиране в облак** | Синхронизиране на конфигурацията чрез облачен работник | +| 🔄 **Архивиране/Възстановяване** | Експорт/импорт и потоци за възстановяване след бедствие | +| 🧙 **Съветник за присъединяване** | Насочвана настройка при първо стартиране | +| 🔧 **CLI Tools Dashboard** | Настройка с едно щракване за популярни инструменти за кодиране | +| 🌐 **i18n (30 езика)** | Пълно табло за управление + езикова поддръжка на документи с RTL покритие | +| 📂 **Директория с персонализирани данни** | `DATA_DIR` отмяна за място за съхранение | -
-📖 Подробности за функцията +### Функция Deep Dive -### 🎯 Интелигентен 4-степенен резервен вариант +#### Интелигентен резервен вариант с практичен контрол на разходите -Създавайте комбинации с автоматичен резервен вариант: - -``` +```txt Combo: "my-coding-stack" - 1. cc/claude-opus-4-6 (your subscription) - 2. nvidia/llama-3.3-70b (free NVIDIA API) - 3. glm/glm-4.7 (cheap backup, $0.6/1M) - 4. if/kimi-k2-thinking (free fallback) - -→ Auto switches when quota runs out or errors occur + 1. cc/claude-opus-4-6 + 2. nvidia/llama-3.3-70b + 3. glm/glm-4.7 + 4. if/kimi-k2-thinking ``` -### 📊 Проследяване на квоти в реално време +Когато квотата, скоростта или здравето са неуспешни, OmniRoute автоматично преминава към следващия кандидат без ръчно превключване. -- Консумация на токени на доставчик -- Нулиране на обратното броене (5 часа, ежедневно, седмично) -- Оценка на разходите за платени нива -- Месечни отчети за разходите +#### Управление на протоколи, което е видимо и работещо -### 🔄 Превод на формат +- MCP + A2A са откриваеми в UI и документи (не са скрити) +- API за състояние на протокола разкриват оперативни данни на живо (`/api/mcp/*`, `/api/a2a/*`) +- Таблата за управление включват действия за операции от ден 2 (комбо превключвания, нулиране на прекъсвача, анулиране на задача) -Безпроблемен превод между формати: +#### Преводач + работен процес за валидиране -- **OpenAI** ↔ **Клод** ↔ **Близнаци** ↔ **Отговори на OpenAI** -- Вашият CLI инструмент изпраща OpenAI формат → OmniRoute превежда → Доставчикът получава собствен формат -- Работи с всеки инструмент, който поддържа персонализирани крайни точки на OpenAI -- **Дезифициране на отговора** — Премахва нестандартните полета за стриктна съвместимост с OpenAI SDK -- **Нормализиране на ролята** — `developer` → `system` за не-OpenAI; `system` → `user` за GLM/ERNIE модели -- **Извличане на мислене на тагове** — `` блокове → `reasoning_content` за мислещи модели -- **Структуриран изход** — `json_schema` → `responseMimeType`/`responseSchema` на Gemini +Зоната за преводач включва: -### 👥 Поддръжка за няколко акаунта +- **Playground**: поискайте проверки за трансформация +- **Chat Tester**: пълна заявка/отговор двупосочно +- **Тестова стенда**: множество случаи в едно изпълнение +- **Монитор на живо**: изглед на трафика в реално време -- Добавете няколко акаунта на доставчик -- Автоматично кръгово или базирано на приоритет маршрутизиране -- Връщане към следващия акаунт, когато някой достигне квотата +Плюс валидиране на протокол с реални клиенти чрез `npm run test:protocols:e2e`. -### 🔄 Автоматично опресняване на токени +> 📖 **[MCP Server README](open-sse/mcp-server/README.md)** — Справка за инструмента, IDE конфигурации и примери за клиенти +> +> 📖 **[A2A Server README](src/lib/a2a/README.md)** — Умения, JSON-RPC методи, поточно предаване и жизнен цикъл на задачите -- OAuth токените се опресняват автоматично преди изтичане -- Не е необходимо ръчно повторно удостоверяване -- Безпроблемно изживяване при всички доставчици +## 🧪 Оценки (Evals) -### 🎨 Персонализирани комбинации +OmniRoute включва вградена рамка за оценка за тестване на качеството на отговора на LLM спрямо златен набор. Достъп до него чрез **Analytics → Evals** в таблото за управление. -- Създавайте неограничени комбинации от модели -- 6 стратегии: първо попълване, кръгъл-робин, сила на два избора, произволна, най-малко използвана, оптимизирана по отношение на разходите -- Споделяйте комбинации между устройства с Cloud Sync +### Вграден златен комплект -### 🏥 Здравно табло +Предварително зареденият "OmniRoute Golden Set" съдържа тестови случаи за: -- Състояние на системата (време на работа, версия, използване на паметта) -- Състояния на прекъсвача за всеки доставчик (затворен/отворен/полуотворен) -- Състояние на ограничение на скоростта и активни блокировки -- Статистика за кеша на подписите -- Телеметрия за забавяне (p50/p95/p99) + кеш за подкани -- Нулирайте здравословното състояние с едно щракване +- Поздрави, математика, география, генериране на код +- Съответствие с JSON формат, превод, генериране на маркдаун +- Отказ за безопасност (вредно съдържание), броене, булева логика -### 🔧 Площадка за преводачи +### Стратегии за оценка -OmniRoute включва мощна вградена игра за преводачи с **4 режима** за отстраняване на грешки, тестване и наблюдение на API преводи: - -| Режим | Описание | -| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **💻 Детска площадка** | Директен превод на формат — поставете всяко тяло на заявка за API и незабавно вижте как OmniRoute го превежда между формати на доставчик (OpenAI ↔ Claude ↔ Gemini ↔ Responses API). Включва примерни шаблони и автоматично откриване на формати. | -| **💬 Тестер за чат** | Изпращайте реални заявки за чат чрез OmniRoute и вижте пълното пътуване: вашият вход, преведената заявка, отговорът на доставчика и преведеният отговор обратно. Безценен за валидиране на комбинирано маршрутизиране. | -| **🧪 Тестова стенда** | Режим на пакетно тестване — дефинирайте множество тестови случаи с различни входове и очаквани изходи, стартирайте ги всички наведнъж и сравнете резултатите между доставчици и модели. | -| **📱 Монитор на живо** | Мониторинг на заявки в реално време — наблюдавайте входящите заявки, докато преминават през OmniRoute, вижте преводите на формати, които се случват на живо, и незабавно идентифицирайте проблемите. | - -**Достъп:** Табло за управление → Преводач (странична лента) - -### 💾 Облачно синхронизиране - -- Синхронизиране на доставчици, комбинации и настройки на всички устройства -- Автоматична фонова синхронизация -- Сигурно криптирано съхранение - -
- ---- - -## 🎯 Случаи на употреба - -### Случай 1: „Имам абонамент за Claude Pro“ - -**Проблем:** Квотата изтича неизползвана, ограничения на скоростта по време на тежко кодиране - -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) - -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` - -### Случай 2: „Искам нулеви разходи“ - -**Проблем:** Не мога да си позволя абонаменти, имам нужда от надеждно AI кодиране - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Случай 3: „Имам нужда от кодиране 24/7, без прекъсвания“ - -**Проблем:** Крайни срокове, не мога да си позволя престой - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Случай 4: „Искам БЕЗПЛАТЕН AI в OpenClaw“ - -**Проблем:** Имате нужда от AI асистент в приложенията за съобщения, напълно безплатно - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Стратегия | Описание | Пример | +| ---------- | ----------------------------------------------------------------------- | -------------------------------- | +| `exact` | Изходът трябва да съвпада точно | `"4"` | +| `contains` | Изходът трябва да съдържа подниз (без значение за малки и големи букви) | `"Paris"` | +| `regex` | Изходът трябва да съответства на модела на регулярен израз | `"1.*2.*3"` | +| `custom` | Персонализираната JS функция връща true/false | `(output) => output.length > 10` | --- ## 📖 Ръководство за настройка +### Настройка на протокол (MCP + A2A) +
-💳 Доставчици на абонамент +🧩 Настройка на MCP (протокол на контекста на модела) + +Стартирайте MCP транспорт в режим stdio: + +```bash +omniroute --mcp +``` + +Препоръчителен поток за валидиране: + +1. Свържете вашия MCP клиент през stdio. +2. Стартирайте `omniroute_get_health`. +3. Стартирайте `omniroute_list_combos`. +4. Отворете `/dashboard/mcp`, за да потвърдите сърдечен ритъм, активност и проверка. + +Полезни API за автоматизация: + +- `GET /api/mcp/status` +- `GET /api/mcp/tools` +- `GET /api/mcp/audit` +- `GET /api/mcp/audit/stats` + +
+ +
🤝 Настройка на A2A (Agent2Agent) + +Открийте агента: + +```bash +curl http://localhost:20128/.well-known/agent.json +``` + +Изпратете задача: + +```bash +curl -X POST http://localhost:20128/a2a \ + -H 'content-type: application/json' \ + -d '{"jsonrpc":"2.0","id":"setup-a2a","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Summarize quota status."}]}}' +``` + +Управление на жизнения цикъл: + +- `GET /api/a2a/status` +- `GET /api/a2a/tasks` +- `GET /api/a2a/tasks/:id` +- `POST /api/a2a/tasks/:id/cancel` + +Оперативен потребителски интерфейс: + +- `/dashboard/a2a` за видимост на задача/състояние/поток и димни действия + +
+ +
+🧪 Проверка на протокол от край до край + +Валидирайте и двата протокола с реални клиенти: + +```bash +npm run test:protocols:e2e +``` + +Това потвърждава: + +- MCP SDK клиент за свързване/списък/обаждане +- A2A откриване/изпращане/поток/получаване/отказ +- Кръстосана проверка на данни в MCP одит и API за управление на задачи A2A + +
+ +
+💳 Доставчици на абонамент ### Claude Code (Pro/Max) @@ -840,7 +1145,7 @@ Models:
-🔑 API Key Providers +🔑 API ключови доставчици ### NVIDIA NIM (БЕЗПЛАТНИ 1000 кредита!) @@ -882,7 +1187,7 @@ Models:
-💰 Евтини доставчици (резервни) +💰 Евтини доставчици (резервни) ### GLM-4.7 (Ежедневно нулиране, $0,6/1 млн.) @@ -921,20 +1226,20 @@ Models:
🆓 БЕЗПЛАТНИ доставчици (Спешно архивиране) -### iFlow (8 БЕЗПЛАТНИ модела) +### iFlow (8 БЕЗПЛАТНИ модела)```bash -```bash Dashboard → Connect iFlow → iFlow OAuth login → Unlimited usage Models: - if/kimi-k2-thinking - if/qwen3-coder-plus - if/glm-4.7 - if/minimax-m2 - if/deepseek-r1 -``` +if/kimi-k2-thinking +if/qwen3-coder-plus +if/glm-4.7 +if/minimax-m2 +if/deepseek-r1 + +```` ### Qwen (3 БЕЗПЛАТНИ модела) @@ -946,7 +1251,7 @@ Dashboard → Connect Qwen Models: qw/qwen3-coder-plus qw/qwen3-coder-flash -``` +```` ### Киро (Клод БЕЗПЛАТНО) @@ -1026,7 +1331,7 @@ codex "your prompt" Dashboard → CLI Tools → OpenClaw → Select Model → Apply ``` -**Опция 2 — Ръчно:** Редактиране `~/.openclaw/openclaw.json`: +**Опция 2 — Ръчно:** Редактиране на `~/.openclaw/openclaw.json`: ```json { @@ -1054,33 +1359,51 @@ Settings → API Configuration: Model: if/kimi-k2-thinking ``` +### OpenCode + +**Стъпка 1:** Добавете OmniRoute като персонализиран доставчик: + +```bash +opencode +/connect +# Select "Other" → Enter ID: "omniroute" → Enter your OmniRoute API key +``` + +**Стъпка 2:** Създайте/редактирайте `opencode.json` в корена на вашия проект: + +```json +{ + "$schema": "https://opencode.ai/config.json", + "provider": { + "omniroute": { + "npm": "@ai-sdk/openai-compatible", + "name": "OmniRoute", + "options": { + "baseURL": "http://localhost:20128/v1" + }, + "models": { + "cc/claude-sonnet-4-20250514": { "name": "Claude Sonnet 4" }, + "gg/gemini-2.5-pro": { "name": "Gemini 2.5 Pro" }, + "if/kimi-k2-thinking": { "name": "Kimi K2 (Free)" } + } + } + } +} +``` + +**Стъпка 3:** Изберете модела в OpenCode: + +```bash +/models +# Select any OmniRoute model from the list +``` + +> **Съвет:** Добавете всеки модел, наличен във вашата крайна точка OmniRoute `/v1/models`, към секцията `models`. Използвайте формата `provider/model-id` от таблото за управление на OmniRoute. +
--- -## 🧪 Оценки (Evals) - -OmniRoute включва вградена рамка за оценка за тестване на качеството на отговора на LLM спрямо златен набор. Достъп до него чрез **Analytics → Evals** в таблото за управление. - -### Вграден златен комплект - -Предварително зареденият "OmniRoute Golden Set" съдържа 10 тестови случая, покриващи: - -- Поздрави, математика, география, генериране на код -- Съответствие с JSON формат, превод, маркдаун -- Отказ за безопасност (вредно съдържание), броене, булева логика - -### Стратегии за оценка - -| Стратегия | Описание | Пример | -| ---------- | ----------------------------------------------------------------------- | -------------------------------- | -| `exact` | Изходът трябва да съвпада точно | `"4"` | -| `contains` | Изходът трябва да съдържа подниз (без значение за малки и големи букви) | `"Paris"` | -| `regex` | Изходът трябва да съответства на модела на регулярен израз | `"1.*2.*3"` | -| `custom` | Персонализираната JS функция връща true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Отстраняване на неизправности
@@ -1107,15 +1430,18 @@ OmniRoute включва вградена рамка за оценка за те - Превключете основния модел към GLM/MiniMax - Използвайте безплатно ниво (Gemini CLI, iFlow) за некритични задачи -**Таблото се отваря на грешен порт** +**Портовете на таблото/API са грешни** -- Задайте `PORT=20128` и `NEXT_PUBLIC_BASE_URL=http://localhost:20128` +- `PORT` е каноничният базов порт (и API порт по подразбиране) +- `API_PORT` отменя само OpenAI-съвместим API слушател +- `DASHBOARD_PORT` отменя само слушателя на таблото за управление/Next.js +- Задайте `NEXT_PUBLIC_BASE_URL` на вашето табло за управление/публичен URL (за OAuth обратни извиквания) **Грешки при синхронизиране в облак** -- Потвърдете, че `BASE_URL` сочи към вашия работещ екземпляр -- Проверете `CLOUD_URL` точки към вашата очаквана крайна точка в облака -- Поддържайте стойностите на `NEXT_PUBLIC_*` в съответствие със стойностите от страната на сървъра +- Проверете дали `BASE_URL` сочи към вашия работещ екземпляр +- Уверете се, че `CLOUD_URL` сочи към вашата очаквана крайна точка в облака +- Поддържайте стойностите на `NEXT_PUBLIC_*` в съответствие със стойностите от страна на сървъра **Първото влизане не работи** @@ -1128,19 +1454,17 @@ OmniRoute включва вградена рамка за оценка за те **Тестът за връзка показва „Невалидно“ за OpenAI-съвместими доставчици** -- Много доставчици не излагат `/models` крайна точка +- Много доставчици не излагат крайна точка `/models` - OmniRoute v1.0.6+ включва резервно валидиране чрез завършвания на чат - Уверете се, че основният URL адрес включва суфикс `/v1` -### 🔐 OAuth em Servidor Remoto (Отдалечена настройка на OAuth) +### 🔐 OAuth > **⚠️ ВАЖНО за ползване на OmniRoute em VPS/Docker/servidor remoto** -### Ако OAuth на Antigravity / Gemini CLI не работи с отдалечени сървъри? - -Доставчиците на **Antigravity** и **Gemini CLI** използват **Google OAuth 2.0** за удостоверяване. Google изисква, че `redirect_uri` не използва fluxo OAuth като **exatamente**, когато URI адресите преди кадастрада не са в приложение на Google Cloud Console. +#### OAuth Като удостоверение за OAuth не е OmniRoute estão cadastradas **apenas para `localhost`**. Ако имате достъп до OmniRoute в дистанционния сървър (напр.: `https://omniroute.meuservidor.com`), или Google rejeita a autenticação com: @@ -1148,7 +1472,7 @@ OmniRoute включва вградена рамка за оценка за те Error 400: redirect_uri_mismatch ``` -### Решение: Конфигурирайте собствените си права за удостоверяване на OAuth +#### Решение: Конфигурирайте собствените си права за удостоверяване на OAuth Изпишете точно **OAuth 2.0 Client ID** без Google Cloud Console чрез URI на вашия сървър. @@ -1162,7 +1486,7 @@ Abra: [https://console.cloud.google.com/apis/credentials](https://console.cloud. - Кликнете върху **"+ Създаване на идентификационни данни"** → **"OAuth клиентски идентификатор"** - Tipo de aplicativo: **"Уеб приложение"** -- Име: escolha qualquer име (напр.: `OmniRoute Remote`) +- Име: escolha qualquer nome (напр.: `OmniRoute Remote`) **3. Adicione като оторизирани URI адреси за пренасочване** @@ -1172,7 +1496,7 @@ Abra: [https://console.cloud.google.com/apis/credentials](https://console.cloud. https://seu-servidor.com/callback ``` -> Замяна на `seu-servidor.com` домейн или IP на вашия сървър (включително необходим порт, напр.: `http://45.33.32.156:20128/callback`). +> Замяна на `seu-servidor.com` pelo domínio или IP на вашия сървър (включително необходим порт, напр.: `http://45.33.32.156:20128/callback`). **4. Salve e copie as credenciais** @@ -1180,7 +1504,7 @@ https://seu-servidor.com/callback **5. Конфигуриране като variáveis de ambiente** -Няма `.env` (или нашите варианти на средата на Docker): +Нямате `.env` (или нашите варианти на околната среда на Docker): ```bash # Para Antigravity: @@ -1211,12 +1535,12 @@ Agora или Google пренасочва корекции за `https://seu-serv --- -### Временно заобиколно решение (sem configurar credenciais próprias) +#### Временно заобиколно решение (само за конфигуриране на удостоверения) Se não quiser criar credenciais próprias agora, ainda é possível usar o fluxo **manual de URL**: 1. O OmniRoute премахва URL адрес за авторизация от Google -2. Ако не разрешите, пренасочването на Google е пренасочено към `localhost` (което не е отдалечено от сървъра) +2. Ако не сте авторизирани, пренасочването на Google е пренасочено за `localhost` (което не е отдалечено от сървъра) 3. **Копирайте пълния URL адрес** от страницата, която искате да прехвърлите в своя браузър (mesmo que a página não carregue) 4. Cole essa URL no campo que aparece no modal de conexão do OmniRoute 5. Щракнете върху **"Свързване"** @@ -1227,59 +1551,50 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🛠️ Tech Stack +## 🛠️ -- **Време на изпълнение**: Node.js 18–22 LTS (⚠️ Node.js 24+ **не се поддържа** — родните двоични файлове `better-sqlite3` са несъвместими) -- **Език**: TypeScript 5.9 — **100% TypeScript** в `src/` и `open-sse/` (v1.0.6) +
+Щракнете, за да разширите подробностите за технически стек + +- **Време на изпълнение**: Node.js 18–22 LTS (⚠️ Node.js 24+ **не се поддържа** — родните двоични файлове на `better-sqlite3` са несъвместими) +- **Език**: TypeScript 5.9 — **100% TypeScript** в `src/` и `open-sse/` (нула `any` в основните модули от v2.0) - **Framework**: Next.js 16 + React 19 + Tailwind CSS 4 -- **База данни**: LowDB (JSON) + SQLite (състояние на домейна + регистрационни файлове на прокси) +- **База данни**: LowDB (JSON) + SQLite (състояние на домейна + регистрационни файлове на прокси + MCP одит + решения за маршрутизиране) +- **Схеми**: Zod (валидиране на I/O инструмент за MCP, API договори) +- **Протоколи**: MCP (stdio/HTTP) + A2A v0.3 (JSON-RPC 2.0 + SSE) - **Поточно предаване**: Изпратени от сървъра събития (SSE) -- **Auth**: OAuth 2.0 (PKCE) + JWT + API ключове -- **Тестване**: Node.js тестов инструмент (368+ единични теста) -- **CI/CD**: Действия на GitHub (автоматично публикуване на npm + Docker Hub при пускане) +- **Auth**: OAuth 2.0 (PKCE) + JWT + API ключове + MCP оторизация с обхват +- **Тестване**: Node.js тестов инструмент + Vitest (900+ теста, включително модул, интеграция, E2E)- **CI/CD**: Действия на GitHub (автоматично публикуване на npm + Docker Hub при пускане) - **Уебсайт**: [omniroute.online](https://omniroute.online) - **Пакет**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute) - **Docker**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute) -- **Устойчивост**: прекъсвач на веригата, експоненциално отдръпване, анти-гръмотевично стадо, TLS спуфинг - ---- - -## 📖 Документация - -| Документ | Описание | -| -------------------------------------------- | ------------------------------------------------------- | -| [User Guide](docs/USER_GUIDE.md) | Доставчици, комбинации, CLI интеграция, внедряване | -| [API Reference](docs/API_REFERENCE.md) | Всички крайни точки с примери | -| [Troubleshooting](docs/TROUBLESHOOTING.md) | Често срещани проблеми и решения | -| [Architecture](docs/ARCHITECTURE.md) | Системна архитектура и вътрешност | -| [Contributing](CONTRIBUTING.md) | Настройка и насоки за разработка | -| [OpenAPI Spec](docs/openapi.yaml) | Спецификация на OpenAPI 3.0 | -| [Security Policy](SECURITY.md) | Отчитане на уязвимости и практики за сигурност | -| [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | Пълно ръководство: Настройка на VM + nginx + Cloudflare | -| [Features Gallery](docs/FEATURES.md) | Визуална обиколка на таблото с екранни снимки | - -### 📸 Визуализация на таблото за управление - -
-Щракнете, за да видите екранни снимки на таблото за управление - -| Страница | Екранна снимка | -| -------------------------- | ------------------------------------------------- | -| **Доставчици** | ![Providers](docs/screenshots/01-providers.png) | -| **Комбота** | ![Combos](docs/screenshots/02-combos.png) | -| **Анализ** | ![Analytics](docs/screenshots/03-analytics.png) | -| **Здраве** | ![Health](docs/screenshots/04-health.png) | -| **Преводач** | ![Translator](docs/screenshots/05-translator.png) | -| **Настройки** | ![Settings](docs/screenshots/06-settings.png) | -| **CLI инструменти** | ![CLI Tools](docs/screenshots/07-cli-tools.png) | -| **Дневници за използване** | ![Usage](docs/screenshots/08-usage.png) | -| **Крайна точка** | ![Endpoint](docs/screenshots/09-endpoint.png) | +- **Устойчивост**: прекъсвач, експоненциално отдръпване, анти-гръмотевично стадо, TLS подправяне, автоматично комбинирано самолечение
--- -## 🗺️ Пътна карта +## 📖 Документация + +| Документ | Описание | +| ------------------------------------------------------------- | -------------------------------------------------------------- | +| [Ръководство на потребителя](docs/USER_GUIDE.md) | Доставчици, комбинации, CLI интеграция, внедряване | +| [API справка] (docs/API_REFERENCE.md) | Всички крайни точки с примери | +| [MCP сървър] (open-sse/mcp-server/README.md) | 16 MCP инструмента, IDE конфигурации, Python/TS/Go клиенти | +| [A2A сървър] (src/lib/a2a/README.md) | JSON-RPC 2.0 протокол, умения, стрийминг, управление на задачи | +| [Автоматичен комбиниран двигател] (docs/auto-combo.md) | 6-факторно оценяване, пакети с режими, самолечение | +| [Отстраняване на неизправности](docs/TROUBLESHOOTING.md) | Често срещани проблеми и решения | +| [Архитектура] (docs/ARCHITECTURE.md) | Системна архитектура и вътрешност | +| [Принос] (CONTRIBUTING.md) | Настройка и насоки за разработка | +| [Спецификация на OpenAPI] (docs/openapi.yaml) | Спецификация на OpenAPI 3.0 | +| [Правила за сигурност](SECURITY.md) | Отчитане на уязвимости и практики за сигурност | +| [Внедряване на VM] (docs/VM_DEPLOYMENT_GUIDE.md) | Пълно ръководство: Настройка на VM + nginx + Cloudflare | +| [Галерия с функции](docs/FEATURES.md) | Визуална обиколка на таблото с екранни снимки | +| [Списък за проверка на изданието] (docs/RELEASE_CHECKLIST.md) | Стъпки за валидиране преди пускане | + +--- + +## 🗺️ OmniRoute има **планирани 210+ функции** в множество фази на разработка. Ето основните области: @@ -1292,38 +1607,25 @@ OmniRoute има **планирани 210+ функции** в множеств | ⚡ **Изпълнение** | 15+ | Слой с двоен кеш, кеш за подкани, кеш за отговор, поддържане на активността при поточно предаване, партиден API | | 🌐 **Екосистема** | 10+ | WebSocket API, горещо презареждане на конфигурация, разпределено хранилище за конфигурация, търговски режим | -### 🔜 Очаквайте скоро +### 🔜 Очаквайте скоро- 🔗 **OpenCode Integration** — Поддръжка на родния доставчик за IDE за кодиране OpenCode AI -- 🔗 **OpenCode Integration** — Поддръжка на родния доставчик за IDE за кодиране OpenCode AI - 🔗 **TRAE Integration** — Пълна поддръжка за рамката за разработка на TRAE AI - 📦 **Batch API** — Асинхронна групова обработка за групови заявки - 🎯 **Маршрутизиране на базата на етикети** — Маршрутизирайте заявки въз основа на персонализирани тагове и метаданни - 💰 **Стратегия с най-ниска цена** — Автоматично изберете най-евтиния наличен доставчик -> 📝 Пълните спецификации на функциите са налични в [link](docs/new-features/) (217 подробни спецификации) - ---- - -## 📧 Поддръжка - -> 💬 **Присъединете се към нашата общност!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Получете помощ, споделете съвети и бъдете в течение. - -- **Уебсайт**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Проблеми**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Оригинален проект**: [9router by decolua](https://github.com/decolua/9router) +> 📝 Пълните спецификации на функциите са налични в [`docs/new-features/`](docs/new-features/) (217 подробни спецификации) --- ## 👥 Сътрудници -[![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) +[![Сътрудници](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) ### Как да допринесете 1. Разклонете хранилището -2. Създайте свой клон на функции (`git checkout -b feature/amazing-feature`) +2. Създайте своя клон на функция (`git checkout -b feature/amazing-feature`) 3. Задайте вашите промени (`git commit -m 'Add amazing feature'`) 4. Натиснете до клона (`git push origin feature/amazing-feature`) 5. Отворете заявка за изтегляне @@ -1334,7 +1636,7 @@ OmniRoute има **планирани 210+ функции** в множеств ```bash # Create a release — npm publish happens automatically -gh release create v1.0.6 --title "v1.0.6" --generate-notes +gh release create v2.0.0 --title "v2.0.0" --generate-notes ``` --- @@ -1361,7 +1663,7 @@ gh release create v1.0.6 --title "v1.0.6" --generate-notes ## 📄 Лиценз -Лиценз на MIT – вижте [LICENSE](LICENSE) за подробности. +Лиценз на MIT – вижте [ЛИЦЕНЗ](LICENSE) за подробности. --- @@ -1370,3 +1672,4 @@ gh release create v1.0.6 --title "v1.0.6" --generate-notes
omniroute.online + diff --git a/README.da.md b/README.da.md index 6451e01f9e..1ee9ded006 100644 --- a/README.da.md +++ b/README.da.md @@ -1,13 +1,55 @@ -
- OmniRoute Dashboard - - # 🚀 OmniRoute — Den gratis AI-gateway +# 🚀 OmniRoute — Den gratis AI-gateway ### Stop aldrig med at kode. Smart routing til **GRATIS og billige AI-modeller** med automatisk fallback. -_Din universelle API-proxy — ét slutpunkt, 36+ udbydere, ingen nedetid._ +_Din universelle API-proxy — ét slutpunkt, 36+ udbydere, ingen nedetid. Nu med **MCP & A2A** agentorkestrering._ -**Chatafslutninger • Indlejringer • Billedgenerering • Lyd • Genrangering • 100 % TypeScript** +**Chatafslutninger • Indlejringer • Billedgenerering • Video • Musik • Lyd • Genrangering • MCP-server • A2A-protokol • 100 % TypeScript** + +--- + +
+ +[![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute) +[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute) +[![Licens](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE) +[![Websted](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online) +[![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) + +[🌐 Hjemmeside](https://omniroute.online) • [🚀 Hurtig start](#-quick-start) • [💡 Funktioner](#-key-features) • [📖 Docs](#-documentation) • [💡 Priser](#-pricing-at-a-glance) • [💬 WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) + +
+ +🌐 **Tilgængelig på:** 🇺🇸 [engelsk](README.md) | 🇧🇷 [Português (Brasil)](README.pt-BR.md) | 🇪🇸 [Español](README.es.md) | 🇫🇷 [Français](README.fr.md) | 🇮🇹 [Italiano](README.it.md) | 🇷🇺 [Русский](README.ru.md) | 🇨🇳 [中文 (简体)](README.zh-CN.md) | 🇩🇪 [Tysk](README.de.md) | 🇮🇳 [हिन्दी](README.in.md) | 🇹🇭 [ไทย](README.th.md) | 🇺🇦 [Українська](README.uk-UA.md) | 🇸🇦 [العربية](README.ar.md) | 🇯🇵 [日本語](README.ja.md) | 🇻🇳 [Tiếng Việt](README.vi.md) | 🇧🇬 [Български](README.bg.md) | 🇩🇰 [Dansk](README.da.md) | 🇫🇮 [Suomi](README.fi.md) | 🇮🇱 [engelsk](README.he.md) | 🇭🇺 [Magyar](README.hu.md) | 🇮🇩 [Bahasa Indonesien](README.id.md) | 🇰🇷 [한국어](README.ko.md) | 🇲🇾 [Bahasa Melayu](README.ms.md) | 🇳🇱 [Nederlands](README.nl.md) | 🇳🇴 [norsk](README.no.md) | 🇵🇹 [Português (Portugal)](README.pt.md) | 🇷🇴 [Română](README.ro.md) | 🇵🇱 [Polski](README.pl.md) | 🇸🇰 [Slovenčina](README.sk.md) | 🇸🇪 [Svenska](README.sv.md) | 🇵🇭 [filippinsk](README.phi.md) + +--- + +## 🖼️ Hovedbetjeningspanel + +
+ OmniRoute Dashboard +
+ +--- + +## 📸 Dashboard Preview + +
+Klik for at se skærmbilleder af dashboard + +| Side | Skærmbillede | +| ----------------- | --------------------------------------------------- | +| **Udbydere** | ![Udbydere](docs/screenshots/01-providers.png) | +| **Komboer** | ![Combos](docs/screenshots/02-combos.png) | +| **Analyse** | ![Analytics](docs/screenshots/03-analytics.png) | +| **Sundhed** | ![Sundhed](docs/screenshots/04-health.png) | +| **Oversætter** | ![Oversætter](docs/screenshots/05-translator.png) | +| **Indstillinger** | ![Indstillinger](docs/screenshots/06-settings.png) | +| **CLI-værktøjer** | ![CLI-værktøjer](docs/screenshots/07-cli-tools.png) | +| **Brugslogfiler** | ![Brug](docs/screenshots/08-usage.png) | +| **Endpunkt** | ![Endpoint](docs/screenshots/09-endpoint.png) | + +
--- @@ -18,18 +60,17 @@ _Tilslut ethvert AI-drevet IDE- eller CLI-værktøj gennem OmniRoute - gratis AP @@ -85,28 +126,14 @@ _Tilslut ethvert AI-drevet IDE- eller CLI-værktøj gennem OmniRoute - gratis AP
- + OpenClaw
OpenClaw -

- ⭐ 205K +
⭐ 205K
NanoBot
NanoBot

- ⭐ 20.9K + ⭐ 20,9K
@@ -43,7 +84,7 @@ _Tilslut ethvert AI-drevet IDE- eller CLI-værktøj gennem OmniRoute - gratis AP ZeroClaw
ZeroClaw

- ⭐ 9.9K + ⭐ 9,9K
@@ -71,7 +112,7 @@ _Tilslut ethvert AI-drevet IDE- eller CLI-værktøj gennem OmniRoute - gratis AP Claude Code
- Claude Code + Claude Kode

⭐ 67.3K
Kilo Code
- Kilo Code + Kilo-kode

- ⭐ 15.5K + ⭐ 15,5K
-📡 Alle agenter forbinder via http://localhost:20128/v1 eller http://cloud.omniroute.online/v1 , —limited one config and kvote - ---- - -[![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute) -[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute) -[![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE) -[![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online) -[![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) - -[🌐 Website](https://omniroute.online) • [🚀 Quick Start](#-quick-start) • [💡 Features](#-key-features) • [📖 Docs](#-documentation) • [💰 Pricing](#-pricing-at-a-glance) • [💬 WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) - -🌐 **Available in:** 🇺🇸 [English](README.md) | 🇧🇷 [Português (Brasil)](README.pt-BR.md) | 🇪🇸 [Español](README.es.md) | 🇫🇷 [Français](README.fr.md) | 🇮🇹 [Italiano](README.it.md) | 🇷🇺 [Русский](README.ru.md) | 🇨🇳 [中文 (简体)](README.zh-CN.md) | 🇩🇪 [Deutsch](README.de.md) | 🇮🇳 [हिन्दी](README.in.md) | 🇹🇭 [ไทย](README.th.md) | 🇺🇦 [Українська](README.uk-UA.md) | 🇸🇦 [العربية](README.ar.md) | 🇯🇵 [日本語](README.ja.md) | 🇻🇳 [Tiếng Việt](README.vi.md) | 🇧🇬 [Български](README.bg.md) | 🇩🇰 [Dansk](README.da.md) | 🇫🇮 [Suomi](README.fi.md) | 🇮🇱 [עברית](README.he.md) | 🇭🇺 [Magyar](README.hu.md) | 🇮🇩 [Bahasa Indonesia](README.id.md) | 🇰🇷 [한국어](README.ko.md) | 🇲🇾 [Bahasa Melayu](README.ms.md) | 🇳🇱 [Nederlands](README.nl.md) | 🇳🇴 [Norsk](README.no.md) | 🇵🇹 [Português (Portugal)](README.pt.md) | 🇷🇴 [Română](README.ro.md) | 🇵🇱 [Polski](README.pl.md) | 🇸🇰 [Slovenčina](README.sk.md) | 🇸🇪 [Svenska](README.sv.md) | 🇵🇭 [Filipino](README.phi.md) - -
+📡 Alle agenter opretter forbindelse via http://localhost:20128/v1 eller http://cloud.omniroute.online/v1XQZPH00 og unlimited model conf. quota --- @@ -115,7 +142,7 @@ _Tilslut ethvert AI-drevet IDE- eller CLI-værktøj gennem OmniRoute - gratis AP **Stop med at spilde penge og nå grænser:** - Abonnementskontingent udløber ubrugt hver måned -- Hastighedsgrænser stopper dig midtkodning +- Hastighedsgrænser stopper dig med midtkodning - Dyre API'er ($20-50/måned pr. udbyder) - Manuel skift mellem udbydere @@ -128,6 +155,17 @@ _Tilslut ethvert AI-drevet IDE- eller CLI-værktøj gennem OmniRoute - gratis AP --- +## 📧 Support> 💬 **Tilmeld dig vores fællesskab!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Få hjælp, del tips, og hold dig opdateret. + +- **Websted**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Problemer**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Fællesskabsgruppe](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Bidrager**: Se [CONTRIBUTING.md](CONTRIBUTING.md), åbn en PR, eller vælg en `good first issue` +- **Originalt projekt**: [9router af decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Sådan virker det ``` @@ -157,302 +195,568 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Hvad OmniRoute løser — 30 rigtige smertepunkter og brugssager -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Alle udviklere, der bruger AI-værktøjer, står over for disse problemer dagligt.** OmniRoute blev bygget til at løse dem alle - fra omkostningsoverskridelser til regionale blokke, fra ødelagte OAuth-flows til protokoloperationer og observerbarhed i virksomheden.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Jeg betaler for et dyrt abonnement, men bliver stadig afbrudt af grænser" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Udviklere betaler $20-200/måned for Claude Pro, Codex Pro eller GitHub Copilot. Selv ved betaling har kvoten et loft - 5 timers brug, ugentlige grænser eller satsgrænser pr. minut. Mid-coding session, udbyderen holder op med at svare, og udvikleren mister flow og produktivitet. -**How OmniRoute solves it:** +**Sådan løser OmniRoute det:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-Tier Fallback** — Hvis abonnementskvoten løber ud, omdirigeres automatisk til API Key → Billig → Gratis uden manuel indgriben +- **Kvotesporing i realtid** — Viser tokenforbrug i realtid med nulstillingsnedtælling (5 timer, dagligt, ugentligt) +- **Multi-Account Support** - Flere konti pr. udbyder med automatisk round-robin - når den ene løber tør, skifter til den næste +- **Custom Combos** — Tilpasselige fallback-kæder med 6 balanceringsstrategier (fill-first, round-robin, P2C, tilfældig, mindst brugt, omkostningsoptimeret) +- **Codex Business Quotas** — Business/Team Workspace kvoteovervågning direkte i dashboardet
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Jeg skal bruge flere udbydere, men hver har en forskellig API" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI bruger et format, Claude (Antropisk) bruger et andet, Gemini endnu et andet. Hvis en udvikler ønsker at teste modeller fra forskellige udbydere eller fallback mellem dem, skal de omkonfigurere SDK'er, ændre slutpunkter, håndtere inkompatible formater. Tilpassede udbydere (FriendLI, NIM) har ikke-standardmodelslutpunkter. -**How OmniRoute solves it:** +**Sådan løser OmniRoute det:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Unified Endpoint** — En enkelt `http://localhost:20128/v1` fungerer som proxy for alle 36+ udbydere +- **Formatoversættelse** — Automatisk og gennemsigtig: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **Responssanering** — Fjerner ikke-standardfelter (`x_groq`, `usage_breakdown`, `service_tier`), der bryder OpenAI SDK v1.83+ +- **Rollenormalisering** — Konverterer `developer` → `system` for ikke-OpenAI-udbydere; `system` → `user` til GLM/ERNIE +- **Think Tag Extraction** — Udtrækker ``-blokke fra modeller som DeepSeek R1 til standardiseret `reasoning_content` +- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatisk konvertering +- **`stream` er som standard `false`** — Justerer med OpenAI-specifikationer, og undgår uventede SSE i Python/Rust/Go SDK'er
+ +
+🌐 3. "Min AI-udbyder blokerer mit område/land" + +Udbydere som OpenAI/Codex blokerer adgang fra visse geografiske områder. Brugere får fejl som `unsupported_country_region_territory` under OAuth- og API-forbindelser. Dette er især frustrerende for udviklere fra udviklingslande. + +**Sådan løser OmniRoute det:** + +- **3-Level Proxy Config** — Konfigurerbar proxy på 3 niveauer: global (al trafik), pr. udbyder (kun én udbyder) og pr. forbindelse/nøgle +- **Farvekodede proxy-badges** — Visuelle indikatorer: 🟢 global proxy, 🟡 udbyder proxy, 🔵 forbindelsesproxy, viser altid IP'en +- **OAuth-tokenudveksling gennem proxy** — OAuth-flowet går også gennem proxyen og løser `unsupported_country_region_territory` +- **Forbindelsestest via proxy** — Forbindelsestest bruger den konfigurerede proxy (ikke mere direkte omgåelse) +- **SOCKS5-understøttelse** — Fuld SOCKS5-proxy-understøttelse til udgående routing +- **TLS Fingerprint Spoofing** — Browserlignende TLS-fingeraftryk via `wreq-js` for at omgå botdetektion
-🌐 3. "My AI provider blocks my region/country" +🆓 4. "Jeg vil bruge AI til kodning, men jeg har ingen penge" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Ikke alle kan betale $20-200/måned for AI-abonnementer. Studerende, udviklere fra vækstlande, hobbyfolk og freelancere har brug for adgang til kvalitetsmodeller uden omkostninger. -**How OmniRoute solves it:** +**Sådan løser OmniRoute det:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **Free Tier Providers Indbygget** — Indbygget support for 100 % gratis udbydere: iFlow (8 ubegrænsede modeller), Qwen (3 ubegrænsede modeller), Kiro (Claude gratis), Gemini CLI (180K/måned gratis) +- **Kun gratis kombinationer** — Kæde `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/måned uden nedetid +- **NVIDIA NIM gratis kreditter** — 1000 gratis kreditter integreret +- **Cost Optimized Strategy** — Routingstrategi, der automatisk vælger den billigste tilgængelige udbyder
-🆓 4. "I want to use AI for coding but I have no money" +🔒 5. "Jeg skal beskytte min AI-gateway mod uautoriseret adgang" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Når en AI-gateway eksponeres for netværket (LAN, VPS, Docker), kan enhver med adressen forbruge udviklerens tokens/kvote. Uden beskyttelse er API'er sårbare over for misbrug, hurtig injektion og misbrug. -**How OmniRoute solves it:** +**Sådan løser OmniRoute det:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **API Key Management** — Generering, rotation og scoping pr. udbyder med en dedikeret `/dashboard/api-manager` side +- **Tilladelser på modelniveau** — Begræns API-nøgler til specifikke modeller (`openai/*`, jokertegnmønstre) med Tillad alt/Begræns-skift +- **API Endpoint Protection** — Kræv en nøgle til `/v1/models` og bloker specifikke udbydere fra fortegnelsen +- **Auth Guard + CSRF Protection** — Alle dashboard-ruter beskyttet med `withAuth` middleware + CSRF-tokens +- **Rate Limiter** — Per-IP hastighedsbegrænsning med konfigurerbare vinduer +- **IP-filtrering** — Tilladelsesliste/blokeringsliste til adgangskontrol +- **Prompt Injection Guard** — Sanering mod ondsindede promptmønstre +- **AES-256-GCM-kryptering** — Legitimationsoplysninger krypteret i hvile
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🛑 6. "Min udbyder gik ned, og jeg mistede mit kodningsflow"AI-udbydere kan blive ustabile, returnere 5xx-fejl eller ramme midlertidige hastighedsgrænser. Hvis en udvikler afhænger af en enkelt udbyder, bliver de afbrudt. Uden strømafbrydere kan gentagne genforsøg crashe programmet. -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +**Sådan løser OmniRoute det:** -**How OmniRoute solves it:** - -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Circuit Breaker pr. udbyder** — Automatisk åbning/lukning med konfigurerbare tærskler og nedkøling (lukket/åbent/halvt åbent) +- **Eksponentiel backoff** — Progressive forsinkelser af genforsøg +- **Anti-tordenbesætning** — Mutex + semaforbeskyttelse mod samtidige genforsøgsstorme +- **Combo Fallback Chains** — Hvis den primære udbyder fejler, falder den automatisk gennem kæden uden indgriben +- **Combo Circuit Breaker** - Deaktiverer automatisk fejlende udbydere i en kombinationskæde +- **Health Dashboard** — Oppetidsovervågning, strømafbrydertilstande, lockouts, cachestatistik, p50/p95/p99 latency
-🛑 6. "My provider went down and I lost my coding flow" +🔧 7. "Konfiguration af hvert AI-værktøj er trættende og gentagende" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Udviklere bruger Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Hvert værktøj har brug for en anden konfiguration (API-endepunkt, nøgle, model). At omkonfigurere, når du skifter udbyder eller model, er spild af tid. -**How OmniRoute solves it:** +**Sådan løser OmniRoute det:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **CLI Tools Dashboard** — Dedikeret side med et-klik opsætning til Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — Genererer `chatLanguageModels.json` til VS-kode med bulk modelvalg +- **Onboarding Wizard** — Guidet 4-trins opsætning for førstegangsbrugere +- **Ét slutpunkt, alle modeller** — Konfigurer `http://localhost:20128/v1` én gang, få adgang til 36+ udbydere
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔑 8. "Administration af OAuth-tokens fra flere udbydere er et helvede" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Claude Code, Codex, Gemini CLI, Copilot - alle bruger OAuth 2.0 med udløbende tokens. Udviklere skal re-godkende konstant, håndtere `client_secret is missing`, `redirect_uri_mismatch` og fejl på fjernservere. OAuth på LAN/VPS er særligt problematisk. -**How OmniRoute solves it:** +**Sådan løser OmniRoute det:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **Automatisk tokenopdatering** — OAuth-tokens opdateres i baggrunden før udløb +- **OAuth 2.0 (PKCE) Indbygget** — Automatisk flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **Multi-Account OAuth** — Flere konti pr. udbyder via JWT/ID-tokenudtrækning +- **OAuth LAN/Remote Fix** — Privat IP-detektion for `redirect_uri` + manuel URL-tilstand til fjernservere +- **OAuth Behind Nginx** — Bruger `window.location.origin` til omvendt proxykompatibilitet +- **Remote OAuth Guide** — Trin-for-trin guide til Google Cloud-legitimationsoplysninger på VPS/Docker
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +📊 9. "Jeg ved ikke, hvor meget jeg bruger eller hvor" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Udviklere bruger flere betalte udbydere, men har ikke noget samlet syn på udgifter. Hver udbyder har sit eget faktureringsdashboard, men der er ingen konsolideret visning. Uventede omkostninger kan hobe sig op. -**How OmniRoute solves it:** +**Sådan løser OmniRoute det:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Dashboard for omkostningsanalyse** — omkostningssporing pr. token og budgetstyring pr. udbyder +- **Budgetgrænser pr. niveau** — Udgiftsloft pr. niveau, der udløser automatisk fallback +- **Priskonfiguration pr. model** — Konfigurerbare priser pr. model- **Brugsstatistik pr. API-nøgle** — Antal anmodninger og sidst anvendte tidsstempel pr. nøgle +- **Analytics Dashboard** — Statiske kort, modelbrugsdiagram, udbydertabel med succesrater og latens
-📊 9. "I don't know how much I'm spending or where" +🐛 10. "Jeg kan ikke diagnosticere fejl og problemer i AI-opkald" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Når et opkald mislykkes, ved udvikleren ikke, om det var en takstgrænse, udløbet token, forkert format eller udbyderfejl. Fragmenterede logfiler på tværs af forskellige terminaler. Uden observerbarhed er fejlfinding trial-and-error. -**How OmniRoute solves it:** +**Sådan løser OmniRoute det:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Unified Logs Dashboard** — 4 faner: Request Logs, Proxy Logs, Audit Logs, Console +- **Console Log Viewer** — Realtidsterminal-fremviser med farvekodede niveauer, automatisk rulning, søg, filtrer +- **SQLite Proxy Logs** — Vedvarende logfiler, der overlever servergenstarter +- **Oversætterlegeplads** — 4 fejlfindingstilstande: Legeplads (formatoversættelse), Chattester (rundtur), Testbænk (batch), Live Monitor (realtid) +- **Request Telemetri** — p50/p95/p99 latency + X-Request-Id-sporing +- **Filbaseret logning med rotation** — Konsolinterceptor fanger alt til JSON-log med størrelsesbaseret rotation
-🐛 10. "I can't diagnose errors and problems in AI calls" +🏗️ 11. "Deployering og vedligeholdelse af gatewayen er kompleks" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Installation, konfiguration og vedligeholdelse af en AI-proxy på tværs af forskellige miljøer (lokalt, VPS, Docker, cloud) er arbejdskrævende. Problemer som hårdkodede stier, `EACCES` på mapper, portkonflikter og cross-platform builds tilføjer friktion. -**How OmniRoute solves it:** +**Sådan løser OmniRoute det:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation - -
- -
-🏗️ 11. "Deploying and maintaining the gateway is complex" - -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. - -**How OmniRoute solves it:** - -- **npm global install** — `npm install -g omniroute && omniroute` — done +- **npm global installation** — `npm install -g omniroute && omniroute` — udført - **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **Docker Compose Profiles** — `base` (ingen CLI-værktøjer) og `cli` (med Claude Code, Codex, OpenClaw) +- **Electron Desktop App** — Indbygget app til Windows/macOS/Linux med systembakke, autostart, offlinetilstand +- **Split-Port Mode** — API og Dashboard på separate porte til avancerede scenarier (omvendt proxy, containernetværk) +- **Cloud Sync** — Konfigurer synkronisering på tværs af enheder via Cloudflare Workers +- **DB Backups** — Automatisk backup, gendannelse, eksport og import af alle indstillinger
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "Grænsefladen er kun engelsk, og mit team taler ikke engelsk" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Hold i ikke-engelsktalende lande, især i Latinamerika, Asien og Europa, kæmper med grænseflader, der kun er på engelsk. Sprogbarrierer reducerer adoption og øger konfigurationsfejl. -**How OmniRoute solves it:** +**Sådan løser OmniRoute det:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Dashboard i18n — 30 sprog** — Alle 500+ taster oversat, inklusive arabisk, bulgarsk, dansk, tysk, spansk, finsk, fransk, hebraisk, hindi, ungarsk, indonesisk, italiensk, japansk, koreansk, malaysisk, hollandsk, norsk, polsk, portugisisk (PT/BR), rumænsk, russisk, ukrainsk, kinesisk, ukrainsk, kinesisk, kinesisk, ukrainsk, kinesisk, ukrainsk, kinesisk, ukrainsk, svensk, Vietnam, Vietnam +- **RTL-understøttelse** — Højre-til-venstre-understøttelse for arabisk og hebraisk +- **Multi-Language READMEs** — 30 komplette dokumentationsoversættelser +- **Sprogvælger** — Globusikon i overskriften til skift i realtid
+ +
+🔄 13. "Jeg har brug for mere end chat — jeg har brug for indlejringer, billeder, lyd" + +AI er ikke kun fuldførelse af chat. Udviklere skal generere billeder, transskribere lyd, oprette indlejringer til RAG, omrangere dokumenter og moderere indhold. Hver API har et andet slutpunkt og format. + +**Sådan løser OmniRoute det:** + +- **Indlejringer** — `/v1/embeddings` med 6 udbydere og 9+ modeller +- **Billedgenerering** — `/v1/images/generations` med 10 udbydere og 20+ modeller (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Tekst-til-video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) og SD WebUI +- **Tekst-til-musik** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Lydtransskription** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Tekst-til-tale** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + eksisterende udbydere +- **Moderationer** — `/v1/moderations` — Indholdssikkerhedstjek +- **Omrangering** — `/v1/rerank` — Omrangering af dokumentrelevans +- **Responses API** — Fuld `/v1/responses`-understøttelse af Codex
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🧪 14. "Jeg har ingen måde at teste og sammenligne kvalitet på tværs af modeller" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +Udviklere vil gerne vide, hvilken model der er bedst til deres brug - kode, oversættelse, ræsonnement - men manuel sammenligning er langsom. Der findes ingen integrerede evalueringsværktøjer. -**How OmniRoute solves it:** +**Sådan løser OmniRoute det:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **LLM-evalueringer** — Gyldne sæt-test med 10 forudindlæste cases, der dækker hilsner, matematik, geografi, kodegenerering, JSON-overholdelse, oversættelse, markdown, sikkerhedsafvisning +- **4 matchstrategier** — `exact`, `contains`, `regex`, `custom` (JS-funktion) +- **Translator Playground Test Bench** — Batchtest med flere input og forventede output, sammenligning på tværs af udbydere +- **Chattester** — Fuld rundtur med visuel responsgengivelse +- **Live Monitor** — Realtidsstream af alle anmodninger, der flyder gennem proxyen
-🧪 14. "I have no way to test and compare quality across models" +📈 15. "Jeg har brug for at skalere uden at miste ydeevne" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Efterhånden som forespørgselsvolumen vokser, genererer de samme spørgsmål duplikerede omkostninger uden cache. Uden idempotens, dublerede anmodninger om affaldsbehandling. Takstgrænser pr. udbyder skal overholdes. -**How OmniRoute solves it:** +**Sådan løser OmniRoute det:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Semantisk cache** — To-lags cache (signatur + semantisk) reducerer omkostninger og latens +- **Request Idempotency** — 5s deduplikeringsvindue for identiske anmodninger +- **Detektion af hastighedsgrænse** — RPM pr. udbyder, min. gap og maks. samtidig sporing +- **Redigerbare hastighedsgrænser** — Konfigurerbare standardindstillinger i Indstillinger → Modstandsdygtighed med vedholdenhed +- **API Key Validation Cache** — 3-lags cache til produktionsydeevne +- **Health Dashboard med telemetri** — p50/p95/p99 latency, cachestatistik, oppetid
-📈 15. "I need to scale without losing performance" +🤖 16. "Jeg vil kontrollere modeladfærd globalt" Udviklere, der ønsker alle svar på et bestemt sprog, med en bestemt tone, eller ønsker at begrænse ræsonnementstokens. Det er upraktisk at konfigurere dette i hvert værktøj/anmodning. -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +**Sådan løser OmniRoute det:** -**How OmniRoute solves it:** - -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **System Prompt Injection** — Global prompt anvendt på alle anmodninger +- **Thinking Budget Validation** — Reasoning token allocation control pr. anmodning (passthrough, auto, custom, adaptive) +- **6 Routing Strategies** — Globale strategier, der bestemmer, hvordan anmodninger distribueres +- **Wildcard-router** — `provider/*`-mønstre ruter dynamisk til enhver udbyder +- **Kombo Aktiver/Deaktiver Til/fra** — Skift kombinationer direkte fra dashboardet +- **Tilskiftning af udbyder** — Aktiver/deaktiver alle forbindelser for en udbyder med et enkelt klik +- **Blokerede udbydere** — Ekskluder specifikke udbydere fra `/v1/models`-fortegnelsen
-🤖 16. "I want to control model behavior globally" +🧰 17. "Jeg har brug for MCP-værktøjer som førsteklasses produktegenskaber" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Mange AI-gateways afslører kun MCP som en skjult implementeringsdetalje. Teams har brug for et synligt, overskueligt operationslag. -**How OmniRoute solves it:** +**Sådan løser OmniRoute det:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- MCP vises på fanen dashboardnavigation og endepunktsprotokol +- Dedikeret MCP-administrationsside med proces, værktøjer, omfang og revision +- Indbygget hurtigstart til `omniroute --mcp` og klient onboarding
+
+🧠 18. "Jeg har brug for A2A-orkestrering med synkronisering + streamopgavestier" + +Agentarbejdsgange kræver både direkte svar og langvarig streamet udførelse med livscykluskontrol. + +**Sådan løser OmniRoute det:** + +- A2A JSON-RPC slutpunkt (`POST /a2a`) med `message/send` og `message/stream` +- SSE-streaming med udbredelse af terminaltilstand +- Task lifecycle API'er til `tasks/get` og `tasks/cancel` + +
+ +
+🛰️ 19. "Jeg har brug for ægte MCP-processundhed, ikke gættet status" + +Operationelle teams skal vide, om MCP faktisk er i live, ikke kun om en API er tilgængelig. + +**Sådan løser OmniRoute det:** + +- Runtime-hjerteslagsfil med PID, tidsstempler, transport, værktøjstælling og omfangstilstand +- MCP status API, der kombinerer hjerteslag + seneste aktivitet +- UI-statuskort til proces/oppetid/hjerteslagsfriskhed + +
+ +
+📋 20. "Jeg har brug for revisionsbar MCP-værktøjsudførelse" + +Når værktøjer muterer konfiguration eller udløser ops-handlinger, har teams brug for retsmedicinsk sporbarhed. + +**Sådan løser OmniRoute det:** + +- SQLite-støttet revisionslogning for MCP-værktøjsopkald +- Filtrerer efter værktøj, succes/fiasko, API-nøgle og paginering +- Dashboard revisionstabel + statistik slutpunkter til automatisering + +
+ +
+🔐 21. "Jeg har brug for scoped MCP-tilladelser pr. integration" + +Forskellige klienter bør have mindst privilegeret adgang til værktøjskategorier. + +**Sådan løser OmniRoute det:** + +- 9 granulære MCP-skoper til kontrolleret værktøjsadgang +- Håndhævelse af omfang og synlighed i MCP management UI +- Sikker standardstilling for operationelt værktøj + +
+ +
⚙️ 22. "Jeg har brug for operationelle kontroller uden omfordeling" + +Teams har brug for hurtige runtime-ændringer under hændelser eller omkostningsbegivenheder. + +**Sådan løser OmniRoute det:** + +- Skift kombinationsaktivering direkte fra MCP-dashboard +- Anvend modstandsdygtighedsprofiler fra foruddefinerede politikpakker +- Nulstil strømafbrydertilstand fra det samme betjeningspanel + +
+ +
+🔄 23. "Jeg har brug for live A2A opgave livscyklus synlighed og annullering" + +Uden livscyklussynlighed bliver opgavehændelser svære at triage. + +**Sådan løser OmniRoute det:** + +- Opgaveliste/filtrering efter tilstand/færdighed med paginering +- Drill-down på opgavemetadata, hændelser og artefakter +- Slutpunkt for annullering af opgave og UI-handling med bekræftelse + +
+ +
+🌊 24. "Jeg har brug for aktive stream-metrics for A2A-indlæsning" + +Streaming-arbejdsgange kræver operationel indsigt i samtidighed og live-forbindelser. + +**Sådan løser OmniRoute det:** + +- Aktive stream-tællere integreret i A2A-status +- Tidsstempel for sidste opgave og tæller pr. stat +- A2A dashboard-kort til operationsovervågning i realtid + +
+ +
+🪪 25. "Jeg har brug for standardagentopdagelse til klienter" + +Eksterne klienter og orkestratorer har brug for maskinlæsbare metadata til onboarding. + +**Sådan løser OmniRoute det:** + +- Agentkort afsløret på `/.well-known/agent.json` +- Evner og færdigheder vist i ledelsens brugergrænseflade +- A2A status API inkluderer opdagelsesmetadata til automatisering + +
+ +
+🧭 26. "Jeg har brug for protokolsynlighed i produktets UX" + +Hvis brugere ikke kan opdage protokoloverflader, falder kvaliteten af adoption og support. + +**Sådan løser OmniRoute det:** + +- Sidebar-indgange til MCP og A2A +- Endpoint-siden Protokoller-fane med hurtig start og status +- Links fra oversigt til dedikerede ledelsesdashboards + +
+ +
+🧪 27. "Jeg har brug for end-to-end protokolvalidering med rigtige klienter" + +Mock-tests er ikke nok til at validere protokolkompatibilitet før frigivelse. + +**Sådan løser OmniRoute det:** + +- E2E-pakke, der starter app og bruger ægte MCP SDK-klienttransport +- A2A klient tester for opdagelse, send, stream, hent og annuller flows +- Krydstjek påstande mod MCP-revision og A2A-opgaver API'er + +
+ +
+📡 28. "Jeg har brug for samlet observerbarhed på tværs af alle grænseflader" + +Opdeling af observerbarhed efter protokol skaber blinde pletter og længere MTTR. + +**Sådan løser OmniRoute det:** + +- Samlede dashboards/logfiler/analyse i ét produkt +- Health + audit + request telemetri på tværs af OpenAI, MCP og A2A lag +- Operationelle API'er til status og automatisering + +
+ +
+💼 29. "Jeg har brug for én køretid til proxy + værktøjer + agentorkestrering" + +At køre mange separate tjenester øger driftsomkostninger og fejltilstande. + +**Sådan løser OmniRoute det:**- OpenAI-kompatibel proxy, MCP-server og A2A-server i én stak + +- Delt godkendelse, robusthed, datalager og observerbarhed +- Ensartet politikmodel på tværs af alle interaktionsflader + +
+ +
+🚀 30. "Jeg har brug for at sende agentiske arbejdsgange uden limkodesprawl" + +Hold mister hastighed, når de sammensætter flere ad-hoc-tjenester og scripts. + +**Sådan løser OmniRoute det:** + +- Ensartet slutpunktsstrategi for kunder og agenter +- Indbygget protokolstyring UI'er og røgvalideringsstier +- Produktionsklare fundamenter (sikkerhed, logning, robusthed, backup) + +
+ +### Eksempler på Playbooks + +**Playbook A: Maksimer betalt abonnement + billig backup** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: Gratis kodningsstak** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: 24/7 altid aktiv reservekæde** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: Agent ops med MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Hurtig start -**1. Installer globalt:** +### 1) Installer og kør ```bash npm install -g omniroute omniroute ``` -🎉 Dashboard åbner kl. `http://localhost:20128` +Dashboard åbner ved `http://localhost:20128`, og API-base-URL er `http://localhost:20128/v1`. -| Kommando | Beskrivelse | -| ----------------------- | --------------------------------- | -| `omniroute` | Start server (standardport 20128) | -| `omniroute --port 3000` | Brug tilpasset port | -| `omniroute --no-open` | Åbn ikke browseren automatisk | -| `omniroute --help` | Vis hjælp | +| Kommando | Beskrivelse | +| ----------------------- | ----------------------------------------------------------- | +| `omniroute` | Start server (`PORT=20128`, API og dashboard på samme port) | +| `omniroute --port 3000` | Indstil kanonisk/API-port til 3000 | +| `omniroute --mcp` | Start MCP-server (stdio-transport) | +| `omniroute --no-open` | Åbn ikke browseren automatisk | +| `omniroute --help` | Vis hjælp | -**2. Tilslut en GRATIS udbyder:** +Valgfri split-port-tilstand: -Dashboard → Udbydere → Connect **Claude Code** eller **Antigravity** → OAuth-login → Færdig! - -**3. Brug i dit CLI-værktøj:** - -``` -Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings: - Endpoint: http://localhost:20128/v1 - API Key: [copy from dashboard] - Model: if/kimi-k2-thinking +```bash +PORT=20128 DASHBOARD_PORT=20129 omniroute +# API: http://localhost:20128/v1 +# Dashboard: http://localhost:20129 ``` -**Det var det!** Begynd at kode med GRATIS AI-modeller. +### 2) Tilslut udbydere og opret din API-nøgle -**Alternativt — kør fra kilden:** +1. Åbn Dashboard → `Providers` og tilslut mindst én udbyder (OAuth- eller API-nøgle). +2. Åbn Dashboard → `Endpoint` og opret en API-nøgle. +3. (Valgfrit) Åbn Dashboard → `Combos` og indstil din reservekæde. + +### 3) Peg dit kodningsværktøj til OmniRoute + +```txt +Base URL: http://localhost:20128/v1 +API Key: [copy from Endpoint page] +Model: if/kimi-k2-thinking (or any provider/model prefix) +``` + +Fungerer med Claude Code, Codex CLI, Gemini CLI, Cursor, Cline, OpenClaw, OpenCode og OpenAI-kompatible SDK'er. + +### 4) Aktiver og valider protokoller (v2.0) + +**MCP (til værktøjsdrevne operationer):** + +```bash +omniroute --mcp +``` + +Tilslut derefter din MCP-klient over `stdio` og test værktøjer som: + +- `omniroute_get_health` +- `omniroute_list_combos` + +**A2A (for agent-til-agent arbejdsgange):** + +```bash +curl http://localhost:20128/.well-known/agent.json +``` + +```bash +curl -X POST http://localhost:20128/a2a \ + -H 'content-type: application/json' \ + -d '{"jsonrpc":"2.0","id":"quickstart","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Give me a short quota summary."}]}}' +``` + +### 5) Valider alt ende-til-ende (anbefales) + +```bash +npm run test:protocols:e2e +``` + +Denne suite validerer rigtige MCP- og A2A-klientstrømme mod en kørende app. + +### Alternativ: Kør fra kilden ```bash cp .env.example .env npm install -PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev +PORT=20128 DASHBOARD_PORT=20129 NEXT_PUBLIC_BASE_URL=http://localhost:20129 npm run dev ``` --- @@ -504,33 +808,44 @@ docker compose --profile cli up -d --- ---- +## 🖥️ -## 🖥️ Desktop App — Offline & Always-On +Kør OmniRoute som en selvstændig desktop-app - ingen terminal, ingen browser, intet internet påkrævet for lokale modeller. Den elektronbaserede app inkluderer: -> 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. - -- 🖥️ **Native Window** — Dedicated app window with system tray integration -- 🔄 **Auto-Start** — Launch OmniRoute on system login -- 🔔 **Native Notifications** — Get alerts for quota exhaustion or provider issues +- 🖥️ **Native Window** — Dedikeret appvindue med systembakkeintegration +- 🔄 **Auto-Start** — Start OmniRoute ved systemlogin +- 🔔 **Native notifikationer** — Få advarsler om kvoteopbrugt eller udbyderproblemer - ⚡ **One-Click Install** — NSIS (Windows), DMG (macOS), AppImage (Linux) -- 🌐 **Offline Mode** — Works fully offline with bundled server +- 🌐 **Offline-tilstand** — Fungerer fuldt ud offline med medfølgende server + +### Hurtig start ```bash -npm run electron:dev # Development mode +# Development mode +npm run electron:dev + +# Build for your platform npm run electron:build # Current platform npm run electron:build:win # Windows (.exe) -npm run electron:build:mac # macOS (.dmg) +npm run electron:build:mac # macOS (.dmg) — x64 & arm64 npm run electron:build:linux # Linux (.AppImage) ``` -📖 Full documentation: [`electron/README.md`](electron/README.md) +### Systembakke + +Når den er minimeret, lever OmniRoute i din procesbakke med hurtige handlinger: + +- Åbn instrumentbrættet +- Skift serverport +- Afslut programmet + +📖 Fuld dokumentation: [`electron/README.md`](electron/README.md) --- ## 💰 Prissætning på et øjeblik -| Tier | Udbyder | Omkostninger | Kvote nulstilling | Bedst til | +| Tier | Udbyder | Omkostninger | Kvote nulstil | Bedst til | | ----------------- | ----------------- | --------------------------- | ------------------ | -------------------------- | | **💳 ABONNEMENT** | Claude Code (Pro) | 20 USD/md. | 5 timer + ugentlig | Allerede abonneret | | | Codex (Plus/Pro) | $20-200/md. | 5 timer + ugentlig | OpenAI-brugere | @@ -555,231 +870,221 @@ npm run electron:build:linux # Linux (.AppImage) ## 💡 Nøglefunktioner -### 🧠 Core Routing & Intelligence +OmniRoute v2.0 er bygget som en operationel platform, ikke kun en relæ-proxy. -| Funktion | Hvad det gør | -| ---------------------------------- | -------------------------------------------------------------------------------------- | -| 🎯 **Smart 4-lags fallback** | Auto-rute: Abonnement → API-nøgle → Billig → Gratis | -| 📊 **Kvotesporing i realtid** | Live token count + nulstil nedtælling pr. udbyder | -| 🔄 **Formatoversættelse** | OpenAI ↔ Claude ↔ Gemini ↔ Markør ↔ Kiro sømløs + respons sanitisering | -| 👥 **Multi-Account Support** | Flere konti pr. udbyder med intelligent valg | -| 🔄 **Automatisk token-opdatering** | OAuth-tokens opdateres automatisk med genforsøg | -| 🎨 **Tilpassede kombinationer** | 6 strategier: fill-first, round-robin, p2c, random, mindst brugt, omkostningsoptimeret | -| 🧩 **Tilpassede modeller** | Tilføj ethvert model-id til enhver udbyder | -| 🌐 **Wildcard-router** | Rut `provider/*` mønstre til enhver udbyder dynamisk | -| 🧠 **Tænkende budget** | Passthrough, auto, brugerdefinerede og adaptive tilstande til ræsonnerende modeller | -| 🔀 **Model Aliases** | Auto-forward deprecated model IDs to current replacements (built-in + custom) | -| ⚡ **Background Degradation** | Auto-route background tasks (titles, summaries) to cheaper models | -| 💬 **System Prompt Injection** | Global systemprompt anvendt på tværs af alle anmodninger | -| 📄 **Responses API** | Fuld OpenAI Responses API (`/v1/responses`) understøttelse af Codex | +### 🤖 Agent- og protokoloperationer (v2.0)| Funktion | Hvad det gør | + +| ------------------------------------ | ---------------------------------------------------------------------------------- | +| 🔧 **MCP-server (16 værktøjer)** | IDE/agent-værktøjer kontrollerer routing, sundhed, kombinationer, grænser og operationer | +| 🤝 **A2A-server (JSON-RPC + SSE)** | Agent-til-agent opgaveudførelse med synkronisering og streaming flows | +| 🧭 **MCP/A2A Dashboards** | Dedikerede administrationssider (`/dashboard/mcp`, `/dashboard/a2a`) | +| 🛰️ **MCP Runtime Heartbeat** | Reel processtatus (pid, oppetid, hjerteslagsalder, transport, omfangstilstand) | +| 📋 **MCP Audit Trail** | Filtrerbare revisionslogfiler med succes/fejl og nøgletilskrivning | +| 🔐 **MCP Scope Enforcement** | 9 granulære omfangstilladelser til kontrolleret værktøjsadgang | +| 📡 **A2A Task Lifecycle Management** | Liste/filtrere opgaver, inspicere hændelser/artefakter, annullere kørende opgaver | +| 📋 **Agent Card Discovery** | `/.well-known/agent.json` til klientens automatiske opdagelse | +| 🧪 **Protokol E2E testsele** | Ægte MCP SDK + A2A klientstrømme i `test:protocols:e2e` | +| ⚙️ **Driftskontrol** | Switch combo, påfør elasticitetsprofiler, nulstil afbrydere fra én kontrolflade | + +### 🧠 Routing og intelligens + +| Funktion | Hvad det gør | +| ----------------------------------- | ------------------------------------------------------------------------------- | +| 🎯 **Smart 4-lags fallback** | Auto-rute: Abonnement → API-nøgle → Billig → Gratis | +| 📊 **Kvotesporing i realtid** | Live token count + nulstil nedtælling pr. udbyder | +| 🔄 **Formatoversættelse** | OpenAI ↔ Claude ↔ Gemini ↔ Svar med skemasikre konverteringer | +| 👥 **Multi-Account Support** | Flere konti pr. udbyder med intelligent valg | +| 🔄 **Automatisk token-opdatering** | OAuth-tokens opdateres automatisk med genforsøg | +| 🎨 **Tilpassede kombinationer** | 6 balanceringsstrategier + fallback kædekontrol | +| 🌐 **Wildcard-router** | `provider/*` dynamisk routing | +| 🧠 **Tænker på budgetkontrol** | Grænser for gennemstrømning, automatisk, brugerdefineret og adaptiv ræsonnement | +| 🔀 **Modelaliaser** | Indbygget + brugerdefineret model aliasing og migration sikkerhed | +| ⚡ **Baggrundsforringelse** | Send baggrundsopgaver med lav prioritet til billigere modeller | +| 💬 **System Prompt Injection** | Globale adfærdskontroller anvendes konsekvent | +| 📄 **Responses API-kompatibilitet** | Fuld `/v1/responses`-understøttelse af Codex og avancerede agentarbejdsgange | ### 🎵 Multi-Modal API'er -| Funktion | Hvad det gør | -| ------------------------ | -------------------------------------------------- | -| 🖼️ **Billedgenerering** | `/v1/images/generations` — 4 udbydere, 9+ modeller | -| 📐 **Indlejringer** | `/v1/embeddings` — 6 udbydere, 9+ modeller | -| 🎤 **Lydtransskription** | `/v1/audio/transcriptions` — Whisper-kompatibel | -| 🔊 **Tekst-til-tale** | `/v1/audio/speech` — Multi-udbyder lydsyntese | -| 🛡️ **Moderationer** | `/v1/moderations` — Indholdssikkerhedstjek | -| 🔀 **Omrangering** | `/v1/rerank` — Omrangering af dokumentrelevans | +| Funktion | Hvad det gør || -------------------------- | -------------------------------------------------------------------- | +| 🖼️ **Billedgenerering** | `/v1/images/generations` med cloud og lokale backends | +| 📐 **Indlejringer** | `/v1/embeddings` til søgning og RAG-rørledninger | +| 🎤 **Lydtransskription** | `/v1/audio/transcriptions` (Whisper og yderligere udbydere) | +| 🔊 **Tekst-til-tale** | `/v1/audio/speech` (flere motorer/udbydere) | +| 🎬 **Videogenerering** | `/v1/videos/generations` (ComfyUI + SD WebUI-arbejdsgange) | +| 🎵 **Music Generation** | `/v1/music/generations` (ComfyUI-arbejdsgange) | +| 🛡️ **Moderationer** | `/v1/moderations` sikkerhedstjek | +| 🔀 **Omrangering** | `/v1/rerank` for relevansscoring | -### 🛡️ Modstandsdygtighed og sikkerhed +### 🛡️ Resiliens, sikkerhed og styring -| Funktion | Hvad det gør | -| -------------------------------- | ------------------------------------------------------------------------------ | -| 🔌 **Circuit Breaker** | Automatisk åbning/lukning pr. udbyder med konfigurerbare tærskler | -| 🛡️ **Anti-tordenbesætning** | Mutex + semafor-hastighedsgrænse for API-nøgleudbydere | -| 🧠 **Semantisk cache** | To-lags cache (signatur + semantisk) reducerer omkostninger og ventetid | -| ⚡ **Anmod om idempotens** | 5s dedup-vindue for duplikerede anmodninger | -| 🔒 **TLS Fingerprint Spoofing** | Omgå TLS-baseret botdetektion via wreq-js | -| 🌐 **IP-filtrering** | Tilladelsesliste/blokeringsliste til API-adgangskontrol | -| 📊 **Redigerbare satsgrænser** | Konfigurerbar RPM, min. gap og maks. samtidighed på systemniveau | -| 💾 **Rate Limit Persistence** | Learned limits survive restarts via SQLite with 60s debounce + 24h staleness | -| 🔄 **Token Refresh Resilience** | Per-provider circuit breaker (5 fails→30min) + 30s timeout per attempt | -| 🛡 **API-endepunktsbeskyttelse** | Auth gating + udbyderblokering for `/models` slutpunktet | -| 🔒 **Proxysynlighed** | Farvekodede badges: 🟢 global, 🟡 udbyder, 🔵 per forbindelse med IP-skærm | -| 🌐 **3-Level Proxy Config** | Konfigurer proxyer på globalt niveau, pr. udbyder eller pr. forbindelsesniveau | +| Funktion | Hvad det gør | +| ----------------------------------- | --------------------------------------------------------------------- | +| 🔌 **Maksimalafbrydere** | Trip/recover på udbyderniveau med tærskelkontrol | +| 🛡️ **Anti-tordenbesætning** | Mutex + semaforbeskyttelse ved genforsøg/rate hændelser | +| 🧠 **Semantisk + signaturcache** | Reduktion af omkostninger/latens med to cachelag | +| ⚡ **Anmod om idempotens** | Dobbelt beskyttelsesvindue | +| 🔒 **TLS Fingerprint Spoofing** | Bedre kompatibilitet med anti-bot-filtrerede udbydere | +| 🌐 **IP-filtrering** | Tilladelsesliste/blokeringslistekontrol for udsatte implementeringer | +| 📊 **Redigerbare satsgrænser** | Konfigurerbare grænser på globalt niveau/udbyderniveau med persistens | +| 🔑 **API Key Management + Scoping** | Sikker nøgleudstedelse/rotation og model-/leverandørkontrol | +| 🛡️ **Beskyttet `/models`** | Valgfri godkendelse og udbyderskjul til modelkatalog | ### 📊 Observerbarhed og analyse -| Funktion | Hvad det gør | -| --------------------------- | ------------------------------------------------------------------------------------- | -| 📝 **Anmod om logning** | Fejlretningstilstand med fuld anmodnings-/svarlogs | -| 💾 **SQLite Proxy Logs** | Vedvarende proxy-logfiler overlever genstart af server | -| 📊 **Analytics Dashboard** | Recharts-drevet: statkort, modelbrugsdiagram, udbydertabel | -| 📈 **Fremskridtssporing** | Opt-in SSE-fremskridtsbegivenheder til streaming | -| 🧪 **LLM-evalueringer** | Gyldne sæt test med 4 kampstrategier | -| 🔍 **Anmod om telemetri** | p50/p95/p99 latenstidsaggregering + X-Request-Id-sporing | -| 📋 **Log Dashboard** | Samlet side med 4 faner: Anmodningslogfiler, Proxylogfiler, Revisionslogfiler, Konsol | -| 🖥️ **Konsol Log Viewer** | Real-time terminal-stil fremviser med niveau filter, søgning, auto-scroll | -| 📑 **Filbaseret logning** | Konsolinterceptor fanger alt output til JSON-logfil med rotation | -| 🏥 **Sundhedskontrolpanel** | Systemets oppetid, strømafbrydertilstande, lockouts, cachestatistik | -| 💰 **Omkostningssporing** | Budgetstyring + priskonfiguration pr. model | +| Funktion | Hvad det gør | +| ---------------------------------- | ------------------------------------------------------ | +| 📝 **Forespørgsel + Proxylogning** | Fuld anmodning/svar og proxy-logning | +| 📋 **Unified Logs Dashboard** | Anmodning, proxy, revision og konsolvisning på én side | +| 🔍 **Anmod om telemetri** | p50/p95/p99 latens og anmodningssporing | +| 🏥 **Sundhedskontrolpanel** | Oppetid, breaker-tilstande, lockouts, cache-statistik | +| 💰 **Omkostningssporing** | Budgetkontrol og prisfastsættelse pr. model | +| 📈 **Analytiske visualiseringer** | Model-/udbyderbrugsindsigt og trendvisninger | +| 🧪 **Evalueringsramme** | Gyldne sæt-test med konfigurerbare matchstrategier | -### ☁️ Implementering og synkronisering +### ☁️ Implementering og platform -| Funktion | Hvad det gør | -| ---------------------------- | ------------------------------------------------------------------------ | -| 💾 **Cloud Sync** | Synkroniser konfiguration på tværs af enheder via Cloudflare Workers | -| 🌐 **Deploy hvor som helst** | Localhost, VPS, Docker, Cloudflare Workers | -| 🔑 **API Key Management** | Generer, roter og omfang API-nøgler pr. udbyder | -| 🧙 **Onboarding Wizard** | 4-trins guidet opsætning for førstegangsbrugere | -| 🔧 **CLI Tools Dashboard** | Et-klik konfigurer Claude, Codex, Cline, OpenClaw, Kilo, Antigravity | -| 🔄 **DB-sikkerhedskopier** | Automatisk backup, gendannelse, eksport og import for alle indstillinger | -| 🌐 **Internationalisering** | Fuld i18n med next-intl — engelsk + portugisisk (Brasilien) support | -| 🌍 **Sprogvælger** | Globusikon i overskriften til sprogskift i realtid (🇺🇸/🇧🇷) | -| 📂 **Tilpasset datakatalog** | `DATA_DIR` env var for at tilsidesætte standard `~/.omniroute` lagersti | +| Funktion | Hvad det gør | +| -------------------------------------- | -------------------------------------------------------------- | --- | ----------------- | ------------------------------------------------ | +| 🌐 **Deploy hvor som helst** | Localhost, VPS, Docker, Cloud-miljøer | | 💾 **Cloud Sync** | Synkronisering af konfiguration via cloud worker | +| 🔄 **Sikkerhedskopiering/gendannelse** | Eksport/import og gendannelsesstrømme | +| 🧙 **Onboarding Wizard** | Første kørsel guidet opsætning | +| 🔧 **CLI Tools Dashboard** | Et-klik opsætning til populære kodningsværktøjer | +| 🌐 **i18n (30 sprog)** | Fuldt dashboard + understøttelse af docs-sprog med RTL-dækning | +| 📂 **Tilpasset datakatalog** | `DATA_DIR` tilsidesættelse af lagerplacering | -
-📖 Funktionsdetaljer +### Feature Deep Dive -### 🎯 Smart 4-Tier Fallback +#### Smart fallback med praktisk omkostningskontrol -Opret kombinationer med automatisk fallback: - -``` +```txt Combo: "my-coding-stack" - 1. cc/claude-opus-4-6 (your subscription) - 2. nvidia/llama-3.3-70b (free NVIDIA API) - 3. glm/glm-4.7 (cheap backup, $0.6/1M) - 4. if/kimi-k2-thinking (free fallback) - -→ Auto switches when quota runs out or errors occur + 1. cc/claude-opus-4-6 + 2. nvidia/llama-3.3-70b + 3. glm/glm-4.7 + 4. if/kimi-k2-thinking ``` -### 📊 Kvotesporing i realtid +Når kvote, sats eller sundhed svigter, flytter OmniRoute automatisk til den næste kandidat uden manuel skift. -- Tokenforbrug pr. udbyder -- Nulstil nedtælling (5 timer, dagligt, ugentligt) -- Omkostningsestimat for betalte niveauer -- Månedlige udgiftsrapporter +#### Protokolstyring, der er synlig og funktionsdygtig -### 🔄 Formatoversættelse +- MCP + A2A kan findes i brugergrænsefladen og dokumenter (ikke skjult) +- Protokolstatus API'er afslører live driftsdata (`/api/mcp/*`, `/api/a2a/*`) +- Dashboards inkluderer handlinger for dag-2 operationer (kombinationsskift, nulstilling af breaker, annullering af opgave) -Problemfri oversættelse mellem formater: +#### Oversætter + valideringsarbejdsgang -- **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **OpenAI-svar** -- Dit CLI-værktøj sender OpenAI-format → OmniRoute oversætter → Udbyder modtager oprindeligt format -- Fungerer med ethvert værktøj, der understøtter brugerdefinerede OpenAI-endepunkter -- **Responssanering** — Fjerner ikke-standardfelter for streng OpenAI SDK-kompatibilitet -- **Rollenormalisering** — `developer` → `system` for ikke-OpenAI; `system` → `user` til GLM/ERNIE-modeller -- **Tænk tag-udtrækning** — `` blokke → `reasoning_content` til tænkende modeller -- **Struktureret output** — `json_schema` → Gemini's `responseMimeType`/`responseSchema` +Oversætterområdet omfatter: -### 👥 Support til flere konti +- **Legeplads**: anmod om transformationstjek +- **Chattester**: fuld anmodning/svar tur/retur +- **Testbænk**: flere sager på én gang +- **Live Monitor**: trafikvisning i realtid -- Tilføj flere konti pr. udbyder -- Auto round-robin eller prioritetsbaseret routing -- Fallback til næste konto, når man rammer kvoten +Plus protokolvalidering med rigtige klienter via `npm run test:protocols:e2e`. -### 🔄 Automatisk token-opdatering +> 📖 **[MCP Server README](open-sse/mcp-server/README.md)** — Værktøjsreference, IDE-konfigurationer og klienteksempler +> +> 📖 **[A2A Server README](src/lib/a2a/README.md)** — Færdigheder, JSON-RPC-metoder, streaming og opgavelivscyklus -- OAuth-tokens opdateres automatisk før udløb -- Ingen manuel gengodkendelse nødvendig -- Problemfri oplevelse på tværs af alle udbydere +## 🧪 Evalueringer (evalueringer) -### 🎨 Brugerdefinerede kombinationer +OmniRoute inkluderer en indbygget evalueringsramme til at teste LLM-svarkvaliteten mod et gyldent sæt. Få adgang til det via **Analytics → Evals** i dashboardet. -- Opret ubegrænsede modelkombinationer -- 6 strategier: fill-first, round-robin, power-of-to-choices, tilfældig, mindst brugt, omkostningsoptimeret -- Del kombinationer på tværs af enheder med Cloud Sync +### Indbygget gyldent sæt -### 🏥 Health Dashboard +Det forudindlæste "OmniRoute Golden Set" indeholder testcases til: -- Systemstatus (oppetid, version, hukommelsesforbrug) -- Strømafbrydertilstande pr. udbyder (lukket/åbent/halvt åbent) -- Takstgrænsestatus og aktive lockouts -- Signatur cache statistik -- Latency-telemetri (p50/p95/p99) + prompt-cache -- Nulstil sundhedsstatus med et enkelt klik +- Hilsen, matematik, geografi, kodegenerering +- JSON format compliance, oversættelse, markdown generation +- Sikkerhedsafvisning (skadeligt indhold), optælling, boolsk logik -### 🔧 Oversætterlegeplads +### Evalueringsstrategier -OmniRoute inkluderer en kraftfuld indbygget oversætterlegeplads med **4 tilstande** til fejlretning, test og overvågning af API-oversættelser: - -| Tilstand | Beskrivelse | -| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **💻 Legeplads** | Direkte formatoversættelse — indsæt enhver API-anmodningstekst og se øjeblikkeligt, hvordan OmniRoute oversætter det mellem udbyderformater (OpenAI ↔ Claude ↔ Gemini ↔ Responses API). Indeholder eksempelskabeloner og automatisk genkendelse af formater. | -| **💬 Chattester** | Send rigtige chatanmodninger gennem OmniRoute og se den fulde rundrejse: dit input, den oversatte anmodning, udbyderens svar og det oversatte svar tilbage. Uvurderlig til validering af combo routing. | -| **🧪 Test bænk** | Batch-testtilstand – definer flere testcases med forskellige input og forventede output, kør dem alle på én gang, og sammenlign resultater på tværs af udbydere og modeller. | -| **📱 Live Monitor** | Overvågning af anmodninger i realtid — se indgående anmodninger, mens de flyder gennem OmniRoute, se formatoversættelser, der foregår live, og identificer problemer med det samme. | - -**Adgang:** Dashboard → Oversætter (sidebjælke) - -### 💾 Cloud Sync - -- Synkroniser udbydere, kombinationer og indstillinger på tværs af enheder -- Automatisk baggrundssynkronisering -- Sikker krypteret opbevaring - -
- ---- - -## 🎯 Use Cases - -### Case 1: "Jeg har Claude Pro-abonnement" - -**Problem:** Kvoten udløber ubrugt, satsgrænser under tung kodning - -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) - -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` - -### Case 2: "Jeg vil have nul omkostninger" - -**Problem:** Har ikke råd til abonnementer, har brug for pålidelig AI-kodning - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Case 3: "Jeg har brug for 24/7 kodning, ingen afbrydelser" - -**Problem:** Deadlines, har ikke råd til nedetid - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Case 4: "Jeg vil have GRATIS AI i OpenClaw" - -**Problem:** Har brug for AI-assistent i beskedapps, helt gratis - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Strategi | Beskrivelse | Eksempel | +| ---------- | ----------------------------------------------------------------------- | -------------------------------- | +| `exact` | Output skal matche nøjagtigt | `"4"` | +| `contains` | Output skal indeholde understreng (uafhængig af store og små bogstaver) | `"Paris"` | +| `regex` | Output skal matche regex-mønster | `"1.*2.*3"` | +| `custom` | Brugerdefineret JS-funktion returnerer sand/falsk | `(output) => output.length > 10` | --- ## 📖 Opsætningsvejledning +### Protokolopsætning (MCP + A2A) + +
+🧩 MCP-opsætning (modelkontekstprotokol) + +Start MCP-transport i stdio-tilstand: + +```bash +omniroute --mcp +``` + +Anbefalet valideringsflow: + +1. Tilslut din MCP-klient via stdio. +2. Kør `omniroute_get_health`. +3. Kør `omniroute_list_combos`. +4. Åbn `/dashboard/mcp` for at bekræfte hjerteslag, aktivitet og audit. + +Nyttige API'er til automatisering: + +- `GET /api/mcp/status` +- `GET /api/mcp/tools` +- `GET /api/mcp/audit` +- `GET /api/mcp/audit/stats` + +
+ +
🤝 A2A-opsætning (Agent2Agent) + +Opdag agenten: + +```bash +curl http://localhost:20128/.well-known/agent.json +``` + +Send en opgave: + +```bash +curl -X POST http://localhost:20128/a2a \ + -H 'content-type: application/json' \ + -d '{"jsonrpc":"2.0","id":"setup-a2a","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Summarize quota status."}]}}' +``` + +Administrer livscyklus: + +- `GET /api/a2a/status` +- `GET /api/a2a/tasks` +- `GET /api/a2a/tasks/:id` +- `POST /api/a2a/tasks/:id/cancel` + +Operationel UI: + +- `/dashboard/a2a` til observerbarhed af opgave/tilstand/strøm og røghandlinger + +
+ +
+🧪 End-to-end protokolvalidering + +Valider begge protokoller med rigtige klienter: + +```bash +npm run test:protocols:e2e +``` + +Dette verificerer: + +- MCP SDK-klient forbinde/liste/opkald +- A2A opdagelse/send/stream/hent/annuller +- Krydstjek data i MCP-audit og A2A opgavestyring API'er + +
+
💳 Abonnementsudbydere @@ -840,7 +1145,7 @@ Models:
-🔑 API-nøgleudbydere +🔑 API nøgleudbydere ### NVIDIA NIM (GRATIS 1000 kreditter!) @@ -849,7 +1154,7 @@ Models: 3. Dashboard → Tilføj udbyder → NVIDIA NIM: - API-nøgle: `nvapi-your-key` -**Modeller:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` og mere end 50 +**Modeller:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` og 50+ flere **Prof tip:** OpenAI-kompatibel API — fungerer problemfrit med OmniRoutes formatoversættelse! @@ -921,20 +1226,20 @@ Models:
🆓 GRATIS udbydere (nødbackup) -### iFlow (8 GRATIS modeller) +### iFlow (8 GRATIS modeller)```bash -```bash Dashboard → Connect iFlow → iFlow OAuth login → Unlimited usage Models: - if/kimi-k2-thinking - if/qwen3-coder-plus - if/glm-4.7 - if/minimax-m2 - if/deepseek-r1 -``` +if/kimi-k2-thinking +if/qwen3-coder-plus +if/glm-4.7 +if/minimax-m2 +if/deepseek-r1 + +```` ### Qwen (3 GRATIS modeller) @@ -946,7 +1251,7 @@ Dashboard → Connect Qwen Models: qw/qwen3-coder-plus qw/qwen3-coder-flash -``` +```` ### Kiro (Claude GRATIS) @@ -1054,33 +1359,51 @@ Settings → API Configuration: Model: if/kimi-k2-thinking ``` +### OpenCode + +**Trin 1:** Tilføj OmniRoute som en tilpasset udbyder: + +```bash +opencode +/connect +# Select "Other" → Enter ID: "omniroute" → Enter your OmniRoute API key +``` + +**Trin 2:** Opret/rediger `opencode.json` i dit projektrod: + +```json +{ + "$schema": "https://opencode.ai/config.json", + "provider": { + "omniroute": { + "npm": "@ai-sdk/openai-compatible", + "name": "OmniRoute", + "options": { + "baseURL": "http://localhost:20128/v1" + }, + "models": { + "cc/claude-sonnet-4-20250514": { "name": "Claude Sonnet 4" }, + "gg/gemini-2.5-pro": { "name": "Gemini 2.5 Pro" }, + "if/kimi-k2-thinking": { "name": "Kimi K2 (Free)" } + } + } + } +} +``` + +**Trin 3:** Vælg modellen i OpenCode: + +```bash +/models +# Select any OmniRoute model from the list +``` + +> **Tip:** Tilføj enhver tilgængelig model i dit OmniRoute `/v1/models`-endepunkt til `models`-sektionen. Brug formatet `provider/model-id` fra dit OmniRoute-dashboard. +
--- -## 🧪 Evalueringer (evalueringer) - -OmniRoute inkluderer en indbygget evalueringsramme til at teste LLM-svarkvaliteten mod et gyldent sæt. Få adgang til det via **Analytics → Evals** i dashboardet. - -### Indbygget gyldent sæt - -Det forudindlæste "OmniRoute Golden Set" indeholder 10 testcases, der dækker: - -- Hilsen, matematik, geografi, kodegenerering -- JSON format compliance, oversættelse, markdown -- Sikkerhedsafvisning (skadeligt indhold), optælling, boolsk logik - -### Evalueringsstrategier - -| Strategi | Beskrivelse | Eksempel | -| ---------- | ----------------------------------------------------------------------- | -------------------------------- | -| `exact` | Output skal matche nøjagtigt | `"4"` | -| `contains` | Output skal indeholde understreng (uafhængig af store og små bogstaver) | `"Paris"` | -| `regex` | Output skal matche regex-mønster | `"1.*2.*3"` | -| `custom` | Brugerdefineret JS-funktion returnerer sand/falsk | `(output) => output.length > 10` | - ---- - ## 🐛 Fejlfinding
@@ -1107,20 +1430,23 @@ Det forudindlæste "OmniRoute Golden Set" indeholder 10 testcases, der dækker: - Skift primær model til GLM/MiniMax - Brug gratis niveau (Gemini CLI, iFlow) til ikke-kritiske opgaver -**Dashboard åbner på forkert port** +**Dashboard/API-porte er forkerte** -- Sæt `PORT=20128` og `NEXT_PUBLIC_BASE_URL=http://localhost:20128` +- `PORT` er den kanoniske basisport (og API-port som standard) +- `API_PORT` tilsidesætter kun OpenAI-kompatibel API-lytter +- `DASHBOARD_PORT` tilsidesætter kun dashboard/Next.js-lytter +- Indstil `NEXT_PUBLIC_BASE_URL` til dit dashboard/offentlige URL (til OAuth-tilbagekald) **Skysynkroniseringsfejl** -- Bekræft `BASE_URL` peger på din løbeforekomst -- Bekræft `CLOUD_URL` point til dit forventede cloud-endepunkt -- Hold `NEXT_PUBLIC_*` værdier på linje med værdier på serversiden +- Bekræft, at `BASE_URL` peger på din kørende instans +- Bekræft `CLOUD_URL`-punkter til dit forventede cloud-endepunkt +- Hold `NEXT_PUBLIC_*`-værdier på linje med værdier på serversiden **Første login virker ikke** - Tjek `INITIAL_PASSWORD` i `.env` -- Hvis den ikke er angivet, er reserveadgangskoden `123456` +- Hvis den ikke er indstillet, er reserveadgangskoden `123456` **Ingen anmodningslogfiler** @@ -1128,19 +1454,17 @@ Det forudindlæste "OmniRoute Golden Set" indeholder 10 testcases, der dækker: **Forbindelsestest viser "Ugyldig" for OpenAI-kompatible udbydere** -- Mange udbydere eksponerer ikke et `/models` slutpunkt +- Mange udbydere eksponerer ikke et `/models`-endepunkt - OmniRoute v1.0.6+ inkluderer fallback-validering via chatafslutninger -- Sørg for, at basis-URL'en inkluderer suffikset `/v1` +- Sørg for, at basis-URL inkluderer `/v1` suffiks -### 🔐 OAuth em Servidor Remoto (Remote OAuth Setup) +### 🔐 OAuth > **⚠️ VIGTIGT til brugere af OmniRoute med VPS/Docker/server-fjernbetjening** -### Kan du bruge Antigravity / Gemini CLI til at udføre fjernbetjeninger? - -Os testedores **Antigravity** og **Gemini CLI** usam **Google OAuth 2.0** for autenticação. O Google exige que a `redirect_uri` usada no fluxo OAuth seja **exatamente** uma das URIs pré-cadastradas no Google Cloud Console do aplicativo. +#### OAuth Som credenciais OAuth embutidas no OmniRoute estão cadastradas **apenas para `localhost`**. Quando você acessa o OmniRoute em um servidor remoto (ex: `https://omniroute.meuservidor.com`), o Google afviser en autenticação com: @@ -1148,7 +1472,7 @@ Som credenciais OAuth embutidas no OmniRoute estão cadastradas **apenas para `l Error 400: redirect_uri_mismatch ``` -### Løsning: Konfigurer OAuth, der er godkendt +#### Løsning: Konfigurer OAuth-tilgængelighed Você precisa criar um **OAuth 2.0 Client ID** ingen Google Cloud Console med en URI, der udfører denne service. @@ -1172,7 +1496,7 @@ Ingen campo **"Autoriseret omdirigerings-URI'er"**, adicione: https://seu-servidor.com/callback ``` -> Substitua `seu-servidor.com` pelo domínio ou IP do seu servidor (inclua a porta se necessário, ex: `http://45.33.32.156:20128/callback`). +> Substitua `seu-servidor.com` pelo domínio eller IP do seu servidor (inklusive en porta se necessário, ex: `http://45.33.32.156:20128/callback`). **4. Salve e copy as credenciais** @@ -1180,7 +1504,7 @@ Após criar, o Google mostrará o **Client ID** e o **Client Secret**. **5. Konfigurer som variáveis de ambiente** -No seu `.env` (ou nas variáveis de ambiente do Docker): +Ingen seu `.env` (denne variáveis de ambiente do Docker): ```bash # Para Antigravity: @@ -1207,11 +1531,11 @@ docker restart omniroute Dashboard → Udbydere → Antigravity (ou Gemini CLI) → OAuth -Agora o Google redirecionará corretamente para `https://seu-servidor.com/callback` og autenticação funcionará. +Agora eller Google redirecionará corretamente para `https://seu-servidor.com/callback` og autenticação funcionará. --- -### Løsning midlertidigt (som konfigureret credenciais próprias) +#### Midlertidig løsning (som konfigureret tiltrods próprias) Se não quiser criar credenciais próprias agora, ainda é possível usar o fluxo **manual de URL**: @@ -1227,59 +1551,50 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🛠️ Tech Stack +## 🛠️ + +
+Klik for at udvide tekniske stakdetaljer - **Runtime**: Node.js 18–22 LTS (⚠️ Node.js 24+ er **ikke understøttet** — `better-sqlite3` native binære filer er inkompatible) -- **Sprog**: TypeScript 5.9 — **100 % TypeScript** på tværs af `src/` og `open-sse/` (v1.0.6) +- **Sprog**: TypeScript 5.9 — **100 % TypeScript** på tværs af `src/` og `open-sse/` (nul `any` i kernemoduler siden v2.0) - **Framework**: Next.js 16 + React 19 + Tailwind CSS 4 -- **Database**: LowDB (JSON) + SQLite (domænetilstand + proxylogfiler) +- **Database**: LowDB (JSON) + SQLite (domænetilstand + proxylogfiler + MCP-revision + routingbeslutninger) +- **Skemaer**: Zod (MCP-værktøj I/O-validering, API-kontrakter) +- **Protokoller**: MCP (stdio/HTTP) + A2A v0.3 (JSON-RPC 2.0 + SSE) - **Streaming**: Server-sendte hændelser (SSE) -- **Auth**: OAuth 2.0 (PKCE) + JWT + API-nøgler -- **Test**: Node.js testløber (368+ enhedstest) -- **CI/CD**: GitHub-handlinger (automatisk npm-udgivelse + Docker Hub ved udgivelse) +- **Auth**: OAuth 2.0 (PKCE) + JWT + API-nøgler + MCP Scoped Authorization +- **Test**: Node.js testløber + Vitest (900+ tests inklusive enhed, integration, E2E)- **CI/CD**: GitHub-handlinger (automatisk npm-udgivelse + Docker Hub ved udgivelse) - **Websted**: [omniroute.online](https://omniroute.online) - **Pakke**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute) - **Docker**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute) -- **Resiliens**: Circuit breaker, eksponentiel backoff, anti-tordenbesætning, TLS spoofing - ---- - -## 📖 Dokumentation - -| Dokument | Beskrivelse | -| -------------------------------------------- | -------------------------------------------------------- | -| [User Guide](docs/USER_GUIDE.md) | Udbydere, kombinationer, CLI-integration, implementering | -| [API Reference](docs/API_REFERENCE.md) | Alle endepunkter med eksempler | -| [Troubleshooting](docs/TROUBLESHOOTING.md) | Almindelige problemer og løsninger | -| [Architecture](docs/ARCHITECTURE.md) | Systemarkitektur og indre | -| [Contributing](CONTRIBUTING.md) | Udviklingsopsætning og retningslinjer | -| [OpenAPI Spec](docs/openapi.yaml) | OpenAPI 3.0-specifikation | -| [Security Policy](SECURITY.md) | Sårbarhedsrapportering og sikkerhedspraksis | -| [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | Komplet guide: VM + nginx + Cloudflare opsætning | -| [Features Gallery](docs/FEATURES.md) | Visuel dashboard-rundvisning med skærmbilleder | - -### 📸 Dashboard Preview - -
-Klik for at se skærmbilleder af dashboard - -| Side | Skærmbillede | -| ----------------- | ------------------------------------------------- | -| **Udbydere** | ![Providers](docs/screenshots/01-providers.png) | -| **Komboer** | ![Combos](docs/screenshots/02-combos.png) | -| **Analyse** | ![Analytics](docs/screenshots/03-analytics.png) | -| **Sundhed** | ![Health](docs/screenshots/04-health.png) | -| **Oversætter** | ![Translator](docs/screenshots/05-translator.png) | -| **Indstillinger** | ![Settings](docs/screenshots/06-settings.png) | -| **CLI-værktøjer** | ![CLI Tools](docs/screenshots/07-cli-tools.png) | -| **Brugslogfiler** | ![Usage](docs/screenshots/08-usage.png) | -| **Endpunkt** | ![Endpoint](docs/screenshots/09-endpoint.png) | +- **Resiliens**: Circuit breaker, eksponentiel backoff, anti-tordenbesætning, TLS spoofing, auto-combo selvhelbredelse
--- -## 🗺️ Køreplan +## 📖 Dokumentation + +| Dokument | Beskrivelse | +| ------------------------------------------------ | ------------------------------------------------------------ | +| [Brugervejledning](docs/USER_GUIDE.md) | Udbydere, kombinationer, CLI-integration, implementering | +| [API-reference](docs/API_REFERENCE.md) | Alle endepunkter med eksempler | +| [MCP-server](open-sse/mcp-server/README.md) | 16 MCP-værktøjer, IDE-konfigurationer, Python/TS/Go-klienter | +| [A2A-server](src/lib/a2a/README.md) | JSON-RPC 2.0 protokol, færdigheder, streaming, opgavestyring | +| [Auto-kombimotor](docs/auto-combo.md) | 6-faktor scoring, tilstandspakker, selvhelbredende | +| [Fejlfinding](docs/TROUBLESHOOTING.md) | Almindelige problemer og løsninger | +| [Arkitektur](docs/ARCHITECTURE.md) | Systemarkitektur og indre | +| [Bidrager](CONTRIBUTING.md) | Udviklingsopsætning og retningslinjer | +| [OpenAPI Spec](docs/openapi.yaml) | OpenAPI 3.0-specifikation | +| [Sikkerhedspolitik](SECURITY.md) | Sårbarhedsrapportering og sikkerhedspraksis | +| [VM-implementering](docs/VM_DEPLOYMENT_GUIDE.md) | Komplet guide: VM + nginx + Cloudflare opsætning | +| [Feature Gallery](docs/FEATURES.md) | Visuel dashboard-rundvisning med skærmbilleder | +| [Udgivelsestjekliste](docs/RELEASE_CHECKLIST.md) | Pre-release valideringstrin | + +--- + +## 🗺️ OmniRoute har **210+ funktioner planlagt** på tværs af flere udviklingsfaser. Her er nøgleområderne: @@ -1288,37 +1603,24 @@ OmniRoute har **210+ funktioner planlagt** på tværs af flere udviklingsfaser. | 🧠 **Routing & intelligens** | 25+ | Routing med laveste latens, tag-baseret routing, kvote preflight, valg af P2C-konto | | 🔒 **Sikkerhed og overholdelse** | 20+ | SSRF-hærdning, tilsløring af legitimationsoplysninger, hastighedsgrænse pr. slutpunkt, styringsnøgleomfang | | 📊 **Observabilitet** | 15+ | OpenTelemetry-integration, kvoteovervågning i realtid, omkostningssporing pr. model | -| 🔄 **Udbyderintegrationer** | 20+ | Dynamisk modelregistrering, udbydernedkøling, multi-konto Codex, Copilot-kvoteparsing | +| 🔄 **Udbyderintegrationer** | 20+ | Dynamisk modelregistrering, leverandørnedkøling, multi-konto Codex, Copilot-kvoteparsing | | ⚡ **Ydeevne** | 15+ | Dobbelt cachelag, promptcache, svarcache, streaming keepalive, batch API | | 🌐 **Økosystem** | 10+ | WebSocket API, config hot-reload, distribueret config butik, kommerciel tilstand | -### 🔜 Kommer snart +### 🔜 Kommer snart- 🔗 **OpenCode-integration** — Native udbyderunderstøttelse af OpenCode AI-kodnings-IDE -- 🔗 **OpenCode-integration** — Native udbyderunderstøttelse af OpenCode AI-kodnings-IDE - 🔗 **TRAE-integration** — Fuld understøttelse af TRAE AI-udviklingsrammen - 📦 **Batch API** — Asynkron batchbehandling til masseanmodninger - 🎯 **Tag-baseret Routing** — Ruteanmodninger baseret på tilpassede tags og metadata - 💰 **Laveste omkostningsstrategi** — Vælg automatisk den billigste tilgængelige udbyder -> 📝 Fuld funktionsspecifikationer tilgængelige i [link](docs/new-features/) (217 detaljerede specifikationer) - ---- - -## 📧 Support - -> 💬 **Tilmeld dig vores fællesskab!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Få hjælp, del tips, og hold dig opdateret. - -- **Websted**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Problemer**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Originalt projekt**: [9router by decolua](https://github.com/decolua/9router) +> 📝 Fuld funktionsspecifikationer tilgængelige i [`docs/new-features/`](docs/new-features/) (217 detaljerede specifikationer) --- ## 👥 Bidragydere -[![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) +[![Bidragydere](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) ### Sådan bidrager du @@ -1334,7 +1636,7 @@ Se [CONTRIBUTING.md](CONTRIBUTING.md) for detaljerede retningslinjer. ```bash # Create a release — npm publish happens automatically -gh release create v1.0.6 --title "v1.0.6" --generate-notes +gh release create v2.0.0 --title "v2.0.0" --generate-notes ``` --- @@ -1361,7 +1663,7 @@ Særlig tak til **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** ## 📄 Licens -MIT-licens - se [LICENSE](LICENSE) for detaljer. +MIT-licens - se [LICENS](LICENSE) for detaljer. --- @@ -1370,3 +1672,4 @@ MIT-licens - se [LICENSE](LICENSE) for detaljer.
omniroute.online + diff --git a/README.de.md b/README.de.md index a56b021050..cd732a41d4 100644 --- a/README.de.md +++ b/README.de.md @@ -1,28 +1,69 @@ -
- OmniRoute Dashboard - - # 🚀 OmniRoute — Das kostenlose AI-Gateway +# 🚀 OmniRoute – Das kostenlose KI-Gateway -### Höre nie auf zu programmieren. Intelligentes Routing zu **KOSTENLOSEN und günstigen KI-Modellen** mit automatischem Fallback. +### Hören Sie nie auf zu programmieren. Intelligentes Routing zu **KOSTENLOSEN und kostengünstigen KI-Modellen** mit automatischem Fallback. -_Dein universeller API-Proxy — ein Endpoint, 36+ Anbieter, null Ausfallzeit._ +_Ihr universeller API-Proxy – ein Endpunkt, mehr als 36 Anbieter, keine Ausfallzeiten. Jetzt mit **MCP & A2A** Agenten-Orchestrierung._ -**Chat Completions • Embeddings • Bildgenerierung • Audio • Reranking • 100% TypeScript** +**Chat-Abschlüsse • Einbettungen • Bildgenerierung • Video • Musik • Audio • Reranking • MCP-Server • A2A-Protokoll • 100 % TypeScript** --- -### 🤖 Kostenloser KI-Anbieter für deine Lieblings-Coding-Agenten +
-_Verbinde jedes KI-gesteuerte IDE- oder CLI-Tool über OmniRoute — kostenloses API-Gateway für unbegrenztes Programmieren._ +[![npm-Version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute) +[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute) +[![Lizenz](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE) +[![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online) +[![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) + +[🌐 Website](https://omniroute.online) • [🚀 Schnellstart](#-quick-start) • [💡 Funktionen](#-key-features) • [📖 Dokumente](#-documentation) • [💰 Preise](#-pricing-at-a-glance) • [💬 WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) + +
+ +🌐 **Verfügbar in:** 🇺🇸 [Englisch](README.md) | 🇧🇷 [Português (Brasilien)](README.pt-BR.md) | 🇪🇸 [Español](README.es.md) | 🇫🇷 [Français](README.fr.md) | 🇮🇹 [Italienisch](README.it.md) | 🇷🇺 [Русский](README.ru.md) | 🇨🇳 [中文 (简体)](README.zh-CN.md) | 🇩🇪 [Deutsch](README.de.md) | 🇮🇳 [हिन्दी](README.in.md) | 🇹🇭 [ไทย](README.th.md) | 🇺🇦 [Українська](README.uk-UA.md) | 🇸🇦 [العربية](README.ar.md) | 🇯🇵 [日本語](README.ja.md) | 🇻🇳 [Tiếng Việt](README.vi.md) | 🇧🇬 [Български](README.bg.md) | 🇩🇰 [Dänisch](README.da.md) | 🇫🇮 [Suomi](README.fi.md) | 🇮🇱 [עברית](README.he.md) | 🇭🇺 [Magyar](README.hu.md) | 🇮🇩 [Bahasa Indonesia](README.id.md) | 🇰🇷 [한국어](README.ko.md) | 🇲🇾 [Bahasa Melayu](README.ms.md) | 🇳🇱 [Niederlande](README.nl.md) | 🇳🇴 [Norsk](README.no.md) | 🇵🇹 [Português (Portugal)](README.pt.md) | 🇷🇴 [Română](README.ro.md) | 🇵🇱 [Polski](README.pl.md) | 🇸🇰 [Slovenčina](README.sk.md) | 🇸🇪 [Svenska](README.sv.md) | 🇵🇭 [Philippinisch](README.phi.md) + +--- + +## 🖼️ Haupt-Dashboard + +
+ OmniRoute Dashboard +
+ +--- + +## 📸 Dashboard-Vorschau + +
+Klicken Sie hier, um Dashboard-Screenshots anzuzeigen + +| Seite | Screenshot | +| ---------------------- | -------------------------------------------------- | +| **Anbieter** | ![Anbieter](docs/screenshots/01-providers.png) | +| **Kombinationen** | ![Combos](docs/screenshots/02-combos.png) | +| **Analytik** | ![Analytics](docs/screenshots/03-analytics.png) | +| **Gesundheit** | ![Gesundheit](docs/screenshots/04-health.png) | +| **Übersetzer** | ![Übersetzer](docs/screenshots/05-translator.png) | +| **Einstellungen** | ![Einstellungen](docs/screenshots/06-settings.png) | +| **CLI-Tools** | ![CLI-Tools](docs/screenshots/07-cli-tools.png) | +| **Nutzungsprotokolle** | ![Verwendung](docs/screenshots/08-usage.png) | +| **Endpunkt** | ![Endpunkt](docs/screenshots/09-endpoint.png) | + +
+ +--- + +### 🤖 Kostenloser KI-Anbieter für Ihre bevorzugten Programmieragenten + +_Verbinden Sie jedes KI-gestützte IDE- oder CLI-Tool über OmniRoute – kostenloses API-Gateway für unbegrenzte Codierung._
- + OpenClaw
OpenClaw -

- ⭐ 205K +
⭐ 205K
@@ -85,374 +126,643 @@ _Verbinde jedes KI-gesteuerte IDE- oder CLI-Tool über OmniRoute — kostenloses Kilo Code
- Kilo Code + Kilo-Code

⭐ 15.5K
-📡 Alle Agenten verbinden sich über http://localhost:20128/v1 oder http://cloud.omniroute.online/v1 — eine Konfiguration, unbegrenzte Modelle und Kontingent - ---- - -[![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute) -[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute) -[![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE) -[![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online) -[![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) - -[🌐 Website](https://omniroute.online) • [🚀 Schnellstart](#-schnellstart) • [💡 Funktionen](#-hauptfunktionen) • [📖 Doku](#-dokumentation) • [💰 Preise](#-preisübersicht) - -🌐 **Verfügbar in:** 🇺🇸 [English](README.md) | 🇧🇷 [Português (Brasil)](README.pt-BR.md) | 🇪🇸 [Español](README.es.md) | 🇫🇷 [Français](README.fr.md) | 🇮🇹 [Italiano](README.it.md) | 🇷🇺 [Русский](README.ru.md) | 🇨🇳 [中文 (简体)](README.zh-CN.md) | 🇩🇪 [Deutsch](README.de.md) | 🇮🇳 [हिन्दी](README.in.md) | 🇹🇭 [ไทย](README.th.md) | 🇺🇦 [Українська](README.uk-UA.md) | 🇸🇦 [العربية](README.ar.md) | 🇯🇵 [日本語](README.ja.md) | 🇻🇳 [Tiếng Việt](README.vi.md) | 🇧🇬 [Български](README.bg.md) | 🇩🇰 [Dansk](README.da.md) | 🇫🇮 [Suomi](README.fi.md) | 🇮🇱 [עברית](README.he.md) | 🇭🇺 [Magyar](README.hu.md) | 🇮🇩 [Bahasa Indonesia](README.id.md) | 🇰🇷 [한국어](README.ko.md) | 🇲🇾 [Bahasa Melayu](README.ms.md) | 🇳🇱 [Nederlands](README.nl.md) | 🇳🇴 [Norsk](README.no.md) | 🇵🇹 [Português (Portugal)](README.pt.md) | 🇷🇴 [Română](README.ro.md) | 🇵🇱 [Polski](README.pl.md) | 🇸🇰 [Slovenčina](README.sk.md) | 🇸🇪 [Svenska](README.sv.md) | 🇵🇭 [Filipino](README.phi.md) - -
+📡 Alle Agenten verbinden sich über http://localhost:20128/v1 oder quote --- ## 🤔 Warum OmniRoute? -**Hör auf, Geld zu verschwenden und an Limits zu stoßen:** +**Hören Sie auf, Geld zu verschwenden und an Grenzen zu stoßen:** -- Abo-Kontingent verfällt jeden Monat ungenutzt -- Rate-Limits stoppen dich mitten beim Programmieren -- Teure APIs ($20-50/Monat pro Anbieter) -- Manuelles Wechseln zwischen Anbietern +- Das Abonnementkontingent läuft jeden Monat ungenutzt ab +- Ratenbegrenzungen verhindern, dass Sie mitten in der Codierung sind +- Teure APIs (20–50 $/Monat pro Anbieter) +- Manueller Wechsel zwischen Anbietern -**OmniRoute löst das:** +**OmniRoute löst dieses Problem:** -- ✅ **Abos maximieren** — Kontingente tracken, alles vor dem Reset nutzen -- ✅ **Automatischer Fallback** — Abo → API Key → Günstig → Kostenlos, null Ausfallzeit -- ✅ **Multi-Account** — Round-Robin zwischen Konten pro Anbieter -- ✅ **Universal** — Funktioniert mit Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, jedem CLI-Tool +- ✅ **Abonnements maximieren** - Verfolgen Sie das Kontingent, nutzen Sie jedes Bit vor dem Zurücksetzen +- ✅ **Auto-Fallback** – Abonnement → API-Schlüssel → Günstig → Kostenlos, keine Ausfallzeiten +- ✅ **Mehrere Konten** – Round-Robin zwischen Konten pro Anbieter +- ✅ **Universell** – Funktioniert mit Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw und jedem CLI-Tool --- -## 🔄 So funktioniert's +## 📧 Unterstützung> 💬 **Treten Sie unserer Community bei!** [WhatsApp-Gruppe](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) – Holen Sie sich Hilfe, tauschen Sie Tipps aus und bleiben Sie auf dem Laufenden. + +- **Website**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Probleme**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community-Gruppe](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Mitwirken**: Siehe [CONTRIBUTING.md](CONTRIBUTING.md), öffnen Sie eine PR oder wählen Sie eine `good first issue` aus +- **Originalprojekt**: [9router von decolua](https://github.com/decolua/9router) + +--- + +## 🔄 Wie es funktioniert ``` ┌─────────────┐ -│ Dein CLI │ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...) +│ Your CLI │ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...) │ Tool │ └──────┬──────┘ │ http://localhost:20128/v1 ↓ ┌─────────────────────────────────────────┐ -│ OmniRoute (Smart Router) │ -│ • Format-Übersetzung (OpenAI ↔ Claude) │ -│ • Kontingent-Tracking + Embeddings + Bilder │ -│ • Automatische Token-Erneuerung │ +│ OmniRoute (Smart Router) │ +│ • Format translation (OpenAI ↔ Claude) │ +│ • Quota tracking + Embeddings + Images │ +│ • Auto token refresh │ └──────┬──────────────────────────────────┘ │ - ├─→ [Tier 1: ABO] Claude Code, Codex, Gemini CLI - │ ↓ Kontingent erschöpft - ├─→ [Tier 2: API KEY] DeepSeek, Groq, xAI, Mistral, NVIDIA NIM usw. - │ ↓ Budget-Limit - ├─→ [Tier 3: GÜNSTIG] GLM ($0.6/1M), MiniMax ($0.2/1M) - │ ↓ Budget-Limit - └─→ [Tier 4: KOSTENLOS] iFlow, Qwen, Kiro (unbegrenzt) + ├─→ [Tier 1: SUBSCRIPTION] Claude Code, Codex, Gemini CLI + │ ↓ quota exhausted + ├─→ [Tier 2: API KEY] DeepSeek, Groq, xAI, Mistral, NVIDIA NIM, etc. + │ ↓ budget limit + ├─→ [Tier 3: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M) + │ ↓ budget limit + └─→ [Tier 4: FREE] iFlow, Qwen, Kiro (unlimited) -Ergebnis: Nie aufhören zu programmieren, minimale Kosten +Result: Never stop coding, minimal cost ``` --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Was OmniRoute löst – 30 echte Problempunkte und Anwendungsfälle -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Jeder Entwickler, der KI-Tools verwendet, ist täglich mit diesen Problemen konfrontiert.** OmniRoute wurde entwickelt, um sie alle zu lösen – von Kostenüberschreitungen bis hin zu regionalen Blockaden, von unterbrochenen OAuth-Flüssen bis hin zu Protokollvorgängen und Unternehmensbeobachtbarkeit.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. „Ich bezahle ein teures Abonnement, werde aber trotzdem durch Limits unterbrochen“ -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Entwickler zahlen 20–200 US-Dollar/Monat für Claude Pro, Codex Pro oder GitHub Copilot. Auch wenn das Kontingent bezahlt wird, gibt es eine Obergrenze – 5 Stunden Nutzung, wöchentliche Limits oder Tariflimits pro Minute. Während der Codierungssitzung reagiert der Anbieter nicht mehr und der Entwickler verliert an Fluss und Produktivität. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Intelligenter 4-Stufen-Fallback** – Wenn das Abonnementkontingent aufgebraucht ist, wird automatisch zu API Key → Günstig → Kostenlos weitergeleitet, ohne dass ein manueller Eingriff erforderlich ist +- **Kontingentverfolgung in Echtzeit** – Zeigt den Token-Verbrauch in Echtzeit mit Reset-Countdown an (5 Stunden, täglich, wöchentlich) +- **Unterstützung mehrerer Konten** – Mehrere Konten pro Anbieter mit automatischem Round-Robin – wenn eines aufgebraucht ist, wird zum nächsten gewechselt +- **Benutzerdefinierte Kombinationen** – Anpassbare Fallback-Ketten mit 6 Ausgleichsstrategien (Fill-First, Round-Robin, P2C, Random, Least-Used, Kostenoptimiert) +- **Codex Business Quotas** – Überwachung der Geschäfts-/Team-Arbeitsbereichskontingente direkt im Dashboard
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. „Ich muss mehrere Anbieter verwenden, aber jeder hat eine andere API“ -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI verwendet ein Format, Claude (Anthropic) verwendet ein anderes, Gemini noch ein anderes. Wenn ein Entwickler Modelle verschiedener Anbieter testen oder zwischen ihnen wechseln möchte, muss er SDKs neu konfigurieren, Endpunkte ändern und mit inkompatiblen Formaten umgehen. Benutzerdefinierte Anbieter (FriendLI, NIM) verfügen über nicht standardmäßige Modellendpunkte. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Einheitlicher Endpunkt** – Ein einzelner `http://localhost:20128/v1` dient als Proxy für alle über 36 Anbieter +- **Formatübersetzung** – Automatisch und transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **Antwortbereinigung** – Entfernt nicht standardmäßige Felder (`x_groq`, `usage_breakdown`, `service_tier`), die OpenAI SDK v1.83+ beschädigen +- **Rollennormalisierung** – Konvertiert `developer` → `system` für Nicht-OpenAI-Anbieter; `system` → `user` für GLM/ERNIE +- **Think Tag Extraction** – Extrahiert ``-Blöcke aus Modellen wie DeepSeek R1 in das standardisierte `reasoning_content` +- **Strukturierte Ausgabe für Gemini** – `json_schema` → `responseMimeType`/`responseSchema` automatische Konvertierung +- **`stream` ist standardmäßig `false`** – Entspricht der OpenAI-Spezifikation und vermeidet unerwartetes SSE in Python/Rust/Go-SDKs
+ +
+🌐 3. „Mein KI-Anbieter blockiert meine Region/mein Land“ + +Anbieter wie OpenAI/Codex blockieren den Zugriff aus bestimmten geografischen Regionen. Benutzer erhalten bei OAuth- und API-Verbindungen Fehler wie `unsupported_country_region_territory`. Dies ist besonders frustrierend für Entwickler aus Entwicklungsländern. + +**So löst OmniRoute das Problem:** + +- **3-Level-Proxy-Konfiguration** – Konfigurierbarer Proxy auf 3 Ebenen: global (gesamter Datenverkehr), pro Anbieter (nur ein Anbieter) und pro Verbindung/Schlüssel +- **Farbcodierte Proxy-Abzeichen** – Visuelle Indikatoren: 🟢 globaler Proxy, 🟡 Anbieter-Proxy, 🔵 Verbindungs-Proxy, immer mit IP-Adresse +- **OAuth-Token-Austausch über Proxy** – Der OAuth-Fluss läuft auch über den Proxy und löst `unsupported_country_region_territory` +- **Verbindungstests über Proxy** – Verbindungstests verwenden den konfigurierten Proxy (keine direkte Umgehung mehr) +- **SOCKS5-Unterstützung** – Vollständige SOCKS5-Proxy-Unterstützung für ausgehendes Routing +- **TLS-Fingerabdruck-Spoofing** – Browserähnlicher TLS-Fingerabdruck über `wreq-js` zur Umgehung der Bot-Erkennung
-🌐 3. "My AI provider blocks my region/country" +🆓 4. „Ich möchte KI zum Codieren verwenden, habe aber kein Geld“ -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Nicht jeder kann 20–200 $/Monat für KI-Abonnements bezahlen. Studenten, Entwickler aus Schwellenländern, Bastler und Freiberufler benötigen Zugang zu hochwertigen Modellen zum Nulltarif. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **Integrierte kostenlose Anbieter** – Native Unterstützung für 100 % kostenlose Anbieter: iFlow (8 unbegrenzte Modelle), Qwen (3 unbegrenzte Modelle), Kiro (Claude kostenlos), Gemini CLI (180.000/Monat kostenlos) +- **Nur kostenlose Combos** – Kette `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = 0 $/Monat ohne Ausfallzeit +- **NVIDIA NIM Free Credits** – 1000 kostenlose Credits integriert +- **Kostenoptimierte Strategie** – Routing-Strategie, die automatisch den günstigsten verfügbaren Anbieter auswählt
-🆓 4. "I want to use AI for coding but I have no money" +🔒 5. „Ich muss mein KI-Gateway vor unbefugtem Zugriff schützen“ -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Wenn ein KI-Gateway dem Netzwerk (LAN, VPS, Docker) zugänglich gemacht wird, kann jeder mit der Adresse die Token/Kontingente des Entwicklers verbrauchen. Ohne Schutz sind APIs anfällig für Missbrauch, sofortige Injektion und Missbrauch. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **API-Schlüsselverwaltung** – Generierung, Rotation und Scoping pro Anbieter mit einer dedizierten `/dashboard/api-manager`-Seite +- **Berechtigungen auf Modellebene** – Beschränken Sie API-Schlüssel auf bestimmte Modelle (`openai/*`, Platzhaltermuster) mit der Umschaltfunktion „Alle zulassen/Einschränken“. +- **API Endpoint Protection** – Fordern Sie einen Schlüssel für `/v1/models` an und blockieren Sie bestimmte Anbieter aus der Liste +- **Auth Guard + CSRF-Schutz** – Alle Dashboard-Routen sind mit `withAuth`-Middleware + CSRF-Tokens geschützt +- **Ratenbegrenzer** – Ratenbegrenzung pro IP mit konfigurierbaren Fenstern +- **IP-Filterung** – Zulassungs-/Blockierungsliste für die Zugriffskontrolle +- **Prompt Injection Guard** – Bereinigung gegen bösartige Eingabeaufforderungsmuster +- **AES-256-GCM-Verschlüsselung** – Anmeldeinformationen im Ruhezustand verschlüsselt
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🛑 6. „Mein Provider ist ausgefallen und ich habe meinen Codierungsfluss verloren“KI-Anbieter können instabil werden, 5xx-Fehler zurückgeben oder vorübergehende Ratengrenzen erreichen. Wenn ein Entwickler von einem einzelnen Anbieter abhängig ist, wird er unterbrochen. Ohne Schutzschalter können wiederholte Versuche zum Absturz der Anwendung führen. -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +**So löst OmniRoute das Problem:** -**How OmniRoute solves it:** - -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Leistungsschalter pro Anbieter** – Automatisches Öffnen/Schließen mit konfigurierbaren Schwellenwerten und Abklingzeit (geschlossen/offen/halb offen) +- **Exponentielles Backoff** – Progressive Wiederholungsverzögerungen +- **Anti-Thundering Herd** – Mutex + Semaphor-Schutz gegen gleichzeitige Wiederholungsstürme +- **Combo-Fallback-Ketten** – Wenn der primäre Anbieter ausfällt, fällt er automatisch durch die Kette, ohne dass ein Eingreifen erforderlich ist +- **Combo Circuit Breaker** – Deaktiviert automatisch ausgefallene Anbieter innerhalb einer Combo-Kette +- **Gesundheits-Dashboard** – Betriebszeitüberwachung, Leistungsschalterzustände, Sperren, Cache-Statistiken, p50/p95/p99-Latenz
-🛑 6. "My provider went down and I lost my coding flow" +🔧 7. „Die Konfiguration jedes KI-Tools ist mühsam und repetitiv“ -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Entwickler verwenden Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code ... Jedes Tool benötigt eine andere Konfiguration (API-Endpunkt, Schlüssel, Modell). Eine Neukonfiguration bei einem Anbieter- oder Modellwechsel ist Zeitverschwendung. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **CLI Tools Dashboard** – Spezielle Seite mit Ein-Klick-Einrichtung für Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** – Generiert `chatLanguageModels.json` für VS-Code mit Massenmodellauswahl +- **Onboarding-Assistent** – Geführte Einrichtung in 4 Schritten für Erstbenutzer +- **Ein Endpunkt, alle Modelle** – Konfigurieren Sie `http://localhost:20128/v1` einmal und greifen Sie auf über 36 Anbieter zu
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔑 8. „OAuth-Tokens von mehreren Anbietern zu verwalten ist die Hölle“ -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Claude Code, Codex, Gemini CLI, Copilot – alle verwenden OAuth 2.0 mit ablaufenden Token. Entwickler müssen sich ständig neu authentifizieren, sich mit `client_secret is missing`, `redirect_uri_mismatch` und Fehlern auf Remote-Servern auseinandersetzen. Besonders problematisch ist OAuth auf LAN/VPS. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **Automatische Token-Aktualisierung** – OAuth-Tokens werden vor Ablauf im Hintergrund aktualisiert +- **OAuth 2.0 (PKCE) integriert** – Automatischer Ablauf für Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **Multi-Account OAuth** – Mehrere Konten pro Anbieter über JWT/ID-Token-Extraktion +- **OAuth LAN/Remote Fix** – Private IP-Erkennung für `redirect_uri` + manueller URL-Modus für Remote-Server +- **OAuth Behind Nginx** – Verwendet `window.location.origin` für Reverse-Proxy-Kompatibilität +- **Remote OAuth Guide** – Schritt-für-Schritt-Anleitung für Google Cloud-Anmeldeinformationen auf VPS/Docker
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +📊 9. „Ich weiß nicht, wie viel ich ausgebe oder wo“ -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Entwickler nutzen mehrere kostenpflichtige Anbieter, haben jedoch keine einheitliche Sicht auf die Ausgaben. Jeder Anbieter verfügt über ein eigenes Abrechnungs-Dashboard, es gibt jedoch keine konsolidierte Ansicht. Unerwartete Kosten können sich häufen. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Kostenanalyse-Dashboard** – Kostenverfolgung pro Token und Budgetverwaltung pro Anbieter +- **Budgetgrenzen pro Stufe** – Ausgabenobergrenze pro Stufe, die einen automatischen Fallback auslöst +- **Preiskonfiguration pro Modell** – Konfigurierbare Preise pro Modell- **Nutzungsstatistiken pro API-Schlüssel** – Anzahl der Anfragen und zuletzt verwendeter Zeitstempel pro Schlüssel +- **Analytics-Dashboard** – Statistikkarten, Modellnutzungsdiagramm, Anbietertabelle mit Erfolgsraten und Latenz
-📊 9. "I don't know how much I'm spending or where" +🐛 10. „Ich kann Fehler und Probleme bei KI-Anrufen nicht diagnostizieren“ -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Wenn ein Anruf fehlschlägt, weiß der Entwickler nicht, ob es sich um eine Ratenbegrenzung, ein abgelaufenes Token, ein falsches Format oder einen Anbieterfehler handelt. Fragmentierte Protokolle über verschiedene Terminals hinweg. Ohne Beobachtbarkeit ist das Debuggen ein Versuch und Irrtum. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Unified Logs Dashboard** – 4 Registerkarten: Anforderungsprotokolle, Proxy-Protokolle, Audit-Protokolle, Konsole +- **Console Log Viewer** – Echtzeit-Viewer im Terminal-Stil mit farbcodierten Ebenen, automatischem Scrollen, Suche und Filter +- **SQLite-Proxy-Protokolle** – Persistente Protokolle, die Serverneustarts überdauern +- **Translator Playground** – 4 Debugging-Modi: Playground (Formatübersetzung), Chat Tester (Round-Trip), Test Bench (Batch), Live Monitor (Echtzeit) +- **Telemetrie anfordern** – p50/p95/p99-Latenz + X-Request-Id-Ablaufverfolgung +- **Dateibasierte Protokollierung mit Rotation** – Der Konsolen-Interceptor erfasst alles im JSON-Protokoll mit größenbasierter Rotation
-🐛 10. "I can't diagnose errors and problems in AI calls" +🏗️ 11. „Die Bereitstellung und Wartung des Gateways ist komplex“ -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Die Installation, Konfiguration und Wartung eines KI-Proxys in verschiedenen Umgebungen (lokal, VPS, Docker, Cloud) ist arbeitsintensiv. Probleme wie hartcodierte Pfade, `EACCES` in Verzeichnissen, Portkonflikte und plattformübergreifende Builds sorgen für zusätzliche Reibung. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **npm globale Installation** – `npm install -g omniroute && omniroute` – fertig +- **Docker Multi-Platform** – AMD64 + ARM64 nativ (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Docker Compose-Profile** – `base` (keine CLI-Tools) und `cli` (mit Claude Code, Codex, OpenClaw) +- **Electron Desktop App** – Native App für Windows/macOS/Linux mit Taskleiste, Autostart, Offline-Modus +- **Split-Port-Modus** – API und Dashboard auf separaten Ports für erweiterte Szenarien (Reverse-Proxy, Container-Netzwerk) +- **Cloud Sync** – Konfigurieren Sie die geräteübergreifende Synchronisierung über Cloudflare Workers +- **DB-Backups** – Automatische Sicherung, Wiederherstellung, Export und Import aller Einstellungen
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🌍 12. „Die Benutzeroberfläche ist nur auf Englisch verfügbar und mein Team spricht kein Englisch“ -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Teams in nicht englischsprachigen Ländern, insbesondere in Lateinamerika, Asien und Europa, haben Probleme mit rein englischsprachigen Benutzeroberflächen. Sprachbarrieren verringern die Akzeptanz und erhöhen die Zahl von Konfigurationsfehlern. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **Dashboard i18n – 30 Sprachen** – Alle über 500 Tasten übersetzt, einschließlich Arabisch, Bulgarisch, Dänisch, Deutsch, Spanisch, Finnisch, Französisch, Hebräisch, Hindi, Ungarisch, Indonesisch, Italienisch, Japanisch, Koreanisch, Malaiisch, Niederländisch, Norwegisch, Polnisch, Portugiesisch (PT/BR), Rumänisch, Russisch, Slowakisch, Schwedisch, Thailändisch, Ukrainisch, Vietnamesisch, Chinesisch, Philippinisch, Englisch +- **RTL-Unterstützung** – Rechts-nach-links-Unterstützung für Arabisch und Hebräisch +- **Mehrsprachige READMEs** – 30 vollständige Dokumentationsübersetzungen +- **Sprachauswahl** – Globussymbol in der Kopfzeile zum Umschalten in Echtzeit
+ +
+🔄 13. „Ich brauche mehr als nur Chat – ich brauche Einbettungen, Bilder, Audio“ + +KI ist nicht nur der Abschluss eines Chats. Entwickler müssen Bilder generieren, Audio transkribieren, Einbettungen für RAG erstellen, Dokumente neu einordnen und Inhalte moderieren. Jede API hat einen anderen Endpunkt und ein anderes Format. + +**So löst OmniRoute das Problem:** + +- **Einbettungen** – `/v1/embeddings` mit 6 Anbietern und 9+ Modellen +- **Bildgenerierung** – `/v1/images/generations` mit 10 Anbietern und über 20 Modellen (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Text-zu-Video** – `/v1/videos/generations` – ComfyUI (AnimateDiff, SVD) und SD WebUI +- **Text-zu-Musik** – `/v1/music/generations` – ComfyUI (Stable Audio Open, MusicGen) +- **Audiotranskription** – `/v1/audio/transcriptions` – Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Text-to-Speech** – `/v1/audio/speech` – ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + bestehende Anbieter +- **Moderationen** – `/v1/moderations` – Überprüfung der Inhaltssicherheit +- **Neueinstufung** – `/v1/rerank` – Neueinstufung der Dokumentenrelevanz +- **Antwort-API** – Vollständige `/v1/responses`-Unterstützung für Codex
-🌍 12. "The interface is English-only and my team doesn't speak English" +🧪 14. „Ich habe keine Möglichkeit, die Qualität verschiedener Modelle zu testen und zu vergleichen“ -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Entwickler möchten wissen, welches Modell für ihren Anwendungsfall am besten geeignet ist – Code, Übersetzung, Argumentation –, aber ein manueller Vergleich ist langsam. Es sind keine integrierten Evaluierungstools vorhanden. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **LLM-Bewertungen** – Golden-Set-Test mit 10 vorinstallierten Fällen zu Begrüßungen, Mathematik, Geografie, Codegenerierung, JSON-Konformität, Übersetzung, Markdown und Sicherheitsverweigerung +- **4 Match-Strategien** – `exact`, `contains`, `regex`, `custom` (JS-Funktion) +- **Translator Playground Test Bench** – Batch-Tests mit mehreren Eingaben und erwarteten Ausgaben, anbieterübergreifender Vergleich +- **Chat-Tester** – Vollständiger Roundtrip mit visueller Antwortwiedergabe +- **Live-Monitor** – Echtzeit-Stream aller Anfragen, die über den Proxy fließen
-🔄 13. "I need more than chat — I need embeddings, images, audio" +📈 15. „Ich muss skalieren, ohne an Leistung einzubüßen“ -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +Wenn das Anfragevolumen wächst, verursachen dieselben Fragen ohne Zwischenspeicherung doppelte Kosten. Ohne Idempotenz verschwenden doppelte Anfragen die Verarbeitung. Die Tarifbegrenzungen pro Anbieter müssen eingehalten werden. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Semantischer Cache** – Zweistufiger Cache (Signatur + Semantik) reduziert Kosten und Latenz +- **Request Idempotency** – 5-Sekunden-Deduplizierungsfenster für identische Anfragen +- **Ratenbegrenzungserkennung** – Provider-RPM, minimale Lücke und maximale gleichzeitige Verfolgung +- **Bearbeitbare Ratengrenzen** – Konfigurierbare Standardeinstellungen unter Einstellungen → Ausfallsicherheit mit Persistenz +- **API Key Validation Cache** – 3-stufiger Cache für Produktionsleistung +- **Gesundheits-Dashboard mit Telemetrie** – p50/p95/p99-Latenz, Cache-Statistiken, Betriebszeit
-🧪 14. "I have no way to test and compare quality across models" +🤖 16. „Ich möchte das Modellverhalten global steuern“Entwickler, die alle Antworten in einer bestimmten Sprache oder mit einem bestimmten Ton wünschen oder die Argumentationstoken einschränken möchten. Dies in jedem Tool/jeder Anfrage zu konfigurieren, ist unpraktisch. -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +**So löst OmniRoute das Problem:** -**How OmniRoute solves it:** - -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **System Prompt Injection** – Globale Eingabeaufforderung, die auf alle Anfragen angewendet wird +- **Thinking Budget Validation** – Reasoning-Token-Zuteilungskontrolle pro Anfrage (Passthrough, automatisch, benutzerdefiniert, adaptiv) +- **6 Routing-Strategien** – Globale Strategien, die bestimmen, wie Anfragen verteilt werden +- **Wildcard-Router** – `provider/*`-Muster leiten dynamisch an jeden Anbieter weiter +- **Combo-Aktivierung/Deaktivierung umschalten** – Combos direkt über das Dashboard umschalten +- **Provider Toggle** – Alle Verbindungen für einen Anbieter mit einem Klick aktivieren/deaktivieren +- **Blockierte Anbieter** – Bestimmte Anbieter aus der `/v1/models`-Liste ausschließen
-📈 15. "I need to scale without losing performance" +🧰 17. „Ich brauche MCP-Tools als erstklassige Produktfunktionen“ -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +Viele KI-Gateways stellen MCP nur als verstecktes Implementierungsdetail zur Verfügung. Teams benötigen eine sichtbare, überschaubare Betriebsebene. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +– MCP wird in der Dashboard-Navigation und auf der Registerkarte „Endpunktprotokoll“ angezeigt + +- Dedizierte MCP-Verwaltungsseite mit Prozess, Tools, Bereichen und Audit + – Integrierter Schnellstart für `omniroute --mcp` und Kunden-Onboarding
-🤖 16. "I want to control model behavior globally" +🧠 18. „Ich benötige A2A-Orchestrierung mit Synchronisierungs- und Stream-Aufgabenpfaden“ -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Agenten-Workflows erfordern sowohl direkte Antworten als auch eine lang andauernde gestreamte Ausführung mit Lebenszykluskontrolle. -**How OmniRoute solves it:** +**So löst OmniRoute das Problem:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +– A2A JSON-RPC-Endpunkt (`POST /a2a`) mit `message/send` und `message/stream` + +- SSE-Streaming mit Terminal-State-Propagation + – Task-Lebenszyklus-APIs für `tasks/get` und `tasks/cancel`
+
+🛰️ 19. „Ich benötige den echten Zustand des MCP-Prozesses, keinen erratenen Status“ + +Betriebsteams müssen wissen, ob MCP tatsächlich aktiv ist, und nicht nur, ob eine API erreichbar ist. + +**So löst OmniRoute das Problem:** + +– Laufzeit-Heartbeat-Datei mit PID, Zeitstempeln, Transport, Werkzeuganzahl und Oszilloskopmodus + +- MCP-Status-API, die Heartbeat + aktuelle Aktivität kombiniert +- UI-Statuskarten für Prozess-/Verfügbarkeits-/Heartbeat-Aktualität + +
+ +
+📋 20. „Ich benötige eine überprüfbare MCP-Tool-Ausführung“ + +Wenn Tools die Konfiguration verändern oder operative Aktionen auslösen, benötigen Teams forensische Rückverfolgbarkeit. + +**So löst OmniRoute das Problem:** + +– SQLite-gestützte Audit-Protokollierung für MCP-Tool-Aufrufe + +- Filtert nach Tool, Erfolg/Misserfolg, API-Schlüssel und Paginierung +- Dashboard-Audit-Tabelle + Statistik-Endpunkte für die Automatisierung + +
+ +
+🔐 21. „Ich benötige bereichsweise MCP-Berechtigungen pro Integration“ + +Verschiedene Clients sollten Zugriff auf die Werkzeugkategorien mit den geringsten Rechten haben. + +**So löst OmniRoute das Problem:** + +- 9 granulare MCP-Bereiche für kontrollierten Werkzeugzugriff +- Geltungsbereichsdurchsetzung und Sichtbarkeit in der MCP-Management-Benutzeroberfläche +- Sichere Standardhaltung für Betriebswerkzeuge + +
+ +
⚙️ 22. „Ich benötige Betriebskontrollen ohne erneute Bereitstellung“ + +Teams benötigen bei Vorfällen oder Kostenereignissen schnelle Laufzeitänderungen. + +**So löst OmniRoute das Problem:** + +- Schalten Sie die Combo-Aktivierung direkt über das MCP-Dashboard um +- Wenden Sie Ausfallsicherheitsprofile aus vordefinierten Richtlinienpaketen an +- Setzen Sie den Leistungsschalterstatus über dasselbe Bedienfeld zurück + +
+ +
+🔄 23. „Ich benötige Live-Sichtbarkeit und Abbruch des A2A-Aufgabenlebenszyklus“ + +Ohne Sichtbarkeit des Lebenszyklus wird es schwierig, Aufgabenvorfälle zu selektieren. + +**So löst OmniRoute das Problem:** + +- Aufgabenliste/Filterung nach Bundesland/Fähigkeit mit Paginierung +- Drilldown zu Aufgabenmetadaten, Ereignissen und Artefakten +- Endpunkt zum Abbrechen von Aufgaben und UI-Aktion mit Bestätigung + +
+ +
+🌊 24. „Ich benötige aktive Stream-Metriken für die A2A-Last“ + +Streaming-Workflows erfordern betriebliche Einblicke in Parallelität und Live-Verbindungen. + +**So löst OmniRoute das Problem:** + +- Aktive Stream-Zähler im A2A-Status integriert +- Zeitstempel der letzten Aufgabe und Anzahl pro Status +- A2A-Dashboard-Karten für die Echtzeit-Betriebsüberwachung + +
+ +
+🪪 25. „Ich benötige Standard-Agent-Erkennung für Clients“ + +Externe Kunden und Orchestratoren benötigen für das Onboarding maschinenlesbare Metadaten. + +**So löst OmniRoute das Problem:** + +– Agentenkarte unter `/.well-known/agent.json` ausgestellt + +- Fähigkeiten und Fertigkeiten werden in der Management-Benutzeroberfläche angezeigt + – Die A2A-Status-API enthält Erkennungsmetadaten für die Automatisierung + +
+ +
+🧭 26. „Ich benötige Protokollauffindbarkeit in der Produkt-UX“ + +Wenn Benutzer Protokolloberflächen nicht entdecken können, sinken Akzeptanz und Supportqualität. + +**So löst OmniRoute das Problem:** + +- Seitenleisteneinträge für MCP und A2A +- Registerkarte „Protokolle“ auf der Endpunktseite mit Schnellstart und Status +- Links von der Übersicht zu speziellen Management-Dashboards + +
+ +
+🧪 27. „Ich benötige eine End-to-End-Protokollvalidierung mit echten Clients“ + +Probetests reichen nicht aus, um die Protokollkompatibilität vor der Veröffentlichung zu überprüfen. + +**So löst OmniRoute das Problem:** + +– E2E-Suite, die die App startet und echten MCP SDK-Client-Transport verwendet + +- A2A-Clienttests für Erkennungs-, Sende-, Stream-, Get- und Abbruchflüsse +- Vergleichen Sie Behauptungen mit MCP-Audit- und A2A-Aufgaben-APIs + +
+ +
+📡 28. „Ich brauche eine einheitliche Beobachtbarkeit über alle Schnittstellen hinweg“ + +Die Aufteilung der Beobachtbarkeit nach Protokoll führt zu blinden Flecken und einer längeren MTTR. + +**So löst OmniRoute das Problem:** + +- Einheitliche Dashboards/Protokolle/Analysen in einem Produkt +- Gesundheits-, Audit- und Anforderungstelemetrie über OpenAI-, MCP- und A2A-Ebenen hinweg +- Operative APIs für Status und Automatisierung + +
+ +
+💼 29. „Ich benötige eine Laufzeit für Proxy + Tools + Agent-Orchestrierung“ + +Die Ausführung vieler separater Dienste erhöht die Betriebskosten und erhöht die Fehlerhäufigkeit. + +**So löst OmniRoute das Problem:**- OpenAI-kompatibler Proxy, MCP-Server und A2A-Server in einem Stack +– Gemeinsame Authentifizierung, Ausfallsicherheit, Datenspeicher und Beobachtbarkeit + +- Konsistentes Richtlinienmodell über alle Interaktionsoberflächen hinweg + +
+ +
+🚀 30. „Ich muss Agenten-Workflows ohne Glue-Code-Ausbreitung versenden“ + +Teams verlieren an Geschwindigkeit, wenn sie mehrere Ad-hoc-Dienste und -Skripte zusammenfügen. + +**So löst OmniRoute das Problem:** + +- Einheitliche Endpunktstrategie für Kunden und Agenten +- Integrierte Protokollverwaltungs-Benutzeroberflächen und Rauchvalidierungspfade +- Produktionsreife Grundlagen (Sicherheit, Protokollierung, Ausfallsicherheit, Backup) + +
+ +### Beispiel-Playbooks (Integrierte Anwendungsfälle) + +**Playbook A: Bezahltes Abonnement maximieren + günstiges Backup** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: Kostenfreier Codierungsstack** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: 24/7 Always-On-Fallback-Kette** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: Agentenoperationen mit MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Schnellstart -**1. Global installieren:** +### 1) Installieren und ausführen ```bash npm install -g omniroute omniroute ``` -🎉 Das Dashboard öffnet sich unter `http://localhost:20128` +Das Dashboard wird unter `http://localhost:20128` geöffnet und die API-Basis-URL lautet `http://localhost:20128/v1`. -| Befehl | Beschreibung | -| ----------------------- | ----------------------------------- | -| `omniroute` | Server starten (Standardport 20128) | -| `omniroute --port 3000` | Benutzerdefinierten Port verwenden | -| `omniroute --no-open` | Browser nicht automatisch öffnen | -| `omniroute --help` | Hilfe anzeigen | +| Befehl | Beschreibung | +| ----------------------- | ------------------------------------------------------------------- | +| `omniroute` | Server starten (`PORT=20128`, API und Dashboard auf demselben Port) | +| `omniroute --port 3000` | Setzen Sie den kanonischen/API-Port auf 3000 | +| `omniroute --mcp` | Starten Sie den MCP-Server (STDIO-Transport) | +| `omniroute --no-open` | Browser nicht automatisch öffnen | +| `omniroute --help` | Hilfe anzeigen | -**2. KOSTENLOSEN Anbieter verbinden:** +Optionaler Split-Port-Modus: -Dashboard → Anbieter → **Claude Code** oder **Antigravity** verbinden → OAuth Login → Fertig! - -**3. In deinem CLI-Tool verwenden:** - -``` -Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Einstellungen: - Endpoint: http://localhost:20128/v1 - API Key: [vom Dashboard kopieren] - Model: if/kimi-k2-thinking +```bash +PORT=20128 DASHBOARD_PORT=20129 omniroute +# API: http://localhost:20128/v1 +# Dashboard: http://localhost:20129 ``` -**Das war's!** Beginne mit KOSTENLOSEN KI-Modellen zu programmieren. +### 2) Verbinden Sie Anbieter und erstellen Sie Ihren API-Schlüssel -**Alternative — aus Quellcode ausführen:** +1. Öffnen Sie Dashboard → `Providers` und verbinden Sie mindestens einen Anbieter (OAuth oder API-Schlüssel). +2. Öffnen Sie Dashboard → `Endpoint` und erstellen Sie einen API-Schlüssel. +3. (Optional) Öffnen Sie Dashboard → `Combos` und legen Sie Ihre Fallback-Kette fest. + +### 3) Richten Sie Ihr Codierungstool auf OmniRoute + +```txt +Base URL: http://localhost:20128/v1 +API Key: [copy from Endpoint page] +Model: if/kimi-k2-thinking (or any provider/model prefix) +``` + +Funktioniert mit Claude Code, Codex CLI, Gemini CLI, Cursor, Cline, OpenClaw, OpenCode und OpenAI-kompatiblen SDKs. + +### 4) Protokolle aktivieren und validieren (v2.0) + +**MCP (für werkzeuggesteuerte Vorgänge):** + +```bash +omniroute --mcp +``` + +Verbinden Sie dann Ihren MCP-Client über `stdio` und testen Sie Tools wie: + +- `omniroute_get_health` +- `omniroute_list_combos` + +**A2A (für Agent-zu-Agent-Workflows):** + +```bash +curl http://localhost:20128/.well-known/agent.json +``` + +```bash +curl -X POST http://localhost:20128/a2a \ + -H 'content-type: application/json' \ + -d '{"jsonrpc":"2.0","id":"quickstart","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Give me a short quota summary."}]}}' +``` + +### 5) Alles durchgängig validieren (empfohlen) + +```bash +npm run test:protocols:e2e +``` + +Diese Suite validiert echte MCP- und A2A-Client-Flows anhand einer laufenden App. + +### Alternative: Von der Quelle ausführen ```bash cp .env.example .env npm install -PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev +PORT=20128 DASHBOARD_PORT=20129 NEXT_PUBLIC_BASE_URL=http://localhost:20129 npm run dev ``` --- @@ -461,7 +771,7 @@ PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev OmniRoute ist als öffentliches Docker-Image auf [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute) verfügbar. -**Schnellstart:** +**Schneller Lauf:** ```bash docker run -d \ @@ -475,7 +785,7 @@ docker run -d \ **Mit Umgebungsdatei:** ```bash -# .env kopieren und bearbeiten +# Copy and edit .env first cp .env.example .env docker run -d \ @@ -487,332 +797,352 @@ docker run -d \ diegosouzapw/omniroute:latest ``` -**Mit Docker Compose:** +**Verwendung von Docker Compose:** ```bash -# Basisprofil (ohne CLI-Tools) +# Base profile (no CLI tools) docker compose --profile base up -d -# CLI-Profil (Claude Code, Codex, OpenClaw integriert) +# CLI profile (Claude Code, Codex, OpenClaw built-in) docker compose --profile cli up -d ``` -| Image | Tag | Größe | Beschreibung | -| ------------------------ | -------- | ------ | ------------------------ | -| `diegosouzapw/omniroute` | `latest` | ~250MB | Letztes stabiles Release | -| `diegosouzapw/omniroute` | `1.0.6` | ~250MB | Aktuelle Version | +| Bild | Tag | Größe | Beschreibung | +| ------------------------ | -------- | ------- | ----------------------- | +| `diegosouzapw/omniroute` | `latest` | ~250 MB | Neueste stabile Version | +| `diegosouzapw/omniroute` | `1.0.3` | ~250 MB | Aktuelle Version | --- ---- +## 🖥️ -## 🖥️ Desktop-App — Offline & Immer Aktiv +Führen Sie OmniRoute als eigenständige Desktop-App aus – kein Terminal, kein Browser, keine Internetverbindung für lokale Modelle erforderlich. Die Electron-basierte App umfasst: -> 🆕 **NEU!** OmniRoute ist jetzt als **native Desktop-Anwendung** für Windows, macOS und Linux verfügbar. +- 🖥️ **Natives Fenster** – Spezielles App-Fenster mit Integration in die Taskleiste +- 🔄 **Auto-Start** – OmniRoute bei der Systemanmeldung starten +- 🔔 **Native Benachrichtigungen** – Erhalten Sie Benachrichtigungen bei Kontingentausschöpfung oder Anbieterproblemen +- ⚡ **One-Click-Installation** – NSIS (Windows), DMG (macOS), AppImage (Linux) +- 🌐 **Offline-Modus** – Funktioniert vollständig offline mit dem gebündelten Server -- 🖥️ **Natives Fenster** — Dediziertes App-Fenster mit System-Tray-Integration -- 🔄 **Autostart** — OmniRoute beim Systemstart starten -- 🔔 **Native Benachrichtigungen** — Warnungen bei Kontingent-Erschöpfung -- ⚡ **Ein-Klick-Installation** — NSIS (Windows), DMG (macOS), AppImage (Linux) -- 🌐 **Offline-Modus** — Funktioniert vollständig offline mit integriertem Server +### Schnellstart ```bash -npm run electron:dev # Entwicklungsmodus -npm run electron:build # Aktuelle Plattform +# Development mode +npm run electron:dev + +# Build for your platform +npm run electron:build # Current platform npm run electron:build:win # Windows (.exe) -npm run electron:build:mac # macOS (.dmg) +npm run electron:build:mac # macOS (.dmg) — x64 & arm64 npm run electron:build:linux # Linux (.AppImage) ``` +### Systemablage + +Wenn OmniRoute minimiert ist, befindet es sich mit schnellen Aktionen in Ihrer Taskleiste: + +- Dashboard öffnen +- Server-Port ändern +- Anwendung beenden + 📖 Vollständige Dokumentation: [`electron/README.md`](electron/README.md) --- -## 💰 Preisübersicht +## 💰 Preise im Überblick -| Tier | Anbieter | Kosten | Kontingent-Reset | Am besten für | -| ---------------- | ----------------- | ---------------------------- | ------------------- | ----------------------- | -| **💳 ABO** | Claude Code (Pro) | $20/Monat | 5h + wöchentlich | Bereits abonniert | -| | Codex (Plus/Pro) | $20-200/Monat | 5h + wöchentlich | OpenAI-Nutzer | -| | Gemini CLI | **KOSTENLOS** | 180K/Monat + 1K/Tag | Alle! | -| | GitHub Copilot | $10-19/Monat | Monatlich | GitHub-Nutzer | -| **🔑 API KEY** | NVIDIA NIM | **KOSTENLOS** (1000 Credits) | Einmalig | Kostenloses Testen | -| | DeepSeek | Nach Verbrauch | Keiner | Bestes Preis-Leistung | -| | Groq | Gratis-Stufe + bezahlt | Begrenzt | Ultra-schnelle Inferenz | -| | xAI (Grok) | Nach Verbrauch | Keiner | Grok-Modelle | -| | Mistral | Gratis-Stufe + bezahlt | Begrenzt | Europäische KI | -| | OpenRouter | Nach Verbrauch | Keiner | 100+ Modelle | -| **💰 GÜNSTIG** | GLM-4.7 | $0.6/1M | Täglich 10h | Budget-Backup | -| | MiniMax M2.1 | $0.2/1M | 5h rotierend | Günstigste Option | -| | Kimi K2 | $9/Monat fest | 10M Token/Monat | Vorhersagbare Kosten | -| **🆓 KOSTENLOS** | iFlow | $0 | Unbegrenzt | 8 kostenlose Modelle | -| | Qwen | $0 | Unbegrenzt | 3 kostenlose Modelle | -| | Kiro | $0 | Unbegrenzt | Kostenloses Claude | +| Stufe | Anbieter | Kosten | Kontingent zurücksetzen | Am besten für | +| -------------------- | ----------------- | ---------------------------------------- | ------------------------- | ---------------------- | +| **💳 ABO** | Claude Code (Pro) | 20 $/Monat | 5h + wöchentlich | Bereits abonniert | +| | Codex (Plus/Pro) | 20–200 $/Monat | 5h + wöchentlich | OpenAI-Benutzer | +| | Gemini CLI | **KOSTENLOS** | 180.000/Monat + 1.000/Tag | Alle! | +| | GitHub-Copilot | 10–19 $/Monat | Monatlich | GitHub-Benutzer | +| **🔑 API-SCHLÜSSEL** | NVIDIA NIM | **KOSTENLOS** (1000 Credits) | Einmalig | Kostenlose Tier-Tests | +| | DeepSeek | Pay-per-Use | Keine | Bestes Preis/Qualität | +| | Groq | Kostenloses Kontingent + kostenpflichtig | Tarif begrenzt | Ultraschnelle Inferenz | +| | xAI (Grok) | Pay-per-Use | Keine | Grok-Modelle | +| | Mistral | Kostenloses Kontingent + kostenpflichtig | Tarif begrenzt | Europäische KI | +| | OpenRouter | Pay-per-Use | Keine | Über 100 Modelle | +| **💰 GÜNSTIG** | GLM-4.7 | 0,6 $/1 Mio. | Täglich 10 Uhr | Budgetsicherung | +| | MiniMax M2.1 | 0,2 $/1 Mio. | 5-Stunden-Rollen | Günstigste Option | +| | Kimi K2 | $9/Monat pauschal | 10 Millionen Token/Monat | Vorhersehbare Kosten | +| **🆓 KOSTENLOS** | iFlow | $0 | Unbegrenzt | 8 Modelle kostenlos | +| | Qwen | $0 | Unbegrenzt | 3 Modelle kostenlos | +| | Kiro | $0 | Unbegrenzt | Claude frei | -**💡 Profi-Tipp:** Starte mit Gemini CLI (180K gratis/Monat) + iFlow (unbegrenzt gratis) = $0 Kosten! +**💡 Profi-Tipp:** Beginnen Sie mit der Kombination Gemini CLI (180.000 kostenlos/Monat) + iFlow (unbegrenzt kostenlos) = 0 $ Kosten! --- ## 💡 Hauptfunktionen -### 🧠 Routing & Intelligenz +OmniRoute v2.0 ist als Betriebsplattform konzipiert und nicht nur als Relay-Proxy. -| Funktion | Was es macht | -| ------------------------------------ | ------------------------------------------------------------------------------ | -| 🎯 **Intelligenter 4-Tier-Fallback** | Auto-Routing: Abo → API Key → Günstig → Kostenlos | -| 📊 **Echtzeit-Kontingent-Tracking** | Live Token-Zählung + Reset-Countdown pro Anbieter | -| 🔄 **Format-Übersetzung** | OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro nahtlos | -| 👥 **Multi-Account-Unterstützung** | Mehrere Konten pro Anbieter mit intelligenter Auswahl | -| 🔄 **Auto-Token-Erneuerung** | OAuth-Token werden automatisch mit Wiederholungen erneuert | -| 🎨 **Benutzerdefinierte Combos** | 6 Strategien: fill-first, round-robin, p2c, random, least-used, cost-optimized | -| 🧩 **Benutzerdefinierte Modelle** | Jede Modell-ID zu jedem Anbieter hinzufügen | -| 🌐 **Wildcard-Router** | `provider/*` Muster dynamisch an jeden Anbieter routen | -| 🧠 **Reasoning-Budget** | Passthrough, auto, custom und adaptive Modi für Reasoning-Modelle | -| 🔀 **Model Aliases** | Auto-forward deprecated model IDs to current replacements (built-in + custom) | -| ⚡ **Background Degradation** | Auto-route background tasks (titles, summaries) to cheaper models | -| 💬 **System Prompt Injection** | Globaler System Prompt für alle Anfragen | -| 📄 **API Responses** | Volle Unterstützung der OpenAI Responses API (`/v1/responses`) für Codex | +### 🤖 Agenten- und Protokolloperationen (v2.0)| Funktion | Was es tut | -### 🎵 Multi-Modale APIs +| ------------------------------------ | -------------------------------------------------------------------------------- | +| 🔧 **MCP-Server (16 Tools)** | IDE-/Agent-Tools steuern Routing, Zustand, Kombinationen, Grenzwerte und Vorgänge | +| 🤝 **A2A-Server (JSON-RPC + SSE)** | Ausführung von Agent-zu-Agent-Aufgaben mit Synchronisierungs- und Streaming-Flows | +| 🧭 **MCP/A2A-Dashboards** | Dedizierte Verwaltungsseiten (`/dashboard/mcp`, `/dashboard/a2a`) | +| 🛰️ **MCP Runtime Heartbeat** | Echter Prozessstatus (PID, Betriebszeit, Heartbeat-Alter, Transport, Scope-Modus) | +| 📋 **MCP Audit Trail** | Filterbare Audit-Protokolle mit Erfolg/Misserfolg und Schlüsselzuordnung | +| 🔐 **Durchsetzung des MCP-Geltungsbereichs** | 9 granulare Umfangsberechtigungen für kontrollierten Werkzeugzugriff | +| 📡 **A2A Task Lifecycle Management** | Aufgaben auflisten/filtern, Ereignisse/Artefakte prüfen, laufende Aufgaben abbrechen | +| 📋 **Agentenkartenerkennung** | `/.well-known/agent.json` für die automatische Client-Erkennung | +| 🧪 **Protokoll-E2E-Testkabel** | Echtes MCP SDK + A2A-Client fließt in `test:protocols:e2e` | +| ⚙️ **Betriebskontrollen** | Schaltkombination, Anwenden von Resilienzprofilen, Zurücksetzen von Leistungsschaltern über eine Bedienoberfläche | -| Funktion | Was es macht | -| -------------------------- | ------------------------------------------------- | -| 🖼️ **Bildgenerierung** | `/v1/images/generations` — 4 Anbieter, 9+ Modelle | -| 📐 **Embeddings** | `/v1/embeddings` — 6 Anbieter, 9+ Modelle | -| 🎤 **Audio-Transkription** | `/v1/audio/transcriptions` — Whisper-kompatibel | -| 🔊 **Text-zu-Sprache** | `/v1/audio/speech` — Multi-Anbieter Audiosynthese | -| 🛡️ **Moderationen** | `/v1/moderations` — Sicherheitsüberprüfungen | -| 🔀 **Reranking** | `/v1/rerank` — Dokumenten-Relevanz-Neuordnung | +### 🧠 Routing und Intelligenz -### 🛡️ Resilienz & Sicherheit +| Funktion | Was es tut | +| ---------------------------------------- | ------------------------------------------------------------------------------------- | +| 🎯 **Intelligenter 4-Stufen-Fallback** | Automatische Route: Abonnement → API-Schlüssel → Günstig → Kostenlos | +| 📊 **Kontingentverfolgung in Echtzeit** | Live-Token-Zählung + Reset-Countdown pro Anbieter | +| 🔄 **Formatübersetzung** | OpenAI ↔ Claude ↔ Gemini ↔ Antworten mit schemasicheren Konvertierungen | +| 👥 **Unterstützung mehrerer Konten** | Mehrere Konten pro Anbieter mit intelligenter Auswahl | +| 🔄 **Automatische Token-Aktualisierung** | OAuth-Token werden bei Wiederholung automatisch aktualisiert | +| 🎨 **Benutzerdefinierte Kombinationen** | 6 Ausgleichsstrategien + Fallback-Kettenkontrolle | +| 🌐 **Wildcard-Router** | `provider/*` dynamisches Routing | +| 🧠 **Budgetkontrollen denken** | Passthrough-, automatische, benutzerdefinierte und adaptive Reasoning-Grenzwerte | +| 🔀 **Modell-Aliase** | Integrierte + benutzerdefinierte Modell-Aliasing- und Migrationssicherheit | +| ⚡ **Hintergrundverschlechterung** | Hintergrundaufgaben mit niedriger Priorität an günstigere Modelle weiterleiten | +| 💬 **System-Prompt-Injektion** | Globale Verhaltenskontrollen werden konsequent angewendet | +| 📄 **Antwort-API-Kompatibilität** | Vollständige `/v1/responses`-Unterstützung für Codex und erweiterte Agenten-Workflows | -| Funktion | Was es macht | -| ------------------------------- | ---------------------------------------------------------------------------- | -| 🔌 **Circuit Breaker** | Auto-Öffnung/-Schließung pro Anbieter mit konfigurierbaren Schwellen | -| 🛡️ **Anti-Thundering Herd** | Mutex + Semaphor Rate-Limit für API-Key-Anbieter | -| 🧠 **Semantischer Cache** | Zwei-Ebenen-Cache (Signatur + Semantik) senkt Kosten und Latenz | -| ⚡ **Anfrage-Idempotenz** | 5s Dedup-Fenster für doppelte Anfragen | -| 🔒 **TLS-Fingerprint-Spoofing** | Bot-Erkennung umgehen via wreq-js | -| 🌐 **IP-Filterung** | Allowlist/Blocklist für API-Zugriffskontrolle | -| 📊 **Editierbare Rate-Limits** | Konfigurierbare RPM, minimaler Abstand, max. Konkurrenz | -| 💾 **Rate Limit Persistence** | Learned limits survive restarts via SQLite with 60s debounce + 24h staleness | -| 🔄 **Token Refresh Resilience** | Per-provider circuit breaker (5 fails→30min) + 30s timeout per attempt | +### 🎵 Multimodale APIs -### 📊 Observability & Analytics +| Funktion | Was es tut || -------------------------- | ------------------------------------------------------------- | +| 🖼️ **Bilderzeugung** | `/v1/images/generations` mit Cloud- und lokalen Backends | +| 📐 **Einbettungen** | `/v1/embeddings` für Such- und RAG-Pipelines | +| 🎤 **Audio-Transkription** | `/v1/audio/transcriptions` (Whisper und zusätzliche Anbieter) | +| 🔊 **Text-to-Speech** | `/v1/audio/speech` (mehrere Engines/Anbieter) | +| 🎬 **Videogenerierung** | `/v1/videos/generations` (ComfyUI + SD WebUI-Workflows) | +| 🎵 **Musikgeneration** | `/v1/music/generations` (ComfyUI-Workflows) | +| 🛡️ **Moderationen** | `/v1/moderations` Sicherheitsprüfungen | +| 🔀 **Neueinstufung** | `/v1/rerank` für Relevanzbewertung | -| Funktion | Was es macht | -| ---------------------------- | -------------------------------------------------------------- | -| 📝 **Anfrage-Logs** | Debug-Modus mit vollständigen Request/Response-Logs | -| 💾 **SQLite-Logs** | Persistente Proxy-Logs überleben Neustarts | -| 📊 **Analytics-Dashboard** | Recharts: Statistik-Karten, Nutzungsdiagramm, Anbieter-Tabelle | -| 📈 **Fortschritts-Tracking** | Opt-in SSE-Fortschrittsereignisse für Streaming | -| 🧪 **LLM-Evaluierungen** | Testen mit Golden Set und 4 Match-Strategien | -| 🔍 **Anfrage-Telemetrie** | p50/p95/p99 Latenz-Aggregation + X-Request-Id Tracking | -| 📋 **Logs + Kontingente** | Dedizierte Seiten für Log-Browsing und Kontingent-Tracking | -| 🏥 **Health Dashboard** | Uptime, Circuit-Breaker-Status, Lockouts, Cache-Statistiken | -| 💰 **Kosten-Tracking** | Budget-Management + Preiseinstellung pro Modell | +### 🛡️ Resilienz, Sicherheit und Governance -### ☁️ Deployment & Sync +| Funktion | Was es tut | +| ---------------------------------------- | ------------------------------------------------------------------------------ | +| 🔌 **Leistungsschalter** | Auslösung/Wiederherstellung auf Anbieterebene mit Schwellenwertkontrollen | +| 🛡️ **Anti-Donnerende Herde** | Mutex- und Semaphorschutz bei Wiederholungs-/Ratenereignissen | +| 🧠 **Semantik + Signatur-Cache** | Kosten-/Latenzreduzierung mit zwei Cache-Schichten | +| ⚡ **Idempotenz anfordern** | Doppeltes Schutzfenster | +| 🔒 **TLS-Fingerabdruck-Spoofing** | Bessere Kompatibilität mit Anti-Bot-gefilterten Anbietern | +| 🌐 **IP-Filterung** | Zulassungs-/Blocklistenkontrolle für exponierte Bereitstellungen | +| 📊 **Bearbeitbare Ratenlimits** | Konfigurierbare globale/Provider-Level-Limits mit Persistenz | +| 🔑 **API-Schlüsselverwaltung + Scoping** | Sichere Schlüsselausgabe/-rotation und Modell-/Anbieterkontrollen | +| 🛡️ **Geschützt `/models`** | Optionales Authentifizierungs-Gating und Provider-Ausblenden für Modellkatalog | -| Funktion | Was es macht | -| -------------------------- | ----------------------------------------------------------------------------- | -| 💾 **Cloud Sync** | Einstellungen zwischen Geräten via Cloudflare Workers synchronisieren | -| 🌐 **Überall deployen** | Localhost, VPS, Docker, Cloudflare Workers | -| 🔑 **API-Key-Verwaltung** | API-Keys pro Anbieter generieren, rotieren und einschränken | -| 🧙 **Setup-Assistent** | 4-Schritte geführtes Setup für neue Nutzer | -| 🔧 **CLI Tools Dashboard** | Ein-Klick-Konfiguration für Claude, Codex, Cline, OpenClaw, Kilo, Antigravity | -| 🔄 **DB-Backups** | Automatisches Backup und Wiederherstellung aller Einstellungen | +### 📊 Beobachtbarkeit und Analyse -
-📖 Funktionsdetails +| Funktion | Was es tut | +| ---------------------------------------- | ------------------------------------------------------------------- | +| 📝 **Anfrage + Proxy-Protokollierung** | Vollständige Anfrage/Antwort- und Proxy-Protokollierung | +| 📋 **Einheitliches Protokoll-Dashboard** | Anforderungs-, Proxy-, Audit- und Konsolenansichten auf einer Seite | +| 🔍 **Telemetrie anfordern** | p50/p95/p99-Latenz und Anforderungsverfolgung | +| 🏥 **Gesundheits-Dashboard** | Betriebszeit, Breaker-Zustände, Sperrungen, Cache-Statistiken | +| 💰 **Kostenverfolgung** | Budgetkontrolle und Preistransparenz pro Modell | +| 📈 **Analysevisualisierungen** | Einblicke in die Modell-/Anbieternutzung und Trendansichten | +| 🧪 **Bewertungsrahmen** | Golden-Set-Test mit konfigurierbaren Match-Strategien | -### 🎯 Intelligenter 4-Tier-Fallback +### ☁️ Bereitstellung und Plattform -Erstelle Combos mit automatischem Fallback: +| Funktion | Was es tut | +| ------------------------------------------- | ------------------------------------------------------------------------------ | --- | ----------------------------- | ------------------------------------------------ | +| 🌐 **Überall bereitstellen** | Localhost, VPS, Docker, Cloud-Umgebungen | | 💾 **Cloud-Synchronisierung** | Konfigurationssynchronisierung über Cloud Worker | +| 🔄 **Sichern/Wiederherstellen** | Export-/Import- und Disaster-Recovery-Abläufe | +| 🧙 **Onboarding-Assistent** | Erstmaliges geführtes Setup | +| 🔧 **CLI-Tools-Dashboard** | Ein-Klick-Setup für beliebte Codierungstools | +| 🌐 **i18n (30 Sprachen)** | Vollständige Sprachunterstützung für Dashboard und Dokumente mit RTL-Abdeckung | +| 📂 **Benutzerdefiniertes Datenverzeichnis** | `DATA_DIR`-Überschreibung für Speicherort | -``` +### Feature Deep Dive + +#### Smarter Fallback mit praktischer Kostenkontrolle + +```txt Combo: "my-coding-stack" - 1. cc/claude-opus-4-6 (dein Abo) - 2. nvidia/llama-3.3-70b (kostenlose NVIDIA API) - 3. glm/glm-4.7 (günstiges Backup, $0.6/1M) - 4. if/kimi-k2-thinking (kostenloser Fallback) - -→ Wechselt automatisch bei erschöpftem Kontingent oder Fehlern + 1. cc/claude-opus-4-6 + 2. nvidia/llama-3.3-70b + 3. glm/glm-4.7 + 4. if/kimi-k2-thinking ``` -### 📊 Echtzeit-Kontingent-Tracking +Wenn Kontingent, Rate oder Integrität fehlschlagen, wechselt OmniRoute automatisch zum nächsten Kandidaten, ohne dass ein manueller Wechsel erforderlich ist. -- Token-Verbrauch pro Anbieter -- Reset-Countdown (5 Stunden, täglich, wöchentlich) -- Kostenabschätzung für bezahlte Stufen -- Monatliche Ausgabenberichte +#### Protokollverwaltung, die sichtbar und bedienbar ist -### 🔄 Format-Übersetzung +- MCP + A2A sind in der Benutzeroberfläche und in den Dokumenten erkennbar (nicht ausgeblendet) + – Protokollstatus-APIs stellen Live-Betriebsdaten bereit (`/api/mcp/*`, `/api/a2a/*`) +- Dashboards umfassen Aktionen für Tag-2-Operationen (Kombinationsumschaltung, Zurücksetzen von Leistungsschaltern, Aufgabenabbruch). -Nahtlose Übersetzung zwischen Formaten: +#### Übersetzer- und Validierungsworkflow -- **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **OpenAI Responses** -- Dein CLI sendet OpenAI-Format → OmniRoute übersetzt → Anbieter empfängt natives Format -- Funktioniert mit jedem Tool, das benutzerdefinierte OpenAI-Endpoints unterstützt +Der Übersetzerbereich umfasst: -### 👥 Multi-Account-Unterstützung +- **Spielplatz**: Transformationsprüfungen anfordern +- **Chat-Tester**: vollständiger Anfrage-/Antwort-Roundtrip +- **Prüfstand**: mehrere Fälle in einem Durchgang +- **Live Monitor**: Echtzeit-Verkehrsansicht -- Mehrere Konten pro Anbieter hinzufügen -- Automatisches Round-Robin oder prioritätsbasiertes Routing -- Fallback zum nächsten Konto bei Kontingent-Erschöpfung +Plus Protokollvalidierung mit echten Clients über `npm run test:protocols:e2e`. -### 🔄 Auto-Token-Erneuerung +> 📖 **[MCP Server README](open-sse/mcp-server/README.md)** – Tool-Referenz, IDE-Konfigurationen und Client-Beispiele +> +> 📖 **[A2A Server README](src/lib/a2a/README.md)** – Fähigkeiten, JSON-RPC-Methoden, Streaming und Aufgabenlebenszyklus -- OAuth-Token werden automatisch vor Ablauf erneuert -- Keine manuelle Neuauthentifizierung nötig -- Nahtlose Erfahrung über alle Anbieter +## 🧪 Bewertungen (Evals) -### 🎨 Benutzerdefinierte Combos +OmniRoute umfasst ein integriertes Bewertungsframework zum Testen der LLM-Antwortqualität anhand eines Golden Sets. Greifen Sie darauf über **Analytics → Evals** im Dashboard zu. -- Unbegrenzte Modell-Kombinationen erstellen -- 6 Strategien: fill-first, round-robin, power-of-two-choices, random, least-used, cost-optimized -- Combos zwischen Geräten mit Cloud Sync teilen +### Eingebautes goldenes Set -### 🏥 Health Dashboard +Das vorinstallierte „OmniRoute Golden Set“ enthält Testfälle für: -- Systemstatus (Uptime, Version, Speichernutzung) -- Circuit-Breaker-Status pro Anbieter (Closed/Open/Half-Open) -- Rate-Limit-Status und aktive Lockouts -- Signatur-Cache-Statistiken -- Latenz-Telemetrie (p50/p95/p99) + Prompt-Cache -- Gesundheitsstatus mit einem Klick zurücksetzen +- Grüße, Mathematik, Geographie, Codegenerierung +- Einhaltung des JSON-Formats, Übersetzung, Markdown-Generierung +- Sicherheitsverweigerung (schädlicher Inhalt), Zählung, boolesche Logik -### 🔧 Übersetzer-Playground +### Bewertungsstrategien -- Debug, Test und Visualisierung von API-Format-Übersetzungen -- Anfragen senden und sehen, wie OmniRoute zwischen Anbieter-Formaten übersetzt -- Unschätzbar für Integrationsprobleme - -### 💾 Cloud Sync - -- Anbieter, Combos und Einstellungen zwischen Geräten synchronisieren -- Automatische Hintergrundsynchronisierung -- Sichere verschlüsselte Speicherung - -
- ---- - -## 🎯 Anwendungsfälle - -### Fall 1: „Ich habe ein Claude Pro Abo" - -**Problem:** Kontingent verfällt ungenutzt, Rate-Limits während intensivem Programmieren - -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (Abo voll ausnutzen) - 2. glm/glm-4.7 (günstiges Backup bei erschöpftem Kontingent) - 3. if/kimi-k2-thinking (kostenloser Notfall-Fallback) - -Monatliche Kosten: $20 (Abo) + ~$5 (Backup) = $25 gesamt -vs. $20 + an Limits stoßen = Frustration -``` - -### Fall 2: „Ich will null Kosten" - -**Problem:** Kann sich Abos nicht leisten, braucht zuverlässige KI zum Programmieren - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K gratis/Monat) - 2. if/kimi-k2-thinking (unbegrenzt gratis) - 3. qw/qwen3-coder-plus (unbegrenzt gratis) - -Monatliche Kosten: $0 -Qualität: Produktionsreife Modelle -``` - -### Fall 3: „Ich muss 24/7 programmieren, ohne Unterbrechungen" - -**Problem:** Enge Deadlines, kann sich keine Ausfallzeit leisten - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (beste Qualität) - 2. cx/gpt-5.2-codex (zweites Abo) - 3. glm/glm-4.7 (günstig, täglicher Reset) - 4. minimax/MiniMax-M2.1 (günstigste, 5h Reset) - 5. if/kimi-k2-thinking (unbegrenzt kostenlos) - -Ergebnis: 5 Fallback-Ebenen = null Ausfallzeit -``` - -### Fall 4: „Ich will KOSTENLOSE KI in OpenClaw" - -**Problem:** Braucht KI-Assistenz in Messaging-Apps, komplett kostenlos - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unbegrenzt kostenlos) - 2. if/minimax-m2.1 (unbegrenzt kostenlos) - 3. if/kimi-k2-thinking (unbegrenzt kostenlos) - -Monatliche Kosten: $0 -Zugang über: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Strategie | Beschreibung | Beispiel | +| ---------- | -------------------------------------------------------------------------------------------- | --------------------------------------- | +| `exact` | Die Ausgabe muss genau mit | übereinstimmen `"4"` | +| `contains` | Die Ausgabe muss eine Teilzeichenfolge enthalten (Groß-/Kleinschreibung wird nicht beachtet) | `"Paris"` | +| `regex` | Die Ausgabe muss mit dem Regex-Muster | übereinstimmen `"1.*2.*3"` | +| `custom` | Benutzerdefinierte JS-Funktion gibt true/false | zurück `(output) => output.length > 10` | --- ## 📖 Einrichtungsanleitung +### Protokoll-Setup (MCP + A2A) +
-💳 Abo-Anbieter +🧩 MCP-Setup (Modellkontextprotokoll) + +Starten Sie den MCP-Transport im Standardmodus: + +```bash +omniroute --mcp +``` + +Empfohlener Validierungsablauf: + +1. Verbinden Sie Ihren MCP-Client über stdio. +2. Führen Sie `omniroute_get_health` aus. +3. Führen Sie `omniroute_list_combos` aus. +4. Öffnen Sie `/dashboard/mcp`, um Heartbeat, Aktivität und Audit zu bestätigen. + +Nützliche APIs für die Automatisierung: + +- `GET /api/mcp/status` +- `GET /api/mcp/tools` +- `GET /api/mcp/audit` +- `GET /api/mcp/audit/stats` + +
+ +
🤝 A2A-Setup (Agent2Agent) + +Entdecken Sie den Agenten: + +```bash +curl http://localhost:20128/.well-known/agent.json +``` + +Senden Sie eine Aufgabe: + +```bash +curl -X POST http://localhost:20128/a2a \ + -H 'content-type: application/json' \ + -d '{"jsonrpc":"2.0","id":"setup-a2a","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Summarize quota status."}]}}' +``` + +Lebenszyklus verwalten: + +- `GET /api/a2a/status` +- `GET /api/a2a/tasks` +- `GET /api/a2a/tasks/:id` +- `POST /api/a2a/tasks/:id/cancel` + +Operative Benutzeroberfläche: + +- `/dashboard/a2a` für Task-/Status-/Stream-Beobachtbarkeit und Smoke-Aktionen + +
+ +
+🧪 End-to-End-Protokollvalidierung + +Validieren Sie beide Protokolle mit echten Clients: + +```bash +npm run test:protocols:e2e +``` + +Dies bestätigt: + +- MCP SDK-Client-Verbindung/Liste/Anruf +- A2A-Erkennung/Senden/Streamen/Get/Abbrechen +- Vergleichen Sie die Daten in MCP-Audit- und A2A-Aufgabenverwaltungs-APIs + +
+ +
+💳 Abonnementanbieter ### Claude Code (Pro/Max) ```bash -Dashboard → Anbieter → Claude Code verbinden -→ OAuth Login → Automatische Token-Erneuerung -→ 5h + wöchentliches Kontingent-Tracking +Dashboard → Providers → Connect Claude Code +→ OAuth login → Auto token refresh +→ 5-hour + weekly quota tracking -Modelle: +Models: cc/claude-opus-4-6 cc/claude-sonnet-4-5-20250929 cc/claude-haiku-4-5-20251001 ``` -**Profi-Tipp:** Opus für komplexe Aufgaben, Sonnet für Geschwindigkeit. OmniRoute trackt Kontingent pro Modell! +**Profi-Tipp:** Verwenden Sie Opus für komplexe Aufgaben, Sonnet für Geschwindigkeit. OmniRoute verfolgt das Kontingent pro Modell! ### OpenAI Codex (Plus/Pro) ```bash -Dashboard → Anbieter → Codex verbinden -→ OAuth Login (Port 1455) -→ 5h + wöchentlicher Reset +Dashboard → Providers → Connect Codex +→ OAuth login (port 1455) +→ 5-hour + weekly reset -Modelle: +Models: cx/gpt-5.2-codex cx/gpt-5.1-codex-max ``` -### Gemini CLI (KOSTENLOS 180K/Monat!) +### Gemini CLI (KOSTENLOS 180.000/Monat!) ```bash -Dashboard → Anbieter → Gemini CLI verbinden +Dashboard → Providers → Connect Gemini CLI → Google OAuth -→ 180K Completions/Monat + 1K/Tag +→ 180K completions/month + 1K/day -Modelle: +Models: gc/gemini-3-flash-preview gc/gemini-2.5-pro ``` -**Bester Wert:** Riesiger Gratis-Tarif! Vor bezahlten Stufen nutzen. +**Bester Wert:** Riesiges kostenloses Kontingent! Verwenden Sie dies vor kostenpflichtigen Stufen. -### GitHub Copilot +### GitHub-Copilot ```bash -Dashboard → Anbieter → GitHub verbinden +Dashboard → Providers → Connect GitHub → OAuth via GitHub -→ Monatlicher Reset (1. des Monats) +→ Monthly reset (1st of month) -Modelle: +Models: gh/gpt-5 gh/claude-4.5-sonnet gh/gemini-3-pro @@ -821,122 +1151,122 @@ Modelle:
-🔑 API-Key-Anbieter +🔑 API-Schlüsselanbieter -### NVIDIA NIM (KOSTENLOS 1000 Credits!) +### NVIDIA NIM (KOSTENLOSE 1000 Credits!) -1. Registrieren: [build.nvidia.com](https://build.nvidia.com) -2. Kostenlosen API-Key holen (1000 Inferenz-Credits inklusive) +1. Registrieren Sie sich: [build.nvidia.com](https://build.nvidia.com) +2. Holen Sie sich einen kostenlosen API-Schlüssel (1000 Inferenz-Credits inbegriffen) 3. Dashboard → Anbieter hinzufügen → NVIDIA NIM: - - API Key: `nvapi-your-key` + - API-Schlüssel: `nvapi-your-key` -**Modelle:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` und 50+ weitere +**Modelle:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` und über 50 weitere -**Profi-Tipp:** OpenAI-kompatible API — funktioniert perfekt mit OmniRoutes Format-Übersetzung! +**Profi-Tipp:** OpenAI-kompatible API – funktioniert nahtlos mit der Formatübersetzung von OmniRoute! ### DeepSeek -1. Registrieren: [platform.deepseek.com](https://platform.deepseek.com) -2. API-Key holen +1. Registrieren Sie sich: [platform.deepseek.com](https://platform.deepseek.com) +2. Holen Sie sich den API-Schlüssel 3. Dashboard → Anbieter hinzufügen → DeepSeek **Modelle:** `deepseek/deepseek-chat`, `deepseek/deepseek-coder` -### Groq (Gratis-Stufe verfügbar!) +### Groq (Kostenloses Kontingent verfügbar!) -1. Registrieren: [console.groq.com](https://console.groq.com) -2. API-Key holen (Gratis-Stufe inklusive) +1. Registrieren Sie sich: [console.groq.com](https://console.groq.com) +2. Holen Sie sich den API-Schlüssel (kostenloses Kontingent inbegriffen) 3. Dashboard → Anbieter hinzufügen → Groq **Modelle:** `groq/llama-3.3-70b`, `groq/mixtral-8x7b` -**Profi-Tipp:** Ultra-schnelle Inferenz — am besten für Echtzeit-Programmierung! +**Profi-Tipp:** Ultraschnelle Inferenz – am besten für Echtzeit-Codierung! -### OpenRouter (100+ Modelle) +### OpenRouter (über 100 Modelle) -1. Registrieren: [openrouter.ai](https://openrouter.ai) -2. API-Key holen +1. Registrieren Sie sich: [openrouter.ai](https://openrouter.ai) +2. Holen Sie sich den API-Schlüssel 3. Dashboard → Anbieter hinzufügen → OpenRouter -**Modelle:** Zugang zu 100+ Modellen aller großen Anbieter über einen einzigen API-Key. +**Modelle:** Greifen Sie über einen einzigen API-Schlüssel auf über 100 Modelle aller großen Anbieter zu.
💰 Günstige Anbieter (Backup) -### GLM-4.7 (Täglicher Reset, $0.6/1M) +### GLM-4.7 (Täglicher Reset, 0,6 $/1 Mio.) 1. Registrieren: [Zhipu AI](https://open.bigmodel.cn/) -2. API-Key aus dem Coding Plan holen -3. Dashboard → API Key hinzufügen: +2. Holen Sie sich den API-Schlüssel vom Coding Plan +3. Dashboard → API-Schlüssel hinzufügen: - Anbieter: `glm` - - API Key: `your-key` + - API-Schlüssel: `your-key` -**Nutze:** `glm/glm-4.7` +**Verwendung:** `glm/glm-4.7` -**Profi-Tipp:** Der Coding Plan bietet 3× Kontingent zu 1/7 der Kosten! Täglicher Reset um 10:00. +**Profi-Tipp:** Coding Plan bietet 3× Kontingent zu 1/7 Kosten! Täglich um 10:00 Uhr zurückgesetzt. -### MiniMax M2.1 (5h Reset, $0.20/1M) +### MiniMax M2.1 (5 Stunden Zurücksetzen, 0,20 $/1 Mio.) 1. Registrieren: [MiniMax](https://www.minimax.io/) -2. API-Key holen -3. Dashboard → API Key hinzufügen +2. Holen Sie sich den API-Schlüssel +3. Dashboard → API-Schlüssel hinzufügen -**Nutze:** `minimax/MiniMax-M2.1` +**Verwendung:** `minimax/MiniMax-M2.1` -**Profi-Tipp:** Günstigste Option für langen Kontext (1M Token)! +**Profi-Tipp:** Günstigste Option für langen Kontext (1 Mio. Token)! -### Kimi K2 ($9/Monat fest) +### Kimi K2 (9 $/Monat pauschal) 1. Abonnieren: [Moonshot AI](https://platform.moonshot.ai/) -2. API-Key holen -3. Dashboard → API Key hinzufügen +2. Holen Sie sich den API-Schlüssel +3. Dashboard → API-Schlüssel hinzufügen -**Nutze:** `kimi/kimi-latest` +**Verwendung:** `kimi/kimi-latest` -**Profi-Tipp:** Feste $9/Monat für 10M Token = $0.90/1M effektive Kosten! +**Profi-Tipp:** Feste 9 $/Monat für 10 Mio. Token = 0,90 $/1 Mio. effektive Kosten!
🆓 KOSTENLOSE Anbieter (Notfall-Backup) -### iFlow (8 KOSTENLOSE Modelle) +### iFlow (8 KOSTENLOSE Modelle)```bash -```bash -Dashboard → iFlow verbinden -→ iFlow OAuth Login -→ Unbegrenzte Nutzung +Dashboard → Connect iFlow +→ iFlow OAuth login +→ Unlimited usage -Modelle: - if/kimi-k2-thinking - if/qwen3-coder-plus - if/glm-4.7 - if/minimax-m2 - if/deepseek-r1 -``` +Models: +if/kimi-k2-thinking +if/qwen3-coder-plus +if/glm-4.7 +if/minimax-m2 +if/deepseek-r1 + +```` ### Qwen (3 KOSTENLOSE Modelle) ```bash -Dashboard → Qwen verbinden -→ Geräte-Code-Autorisierung -→ Unbegrenzte Nutzung +Dashboard → Connect Qwen +→ Device code authorization +→ Unlimited usage -Modelle: +Models: qw/qwen3-coder-plus qw/qwen3-coder-flash -``` +```` -### Kiro (Kostenloses Claude) +### Kiro (Claude KOSTENLOS) ```bash -Dashboard → Kiro verbinden -→ AWS Builder ID oder Google/GitHub -→ Unbegrenzte Nutzung +Dashboard → Connect Kiro +→ AWS Builder ID or Google/GitHub +→ Unlimited usage -Modelle: +Models: kr/claude-sonnet-4.5 kr/claude-haiku-4.5 ``` @@ -946,30 +1276,30 @@ Modelle:
🎨 Combos erstellen -### Beispiel 1: Abo maximieren → Günstiges Backup +### Beispiel 1: Abonnement maximieren → Günstiges Backup ``` -Dashboard → Combos → Neues erstellen +Dashboard → Combos → Create New Name: premium-coding -Modelle: - 1. cc/claude-opus-4-6 (Primäres Abo) - 2. glm/glm-4.7 (Günstiges Backup, $0.6/1M) - 3. minimax/MiniMax-M2.1 (Günstigster Fallback, $0.20/1M) +Models: + 1. cc/claude-opus-4-6 (Subscription primary) + 2. glm/glm-4.7 (Cheap backup, $0.6/1M) + 3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M) -Im CLI nutzen: premium-coding +Use in CLI: premium-coding ``` -### Beispiel 2: Nur Kostenlos (Null Kosten) +### Beispiel 2: Nur kostenlos (kostenlos) ``` Name: free-combo -Modelle: - 1. gc/gemini-3-flash-preview (180K gratis/Monat) - 2. if/kimi-k2-thinking (unbegrenzt) - 3. qw/qwen3-coder-plus (unbegrenzt) +Models: + 1. gc/gemini-3-flash-preview (180K free/month) + 2. if/kimi-k2-thinking (unlimited) + 3. qw/qwen3-coder-plus (unlimited) -Kosten: Für immer $0! +Cost: $0 forever! ```
@@ -977,20 +1307,20 @@ Kosten: Für immer $0!
🔧 CLI-Integration -### Cursor IDE +### Cursor-IDE ``` -Einstellungen → Modelle → Erweitert: +Settings → Models → Advanced: OpenAI API Base URL: http://localhost:20128/v1 - OpenAI API Key: [aus OmniRoute Dashboard] + OpenAI API Key: [from OmniRoute dashboard] Model: cc/claude-opus-4-6 ``` ### Claude Code -Nutze die **CLI Tools** Seite im Dashboard für Ein-Klick-Konfiguration, oder bearbeite `~/.claude/settings.json` manuell. +Verwenden Sie die Seite **CLI-Tools** im Dashboard für die Ein-Klick-Konfiguration oder bearbeiten Sie `~/.claude/settings.json` manuell. -### Codex CLI +### Codex-CLI ```bash export OPENAI_BASE_URL="http://localhost:20128" @@ -1001,13 +1331,13 @@ codex "your prompt" ### OpenClaw -**Option 1 — Dashboard (empfohlen):** +**Option 1 – Dashboard (empfohlen):** ``` -Dashboard → CLI Tools → OpenClaw → Modell wählen → Anwenden +Dashboard → CLI Tools → OpenClaw → Select Model → Apply ``` -**Option 2 — Manuell:** `~/.openclaw/openclaw.json` bearbeiten: +**Option 2 – Manuell:** Bearbeiten `~/.openclaw/openclaw.json`: ```json { @@ -1023,168 +1353,301 @@ Dashboard → CLI Tools → OpenClaw → Modell wählen → Anwenden } ``` -> **Hinweis:** OpenClaw funktioniert nur mit lokalem OmniRoute. Verwende `127.0.0.1` statt `localhost` um IPv6-Auflösungsprobleme zu vermeiden. +> **Hinweis:** OpenClaw funktioniert nur mit lokaler OmniRoute. Verwenden Sie `127.0.0.1` anstelle von `localhost`, um Probleme mit der IPv6-Auflösung zu vermeiden. -### Cline / Continue / RooCode +### Cline / Weiter / RooCode ``` -Einstellungen → API-Konfiguration: - Anbieter: OpenAI Compatible +Settings → API Configuration: + Provider: OpenAI Compatible Base URL: http://localhost:20128/v1 - API Key: [aus OmniRoute Dashboard] + API Key: [from OmniRoute dashboard] Model: if/kimi-k2-thinking ``` +### OpenCode + +**Schritt 1:** OmniRoute als benutzerdefinierten Anbieter hinzufügen: + +```bash +opencode +/connect +# Select "Other" → Enter ID: "omniroute" → Enter your OmniRoute API key +``` + +**Schritt 2:** Erstellen/bearbeiten Sie `opencode.json` in Ihrem Projektstamm: + +```json +{ + "$schema": "https://opencode.ai/config.json", + "provider": { + "omniroute": { + "npm": "@ai-sdk/openai-compatible", + "name": "OmniRoute", + "options": { + "baseURL": "http://localhost:20128/v1" + }, + "models": { + "cc/claude-sonnet-4-20250514": { "name": "Claude Sonnet 4" }, + "gg/gemini-2.5-pro": { "name": "Gemini 2.5 Pro" }, + "if/kimi-k2-thinking": { "name": "Kimi K2 (Free)" } + } + } + } +} +``` + +**Schritt 3:** Wählen Sie das Modell in OpenCode aus: + +```bash +/models +# Select any OmniRoute model from the list +``` + +> **Tipp:** Fügen Sie alle in Ihrem OmniRoute `/v1/models`-Endpunkt verfügbaren Modelle zum Abschnitt `models` hinzu. Verwenden Sie das Format `provider/model-id` aus Ihrem OmniRoute-Dashboard. +
--- -## 🧪 Evaluierungen (Evals) - -OmniRoute enthält ein integriertes Evaluierungs-Framework zum Testen der LLM-Antwortqualität gegen ein Golden Set. Zugang über **Analytics → Evals** im Dashboard. - -### Integriertes Golden Set - -Das vorgeladene „OmniRoute Golden Set" enthält 10 Testfälle: - -- Begrüßungen, Mathematik, Geographie, Code-Generierung -- JSON-Formatkonformität, Übersetzung, Markdown -- Sicherheitsablehnung (schädlicher Inhalt), Zählung, Boolesche Logik - -### Evaluierungsstrategien - -| Strategie | Beschreibung | Beispiel | -| ---------- | ---------------------------------------------------------- | -------------------------------- | -| `exact` | Ausgabe muss exakt übereinstimmen | `"4"` | -| `contains` | Ausgabe muss Teilzeichenfolge enthalten (case-insensitive) | `"Paris"` | -| `regex` | Ausgabe muss Regex-Muster entsprechen | `"1.*2.*3"` | -| `custom` | Benutzerdefinierte JS-Funktion gibt true/false zurück | `(output) => output.length > 10` | - ---- - ## 🐛 Fehlerbehebung
-Klicke zum Erweitern der Fehlerbehebungsanleitung +Klicken Sie hier, um den Leitfaden zur Fehlerbehebung zu erweitern -**„Language model did not provide messages"** +**„Sprachmodell hat keine Nachrichten bereitgestellt“** -- Anbieter-Kontingent erschöpft → Kontingent-Tracker im Dashboard prüfen -- Lösung: Combo mit Fallback nutzen oder zu günstigerer Stufe wechseln +- Anbieterkontingent erschöpft → Überprüfen Sie den Dashboard-Kontingent-Tracker +- Lösung: Combo-Fallback verwenden oder auf günstigere Stufe wechseln -**Rate Limiting** +**Ratenbegrenzung** -- Abo-Kontingent erschöpft → Fallback zu GLM/MiniMax -- Combo hinzufügen: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking` +- Abonnementkontingent aufgebraucht → Fallback auf GLM/MiniMax +- Kombination hinzufügen: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking` **OAuth-Token abgelaufen** -- Wird automatisch von OmniRoute erneuert -- Falls Problem bestehen bleibt: Dashboard → Anbieter → Neu verbinden +- Automatische Aktualisierung durch OmniRoute +- Wenn die Probleme weiterhin bestehen: Dashboard → Anbieter → Verbindung wiederherstellen **Hohe Kosten** -- Nutzungsstatistiken unter Dashboard → Kosten prüfen +- Überprüfen Sie die Nutzungsstatistiken im Dashboard → Kosten - Primärmodell auf GLM/MiniMax umstellen -- Gratis-Stufe (Gemini CLI, iFlow) für unkritische Aufgaben nutzen +- Nutzen Sie das kostenlose Kontingent (Gemini CLI, iFlow) für unkritische Aufgaben -**Dashboard öffnet sich auf falschem Port** +**Dashboard-/API-Ports sind falsch** -- `PORT=20128` und `NEXT_PUBLIC_BASE_URL=http://localhost:20128` setzen +- `PORT` ist der kanonische Basisport (und standardmäßig API-Port) + – `API_PORT` überschreibt nur OpenAI-kompatible API-Listener + – `DASHBOARD_PORT` überschreibt nur Dashboard/Next.js-Listener +- Setzen Sie `NEXT_PUBLIC_BASE_URL` auf Ihr Dashboard/öffentliche URL (für OAuth-Rückrufe). -**Cloud-Sync-Fehler** +**Cloud-Synchronisierungsfehler** -- Prüfe dass `BASE_URL` auf deine laufende Instanz zeigt -- Prüfe dass `CLOUD_URL` auf den erwarteten Cloud-Endpoint zeigt -- `NEXT_PUBLIC_*` Werte mit Serverwerten synchron halten +– Überprüfen Sie, ob `BASE_URL` auf Ihre laufende Instanz verweist +– Überprüfen Sie, ob `CLOUD_URL` auf Ihren erwarteten Cloud-Endpunkt verweist +– Halten Sie die `NEXT_PUBLIC_*`-Werte an den serverseitigen Werten ausgerichtet -**Erster Login funktioniert nicht** +**Erste Anmeldung funktioniert nicht** -- `INITIAL_PASSWORD` in `.env` prüfen -- Falls nicht gesetzt, Standard-Passwort ist `123456` +- Überprüfen Sie `INITIAL_PASSWORD` in `.env` + – Wenn nicht festgelegt, lautet das Fallback-Passwort `123456` -**Keine Anfrage-Logs** +**Keine Anfrageprotokolle** -- `ENABLE_REQUEST_LOGS=true` in `.env` setzen +- Setzen Sie `ENABLE_REQUEST_LOGS=true` in `.env` -**Verbindungstest zeigt „Invalid" für OpenAI-kompatible Anbieter** +**Verbindungstest zeigt „Ungültig“ für OpenAI-kompatible Anbieter** -- Viele Anbieter stellen den `/models` Endpoint nicht bereit -- OmniRoute v1.0.6+ enthält Fallback-Validierung via Chat Completions -- Stelle sicher, dass die Base URL den `/v1` Suffix enthält +– Viele Anbieter stellen keinen `/models`-Endpunkt bereit +– OmniRoute v1.0.6+ beinhaltet eine Fallback-Validierung über Chat-Abschlüsse +– Stellen Sie sicher, dass die Basis-URL das Suffix `/v1` enthält + +### 🔐 OAuth auf Server Remoto + + + +> **⚠️ WICHTIG für den Einsatz von OmniRoute auf VPS/Docker/Remote-Servern** + +#### OAuth + +Als OAuth-Anmeldeinformationen wurde OmniRoute nicht in die Liste eingetragen. **Zugelassen für `localhost`**. Wenn Sie OmniRoute auf einem Remote-Server (z. B. + +``` +Error 400: redirect_uri_mismatch +``` + +#### Lösung: Konfigurieren Sie Ihre eigenen OAuth-Anmeldeinformationen + +Sie schreiben bitte eine **OAuth 2.0-Client-ID** in der Google Cloud Console mit einem URI für Ihren Server. + +#### Passo a Passo + +**1. Zugriff auf die Google Cloud Console** + +Abra: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials) + +**2. Rufen Sie eine neue OAuth 2.0-Client-ID auf** + +- Klicken Sie auf **"+ Anmeldeinformationen erstellen"** → **"OAuth-Client-ID"** +- Anwendungstyp: **„Webanwendung“** +- Name: Escolha qualquer nome (z. B. `OmniRoute Remote`) + +**3. Adicione als autorisierte Weiterleitungs-URIs** + +Nein, **"Autorisierte Weiterleitungs-URIs"**, Zusatz: + +``` +https://seu-servidor.com/callback +``` + +> Ersetzen Sie `seu-servidor.com` durch die Domain oder die IP Ihres Servers (einschließlich eines Ports, der unbedingt erforderlich ist, z. B.: `http://45.33.32.156:20128/callback`). + +**4. Als Anmeldedaten speichern und kopieren** + +Anschließend hat Google die **Client-ID** und das **Client-Geheimnis** angezeigt. + +**5. Als Umgebungsvariationen konfigurieren** + +Kein `.env` (oder mehrere Docker-Umgebungsvarianten): + +```bash +# Para Antigravity: +ANTIGRAVITY_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com +ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret + +# Para Gemini CLI: +GEMINI_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com +GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret +GEMINI_CLI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret +``` + +**6. Neuzugang zu OmniRoute** + +```bash +# Se usando npm: +npm run dev + +# Se usando Docker: +docker restart omniroute +``` + +**7. Tente conectar novamente** + +Dashboard → Anbieter → Antigravity (oder Gemini CLI) → OAuth + +Jetzt hat Google die Nachricht an `https://seu-servidor.com/callback` weitergeleitet und eine Authentifizierungsfunktion durchgeführt. + +--- + +#### Workaround vorübergehend (nicht vorab konfiguriert) + +Wenn Sie vorab keine Berechtigung erhalten möchten, besteht die Möglichkeit, das **URL-Handbuch** zu verwenden: + +1. OmniRoute ruft eine von Google autorisierte URL auf +2. Nachdem Sie den Autor autorisiert haben, sendet Google eine Weiterleitung an `localhost` (diese wird jedoch nicht vom Server weitergeleitet). +3. **Kopieren Sie eine vollständige URL**, um sie in Ihren Browser zu laden (bitte beachten Sie, dass die Seite noch nicht abgeschlossen ist). +4. Geben Sie die URL ein, die nicht zur Verbindung mit OmniRoute verwendet werden soll +5. Klicken Sie auf **„Verbinden“** + +> Diese Problemumgehung funktioniert aufgrund des Autorisierungscodes auf der URL und ist unabhängig von der Weiterleitung oder Nicht-Weiterleitung gültig.
--- -## 🛠️ Technologie-Stack +## 🛠️ -- **Runtime**: Node.js 20+ -- **Sprache**: TypeScript 5.9 — **100% TypeScript** in `src/` und `open-sse/` (v1.0.6) +
+Klicken Sie hier, um die Tech-Stack-Details zu erweitern + +- **Laufzeit**: Node.js 18–22 LTS (⚠️ Node.js 24+ wird **nicht unterstützt** – native Binärdateien von `better-sqlite3` sind inkompatibel) +- **Sprache**: TypeScript 5.9 – **100 % TypeScript** für `src/` und `open-sse/` (null `any` in Kernmodulen seit Version 2.0) - **Framework**: Next.js 16 + React 19 + Tailwind CSS 4 -- **Datenbank**: LowDB (JSON) + SQLite (Domain-Status + Proxy-Logs) -- **Streaming**: Server-Sent Events (SSE) -- **Auth**: OAuth 2.0 (PKCE) + JWT + API Keys -- **Testing**: Node.js Test Runner (368+ Unit-Tests) -- **CI/CD**: GitHub Actions (automatische npm + Docker Hub Veröffentlichung bei Release) +- **Datenbank**: LowDB (JSON) + SQLite (Domänenstatus + Proxy-Protokolle + MCP-Prüfung + Routing-Entscheidungen) +- **Schemas**: Zod (MCP-Tool-I/O-Validierung, API-Verträge) +- **Protokolle**: MCP (stdio/HTTP) + A2A v0.3 (JSON-RPC 2.0 + SSE) +- **Streaming**: Vom Server gesendete Ereignisse (SSE) +- **Auth**: OAuth 2.0 (PKCE) + JWT + API-Schlüssel + MCP-bezogene Autorisierung +- **Testen**: Node.js-Testläufer + Vitest (über 900 Tests einschließlich Einheit, Integration, E2E)- **CI/CD**: GitHub-Aktionen (automatische NPM-Veröffentlichung + Docker Hub bei Veröffentlichung) - **Website**: [omniroute.online](https://omniroute.online) - **Paket**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute) - **Docker**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute) -- **Resilienz**: Circuit Breaker, exponentieller Backoff, Anti-Thundering Herd, TLS-Spoofing +- **Resilienz**: Leistungsschalter, exponentielles Backoff, Anti-Donner-Herde, TLS-Spoofing, automatische Kombinations-Selbstheilung + +
--- ## 📖 Dokumentation -| Dokument | Beschreibung | -| ------------------------------------------ | ---------------------------------------------- | -| [Benutzerhandbuch](docs/USER_GUIDE.md) | Anbieter, Combos, CLI-Integration, Deploy | -| [API-Referenz](docs/API_REFERENCE.md) | Alle Endpoints mit Beispielen | -| [Fehlerbehebung](docs/TROUBLESHOOTING.md) | Häufige Probleme und Lösungen | -| [Architektur](docs/ARCHITECTURE.md) | Systemarchitektur und Interna | -| [Mitwirken](CONTRIBUTING.md) | Entwicklungs-Setup und Richtlinien | -| [OpenAPI-Spezifikation](docs/openapi.yaml) | OpenAPI 3.0 Spezifikation | -| [Sicherheitsrichtlinie](SECURITY.md) | Schwachstellen melden und Sicherheitspraktiken | +| Dokument | Beschreibung | +| ------------------------------------------------ | ------------------------------------------------------------------ | +| [Benutzerhandbuch](docs/USER_GUIDE.md) | Anbieter, Kombinationen, CLI-Integration, Bereitstellung | +| [API-Referenz](docs/API_REFERENCE.md) | Alle Endpunkte mit Beispielen | +| [MCP-Server](open-sse/mcp-server/README.md) | 16 MCP-Tools, IDE-Konfigurationen, Python/TS/Go-Clients | +| [A2A-Server](src/lib/a2a/README.md) | JSON-RPC 2.0-Protokoll, Fähigkeiten, Streaming, Aufgabenverwaltung | +| [Auto-Combo-Engine](docs/auto-combo.md) | 6-Faktor-Bewertung, Moduspakete, Selbstheilung | +| [Fehlerbehebung](docs/TROUBLESHOOTING.md) | Häufige Probleme und Lösungen | +| [Architektur](docs/ARCHITECTURE.md) | Systemarchitektur und Interna | +| [Beitrag](CONTRIBUTING.md) | Entwicklungsaufbau und Richtlinien | +| [OpenAPI-Spezifikation](docs/openapi.yaml) | OpenAPI 3.0-Spezifikation | +| [Sicherheitsrichtlinie](SECURITY.md) | Schwachstellenmeldung und Sicherheitspraktiken | +| [VM-Bereitstellung](docs/VM_DEPLOYMENT_GUIDE.md) | Vollständige Anleitung: VM + Nginx + Cloudflare-Setup | +| [Features-Galerie](docs/FEATURES.md) | Visuelle Dashboard-Tour mit Screenshots | +| [Release-Checkliste](docs/RELEASE_CHECKLIST.md) | Validierungsschritte vor der Veröffentlichung | --- -## 📧 Support +## 🗺️ -> 💬 **Treten Sie unserer Community bei!** [WhatsApp-Gruppe](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Hilfe bekommen, Tipps teilen und auf dem Laufenden bleiben. +Für OmniRoute sind **210+ Funktionen** in mehreren Entwicklungsphasen geplant. Hier sind die Schlüsselbereiche: -- **Website**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community-Gruppe](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **WhatsApp**: [Community-Gruppe](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Originalprojekt**: [9router von decolua](https://github.com/decolua/9router) +| Kategorie | Geplante Funktionen | Höhepunkte | +| ------------------------------ | ------------------- | ------------------------------------------------------------------------------------------------------ | +| 🧠 **Routing & Intelligenz** | 25+ | Routing mit der niedrigsten Latenz, Tag-basiertes Routing, Quoten-Preflight, P2C-Kontoauswahl | +| 🔒 **Sicherheit & Compliance** | 20+ | SSRF-Härtung, Credential-Cloaking, Ratenbegrenzung pro Endpunkt, Verwaltungsschlüssel-Scoping | +| 📊 **Beobachtbarkeit** | 15+ | OpenTelemetry-Integration, Echtzeit-Kontingentüberwachung, Kostenverfolgung pro Modell | +| 🔄 **Anbieterintegrationen** | 20+ | Dynamische Modellregistrierung, Anbieter-Abklingzeiten, Multi-Account-Codex, Copilot-Kontingentanalyse | +| ⚡ **Leistung** | 15+ | Duale Cache-Schicht, Prompt-Cache, Antwort-Cache, Streaming-Keepalive, Batch-API | +| 🌐 **Ökosystem** | 10+ | WebSocket-API, Hot-Reload der Konfiguration, verteilter Konfigurationsspeicher, kommerzieller Modus | + +### 🔜 Bald erhältlich- 🔗 **OpenCode-Integration** – Native Anbieterunterstützung für die OpenCode AI-Codierungs-IDE + +- 🔗 **TRAE-Integration** – Volle Unterstützung für das TRAE AI-Entwicklungsframework +- 📦 **Batch-API** – Asynchrone Stapelverarbeitung für Massenanfragen +- 🎯 **Tag-basiertes Routing** – Leiten Sie Anfragen basierend auf benutzerdefinierten Tags und Metadaten weiter +- 💰 **Niedrigste Kostenstrategie** – Wählen Sie automatisch den günstigsten verfügbaren Anbieter aus + +> 📝 Vollständige Funktionsspezifikationen verfügbar in [`docs/new-features/`](docs/new-features/) (217 detaillierte Spezifikationen) --- ## 👥 Mitwirkende -[![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) +[![Mitwirkende](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) -### Wie du mitwirken kannst +### So leisten Sie einen Beitrag -1. Repository forken -2. Feature-Branch erstellen (`git checkout -b feature/amazing-feature`) -3. Änderungen committen (`git commit -m 'Add amazing feature'`) -4. Branch pushen (`git push origin feature/amazing-feature`) -5. Pull Request öffnen +1. Forken Sie das Repository +2. Erstellen Sie Ihren Feature-Zweig (`git checkout -b feature/amazing-feature`) +3. Übernehmen Sie Ihre Änderungen (`git commit -m 'Add amazing feature'`) +4. Push zum Zweig (`git push origin feature/amazing-feature`) +5. Öffnen Sie eine Pull-Anfrage -Siehe [CONTRIBUTING.md](CONTRIBUTING.md) für detaillierte Richtlinien. +Detaillierte Richtlinien finden Sie unter [CONTRIBUTING.md](CONTRIBUTING.md). -### Neue Version veröffentlichen +### Veröffentlichung einer neuen Version ```bash -# Release erstellen — npm-Veröffentlichung erfolgt automatisch -gh release create v1.0.6 --title "v1.0.6" --generate-notes +# Create a release — npm publish happens automatically +gh release create v2.0.0 --title "v2.0.0" --generate-notes ``` --- -## 📊 Star-Verlauf +## 📊 Sterngeschichte @@ -1198,20 +1661,21 @@ gh release create v1.0.6 --title "v1.0.6" --generate-notes ## 🙏 Danksagungen -Besonderer Dank an **[9router](https://github.com/decolua/9router)** von **[decolua](https://github.com/decolua)** — das Originalprojekt, das diesen Fork inspiriert hat. OmniRoute baut auf diesem unglaublichen Fundament auf mit zusätzlichen Funktionen, Multi-Modalen APIs und einem vollständigen TypeScript-Rewrite. +Besonderer Dank geht an **[9router](https://github.com/decolua/9router)** von **[decolua](https://github.com/decolua)** – das ursprüngliche Projekt, das diesen Fork inspiriert hat. OmniRoute baut auf dieser unglaublichen Grundlage mit zusätzlichen Funktionen, multimodalen APIs und einer vollständigen Neufassung von TypeScript auf. -Besonderer Dank an **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** — die ursprüngliche Go-Implementierung, die diese JavaScript-Portierung inspiriert hat. +Besonderer Dank geht an **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** – die ursprüngliche Go-Implementierung, die diese JavaScript-Portierung inspiriert hat. --- ## 📄 Lizenz -MIT-Lizenz — siehe [LICENSE](LICENSE) für Details. +MIT-Lizenz – Einzelheiten finden Sie unter [LIZENZ](LICENSE). --- + diff --git a/README.es.md b/README.es.md index ba649905d6..c609dbf37b 100644 --- a/README.es.md +++ b/README.es.md @@ -110,6 +110,35 @@ _Conecta cualquier IDE o herramienta CLI con IA a través de OmniRoute — gatew --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 ¿Por qué OmniRoute? **Deja de desperdiciar dinero y chocar con límites:** @@ -128,6 +157,18 @@ _Conecta cualquier IDE o herramienta CLI con IA a través de OmniRoute — gatew --- +## 📧 Soporte + +> 💬 **¡Únete a la comunidad!** [Grupo WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Obtén ayuda, comparte consejos y mantente al día. + +- **Website**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Grupo de la Comunidad](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Proyecto Original**: [9router por decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Cómo Funciona ``` @@ -157,263 +198,497 @@ Resultado: Nunca dejes de programar, costo mínimo --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Lo que resuelve OmniRoute: 30 puntos débiles reales y casos de uso -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Todos los desarrolladores que utilizan herramientas de IA se enfrentan a estos problemas a diario.** OmniRoute se creó para resolverlos todos: desde sobrecostos hasta bloqueos regionales, desde flujos rotos de OAuth hasta operaciones de protocolo y observabilidad empresarial.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Pago una suscripción costosa pero aún así me interrumpen los límites" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Los desarrolladores pagan entre 20 y 200 dólares al mes por Claude Pro, Codex Pro o GitHub Copilot. Incluso pagando, la cuota tiene un límite: 5 horas de uso, límites semanales o límites de tarifa por minuto. A mitad de la sesión de codificación, el proveedor deja de responder y el desarrollador pierde flujo y productividad. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Reserva inteligente de 4 niveles**: si se agota la cuota de suscripción, se redirige automáticamente a la clave API → Barato → Gratis sin intervención manual +- **Seguimiento de cuotas en tiempo real**: muestra el consumo de tokens en tiempo real con cuenta regresiva de reinicio (5 h, diario, semanal) +- **Soporte multicuenta**: varias cuentas por proveedor con rotación automática: cuando una se agota, cambia a la siguiente +- **Combinaciones personalizadas**: cadenas de respaldo personalizables con 6 estrategias de equilibrio (completar primero, por turnos, P2C, aleatoria, menos utilizada, de costo optimizado) +- **Cuotas comerciales de Codex**: monitoreo de cuotas del espacio de trabajo empresarial/de equipo directamente en el panel
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Necesito usar varios proveedores pero cada uno tiene una API diferente" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI usa un formato, Claude (Anthropic) usa otro, Gemini otro más. Si un desarrollador quiere probar modelos de diferentes proveedores o recurrir a ellos, debe reconfigurar los SDK, cambiar los puntos finales y lidiar con formatos incompatibles. Los proveedores personalizados (FriendLI, NIM) tienen puntos finales de modelo no estándar. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Punto final unificado**: un único `http://localhost:20128/v1` sirve como proxy para los más de 36 proveedores +- **Traducción de formato**: automática y transparente: OpenAI ↔ Claude ↔ Gemini ↔ API de respuestas +- **Desinfección de respuesta**: elimina los campos no estándar (`x_groq`, `usage_breakdown`, `service_tier`) que interrumpen OpenAI SDK v1.83+ +- **Normalización de roles**: convierte `developer` → `system` para proveedores que no son OpenAI; `system` → `user` para GLM/ERNIE +- **Think Tag Extraction**: extrae bloques `` de modelos como DeepSeek R1 en `reasoning_content` estandarizado. +- **Salida estructurada para Gemini** — `json_schema` → `responseMimeType`/`responseSchema` conversión automática +- **`stream` por defecto es `false`**: se alinea con las especificaciones de OpenAI, evitando SSE inesperado en los SDK de Python/Rust/Go
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "Mi proveedor de IA bloquea mi región/país" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Proveedores como OpenAI/Codex bloquean el acceso desde ciertas regiones geográficas. Los usuarios obtienen errores como `unsupported_country_region_territory` durante las conexiones OAuth y API. Esto resulta especialmente frustrante para los desarrolladores de los países en desarrollo. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **Configuración de proxy de 3 niveles**: Proxy configurable en 3 niveles: global (todo el tráfico), por proveedor (un solo proveedor) y por conexión/clave. +- **Insignias de proxy codificadas por colores** — Indicadores visuales: 🟢 proxy global, 🟡 proxy de proveedor, 🔵 proxy de conexión, que siempre muestra la IP +- **Intercambio de tokens de OAuth a través de proxy**: el flujo de OAuth también pasa a través del proxy, lo que resuelve `unsupported_country_region_territory` +- **Pruebas de conexión a través de proxy**: las pruebas de conexión utilizan el proxy configurado (no más derivación directa) +- **Soporte SOCKS5**: soporte completo de proxy SOCKS5 para enrutamiento saliente +- **Suplantación de huellas dactilares TLS**: huella digital TLS similar a la de un navegador a través de `wreq-js` para evitar la detección de bots.
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "Quiero usar IA para codificar pero no tengo dinero" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +No todo el mundo puede pagar entre 20 y 200 dólares al mes por suscripciones a IA. Los estudiantes, desarrolladores de países emergentes, aficionados y autónomos necesitan acceso a modelos de calidad sin costo alguno. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Proveedores de nivel gratuito integrados**: soporte nativo para proveedores 100% gratuitos: iFlow (8 modelos ilimitados), Qwen (3 modelos ilimitados), Kiro (Claude gratis), Gemini CLI (180K/mes gratis) +- **Combos solo gratuitos**: cadena `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/mes sin tiempo de inactividad +- **Créditos gratuitos NVIDIA NIM**: 1000 créditos gratuitos integrados +- **Estrategia de optimización de costos**: estrategia de enrutamiento que elige automáticamente el proveedor más barato disponible
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Necesito proteger mi puerta de enlace AI del acceso no autorizado" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Al exponer una puerta de enlace de IA a la red (LAN, VPS, Docker), cualquiera con la dirección puede consumir los tokens/cuota del desarrollador. Sin protección, las API son vulnerables al mal uso, la inyección rápida y el abuso. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Administración de claves API**: generación, rotación y alcance por proveedor con una página `/dashboard/api-manager` dedicada +- **Permisos a nivel de modelo**: restrinja las claves API a modelos específicos (`openai/*`, patrones comodín), con la opción Permitir todo/Restringir +- **API Endpoint Protection**: requiere una clave para `/v1/models` y bloquea proveedores específicos del listado +- **Auth Guard + Protección CSRF**: todas las rutas del panel protegidas con middleware `withAuth` + tokens CSRF +- **Limitador de velocidad**: limitación de velocidad por IP con ventanas configurables +- **Filtrado de IP**: lista permitida/lista bloqueada para control de acceso +- **Prompt injection guard**: desinfección contra patrones de avisos maliciosos +- **Cifrado AES-256-GCM**: credenciales cifradas en reposo
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "Mi proveedor dejó de funcionar y perdí mi flujo de codificación" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Los proveedores de IA pueden volverse inestables, devolver errores 5xx o alcanzar límites de velocidad temporales. Si un desarrollador depende de un solo proveedor, se le interrumpe. Sin disyuntores, los reintentos repetidos pueden bloquear la aplicación. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Disyuntor por proveedor**: apertura/cierre automático con umbrales configurables y enfriamiento (cerrado/abierto/medio abierto) +- **Retroceso exponencial**: retrasos progresivos en los reintentos +- **Anti-Thundering Herd** — Mutex + protección de semáforo contra tormentas de reintentos simultáneos +- **Cadenas alternativas combinadas**: si el proveedor principal falla, automáticamente pasa por la cadena sin intervención. +- **Disyuntor combinado**: desactiva automáticamente los proveedores defectuosos dentro de una cadena combinada +- **Panel de estado**: monitoreo del tiempo de actividad, estados de disyuntores, bloqueos, estadísticas de caché, latencia p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "Configurar cada herramienta de IA es tedioso y repetitivo" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Los desarrolladores utilizan Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Cada herramienta necesita una configuración diferente (punto final API, clave, modelo). Reconfigurar al cambiar de proveedor o modelo es una pérdida de tiempo. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **Panel de herramientas CLI**: página dedicada con configuración con un solo clic para Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **Generador de configuración de GitHub Copilot**: genera `chatLanguageModels.json` para código VS con selección de modelo masivo +- **Asistente de incorporación**: configuración guiada de 4 pasos para usuarios nuevos +- **Un punto final, todos los modelos**: configure `http://localhost:20128/v1` una vez, acceda a más de 36 proveedores
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "Administrar tokens OAuth de múltiples proveedores es un infierno" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot: todos usan OAuth 2.0 con tokens que caducan. Los desarrolladores necesitan volver a autenticarse constantemente, lidiar con `client_secret is missing`, `redirect_uri_mismatch` y fallas en servidores remotos. OAuth en LAN/VPS es particularmente problemático. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Actualización automática de tokens**: los tokens de OAuth se actualizan en segundo plano antes de que caduquen +- **OAuth 2.0 (PKCE) integrado**: flujo automático para Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **OAuth multicuenta**: varias cuentas por proveedor mediante extracción de token JWT/ID +- **OAuth LAN/Remote Fix** — Detección de IP privada para `redirect_uri` + modo URL manual para servidores remotos +- **OAuth detrás de Nginx**: utiliza `window.location.origin` para compatibilidad con proxy inverso +- **Guía remota de OAuth**: guía paso a paso para las credenciales de Google Cloud en VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "No sé cuánto estoy gastando ni dónde" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Los desarrolladores utilizan múltiples proveedores pagos pero no tienen una visión unificada del gasto. Cada proveedor tiene su propio panel de facturación, pero no hay una vista consolidada. Los costos inesperados pueden acumularse. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Panel de análisis de costos**: seguimiento de costos por token y gestión de presupuesto por proveedor +- **Límites de presupuesto por nivel**: límite de gasto por nivel que activa el respaldo automático +- **Configuración de precios por modelo**: precios configurables por modelo +- **Estadísticas de uso por clave API**: recuento de solicitudes y marca de tiempo utilizada por última vez por clave +- **Panel de análisis**: tarjetas de estadísticas, tabla de uso de modelos, tabla de proveedores con tasas de éxito y latencia.
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "No puedo diagnosticar errores y problemas en llamadas AI" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Cuando falla una llamada, el desarrollador no sabe si se trata de un límite de velocidad, un token caducado, un formato incorrecto o un error del proveedor. Registros fragmentados en diferentes terminales. Sin observabilidad, la depuración es de prueba y error. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Panel de registros unificados**: 4 pestañas: registros de solicitudes, registros de proxy, registros de auditoría y consola +- **Visor de registros de consola**: visor estilo terminal en tiempo real con niveles codificados por colores, desplazamiento automático, búsqueda y filtro +- **Registros de proxy SQLite**: registros persistentes que sobreviven a los reinicios del servidor +- **Translator Playground**: 4 modos de depuración: Playground (traducción de formato), Chat Tester (ida y vuelta), Test Bench (por lotes), Live Monitor (en tiempo real) +- **Solicitud de telemetría**: latencia p50/p95/p99 + seguimiento de X-Request-Id +- **Registro basado en archivos con rotación**: el interceptor de consola captura todo en el registro JSON con rotación basada en el tamaño.
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "Implementar y mantener la puerta de enlace es complejo" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Instalar, configurar y mantener un proxy de IA en diferentes entornos (local, VPS, Docker, nube) requiere mucha mano de obra. Problemas como rutas codificadas, `EACCES` en directorios, conflictos de puertos y compilaciones multiplataforma añaden fricción. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **instalación global de npm** — `npm install -g omniroute && omniroute` — hecho +- **Docker multiplataforma**: AMD64 + ARM64 nativo (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Perfiles de Docker Compose**: `base` (sin herramientas CLI) y `cli` (con Claude Code, Codex, OpenClaw) +- **Aplicación de escritorio Electron**: aplicación nativa para Windows/macOS/Linux con bandeja del sistema, inicio automático y modo sin conexión +- **Modo de puerto dividido**: API y panel en puertos separados para escenarios avanzados (proxy inverso, redes de contenedores) +- **Cloud Sync**: sincronización de configuración entre dispositivos a través de Cloudflare Workers +- **Copias de seguridad de base de datos**: copia de seguridad, restauración, exportación e importación automáticas de todas las configuraciones
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "La interfaz es solo en inglés y mi equipo no habla inglés" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Los equipos en países que no hablan inglés, especialmente en América Latina, Asia y Europa, tienen dificultades con las interfaces solo en inglés. Las barreras del idioma reducen la adopción y aumentan los errores de configuración. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Panel i18n — 30 idiomas** — Las más de 500 teclas traducidas, incluidas árabe, búlgaro, danés, alemán, español, finlandés, francés, hebreo, hindi, húngaro, indonesio, italiano, japonés, coreano, malayo, holandés, noruego, polaco, portugués (PT/BR), rumano, ruso, eslovaco, sueco, tailandés, ucraniano, vietnamita, chino, filipino, inglés. +- **Soporte RTL**: soporte de derecha a izquierda para árabe y hebreo +- **README multilingüe**: 30 traducciones de documentación completa +- **Selector de idioma**: ícono de globo en el encabezado para cambiar en tiempo real
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "Necesito más que chat: necesito incrustaciones, imágenes y audio" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +La IA no es solo completar un chat. Los desarrolladores necesitan generar imágenes, transcribir audio, crear incrustaciones para RAG, reclasificar documentos y moderar contenido. Cada API tiene un punto final y un formato diferentes. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Integraciones** — `/v1/embeddings` con 6 proveedores y más de 9 modelos +- **Generación de imágenes** — `/v1/images/generations` con 10 proveedores y más de 20 modelos (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Texto a vídeo** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) y SD WebUI +- **Texto a música** — `/v1/music/generations` — ComfyUI (audio estable abierto, MusicGen) +- **Transcripción de audio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Texto a voz** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3 y proveedores existentes +- **Moderaciones** — `/v1/moderations` — Comprobaciones de seguridad del contenido +- **Reclasificación** — `/v1/rerank` — Reclasificación de relevancia del documento +- **API de respuestas**: compatibilidad total con `/v1/responses` para Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "No tengo forma de probar y comparar la calidad entre modelos" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Los desarrolladores quieren saber qué modelo es mejor para su caso de uso (código, traducción, razonamiento), pero comparar manualmente es lento. No existen herramientas de evaluación integradas. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Evaluaciones LLM**: pruebas de conjunto dorado con 10 casos precargados que cubren saludos, matemáticas, geografía, generación de código, cumplimiento de JSON, traducción, rebajas y rechazo de seguridad. +- **4 estrategias de coincidencia**: `exact`, `contains`, `regex`, `custom` (función JS) +- **Translator Playground Test Bench**: pruebas por lotes con múltiples entradas y resultados esperados, comparación entre proveedores +- **Chat Tester**: recorrido completo de ida y vuelta con representación de respuesta visual +- **Live Monitor**: flujo en tiempo real de todas las solicitudes que fluyen a través del proxy
-📈 15. "I need to scale without losing performance" +📈 15. "Necesito escalar sin perder rendimiento" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +A medida que crece el volumen de solicitudes, sin almacenar en caché las mismas preguntas generan costos duplicados. Sin idempotencia, las solicitudes duplicadas desperdician el procesamiento. Se deben respetar los límites de tarifas por proveedor. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Caché semántica**: la caché de dos niveles (firma + semántica) reduce el costo y la latencia +- **Solicitud de idempotencia**: ventana de deduplicación de 5 segundos para solicitudes idénticas +- **Detección de límite de velocidad**: RPM por proveedor, intervalo mínimo y seguimiento simultáneo máximo +- **Límites de velocidad editables**: valores predeterminados configurables en Configuración → Resiliencia con persistencia +- **Caché de validación de clave API**: caché de 3 niveles para rendimiento de producción +- **Panel de estado con telemetría**: latencia p50/p95/p99, estadísticas de caché, tiempo de actividad
-🤖 16. "I want to control model behavior globally" +🤖 16. "Quiero controlar el comportamiento del modelo globalmente" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Desarrolladores que quieran todas las respuestas en un idioma específico, con un tono específico o quieran limitar los tokens de razonamiento. Configurar esto en cada herramienta/solicitud no es práctico. -**How OmniRoute solves it:** +**Cómo lo resuelve OmniRoute:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **Inyección de aviso del sistema**: aviso global aplicado a todas las solicitudes +- **Thinking Budget Validation**: control de asignación de tokens de razonamiento por solicitud (transferencia, automática, personalizada, adaptativa) +- **6 estrategias de enrutamiento**: estrategias globales que determinan cómo se distribuyen las solicitudes +- **Enrutador comodín**: los patrones `provider/*` se enrutan dinámicamente a cualquier proveedor +- **Activar/desactivar combinación de alternar**: alterna combinaciones directamente desde el panel +- **Alternar proveedor**: activa/desactiva todas las conexiones de un proveedor con un solo clic +- **Proveedores bloqueados**: excluye proveedores específicos del listado `/v1/models`
+
+🧰 17. "Necesito herramientas MCP como capacidades de producto de primera clase" + +Muchas puertas de enlace de IA exponen MCP solo como un detalle de implementación oculto. Los equipos necesitan una capa operativa visible y manejable. + +**Cómo lo resuelve OmniRoute:** + +- MCP aparece en la pestaña de navegación del panel y protocolo de punto final +- Página de gestión de MCP dedicada con procesos, herramientas, alcances y auditoría +- Inicio rápido integrado para `omniroute --mcp` e incorporación de clientes + +
+ +
+🧠 18. "Necesito orquestación A2A con rutas de tareas de sincronización + transmisión" + +Los flujos de trabajo de los agentes necesitan respuestas directas y una ejecución continua de larga duración con control del ciclo de vida. + +**Cómo lo resuelve OmniRoute:** + +- Punto final A2A JSON-RPC (`POST /a2a`) con `message/send` y `message/stream` +- Transmisión SSE con propagación del estado terminal +- API de ciclo de vida de tareas para `tasks/get` y `tasks/cancel` + +
+ +
+🛰️ 19. "Necesito un estado real del proceso MCP, no un estado adivinado" + +Los equipos operativos necesitan saber si MCP está realmente activo, no solo si se puede acceder a una API. + +**Cómo lo resuelve OmniRoute:** + +- Archivo de latidos en tiempo de ejecución con PID, marcas de tiempo, transporte, recuento de herramientas y modo de alcance +- API de estado de MCP que combina latidos + actividad reciente +- Tarjetas de estado de la interfaz de usuario para el proceso/tiempo de actividad/actualización de latidos + +
+ +
+📋 20. "Necesito ejecución de herramienta MCP auditable" + +Cuando las herramientas modifican la configuración o desencadenan acciones de operaciones, los equipos necesitan trazabilidad forense. + +**Cómo lo resuelve OmniRoute:** + +- Registro de auditoría respaldado por SQLite para llamadas a herramientas MCP +- Filtros por herramienta, éxito/fracaso, clave API y paginación +- Tabla de auditoría del panel + puntos finales de estadísticas para automatización + +
+ +
+🔐 21. "Necesito permisos MCP con alcance por integración" + +Los diferentes clientes deberían tener acceso con privilegios mínimos a las categorías de herramientas. + +**Cómo lo resuelve OmniRoute:** + +- 9 alcances MCP granulares para acceso controlado a herramientas +- Aplicación del alcance y visibilidad en la interfaz de usuario de gestión de MCP +- Postura predeterminada segura para herramientas operativas + +
+ +
+⚙️ 22. "Necesito controles operativos sin redistribuir" + +Los equipos necesitan cambios rápidos en el tiempo de ejecución durante incidentes o eventos de costos. + +**Cómo lo resuelve OmniRoute:** + +- Cambie la activación combinada directamente desde el panel de MCP +- Aplicar perfiles de resiliencia de paquetes de políticas predefinidos +- Restablecer el estado del disyuntor desde el mismo panel de operaciones. + +
+ +
+🔄 23. "Necesito visibilidad y cancelación del ciclo de vida de la tarea A2A en vivo" + +Sin visibilidad del ciclo de vida, los incidentes de tareas se vuelven difíciles de clasificar. + +**Cómo lo resuelve OmniRoute:** + +- Listado de tareas/filtrado por estado/habilidad con paginación +- Profundización en metadatos, eventos y artefactos de tareas +- Punto final de cancelación de tarea y acción de UI con confirmación + +
+ +
+🌊 24. "Necesito métricas de transmisión activas para la carga A2A" + +Los flujos de trabajo de streaming requieren información operativa sobre la simultaneidad y las conexiones en vivo. + +**Cómo lo resuelve OmniRoute:** + +- Contadores de flujo activos integrados en el estado A2A +- Marca de tiempo de la última tarea y recuentos por estado +- Tarjetas de tablero A2A para monitoreo de operaciones en tiempo real + +
+ +
+🪪 25. "Necesito descubrimiento de agente estándar para clientes" + +Los clientes y orquestadores externos necesitan metadatos legibles por máquina para la incorporación. + +**Cómo lo resuelve OmniRoute:** + +- Tarjeta de agente expuesta en `/.well-known/agent.json` +- Capacidades y habilidades mostradas en la interfaz de usuario de gestión. +- La API de estado A2A incluye metadatos de descubrimiento para la automatización + +
+ +
+🧭 26. "Necesito capacidad de descubrimiento de protocolo en la UX del producto" + +Si los usuarios no pueden descubrir las superficies de protocolo, la calidad de la adopción y el soporte disminuye. + +**Cómo lo resuelve OmniRoute:** + +- Entradas de la barra lateral para MCP y A2A +- Pestaña Protocolos de la página del endpoint con inicio rápido y estado +- Enlaces desde la descripción general a paneles de gestión dedicados + +
+ +
+🧪 27. "Necesito validación de protocolo de extremo a extremo con clientes reales" + +Las pruebas simuladas no son suficientes para validar la compatibilidad del protocolo antes del lanzamiento. + +**Cómo lo resuelve OmniRoute:** + +- Suite E2E que inicia la aplicación y utiliza transporte de cliente MCP SDK real +- Pruebas de cliente A2A para descubrimiento, envío, transmisión, obtención y cancelación de flujos +- Verificar las afirmaciones con las API de auditoría MCP y tareas A2A. + +
+ +
+📡 28. "Necesito observabilidad unificada en todas las interfaces" + +Dividir la observabilidad por protocolo crea puntos ciegos y MTTR más largos. + +**Cómo lo resuelve OmniRoute:** + +- Paneles/registros/análisis unificados en un solo producto +- Salud + auditoría + solicitud de telemetría en capas OpenAI, MCP y A2A +- API operativas para estado y automatización. + +
+ +
+💼 29. "Necesito un tiempo de ejecución para proxy + herramientas + orquestación de agentes" + +La ejecución de muchos servicios separados aumenta los costos operativos y los modos de falla. + +**Cómo lo resuelve OmniRoute:** + +- Proxy compatible con OpenAI, servidor MCP y servidor A2A en una sola pila +- Autenticación compartida, resiliencia, almacenamiento de datos y observabilidad. +- Modelo de política consistente en todas las superficies de interacción. + +
+ +
+🚀 30. "Necesito enviar flujos de trabajo agentes sin expansión de código adhesivo" + +Los equipos pierden velocidad al unir múltiples scripts y servicios ad hoc. + +**Cómo lo resuelve OmniRoute:** + +- Estrategia de endpoint unificada para clientes y agentes +- UI de gestión de protocolos integradas y rutas de validación de humo +- Fundamentos listos para producción (seguridad, registro, resiliencia, respaldo) + +
+ +### Guías de ejemplo (casos de uso integrados) + +**Libro de estrategias A: maximizar la suscripción paga + copia de seguridad económica** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Libro de estrategias B: pila de codificación de costo cero** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Libro de estrategias C: cadena alternativa siempre disponible las 24 horas del día, los 7 días de la semana** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Libro de jugadas D: Operaciones del agente con MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Inicio Rápido **1. Instala globalmente:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Aplicación de Escritorio — Sin Conexión y Siempre Activo +## 🖥️ > 🆕 **¡NUEVO!** OmniRoute ahora está disponible como **aplicación de escritorio nativa** para Windows, macOS y Linux. @@ -700,66 +975,26 @@ Traducción transparente entre formatos:
---- +## 🧪 Evaluaciones (Evals) -## 🎯 Casos de Uso +OmniRoute incluye un framework de evaluación integrado para probar la calidad de respuestas de LLM contra un conjunto golden. Accede vía **Analytics → Evals** en el dashboard. -### Caso 1: "Tengo suscripción Claude Pro" +### Conjunto Golden Integrado -**Problema:** La cuota expira sin usar, límites de tasa durante programación intensa +El "OmniRoute Golden Set" precargado contiene 10 casos de prueba que cubren: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (usar suscripción al máximo) - 2. glm/glm-4.7 (respaldo barato cuando la cuota se agota) - 3. if/kimi-k2-thinking (fallback de emergencia gratuito) +- Saludos, matemáticas, geografía, generación de código +- Conformidad de formato JSON, traducción, markdown +- Rechazo de seguridad (contenido dañino), conteo, lógica booleana -Costo mensual: $20 (suscripción) + ~$5 (respaldo) = $25 total -vs. $20 + chocar con límites = frustración -``` +### Estrategias de Evaluación -### Caso 2: "Quiero costo cero" - -**Problema:** No puede pagar suscripciones, necesita IA confiable para programar - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K gratis/mes) - 2. if/kimi-k2-thinking (ilimitado gratis) - 3. qw/qwen3-coder-plus (ilimitado gratis) - -Costo mensual: $0 -Calidad: Modelos listos para producción -``` - -### Caso 3: "Necesito programar 24/7, sin interrupciones" - -**Problema:** Plazos ajustados, no puede permitirse tiempo de inactividad - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (mejor calidad) - 2. cx/gpt-5.2-codex (segunda suscripción) - 3. glm/glm-4.7 (barato, reset diario) - 4. minimax/MiniMax-M2.1 (más barato, reset 5h) - 5. if/kimi-k2-thinking (gratuito ilimitado) - -Resultado: 5 capas de fallback = cero tiempo de inactividad -``` - -### Caso 4: "Quiero IA GRATUITA en OpenClaw" - -**Problema:** Necesita asistente de IA en apps de mensajería, completamente gratuito - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (ilimitado gratis) - 2. if/minimax-m2.1 (ilimitado gratis) - 3. if/kimi-k2-thinking (ilimitado gratis) - -Costo mensual: $0 -Acceso vía: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Estrategia | Descripción | Ejemplo | +| ---------- | ---------------------------------------------------- | -------------------------------- | +| `exact` | La salida debe coincidir exactamente | `"4"` | +| `contains` | La salida debe contener subcadena (case-insensitive) | `"Paris"` | +| `regex` | La salida debe coincidir con el patrón regex | `"1.*2.*3"` | +| `custom` | Función JS personalizada retorna true/false | `(output) => output.length > 10` | --- @@ -1043,29 +1278,6 @@ Configuración → Configuración de API: --- -## 🧪 Evaluaciones (Evals) - -OmniRoute incluye un framework de evaluación integrado para probar la calidad de respuestas de LLM contra un conjunto golden. Accede vía **Analytics → Evals** en el dashboard. - -### Conjunto Golden Integrado - -El "OmniRoute Golden Set" precargado contiene 10 casos de prueba que cubren: - -- Saludos, matemáticas, geografía, generación de código -- Conformidad de formato JSON, traducción, markdown -- Rechazo de seguridad (contenido dañino), conteo, lógica booleana - -### Estrategias de Evaluación - -| Estrategia | Descripción | Ejemplo | -| ---------- | ---------------------------------------------------- | -------------------------------- | -| `exact` | La salida debe coincidir exactamente | `"4"` | -| `contains` | La salida debe contener subcadena (case-insensitive) | `"Paris"` | -| `regex` | La salida debe coincidir con el patrón regex | `"1.*2.*3"` | -| `custom` | Función JS personalizada retorna true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Solución de Problemas
@@ -1121,7 +1333,7 @@ El "OmniRoute Golden Set" precargado contiene 10 casos de prueba que cubren: --- -## 🛠️ Stack Tecnológico +## 🛠️ - **Runtime**: Node.js 20+ - **Lenguaje**: TypeScript 5.9 — **100% TypeScript** en `src/` y `open-sse/` (v1.0.6) @@ -1152,17 +1364,7 @@ El "OmniRoute Golden Set" precargado contiene 10 casos de prueba que cubren: --- -## 📧 Soporte - -> 💬 **¡Únete a la comunidad!** [Grupo WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Obtén ayuda, comparte consejos y mantente al día. - -- **Website**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Grupo de la Comunidad](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Proyecto Original**: [9router por decolua](https://github.com/decolua/9router) - ---- +## 🗺️ ## 👥 Contribuidores diff --git a/README.fi.md b/README.fi.md index 4a45e021a6..3730a5f6f4 100644 --- a/README.fi.md +++ b/README.fi.md @@ -110,6 +110,35 @@ _Yhdistä mikä tahansa tekoälyllä toimiva IDE- tai CLI-työkalu OmniRouten ka --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Miksi OmniRoute? **Lopeta rahan tuhlaaminen ja rajojen ylittäminen:** @@ -128,6 +157,18 @@ _Yhdistä mikä tahansa tekoälyllä toimiva IDE- tai CLI-työkalu OmniRouten ka --- +## 📧 Tuki + +> 💬 **Liity yhteisöömme!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Hanki apua, jaa vinkkejä ja pysy ajan tasalla. + +- **Verkkosivusto**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Ongelmia**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Alkuperäinen projekti**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Näin se toimii ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Mitä OmniRoute ratkaisee – 30 todellista kipukohtaa ja käyttötapausta -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Jokainen tekoälytyökaluja käyttävä kehittäjä kohtaa nämä ongelmat päivittäin.** OmniRoute luotiin ratkaisemaan ne kaikki – kustannusten ylityksistä alueellisiin lohkoihin, rikkinäisistä OAuth-virroista protokollatoimintoihin ja yrityksen havainnointikykyyn.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Maksan kalliista tilauksesta, mutta silti rajoitukset häiritsevät minua" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Kehittäjät maksavat 20–200 dollaria kuukaudessa Claude Prosta, Codex Prosta tai GitHub Copilotista. Maksamallakin kiintiöllä on katto – 5 tuntia käyttöä, viikkorajat tai minuuttirajoitukset. Koodausistunnon puolivälissä palveluntarjoaja lakkaa vastaamasta ja kehittäjä menettää virtauksen ja tuottavuuden. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-Tier Fallback** — Jos tilauskiintiö loppuu, ohjataan automaattisesti kohtaan API-avain → Halpa → Ilmainen ilman manuaalista toimenpiteitä +- **Reaaliaikainen kiintiöseuranta** - Näyttää tunnuksen kulutuksen reaaliajassa ja nollaa lähtölaskenta (5 tuntia, päivittäin, viikoittain) +- **Useiden tilien tuki** — Useita tilejä palveluntarjoajaa kohden automaattisella kierrätyksellä — kun yksi loppuu, vaihtuu seuraavaan +- **Muokatut yhdistelmät** — Muokattavat varaketjut, joissa on 6 tasapainotusstrategiaa (täytä ensin, round-robin, P2C, satunnainen, vähiten käytetty, kustannusoptimoitu) +- **Codex Business Quotat** — Yritysten/Tiimien työtilan kiintiöiden valvonta suoraan kojelaudassa
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Minun täytyy käyttää useita palveluntarjoajia, mutta jokaisella on erilainen API" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI käyttää yhtä muotoa, Claude (Anthropic) käyttää toista, Gemini vielä toista. Jos kehittäjä haluaa testata eri palveluntarjoajien malleja tai vaihtoehtoja niiden välillä, hänen on määritettävä SDK:t uudelleen, muutettava päätepisteitä ja käsiteltävä yhteensopimattomia muotoja. Mukautetuilla palveluntarjoajilla (FriendLI, NIM) on mallista poikkeavat päätepisteet. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Yhdistetty päätepiste** — Yksi `http://localhost:20128/v1` toimii välityspalvelimena kaikille yli 36 palveluntarjoajalle +- **Format Translation** - Automaattinen ja läpinäkyvä: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **Response Sanitization** – Poistaa standardista poikkeavat kentät (`x_groq`, `usage_breakdown`, `service_tier`), jotka rikkovat OpenAI SDK v1.83+:n +- **Roolin normalisointi** — Muuntaa `developer` → `system` muille kuin OpenAI-palveluntarjoajille; `system` → `user` GLM/ERNIE:lle +- **Think Tag Extraction** - Purkaa ``-lohkot malleista, kuten DeepSeek R1, standardoituun `reasoning_content`:hen +- **Strukturoitu lähtö Geminille** — `json_schema` → `responseMimeType`/`responseSchema` automaattinen muunnos +- **`stream`:n oletusarvo on `false`** — yhdenmukaistuu OpenAI-spesifikaation kanssa välttäen odottamattoman SSE:n Python/Rust/Go SDK:issa
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "Tekoälypalveluntarjoajani estää alueeni/maani" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Palveluntarjoajat, kuten OpenAI/Codex, estävät pääsyn tietyiltä maantieteellisiltä alueilta. Käyttäjät saavat virheitä, kuten `unsupported_country_region_territory`, OAuth- ja API-yhteyksien aikana. Tämä on erityisen turhauttavaa kehitysmaiden kehittäjille. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **3-tason välityspalvelimen määritys** – Muokattava välityspalvelin kolmella tasolla: yleinen (kaikki liikenne), palveluntarjoajakohtainen (vain yksi palveluntarjoaja) ja yhteys/avain +- **Värikoodatut välityspalvelinmerkit** — Visuaaliset ilmaisimet: 🟢 maailmanlaajuinen välityspalvelin, 🟡 tarjoajan välityspalvelin, 🔵 yhteysvälityspalvelin, joka näyttää aina IP-osoitteen +- **OAuth-tunnusten vaihto välityspalvelimen kautta** — OAuth-kulku kulkee myös välityspalvelimen kautta, mikä ratkaisee `unsupported_country_region_territory` +- **Yhteystestit välityspalvelimen kautta** - Yhteystestit käyttävät määritettyä välityspalvelinta (ei enää suoraa ohitusta) +- **SOCKS5-tuki** — Täysi SOCKS5-välityspalvelintuki lähtevään reititykseen +- **TLS-sormenjälkien huijaus** — Selaimen kaltainen TLS-sormenjälki `wreq-js`:n kautta ohittaakseen bot-tunnistuksen
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "Haluan käyttää tekoälyä koodaukseen, mutta minulla ei ole rahaa" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Kaikki eivät voi maksaa 20–200 dollaria kuukaudessa tekoälytilauksista. Opiskelijat, kehittäjät nousevista maista, harrastajat ja freelancerit tarvitsevat pääsyn laadukkaisiin malleihin ilman kustannuksia. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Free Tier Providers -sisäänrakennettu** - Natiivituki 100 % ilmaisille palveluntarjoajille: iFlow (8 rajatonta mallia), Qwen (3 rajoittamatonta mallia), Kiro (Claude ilmaiseksi), Gemini CLI (180 000/kk ilmaiseksi) +- **Vain ilmaiset yhdistelmät** — Ketju `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = 0 $/kk ilman seisonta-aikaa +- **NVIDIA NIM Free Credits** - 1000 ilmaista saldoa integroituna +- **Kustannusoptimoitu strategia** — Reititysstrategia, joka valitsee automaattisesti halvimman saatavilla olevan palveluntarjoajan
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Minun täytyy suojata tekoälyyhdyskäytävääni luvattomalta käytöltä" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Kun paljastat tekoälyyhdyskäytävän verkkoon (LAN, VPS, Docker), kuka tahansa osoitteen tietävä voi kuluttaa kehittäjän tunnukset/kiintiöt. Ilman suojaa API:t ovat alttiita väärinkäytölle, nopealle injektiolle ja väärinkäytöksille. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **API-avainten hallinta** — Luominen, kierto ja laajuus palveluntarjoajakohtaisesti erillisellä `/dashboard/api-manager`-sivulla +- **Mallitason käyttöoikeudet** - Rajoita API-avaimet tiettyihin malleihin (`openai/*`, jokerimerkkimallit) Salli kaikki/Rajoita-kytkimellä +- **API Endpoint Protection** — Vaadi avainta `/v1/models`:lle ja estä tietyt palveluntarjoajat luettelosta +- **Auth Guard + CSRF-suojaus** — Kaikki kojelaudan reitit on suojattu `withAuth`-väliohjelmistolla + CSRF-tunnuksilla +- **Rate Limiter** — IP-nopeuden rajoitus konfiguroitavilla ikkunoilla +- **IP-suodatus** — Pääsynhallinnan sallittu-/estolista +- **Prompt Injection Guard** — Desinfiointi haitallisia kehotusmalleja vastaan +- **AES-256-GCM Encryption** — Tunnistetiedot on salattu lepotilassa
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "palveluntarjoajani kaatui ja menetin koodauskulkuni" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Tekoälypalveluntarjoajat voivat muuttua epävakaiksi, palauttaa 5xx-virheitä tai saavuttaa väliaikaiset nopeusrajoitukset. Jos kehittäjä on riippuvainen yhdestä palveluntarjoajasta, se keskeytyy. Ilman katkaisijoita toistuvat uudelleenyritykset voivat kaataa sovelluksen. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Katkaisija palveluntarjoajakohtaisesti** - Automaattinen avautuminen/sulkeminen konfiguroitavilla kynnyksillä ja jäähdytys (suljettu/auki/puoliauki) +- **Eksponentiaalinen peruutus** — Progressiiviset uudelleenyritysviiveet +- **Anti-Thundering Herd** — Mutex + semaforisuoja samanaikaisia myrskyjä vastaan +- **Yhdistelmävaraketjut** – Jos ensisijainen toimittaja epäonnistuu, putoaa automaattisesti ketjun läpi ilman väliintuloa +- **Combo Circuit Breaker** — Poistaa automaattisesti käytöstä vialliset palveluntarjoajat yhdistelmäketjussa +- **Health Dashboard** — käytettävyyden valvonta, katkaisijoiden tilat, lukitukset, välimuistitilastot, p50/p95/p99-viive
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "Jokaisen tekoälytyökalun määrittäminen on työlästä ja toistuvaa" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Kehittäjät käyttävät kursoria, Claude Codea, Codex CLI:tä, OpenClaw:ta, Gemini CLI:tä, Kilo Codea... Jokainen työkalu tarvitsee eri konfiguraation (API-päätepiste, avain, malli). Uudelleenmääritys toimittajaa tai mallia vaihdettaessa on ajanhukkaa. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **CLI Tools Dashboard** - Erillinen sivu yhdellä napsautuksella Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — Luo `chatLanguageModels.json` VS-koodille joukkomallin valinnalla +- **Ohjattu käyttöönottotoiminto** — Ohjattu 4-vaiheinen asennus ensikertalaisille +- **Yksi päätepiste, kaikki mallit** — Määritä `http://localhost:20128/v1` kerran, käytä 36+ palveluntarjoajaa
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "Useiden palveluntarjoajien OAuth-tunnusten hallinta on helvettiä" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot – kaikki käyttävät OAuth 2.0:aa vanhentuvilla tunnuksilla. Kehittäjien on todennettava jatkuvasti uudelleen, käsiteltävä `client_secret is missing`-, `redirect_uri_mismatch`- ja etäpalvelimien vikoja. OAuth LAN/VPS:ssä on erityisen ongelmallinen. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Automaattinen tunnuksen päivitys** - OAuth-tunnukset päivittyvät taustalla ennen vanhenemista +- **Sisäänrakennettu OAuth 2.0 (PKCE)** - Automaattinen kulku Claude Codelle, Codexille, Gemini CLI:lle, Copilotille, Kirolle, Qwenille, iFlowille +- **Multi-Account OAuth** - Useita tilejä palveluntarjoajaa kohden JWT/ID-tunnuksen purkamisen kautta +- **OAuth LAN/Remote Fix** — Yksityinen IP-tunnistus `redirect_uri`:lle + manuaalinen URL-tila etäpalvelimille +- **OAuth Nginxin takana** - Käyttää `window.location.origin`-protokollaa käänteisen välityspalvelimen yhteensopivuuteen +- **OAuth-etäopas** — Vaiheittainen opas Google Cloud -kirjautumistiedoille VPS/Dockerissa
-📊 9. "I don't know how much I'm spending or where" +📊 9. "En tiedä kuinka paljon kulutan tai minne" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Kehittäjät käyttävät useita maksullisia palveluntarjoajia, mutta heillä ei ole yhtenäistä näkemystä kuluttamisesta. Jokaisella palveluntarjoajalla on oma laskutuksen hallintapaneeli, mutta yhdistettyä näkymää ei ole. Odottamattomat kustannukset voivat kasaantua. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Cost Analytics Dashboard** – Token-kohtainen kustannusseuranta ja budjetin hallinta palveluntarjoajakohtaisesti +- **Tasokohtaiset budjettirajat** – Tasokohtainen kulutuskatto, joka laukaisee automaattisen varauksen +- **Malleittainen hinnoittelu** — Muokattavat hinnat mallikohtaisesti +- **Käyttötilastot API-avainta kohti** — Pyyntömäärä ja viimeksi käytetty aikaleima avainta kohti +- **Analytics Dashboard** - Tilastokortit, mallin käyttökaavio, toimittajataulukko onnistumisprosenteilla ja viiveellä
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "En pysty diagnosoimaan tekoälypuhelujen virheitä ja ongelmia" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Kun puhelu epäonnistuu, kehittäjä ei tiedä, oliko kyseessä nopeusrajoitus, vanhentunut tunnus, väärä muoto vai palveluntarjoajan virhe. Sirpaloituneet lokit eri terminaaleissa. Ilman havaittavuutta virheenkorjaus on yrityksen ja erehdysten menetelmää. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Yhdistettyjen lokien hallintapaneeli** - 4 välilehteä: pyyntölokit, välityspalvelimen lokit, tarkastuslokit, konsoli +- **Console Log Viewer** - Reaaliaikainen päätetyylinen katseluohjelma värikoodatuilla tasoilla, automaattinen vieritys, haku, suodatin +- **SQLite-välityspalvelimen lokit** — Pysyvät lokit, jotka kestävät palvelimen uudelleenkäynnistyksen +- **Kääntäjän leikkikenttä** — 4 virheenkorjaustilaa: Playground (muodon käännös), Chat Tester (meno-paluu), testipenkki (erä), Live Monitor (reaaliaikainen) +- **Pyyntötelemetria** — p50/p95/p99-latenssi + X-Request-Id-seuranta +- **Tiedostopohjainen kirjaaminen rotaatiolla** – Konsolin sieppaaja tallentaa kaiken JSON-lokiin kokoperusteisella kierrolla
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "Yhdyskäytävän käyttöönotto ja ylläpito on monimutkaista" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +AI-välityspalvelimen asentaminen, määrittäminen ja ylläpito eri ympäristöissä (paikallinen, VPS, Docker, pilvi) on työvoimavaltaista. Ongelmat, kuten kovakoodatut polut, `EACCES` hakemistoissa, porttiristiriidat ja monikäyttöjärjestelmät lisäävät kitkaa. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **npm yleinen asennus** — `npm install -g omniroute && omniroute` — valmis +- **Docker Multi-Platform** - AMD64 + ARM64 natiivi (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Docker Compose -profiilit** — `base` (ei CLI-työkaluja) ja `cli` (Claude Code, Codex, OpenClaw) +- **Electron Desktop App** - Natiivisovellus Windowsille/macOS:lle/Linuxille, jossa ilmaisinalue, automaattinen käynnistys, offline-tila +- **Split-Port Mode** — API ja Dashboard erillisissä porteissa edistyneille skenaarioille (käänteinen välityspalvelin, konttiverkko) +- **Cloud Sync** - Määritä synkronointi laitteiden välillä Cloudflare Workersin kautta +- **DB-varmuuskopiot** — Kaikkien asetusten automaattinen varmuuskopiointi, palautus, vienti ja tuonti
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "Käyttöliittymä on vain englanninkielinen ja tiimini ei puhu englantia" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Ryhmät muissa kuin englanninkielisissä maissa, erityisesti Latinalaisessa Amerikassa, Aasiassa ja Euroopassa, kamppailevat vain englanninkielisten käyttöliittymien kanssa. Kielimuurit vähentävät käyttöönottoa ja lisäävät konfigurointivirheitä. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Dashboard i18n — 30 kieltä** — Kaikki yli 500 näppäintä käännetty mukaan lukien arabia, bulgaria, tanska, saksa, espanja, suomi, ranska, heprea, hindi, unkari, indonesia, italia, japani, korea, malaiji, hollanti, norja, puola, portugali (PT/BR), romania, thai, venäjä, ukraina, slovakki, ruotsi, englanti +- **RTL-tuki** — Tuki oikealta vasemmalle arabian ja heprean kielelle +- **Multi-Language READMEs** - 30 täydellistä dokumentaation käännöstä +- **Kielen valitsin** — Maapallokuvake otsikossa reaaliaikaista vaihtoa varten
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "Tarvitsen muutakin kuin chatin – tarvitsen upotuksia, kuvia, ääntä" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +Tekoäly ei ole vain chatin loppuun saattamista. Kehittäjien on luotava kuvia, litteroitava ääni, luotava upotuksia RAG:lle, järjestettävä asiakirjat uudelleen ja valvottava sisältöä. Jokaisella API:lla on eri päätepiste ja muoto. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Upotukset** — `/v1/embeddings`, 6 toimittajaa ja 9+ mallia +- **Image Generation** — `/v1/images/generations` 10 palveluntarjoajan ja 20+ mallin kanssa (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Tekstistä videoksi** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) ja SD WebUI +- **Tekstistä musiikiksi** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Äänitranskriptio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Tekstistä puheeksi** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3 ja olemassa olevat palveluntarjoajat +- **Moderaatiot** — `/v1/moderations` — Sisällön turvallisuustarkastukset +- **Uudelleensijoitus** — `/v1/rerank` — Asiakirjan relevanssin uudelleensijoitus +- **Responses API** — Täysi `/v1/responses`-tuki Codexille
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "Minulla ei ole mahdollisuutta testata ja vertailla laatua eri mallien välillä" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Kehittäjät haluavat tietää, mikä malli sopii parhaiten heidän käyttötapaukseensa – koodi, käännös, päättely – mutta manuaalinen vertailu on hidasta. Integroituja arviointityökaluja ei ole olemassa. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **LLM-arvioinnit** — Golden set -testaus 10 esiladatulla kotelolla, jotka kattavat tervehdyksen, matematiikan, maantieteen, koodin luomisen, JSON-yhteensopivuuden, käännöksen, merkinnän, turvallisuuden kieltämisen +- **4 sovitusstrategiaa** — `exact`, `contains`, `regex`, `custom` (JS-toiminto) +- **Translator Playground Test Bench** - Erätestaus useilla tuloilla ja odotetulla lähdöllä, tarjoajien välinen vertailu +- **Chat Tester** - Täysi edestakainen matka visuaalisen vasteen renderöinnillä +- **Live Monitor** — Reaaliaikainen tietovirta kaikista välityspalvelimen kautta kulkevista pyynnöistä
-📈 15. "I need to scale without losing performance" +📈 15. "Minun täytyy skaalata suorituskykyä menettämättä" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +Pyynnön määrän kasvaessa samat kysymykset aiheuttavat päällekkäisiä kustannuksia välimuistiin tallentamatta. Ilman idempotenssia kaksoiskappaleet pyytävät jätteenkäsittelyä. Palveluntarjoajakohtaisia ​​hintarajoja on noudatettava. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Semanttinen välimuisti** – Kaksitasoinen välimuisti (allekirjoitus + semanttinen) vähentää kustannuksia ja viivettä +- **Request Idempotency** — 5 sekunnin deduplikaatioikkuna identtisille pyynnöille +- **nopeusrajoituksen tunnistus** – palveluntarjoajakohtainen RPM, pienin väli ja suurin samanaikainen seuranta +- **Muokattavat nopeusrajoitukset** - Määritettävissä olevat oletusasetukset kohdassa Asetukset → Resilience with persistence +- **API Key Validation Cache** – 3-tasoinen välimuisti tuotannon suorituskykyä varten +- **Health Dashboard telemetrialla** - p50/p95/p99 latenssi, välimuistitilastot, käyttöaika
-🤖 16. "I want to control model behavior globally" +🤖 16. "Haluan hallita mallin käyttäytymistä maailmanlaajuisesti" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Kehittäjät, jotka haluavat kaikki vastaukset tietyllä kielellä, tietyllä sävyllä tai haluavat rajoittaa perusteluita. Tämän määrittäminen jokaiseen työkaluun/pyyntöön on epäkäytännöllistä. -**How OmniRoute solves it:** +**Kuinka OmniRoute ratkaisee sen:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **Järjestelmäkehotteen lisäys** — Yleinen kehote koskee kaikkia pyyntöjä +- **Thinking Budget Validation** – perustelutunnisteen allokoinnin ohjaus pyyntöä kohti (läpivienti, automaattinen, mukautettu, mukautuva) +- **6 reititysstrategiaa** — Globaalit strategiat, jotka määrittävät pyyntöjen jakautumisen +- **Wildcard Router** — `provider/*`-mallit reitittävät dynaamisesti mille tahansa palveluntarjoajalle +- **Yhdistelmä käyttöön/pois käytöstä** - Vaihda yhdistelmät suoraan kojelaudalta +- **Provider Toggle** — Ota käyttöön tai poista käytöstä kaikki palveluntarjoajan yhteydet yhdellä napsautuksella +- **Estetyt palveluntarjoajat** - Sulje tietyt palveluntarjoajat pois `/v1/models`-luettelosta
+
+🧰 17. "Tarvitsen MCP-työkaluja ensiluokkaisina tuoteominaisuuksina" + +Monet tekoälyyhdyskäytävät paljastavat MCP:n vain piilotettuna toteutustietona. Tiimit tarvitsevat näkyvän, hallittavan toimintakerroksen. + +**Kuinka OmniRoute ratkaisee sen:** + +- MCP näkyy kojelaudan navigointi- ja päätepisteprotokolla-välilehdessä +- Erillinen MCP-hallintasivu, jossa on prosessit, työkalut, laajuudet ja tarkastus +- Sisäänrakennettu pikakäynnistys `omniroute --mcp`:lle ja asiakkaan käyttöönottoon + +
+ +
+🧠 18. "Tarvitsen A2A-orkesterin synkronointia ja suoratoiston tehtäväpolkuja" + +Agenttityönkulut tarvitsevat sekä suoria vastauksia että pitkäkestoista suoratoistoa elinkaariohjauksella. + +**Kuinka OmniRoute ratkaisee sen:** + +- A2A JSON-RPC -päätepiste (`POST /a2a`) `message/send`:n ja `message/stream`:n kanssa +- SSE-suoratoisto päätetilan etenemisellä +- Tehtävän elinkaaren sovellusliittymät `tasks/get`:lle ja `tasks/cancel`:lle + +
+ +
+🛰️ 19. "Tarvitsen todellisen MCP-prosessin kunnon, en arvatun tilan" + +Operatiivisten tiimien on tiedettävä, onko MCP todella elossa, ei vain sitä, onko API tavoitettavissa. + +**Kuinka OmniRoute ratkaisee sen:** + +- Ajonaikainen syketiedosto, jossa on PID, aikaleimat, kuljetus, työkalujen määrä ja laajuustila +- MCP-tilan API, joka yhdistää sykkeen + viimeaikaisen toiminnan +- Käyttöliittymän tilakortit prosessin / käytettävyyden / sydämenlyöntien tuoreudelle + +
+ +
+📋 20. "Tarvitsen tarkastettavan MCP-työkalun suorituksen" + +Kun työkalut muuttavat määrityksiä tai käynnistävät operaatioita, tiimit tarvitsevat rikosteknistä jäljitettävyyttä. + +**Kuinka OmniRoute ratkaisee sen:** + +- SQLite-tuettu tarkastusloki MCP-työkalukutsuille +- Suodattimet työkalun, onnistumisen/epäonnistumisen, API-avaimen ja sivutuksen mukaan +- Kojelaudan tarkastustaulukko + tilastopäätepisteet automatisointia varten + +
+ +
+🔐 21. "Tarvitsen laajennettuja MCP-oikeuksia integraatiota kohti" + +Eri asiakkailla tulisi olla vähiten käyttöoikeus työkaluluokkiin. + +**Kuinka OmniRoute ratkaisee sen:** + +- 9 rakeista MCP-skooppia ohjattua työkalujen käyttöä varten +- Laajuuden valvonta ja näkyvyys MCP-hallintaliittymässä +- Turvallinen oletusasento käyttötyökaluille + +
+ +
+⚙️ 22. "Tarvitsen toiminnan ohjaimia ilman uudelleenjärjestelyä" + +Tiimit tarvitsevat nopeita ajonaikaisia muutoksia tapausten tai kustannustapahtumien aikana. + +**Kuinka OmniRoute ratkaisee sen:** + +- Vaihda yhdistelmäaktivointia suoraan MCP-kojelaudalta +- Käytä joustavuusprofiileja ennalta määritetyistä käytäntöpaketeista +- Nollaa katkaisijan tila samasta käyttöpaneelista + +
+ +
+🔄 23. "Tarvitsen live-A2A-tehtävän elinkaaren näkyvyyden ja peruutuksen" + +Ilman elinkaaren näkyvyyttä tehtäväkohtauksista tulee vaikeasti luokiteltuja. + +**Kuinka OmniRoute ratkaisee sen:** + +- Tehtäväluettelo / suodatus tilan / taitojen mukaan ja sivutus +- Tehtävän metatietojen, tapahtumien ja artefaktien yksityiskohdat +- Tehtävän peruutuksen päätepiste ja käyttöliittymätoiminto vahvistuksen kanssa + +
+ +
+🌊 24. "Tarvitsen aktiivisia suoratoistotietoja A2A-kuormalle" + +Streaming-työnkulut edellyttävät toiminnallista tietoa samanaikaisuudesta ja reaaliaikaisista yhteyksistä. + +**Kuinka OmniRoute ratkaisee sen:** + +- Aktiiviset virtalaskurit integroitu A2A-tilaan +- Viimeisen tehtävän aikaleima ja tilakohtaiset määrät +- A2A kojelautakortit reaaliaikaiseen toimintojen seurantaan + +
+ +
+🪪 25. "Tarvitsen asiakkaille vakioagentin haun" + +Ulkoiset asiakkaat ja orkesterit tarvitsevat koneellisesti luettavaa metadataa käyttöönottoa varten. + +**Kuinka OmniRoute ratkaisee sen:** + +- Agenttikortti esillä osoitteessa `/.well-known/agent.json` +- Johdon käyttöliittymässä näkyvät valmiudet ja taidot +- A2A status API sisältää etsintämetatiedot automatisointia varten + +
+ +
+🧭 26. "Tarvitsen protokollan löydettävyyden tuotteessa UX" + +Jos käyttäjät eivät löydä protokollapintoja, käyttöönoton ja tuen laatu heikkenee. + +**Kuinka OmniRoute ratkaisee sen:** + +- Sivupalkkimerkinnät MCP:lle ja A2A:lle +- Päätepistesivu Protokollat-välilehti, jossa on pika-aloitus ja tila +- Linkit yleiskatsauksesta erityisiin hallintapaneeliin + +
+ +
+🧪 27. "Tarvitsen päästä päähän -protokollan validoinnin oikeiden asiakkaiden kanssa" + +Valetestit eivät riitä vahvistamaan protokollan yhteensopivuutta ennen julkaisua. + +**Kuinka OmniRoute ratkaisee sen:** + +- E2E-paketti, joka käynnistää sovelluksen ja käyttää todellista MCP SDK -asiakassiirtoa +- A2A-asiakas testaa virtojen löytämistä, lähettämistä, suoratoistoa, vastaanottamista ja peruuttamista +- Tarkista väitteet MCP-tarkastuksen ja A2A-tehtävien sovellusliittymien kanssa + +
+ +
+📡 28. "Tarvitsen yhtenäisen havainnoinnin kaikissa liitännöissä" + +Havainnon jakaminen protokollan mukaan luo kuolleita kulmia ja pidemmän MTTR:n. + +**Kuinka OmniRoute ratkaisee sen:** + +- Yhdistetyt kojelaudat/lokit/analytiikka yhdessä tuotteessa +- Terveys + auditointi + pyyntö telemetria OpenAI-, MCP- ja A2A-tasoilla +- Toiminnalliset sovellusliittymät tilaa ja automaatiota varten + +
+ +
+💼 29. "Tarvitsen yhden suoritusajan välityspalvelimelle + työkaluille + agentin orkestraatiolle" + +Useiden erillisten palvelujen suorittaminen lisää käyttökustannuksia ja vikatiloja. + +**Kuinka OmniRoute ratkaisee sen:** + +- OpenAI-yhteensopiva välityspalvelin, MCP-palvelin ja A2A-palvelin yhdessä pinossa +- Jaettu todennus, joustavuus, tietovarasto ja havaittavuus +- Yhdenmukainen toimintamalli kaikilla vuorovaikutuspinnoilla + +
+ +
+🚀 30. "Minun on lähetettävä agenttityönkulkuja ilman liimakoodin leviämistä" + +Tiimit menettävät nopeutta yhdistäessään useita ad-hoc-palveluita ja skriptejä. + +**Kuinka OmniRoute ratkaisee sen:** + +- Yhtenäinen päätepistestrategia asiakkaille ja edustajille +- Sisäänrakennetut protokollien hallinnan käyttöliittymät ja savun vahvistuspolut +- Tuotantovalmis perusta (turvallisuus, puunkorjuu, joustavuus, varmuuskopiointi) + +
+ +### Esimerkkiohjekirjat (integroidut käyttötapaukset) + +**Ohjekirja A: maksimoi maksullinen tilaus + halpa varmuuskopio** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Ohjekirja B: Nollahintainen koodauspino** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: 24/7 aina päällä oleva varaketju** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Pelikirja D: Agentti toimii MCP:llä + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Pika-aloitus **1. Asenna maailmanlaajuisesti:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +990,26 @@ OmniRoute sisältää tehokkaan sisäänrakennetun Translator Playgroundin, joss
---- +## 🧪 Arvioinnit (Evals) -## 🎯 Käyttökotelot +OmniRoute sisältää sisäänrakennetun arviointikehyksen, jolla testataan LLM-vastauksen laatua kultaiseen joukkoon verrattuna. Käytä sitä kojelaudan **Analytics → Evals** kautta. -### Tapaus 1: "Minulla on Claude Pro -tilaus" +### Sisäänrakennettu kultainen setti -**Ongelma:** Kiintiö vanhenee käyttämättä, nopeusrajoitukset raskaan koodauksen aikana +Esiladattu "OmniRoute Golden Set" sisältää 10 testitapausta, jotka kattavat: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Tervehdys, matematiikka, maantiede, koodin luominen +- JSON-muodon noudattaminen, käännös, merkintä +- Turvallisuuskielto (haitallinen sisältö), laskenta, boolen logiikka -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Arviointistrategiat -### Tapaus 2: "Haluan ilman kustannuksia" - -**Ongelma:** Ei ole varaa tilauksiin, tarvitaan luotettavaa tekoälykoodausta - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Tapaus 3: "Tarvitsen 24/7-koodausta, ei keskeytyksiä" - -**Ongelma:** Määräajat, seisokkeihin ei ole varaa - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Tapaus 4: "Haluan ILMAISTA tekoälyä OpenClawissa" - -**Ongelma:** Tarvitset AI-avustajan viestisovelluksissa, täysin ilmainen - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Strategia | Kuvaus | Esimerkki | +| ---------- | ------------------------------------------------------------------------ | -------------------------------- | +| `exact` | Tulosten on vastattava tarkasti | `"4"` | +| `contains` | Tulosteen tulee sisältää alimerkkijono (kirjainkoolla ei ole merkitystä) | `"Paris"` | +| `regex` | Tulostuksen on vastattava regex-mallia | `"1.*2.*3"` | +| `custom` | Mukautettu JS-funktio palauttaa true/false | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 Arvioinnit (Evals) - -OmniRoute sisältää sisäänrakennetun arviointikehyksen, jolla testataan LLM-vastauksen laatua kultaiseen joukkoon verrattuna. Käytä sitä kojelaudan **Analytics → Evals** kautta. - -### Sisäänrakennettu kultainen setti - -Esiladattu "OmniRoute Golden Set" sisältää 10 testitapausta, jotka kattavat: - -- Tervehdys, matematiikka, maantiede, koodin luominen -- JSON-muodon noudattaminen, käännös, merkintä -- Turvallisuuskielto (haitallinen sisältö), laskenta, boolen logiikka - -### Arviointistrategiat - -| Strategia | Kuvaus | Esimerkki | -| ---------- | ------------------------------------------------------------------------ | -------------------------------- | -| `exact` | Tulosten on vastattava tarkasti | `"4"` | -| `contains` | Tulosteen tulee sisältää alimerkkijono (kirjainkoolla ei ole merkitystä) | `"Paris"` | -| `regex` | Tulostuksen on vastattava regex-mallia | `"1.*2.*3"` | -| `custom` | Mukautettu JS-funktio palauttaa true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Vianetsintä
@@ -1132,13 +1344,13 @@ Esiladattu "OmniRoute Golden Set" sisältää 10 testitapausta, jotka kattavat: - OmniRoute v1.0.6+ sisältää varatarkistuksen chatin loppuunsaattamisen kautta - Varmista, että perus-URL sisältää `/v1`-liitteen -### 🔐 OAuth em Servidor Remoto (OAuth-etäasetus) +### 🔐 OAuth > **⚠️ TÄRKEÄÄ käyttäjille com OmniRoute em VPS/Docker/servidor Remoto** -### Onko OAuth do Antigravity / Gemini CLI falha em servidores Remotos? +### OAuth Os provedores **Antigravity** ja **Gemini CLI** usam **Google OAuth 2.0** para autenticação. O Google exige que a `redirect_uri` usada no fluxo OAuth seja **exatamente** uma das URIs pre-cadastradas no Google Cloud Console do aplicativo. @@ -1227,7 +1439,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🛠️ Tech Stack +## 🛠️ - **Suoritusaika**: Node.js 18–22 LTS (⚠️ Node.js 24+ -versiota **ei tueta** — `better-sqlite3` alkuperäiset binaarit eivät ole yhteensopivia) - **Kieli**: TypeScript 5.9 — **100 % TypeScript** `src/` ja `open-sse/` (v1.0.6) välillä @@ -1279,7 +1491,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🗺️ Etenemissuunnitelma +## 🗺️ OmniRoutella on **210+ suunniteltua ominaisuutta** useissa kehitysvaiheissa. Tässä ovat tärkeimmät alueet: @@ -1304,18 +1516,6 @@ OmniRoutella on **210+ suunniteltua ominaisuutta** useissa kehitysvaiheissa. Tä --- -## 📧 Tuki - -> 💬 **Liity yhteisöömme!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Hanki apua, jaa vinkkejä ja pysy ajan tasalla. - -- **Verkkosivusto**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Ongelmia**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Alkuperäinen projekti**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Avustajat [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.fr.md b/README.fr.md index 62bff9ba95..538d2854bf 100644 --- a/README.fr.md +++ b/README.fr.md @@ -110,6 +110,35 @@ _Connectez n'importe quel IDE ou outil CLI alimenté par l'IA via OmniRoute — --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Pourquoi OmniRoute ? **Arrêtez de gaspiller de l'argent et de vous heurter aux limites :** @@ -128,6 +157,18 @@ _Connectez n'importe quel IDE ou outil CLI alimenté par l'IA via OmniRoute — --- +## 📧 Support + +> 💬 **Rejoignez notre communauté !** [Groupe WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Obtenez de l'aide, partagez des astuces et restez informé. + +- **Site web** : [omniroute.online](https://omniroute.online) +- **GitHub** : [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Issues** : [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp** : [Groupe communautaire](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Projet original** : [9router par decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Comment ça fonctionne ``` @@ -157,263 +198,497 @@ Résultat : Ne jamais arrêter de coder, coût minimal --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Ce qu'OmniRoute résout : 30 problèmes réels et cas d'utilisation -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Tous les développeurs utilisant des outils d'IA sont confrontés quotidiennement à ces problèmes.** OmniRoute a été conçu pour tous les résoudre : des dépassements de coûts aux blocages régionaux, des flux OAuth interrompus aux opérations de protocole et à l'observabilité de l'entreprise.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Je paie un abonnement coûteux mais je suis quand même interrompu par des limites" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Les développeurs paient entre 20 et 200 $/mois pour Claude Pro, Codex Pro ou GitHub Copilot. Même payant, le quota est plafonné : 5 heures d'utilisation, limites hebdomadaires ou limites de tarif à la minute. En cours de session de codage, le fournisseur ne répond plus et le développeur perd en fluidité et en productivité. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-Tier Fallback** — Si le quota d'abonnement est épuisé, redirige automatiquement vers la clé API → Pas cher → Gratuit sans intervention manuelle +- **Suivi des quotas en temps réel** — Affiche la consommation de jetons en temps réel avec un compte à rebours réinitialisé (5 h, quotidiennement, hebdomadairement) +- **Support multi-comptes** — Plusieurs comptes par fournisseur avec tourniquet automatique — lorsqu'un compte est épuisé, passe au suivant +- **Combos personnalisés** — Chaînes de secours personnalisables avec 6 stratégies d'équilibrage (remplir en premier, round-robin, P2C, aléatoire, les moins utilisées, optimisées en termes de coûts) +- **Codex Business Quotas** — Surveillance des quotas d'espace de travail Business/Équipe directement dans le tableau de bord
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Je dois utiliser plusieurs fournisseurs mais chacun a une API différente" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI utilise un format, Claude (Anthropic) en utilise un autre, Gemini encore un autre. Si un développeur souhaite tester des modèles de différents fournisseurs ou utiliser un modèle de secours entre eux, il doit reconfigurer les SDK, modifier les points de terminaison et gérer les formats incompatibles. Les fournisseurs personnalisés (FriendLI, NIM) ont des points de terminaison de modèle non standard. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Point de terminaison unifié** : un seul `http://localhost:20128/v1` sert de proxy pour les plus de 36 fournisseurs. +- **Traduction de format** — Automatique et transparente : OpenAI ↔ Claude ↔ Gemini ↔ API Responses +- **Response Sanitization** — Supprime les champs non standard (`x_groq`, `usage_breakdown`, `service_tier`) qui cassent OpenAI SDK v1.83+ +- **Role Normalization** — Convertit `developer` → `system` pour les fournisseurs non OpenAI ; `system` → `user` pour GLM/ERNIE +- **Think Tag Extraction** — Extrait les blocs `` de modèles comme DeepSeek R1 dans un `reasoning_content` standardisé. +- **Sortie structurée pour Gemini** — Conversion automatique `json_schema` → `responseMimeType`/`responseSchema` +- **`stream` est par défaut `false`** — S'aligne sur les spécifications OpenAI, évitant ainsi le SSE inattendu dans les SDK Python/Rust/Go
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "Mon fournisseur d'IA bloque ma région/pays" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Des fournisseurs comme OpenAI/Codex bloquent l’accès depuis certaines régions géographiques. Les utilisateurs obtiennent des erreurs telles que `unsupported_country_region_territory` lors des connexions OAuth et API. Ceci est particulièrement frustrant pour les développeurs des pays en développement. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **Configuration proxy à 3 niveaux** — Proxy configurable à 3 niveaux : global (tout le trafic), par fournisseur (un seul fournisseur) et par connexion/clé +- **Badges proxy à code couleur** — Indicateurs visuels : 🟢 proxy global, 🟡 proxy fournisseur, 🔵 proxy de connexion, affichant toujours l'adresse IP +- **Échange de jetons OAuth via proxy** — Le flux OAuth passe également par le proxy, résolvant `unsupported_country_region_territory` +- **Tests de connexion via proxy** — Les tests de connexion utilisent le proxy configuré (plus de contournement direct) +- **Support SOCKS5** — Prise en charge complète du proxy SOCKS5 pour le routage sortant +- **TLS Fingerprint Spoofing** — Empreinte digitale TLS de type navigateur via `wreq-js` pour contourner la détection des robots
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "Je veux utiliser l'IA pour coder mais je n'ai pas d'argent" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Tout le monde ne peut pas payer entre 20 et 200 $/mois pour des abonnements à l’IA. Les étudiants, les développeurs des pays émergents, les amateurs et les indépendants doivent avoir accès à des modèles de qualité à un coût nul. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Fournisseurs gratuits intégrés** — Prise en charge native des fournisseurs 100 % gratuits : iFlow (8 modèles illimités), Qwen (3 modèles illimités), Kiro (Claude gratuit), Gemini CLI (180 000 /mois gratuits) +- **Combos gratuits uniquement** — Chaîne `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = 0 $/mois sans temps d'arrêt +- **Crédits gratuits NVIDIA NIM** — 1 000 crédits gratuits intégrés +- **Stratégie d'optimisation des coûts** — Stratégie de routage qui choisit automatiquement le fournisseur disponible le moins cher
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Je dois protéger ma passerelle IA contre les accès non autorisés" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Lors de l'exposition d'une passerelle IA au réseau (LAN, VPS, Docker), toute personne possédant l'adresse peut consommer les jetons/quota du développeur. Sans protection, les API sont vulnérables aux utilisations abusives, aux injections rapides et aux abus. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Gestion des clés API** — Génération, rotation et portée par fournisseur avec une page `/dashboard/api-manager` dédiée +- **Autorisations au niveau du modèle** : restreindre les clés API à des modèles spécifiques (`openai/*`, modèles génériques), avec la bascule Autoriser tout/Restreindre +- **API Endpoint Protection** – exige une clé pour `/v1/models` et bloque des fournisseurs spécifiques de la liste +- **Auth Guard + Protection CSRF** — Toutes les routes du tableau de bord protégées avec le middleware `withAuth` + les jetons CSRF +- **Rate Limiter** — Limitation du débit par IP avec fenêtres configurables +- **Filtrage IP** – Liste autorisée/liste de blocage pour le contrôle d'accès +- **Prompt Injection Guard** — Nettoyage contre les modèles d'invite malveillants +- **Chiffrement AES-256-GCM** — Informations d'identification chiffrées au repos
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "Mon fournisseur est tombé en panne et j'ai perdu mon flux de codage" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Les fournisseurs d’IA peuvent devenir instables, renvoyer des erreurs 5xx ou atteindre des limites de débit temporaires. Si un développeur dépend d'un seul fournisseur, il est interrompu. Sans disjoncteurs, des tentatives répétées peuvent faire planter l’application. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Disjoncteur par fournisseur** — Ouverture/fermeture automatique avec seuils et temps de recharge configurables (Fermé/Ouvert/Semi-ouvert) +- **Exponential Backoff** — Délais progressifs entre les tentatives +- **Anti-Thundering Herd** — Protection mutex + sémaphore contre les tempêtes de nouvelles tentatives simultanées +- **Chaînes de secours combinées** — Si le fournisseur principal échoue, passe automatiquement à travers la chaîne sans intervention +- **Combo Circuit Breaker** – Désactive automatiquement les fournisseurs défaillants au sein d'une chaîne combo +- **Tableau de bord de santé** — Surveillance de la disponibilité, états des disjoncteurs, verrouillages, statistiques du cache, latence p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "La configuration de chaque outil d'IA est fastidieuse et répétitive" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Les développeurs utilisent Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Chaque outil nécessite une configuration différente (point de terminaison API, clé, modèle). La reconfiguration lors du changement de fournisseur ou de modèle est une perte de temps. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **CLI Tools Dashboard** — Page dédiée avec configuration en un clic pour Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — Génère `chatLanguageModels.json` pour VS Code avec sélection groupée de modèles +- **Assistant d'intégration** — Configuration guidée en 4 étapes pour les nouveaux utilisateurs +- **Un point de terminaison, tous les modèles** – Configurez `http://localhost:20128/v1` une fois, accédez à plus de 36 fournisseurs
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "Gérer les jetons OAuth de plusieurs fournisseurs est un enfer" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot — tous utilisent OAuth 2.0 avec des jetons expirant. Les développeurs doivent se réauthentifier constamment, gérer `client_secret is missing`, `redirect_uri_mismatch` et les pannes sur les serveurs distants. OAuth sur LAN/VPS est particulièrement problématique. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Actualisation automatique des jetons** : les jetons OAuth sont actualisés en arrière-plan avant leur expiration. +- **OAuth 2.0 (PKCE) intégré** — Flux automatique pour Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **Multi-Account OAuth** — Plusieurs comptes par fournisseur via l'extraction de jetons JWT/ID +- **OAuth LAN/Remote Fix** — Détection IP privée pour `redirect_uri` + mode URL manuel pour les serveurs distants +- **OAuth derrière Nginx** — Utilise `window.location.origin` pour la compatibilité du proxy inverse +- **Guide OAuth à distance** — Guide étape par étape pour les informations d'identification Google Cloud sur VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "Je ne sais pas combien je dépense ni où" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Les développeurs utilisent plusieurs fournisseurs payants mais n'ont pas de vue unifiée des dépenses. Chaque fournisseur dispose de son propre tableau de bord de facturation, mais il n'existe pas de vue consolidée. Les coûts inattendus peuvent s’accumuler. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Cost Analytics Dashboard** — Suivi des coûts par jeton et gestion du budget par fournisseur +- **Limites budgétaires par niveau** — Plafond de dépenses par niveau qui déclenche un repli automatique +- **Configuration de tarification par modèle** — Prix configurables par modèle +- **Statistiques d'utilisation par clé API** — Nombre de demandes et horodatage de la dernière utilisation par clé +- **Tableau de bord Analytics** — Cartes statistiques, tableau d'utilisation du modèle, tableau des fournisseurs avec taux de réussite et latence
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "Je ne peux pas diagnostiquer les erreurs et les problèmes dans les appels IA" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Lorsqu'un appel échoue, le développeur ne sait pas s'il s'agit d'une limite de débit, d'un jeton expiré, d'un format incorrect ou d'une erreur du fournisseur. Journaux fragmentés sur différents terminaux. Sans observabilité, le débogage est un essai et une erreur. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Tableau de bord des journaux unifiés** — 4 onglets : journaux de requêtes, journaux proxy, journaux d'audit, console +- **Console Log Viewer** — Visualiseur de style terminal en temps réel avec niveaux de code couleur, défilement automatique, recherche, filtre +- **Journaux du proxy SQLite** — Journaux persistants qui survivent aux redémarrages du serveur +- **Translator Playground** — 4 modes de débogage : Playground (traduction de format), Chat Tester (aller-retour), Test Bench (batch), Live Monitor (temps réel) +- **Demande de télémétrie** — latence p50/p95/p99 + traçage X-Request-Id +- **Journalisation basée sur des fichiers avec rotation** — L'intercepteur de console capture tout dans le journal JSON avec une rotation basée sur la taille
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "Le déploiement et la maintenance de la passerelle sont complexes" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +L'installation, la configuration et la maintenance d'un proxy IA dans différents environnements (local, VPS, Docker, cloud) demandent beaucoup de main-d'œuvre. Des problèmes tels que les chemins codés en dur, `EACCES` sur les répertoires, les conflits de ports et les versions multiplateformes ajoutent des frictions. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **Installation globale npm** — `npm install -g omniroute && omniroute` — terminée +- **Docker Multi-Platform** — AMD64 + ARM64 natif (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Profils Docker Compose** — `base` (pas d'outils CLI) et `cli` (avec Claude Code, Codex, OpenClaw) +- **Electron Desktop App** — Application native pour Windows/macOS/Linux avec barre d'état système, démarrage automatique et mode hors ligne +- **Mode Split-Port** — API et tableau de bord sur des ports séparés pour des scénarios avancés (proxy inverse, réseau de conteneurs) +- **Cloud Sync** – Configurez la synchronisation entre les appareils via Cloudflare Workers +- **Sauvegardes DB** — Sauvegarde, restauration, exportation et importation automatiques de tous les paramètres
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "L'interface est uniquement en anglais et mon équipe ne parle pas anglais" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Les équipes des pays non anglophones, notamment en Amérique latine, en Asie et en Europe, ont du mal à utiliser des interfaces uniquement en anglais. Les barrières linguistiques réduisent l’adoption et augmentent les erreurs de configuration. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Tableau de bord i18n — 30 langues** — Plus de 500 touches traduites, dont arabe, bulgare, danois, allemand, espagnol, finnois, français, hébreu, hindi, hongrois, indonésien, italien, japonais, coréen, malais, néerlandais, norvégien, polonais, portugais (PT/BR), roumain, russe, slovaque, suédois, thaï, ukrainien, vietnamien, chinois, philippin, anglais. +- **Support RTL** — Prise en charge de droite à gauche pour l'arabe et l'hébreu +- ** README multilingues ** — 30 traductions complètes de la documentation +- **Sélecteur de langue** — Icône de globe dans l'en-tête pour une commutation en temps réel
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "J'ai besoin de plus que du chat : j'ai besoin d'intégrations, d'images, d'audio" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +L'IA ne se limite pas à la réalisation de discussions. Les développeurs doivent générer des images, transcrire l'audio, créer des intégrations pour RAG, reclasser les documents et modérer le contenu. Chaque API a un point de terminaison et un format différents. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Embeddings** — `/v1/embeddings` avec 6 fournisseurs et plus de 9 modèles +- **Génération d'images** — `/v1/images/generations` avec 10 fournisseurs et plus de 20 modèles (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Texte vers vidéo** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) et SD WebUI +- **Texte en musique** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Transcription audio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Text-to-Speech** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + fournisseurs existants +- **Modérations** — `/v1/moderations` — Contrôles de sécurité du contenu +- **Reclassement** — `/v1/rerank` — Reclassement de la pertinence du document +- **API Réponses** — Prise en charge complète de `/v1/responses` pour le Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "Je n'ai aucun moyen de tester et de comparer la qualité des modèles" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Les développeurs veulent savoir quel modèle convient le mieux à leur cas d'utilisation (code, traduction, raisonnement) mais la comparaison manuelle est lente. Il n’existe aucun outil d’évaluation intégré. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Évaluations LLM** — Tests Golden Set avec 10 cas préchargés couvrant les salutations, les mathématiques, la géographie, la génération de code, la conformité JSON, la traduction, la démarque, le refus de sécurité +- **4 stratégies de correspondance** — `exact`, `contains`, `regex`, `custom` (fonction JS) +- **Banc de test Translator Playground** — Tests par lots avec plusieurs entrées et sorties attendues, comparaison entre fournisseurs +- **Chat Tester** — Aller-retour complet avec rendu de réponse visuelle +- **Live Monitor** — Flux en temps réel de toutes les requêtes transitant par le proxy
-📈 15. "I need to scale without losing performance" +📈 15. "J'ai besoin d'évoluer sans perdre en performances" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +À mesure que le volume de demandes augmente, sans mettre en cache les mêmes questions, cela génère des coûts en double. Sans idempotence, les demandes en double gaspillent le traitement. Les limites tarifaires par fournisseur doivent être respectées. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Cache sémantique** — Le cache à deux niveaux (signature + sémantique) réduit les coûts et la latence +- **Request Idempotency** — Fenêtre de déduplication de 5 s pour des requêtes identiques +- **Détection de limite de débit** — RPM par fournisseur, écart minimum et suivi simultané maximum +- **Limites de débit modifiables** — Valeurs par défaut configurables dans Paramètres → Résilience avec persistance +- **Cache de validation de clé API** — Cache à 3 niveaux pour les performances de production +- **Tableau de bord de santé avec télémétrie** — latence p50/p95/p99, statistiques de cache, disponibilité
-🤖 16. "I want to control model behavior globally" +🤖 16. "Je souhaite contrôler le comportement du modèle à l'échelle mondiale" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Les développeurs qui souhaitent que toutes les réponses soient dans une langue spécifique, avec un ton spécifique, ou qui souhaitent limiter les jetons de raisonnement. Configurer cela dans chaque outil/demande n’est pas pratique. -**How OmniRoute solves it:** +**Comment OmniRoute le résout :** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **Injection d'invite système** — Invite globale appliquée à toutes les requêtes +- **Thinking Budget Validation** — Contrôle d'allocation de jetons de raisonnement par requête (passthrough, automatique, personnalisé, adaptatif) +- **6 Stratégies de routage** – Stratégies globales qui déterminent la façon dont les demandes sont distribuées +- **Wildcard Router** — Les modèles `provider/*` sont acheminés dynamiquement vers n'importe quel fournisseur. +- **Combo Enable/Disable Toggle** — Basculez les combos directement depuis le tableau de bord +- **Provider Toggle** — Activer/désactiver toutes les connexions pour un fournisseur en un seul clic +- **Fournisseurs bloqués** — Exclure des fournisseurs spécifiques de la liste `/v1/models`
+
+🧰 17. "J'ai besoin d'outils MCP en tant que fonctionnalités de produit de première classe" + +De nombreuses passerelles IA exposent MCP uniquement en tant que détail d'implémentation caché. Les équipes ont besoin d’une couche opérationnelle visible et gérable. + +**Comment OmniRoute le résout :** + +- MCP apparaît dans l'onglet de navigation du tableau de bord et de protocole de point de terminaison +- Page de gestion MCP dédiée avec processus, outils, portées et audit +- Démarrage rapide intégré pour `omniroute --mcp` et intégration du client + +
+ +
+🧠 18. "J'ai besoin d'une orchestration A2A avec des chemins de tâches de synchronisation + flux" + +Les flux de travail des agents nécessitent à la fois des réponses directes et une exécution en continu de longue durée avec contrôle du cycle de vie. + +**Comment OmniRoute le résout :** + +- Point de terminaison A2A JSON-RPC (`POST /a2a`) avec `message/send` et `message/stream` +- Streaming SSE avec propagation de l'état terminal +- API de cycle de vie des tâches pour `tasks/get` et `tasks/cancel` + +
+ +
+🛰️ 19. "J'ai besoin d'un véritable état de santé du processus MCP, et non d'un état deviné" + +Les équipes opérationnelles doivent savoir si MCP est réellement actif, et pas seulement si une API est accessible. + +**Comment OmniRoute le résout :** + +- Fichier de battement de cœur d'exécution avec PID, horodatages, transport, nombre d'outils et mode de portée +- API de statut MCP combinant battement de coeur + activité récente +- Cartes d'état de l'interface utilisateur pour la fraîcheur des processus/disponibilité/battement de cœur + +
+ +
+📋 20. "J'ai besoin d'une exécution vérifiable de l'outil MCP" + +Lorsque les outils modifient la configuration ou déclenchent des actions opérationnelles, les équipes ont besoin d'une traçabilité médico-légale. + +**Comment OmniRoute le résout :** + +- Journalisation d'audit basée sur SQLite pour les appels d'outils MCP +- Filtres par outil, succès/échec, clé API et pagination +- Tableau d'audit du tableau de bord + points de terminaison de statistiques pour l'automatisation + +
+ +
+🔐 21. "J'ai besoin d'autorisations MCP limitées par intégration" + +Différents clients doivent avoir le moindre privilège d’accès aux catégories d’outils. + +**Comment OmniRoute le résout :** + +- 9 étendues MCP granulaires pour un accès contrôlé aux outils +- Application de la portée et visibilité dans l'interface utilisateur de gestion MCP +- Posture par défaut sûre pour les outils opérationnels + +
+ +
+⚙️ 22. "J'ai besoin de contrôles opérationnels sans redéploiement" + +Les équipes ont besoin de changements d'exécution rapides lors d'incidents ou d'événements de coûts. + +**Comment OmniRoute le résout :** + +- Activer le combo de commutation directement depuis le tableau de bord MCP +- Appliquer des profils de résilience à partir de packs de politiques prédéfinis +- Réinitialiser l'état du disjoncteur à partir du même panneau de commande + +
+ +
+🔄 23. "J'ai besoin d'une visibilité et d'une annulation en direct du cycle de vie des tâches A2A" + +Sans visibilité sur le cycle de vie, les incidents de tâches deviennent difficiles à trier. + +**Comment OmniRoute le résout :** + +- Liste des tâches/filtrage par état/compétence avec pagination +- Analyse approfondie des métadonnées, des événements et des artefacts des tâches +- Point de terminaison d'annulation de tâche et action de l'interface utilisateur avec confirmation + +
+ +
+🌊 24. "J'ai besoin de métriques de flux actif pour la charge A2A" + +Les flux de travail de streaming nécessitent une vision opérationnelle de la concurrence et des connexions en direct. + +**Comment OmniRoute le résout :** + +- Compteurs de flux actifs intégrés au statut A2A +- Horodatage de la dernière tâche et nombre par état +- Cartes de tableau de bord A2A pour la surveillance des opérations en temps réel + +
+ +
+🪪 25. "J'ai besoin d'une découverte d'agent standard pour les clients" + +Les clients et orchestrateurs externes ont besoin de métadonnées lisibles par machine pour l'intégration. + +**Comment OmniRoute le résout :** + +- Carte d'agent exposée à `/.well-known/agent.json` +- Capacités et compétences affichées dans l'interface utilisateur de gestion +- L'API de statut A2A inclut des métadonnées de découverte pour l'automatisation + +
+ +
+🧭 26. "J'ai besoin de la possibilité de découvrir le protocole dans le produit UX" + +Si les utilisateurs ne peuvent pas découvrir les surfaces de protocole, l’adoption et la qualité du support chutent. + +**Comment OmniRoute le résout :** + +- Entrées de la barre latérale pour MCP et A2A +- Onglet Protocoles de la page du point de terminaison avec démarrage rapide et état +- Liens depuis l'aperçu vers les tableaux de bord de gestion dédiés + +
+ +
+🧪 27. "J'ai besoin d'une validation de protocole de bout en bout avec de vrais clients" + +Les tests simulés ne suffisent pas pour valider la compatibilité des protocoles avant la publication. + +**Comment OmniRoute le résout :** + +- Suite E2E qui démarre l'application et utilise un véritable transport client MCP SDK +- Tests client A2A pour les flux de découverte, d'envoi, de streaming, d'obtention et d'annulation +- Vérifier les assertions par rapport aux API d'audit MCP et de tâches A2A + +
+ +
+📡 28. "J'ai besoin d'une observabilité unifiée sur toutes les interfaces" + +Le fractionnement de l'observabilité par protocole crée des angles morts et un MTTR plus long. + +**Comment OmniRoute le résout :** + +- Tableaux de bord/journaux/analyses unifiés dans un seul produit +- Santé + audit + télémétrie des demandes sur les couches OpenAI, MCP et A2A +- API opérationnelles pour le statut et l'automatisation + +
+ +
+💼 29. "J'ai besoin d'un environnement d'exécution pour l'orchestration proxy + outils + agent" + +L’exécution de nombreux services distincts augmente les coûts opérationnels et les modes de défaillance. + +**Comment OmniRoute le résout :** + +- Proxy compatible OpenAI, serveur MCP et serveur A2A dans une seule pile +- Authentification partagée, résilience, stockage de données et observabilité +- Modèle de politique cohérent sur toutes les surfaces d'interaction + +
+ +
+🚀 30. "Je dois expédier des flux de travail agentiques sans prolifération de codes adhésifs" + +Les équipes perdent de la vitesse lors de l’assemblage de plusieurs services et scripts ad hoc. + +**Comment OmniRoute le résout :** + +- Stratégie de point de terminaison unifiée pour les clients et les agents +- Interfaces utilisateur de gestion de protocole intégrées et chemins de validation de fumée +- Bases prêtes pour la production (sécurité, journalisation, résilience, sauvegarde) + +
+ +### Exemples de playbooks (cas d'utilisation intégrés) + +**Playbook A : Maximisez l'abonnement payant + sauvegarde bon marché** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B : pile de codage à coût nul** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C : chaîne de secours toujours active 24h/24 et 7j/7** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D : Opérations d'agent avec MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Démarrage rapide **1. Installer globalement :** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Application Bureau — Hors Ligne et Toujours Actif +## 🖥️ > 🆕 **NOUVEAU !** OmniRoute est maintenant disponible en tant qu'**application de bureau native** pour Windows, macOS et Linux. @@ -698,66 +973,26 @@ Traduction transparente entre les formats :
---- +## 🧪 Évaluations (Evals) -## 🎯 Cas d'utilisation +OmniRoute inclut un framework d'évaluation intégré pour tester la qualité des réponses LLM contre un golden set. Accès via **Analytics → Evals** dans le tableau de bord. -### Cas 1 : « J'ai un abonnement Claude Pro » +### Set intégré -**Problème :** Le quota expire inutilisé, limites de débit pendant le codage intensif +Le « OmniRoute Golden Set » préchargé contient 10 cas de test : -``` -Combo : "maximize-claude" - 1. cc/claude-opus-4-6 (utiliser l'abonnement au maximum) - 2. glm/glm-4.7 (backup économique quand le quota est épuisé) - 3. if/kimi-k2-thinking (fallback d'urgence gratuit) +- Salutations, mathématiques, géographie, génération de code +- Conformité format JSON, traduction, markdown +- Rejet de sécurité (contenu nocif), comptage, logique booléenne -Coût mensuel : 20 $ (abonnement) + ~5 $ (backup) = 25 $ au total -vs. 20 $ + atteindre les limites = frustration -``` +### Stratégies d'évaluation -### Cas 2 : « Je veux zéro coût » - -**Problème :** Impossible de payer des abonnements, besoin d'IA fiable pour coder - -``` -Combo : "free-forever" - 1. gc/gemini-3-flash (180K gratuits/mois) - 2. if/kimi-k2-thinking (illimité gratuit) - 3. qw/qwen3-coder-plus (illimité gratuit) - -Coût mensuel : 0 $ -Qualité : Modèles prêts pour la production -``` - -### Cas 3 : « Je dois coder 24/7, sans interruption » - -**Problème :** Délais serrés, ne peut pas se permettre de temps d'arrêt - -``` -Combo : "always-on" - 1. cc/claude-opus-4-6 (meilleure qualité) - 2. cx/gpt-5.2-codex (deuxième abonnement) - 3. glm/glm-4.7 (économique, reset quotidien) - 4. minimax/MiniMax-M2.1 (le moins cher, reset 5h) - 5. if/kimi-k2-thinking (gratuit illimité) - -Résultat : 5 niveaux de fallback = zéro temps d'arrêt -``` - -### Cas 4 : « Je veux l'IA GRATUITE dans OpenClaw » - -**Problème :** Besoin d'assistant IA dans les apps de messagerie, entièrement gratuit - -``` -Combo : "openclaw-free" - 1. if/glm-4.7 (illimité gratuit) - 2. if/minimax-m2.1 (illimité gratuit) - 3. if/kimi-k2-thinking (illimité gratuit) - -Coût mensuel : 0 $ -Accès via : WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Stratégie | Description | Exemple | +| ---------- | -------------------------------------------------------------- | -------------------------------- | +| `exact` | La sortie doit correspondre exactement | `"4"` | +| `contains` | La sortie doit contenir la sous-chaîne (insensible à la casse) | `"Paris"` | +| `regex` | La sortie doit correspondre au motif regex | `"1.*2.*3"` | +| `custom` | Fonction JS personnalisée retourne true/false | `(output) => output.length > 10` | --- @@ -1041,29 +1276,6 @@ Paramètres → Configuration API : --- -## 🧪 Évaluations (Evals) - -OmniRoute inclut un framework d'évaluation intégré pour tester la qualité des réponses LLM contre un golden set. Accès via **Analytics → Evals** dans le tableau de bord. - -### Golden Set intégré - -Le « OmniRoute Golden Set » préchargé contient 10 cas de test : - -- Salutations, mathématiques, géographie, génération de code -- Conformité format JSON, traduction, markdown -- Rejet de sécurité (contenu nocif), comptage, logique booléenne - -### Stratégies d'évaluation - -| Stratégie | Description | Exemple | -| ---------- | -------------------------------------------------------------- | -------------------------------- | -| `exact` | La sortie doit correspondre exactement | `"4"` | -| `contains` | La sortie doit contenir la sous-chaîne (insensible à la casse) | `"Paris"` | -| `regex` | La sortie doit correspondre au motif regex | `"1.*2.*3"` | -| `custom` | Fonction JS personnalisée retourne true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Dépannage
@@ -1119,7 +1331,7 @@ Le « OmniRoute Golden Set » préchargé contient 10 cas de test : --- -## 🛠️ Stack technologique +## 🛠️ - **Runtime** : Node.js 20+ - **Langage** : TypeScript 5.9 — **100% TypeScript** dans `src/` et `open-sse/` (v1.0.6) @@ -1150,17 +1362,7 @@ Le « OmniRoute Golden Set » préchargé contient 10 cas de test : --- -## 📧 Support - -> 💬 **Rejoignez notre communauté !** [Groupe WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Obtenez de l'aide, partagez des astuces et restez informé. - -- **Site web** : [omniroute.online](https://omniroute.online) -- **GitHub** : [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Issues** : [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp** : [Groupe communautaire](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Projet original** : [9router par decolua](https://github.com/decolua/9router) - ---- +## 🗺️ ## 👥 Contributeurs diff --git a/README.he.md b/README.he.md index 1e7ff04b1c..cf9cb67c7a 100644 --- a/README.he.md +++ b/README.he.md @@ -110,6 +110,35 @@ _חבר כל כלי IDE או CLI המופעל על ידי AI דרך OmniRoute - --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 למה OmniRoute? **הפסיקו לבזבז כסף ולהגיע לגבולות:** @@ -128,6 +157,18 @@ _חבר כל כלי IDE או CLI המופעל על ידי AI דרך OmniRoute - --- +## 📧 תמיכה + +> 💬 **הצטרפו לקהילה שלנו!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — קבל עזרה, שתף טיפים והישאר מעודכן. + +- **אתר**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **בעיות**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **וואטסאפ**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **פרויקט מקורי**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 איך זה עובד ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 מה OmniRoute פותר - 30 נקודות כאב אמיתיות ומקרי שימוש -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **כל מפתח המשתמש בכלי בינה מלאכותית מתמודד עם הבעיות הללו מדי יום.** OmniRoute נבנתה כדי לפתור את כולן - החל מחריפות עלויות ועד לחסימות אזוריות, מזרימות OAuth שבורות ועד פעולות פרוטוקול וצפייה ארגונית.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "אני משלם עבור מנוי יקר אבל עדיין מופרע על ידי גבולות" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +מפתחים משלמים $20-200 לחודש עבור Claude Pro, Codex Pro או GitHub Copilot. אפילו בתשלום, למכסה יש תקרה - 5 שעות שימוש, מגבלות שבועיות או מגבלות תעריף לדקה. סשן קידוד באמצע, הספק מפסיק להגיב והמפתח מאבד זרימה ופרודוקטיביות. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-Tier Fallback** - אם מכסת המנויים נגמרת, מפנה אוטומטית למפתח API → זול → חינם עם אפס התערבות ידנית +- **מעקב מכסות בזמן אמת** - מציג צריכת אסימונים בזמן אמת עם ספירה לאחור מאפס (5 שעות, יומי, שבועי) +- **תמיכה בריבוי חשבונות** - מספר חשבונות לכל ספק עם סבב אוטומטי - כאשר אחד אוזל, עובר לאחר +- **שילובים מותאמים אישית** - שרשראות ניתנות להתאמה אישית עם 6 אסטרטגיות איזון (מילוי ראשון, סיבוב סיבובי, P2C, אקראי, הכי פחות בשימוש, אופטימיזציה לעלות) +- **Codex Business Quotas** - ניטור מכסות סביבת עבודה עסקית/צוותית ישירות בלוח המחוונים
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "אני צריך להשתמש במספר ספקים אבל לכל אחד יש API אחר" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI משתמש בפורמט אחד, קלוד (אנתרופיק) משתמש בפורמט אחר, תאומים בנוסח אחר. אם מפתח רוצה לבחון דגמים מספקים שונים או לחלוף ביניהם, הוא צריך להגדיר מחדש SDK, לשנות נקודות קצה, להתמודד עם פורמטים לא תואמים. לספקים מותאמים אישית (FriendLI, NIM) יש נקודות קצה לא סטנדרטיות במודל. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **נקודת קצה מאוחדת** - `http://localhost:20128/v1` יחיד משמש כ-proxy עבור כל 36+ הספקים +- **תרגום פורמט** — אוטומטי ושקוף: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **חיטוי תגובה** - מסיר שדות לא סטנדרטיים (`x_groq`, `usage_breakdown`, `service_tier`) שמפרקים את OpenAI SDK v1.83+ +- **נורמליזציה של תפקידים** — ממירה `developer` → `system` עבור ספקים שאינם OpenAI; `system` → `user` עבור GLM/ERNIE +- **Think Tag Extraction** — מחלץ בלוקים `` מדגמים כמו DeepSeek R1 לתוך `reasoning_content` הסטנדרטי +- **פלט מובנה עבור מזל תאומים** — `json_schema` → `responseMimeType`/`responseSchema` המרה אוטומטית +- **`stream` ברירת המחדל היא `false`** - מתיישר עם מפרט OpenAI, הימנעות SSE בלתי צפוי ב- Python/Rust/Go SDK
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "ספק הבינה המלאכותית שלי חוסם את האזור/המדינה שלי" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +ספקים כמו OpenAI/Codex חוסמים גישה מאזורים גיאוגרפיים מסוימים. משתמשים מקבלים שגיאות כמו `unsupported_country_region_territory` במהלך חיבורי OAuth ו-API. זה מתסכל במיוחד עבור מפתחים ממדינות מתפתחות. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **תצורת פרוקסי בשלוש רמות** - פרוקסי ניתן להגדרה ב-3 רמות: גלובלית (כל התעבורה), לכל ספק (ספק אחד בלבד), ולכל חיבור/מפתח +- **תגי פרוקסי מקודדים בצבע** - אינדיקטורים חזותיים: 🟢 פרוקסי גלובלי, 🟡 פרוקסי ספק, 🔵 פרוקסי חיבור, תמיד מציג את ה-IP +- **החלפת אסימונים של OAuth באמצעות פרוקסי** - זרימת OAuth עוברת גם דרך ה-proxy, ופותרת את `unsupported_country_region_territory` +- **בדיקות חיבור באמצעות פרוקסי** - בדיקות חיבור משתמשות בפרוקסי המוגדר (לא עוד מעקף ישיר) +- **תמיכה SOCKS5** — תמיכה מלאה ב-Proxy SOCKS5 לניתוב יוצא +- **זיוף טביעות אצבע TLS** - טביעת אצבע TLS דמוית דפדפן באמצעות `wreq-js` כדי לעקוף את זיהוי הבוטים
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "אני רוצה להשתמש ב-AI לקידוד אבל אין לי כסף" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +לא כולם יכולים לשלם 20-200 $ לחודש עבור מנויי AI. סטודנטים, מפתחים ממדינות מתפתחות, חובבים ופרילנסרים צריכים גישה לדגמים איכותיים בעלות אפסית. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **ספקי שכבת חינם מובנית** - תמיכה מקורית עבור 100% ספקים בחינם: iFlow (8 דגמים ללא הגבלה), Qwen (3 דגמים ללא הגבלה), Kiro (קלוד בחינם), Gemini CLI (180K/חודש חינם) +- **שילובים בחינם בלבד** — שרשרת `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0 לחודש עם אפס זמן השבתה +- **קרדיטים חינם של NVIDIA NIM** - 1000 זיכויים חינם משולבים +- **אסטרטגיית אופטימיזציה לעלות** — אסטרטגיית ניתוב שבוחרת אוטומטית את הספק הזמין הזול ביותר
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "אני צריך להגן על שער הבינה המלאכותית שלי מגישה לא מורשית" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +בעת חשיפת שער AI לרשת (LAN, VPS, Docker), כל מי שיש לו את הכתובת יכול לצרוך את האסימונים/מכסה של המפתח. ללא הגנה, ממשקי API חשופים לשימוש לרעה, הזרקה מהירה וניצול לרעה. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **ניהול מפתחות API** - יצירה, סיבוב והיקף לכל ספק עם דף `/dashboard/api-manager` ייעודי +- **הרשאות ברמת הדגם** - הגבל מפתחות API לדגמים ספציפיים (`openai/*`, דפוסי תווים כלליים), עם החלפת מצב אפשר הכל/הגבל +- **הגנה על נקודות קצה של API** - דרוש מפתח עבור `/v1/models` וחסום ספקים ספציפיים מהרישום +- **Auth Guard + CSRF Protection** — כל מסלולי לוח המחוונים מוגנים באמצעות תוכנת ביניים `withAuth` + אסימוני CSRF +- ** מגביל קצב** - הגבלת קצב לפי IP עם חלונות הניתנים להגדרה +- **סינון IP** — רשימת הרשאות/רשימת חסימות לבקרת גישה +- **משמר הזרקה מהירה** - חיטוי נגד דפוסי הנחיה זדוניים +- **הצפנת AES-256-GCM** - אישורים מוצפנים בזמן מנוחה
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "הספק שלי נפל ואיבדתי את זרימת הקידוד" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +ספקי בינה מלאכותית עלולים להפוך לבלתי יציבים, להחזיר שגיאות 5xx או לפגוע במגבלות קצב זמניות. אם מפתח תלוי בספק יחיד, הם מופרעים. ללא מפסקים, נסיונות חוזרים ונשנים עלולים לקרוס את האפליקציה. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **מפסק מעגלים לכל ספק** - פתיחה/סגירה אוטומטית עם ספים ניתנים להגדרה והתקררות (סגור/פתוח/חצי פתוח) +- **גיבוי אקספוננציאלי** - עיכובים מתקדמים בניסיון חוזר +- **עדר נגד רעמים** - הגנה על מוטקס + סמפור מפני סופות ניסיונות חוזרות במקביל +- **שרשראות משולבות Fallback** - אם הספק הראשי נכשל, נופל אוטומטית בשרשרת ללא התערבות +- **מפסק משולב** - משבית אוטומטית ספקים כושלים בשרשרת משולבת +- **לוח מחוונים לבריאות** - ניטור זמן פעולה, מצבי מפסק זרם, נעילות, סטטיסטיקות מטמון, זמן אחזור p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "הגדרת כל כלי בינה מלאכותית היא מייגעת וחוזרת על עצמה" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +מפתחים משתמשים ב-Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... כל כלי צריך תצורה שונה (נקודת קצה, מפתח, מודל API). הגדרה מחדש בעת החלפת ספקים או דגמים היא בזבוז זמן. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **לוח המחוונים של CLI Tools** - דף ייעודי עם הגדרה בלחיצה אחת עבור Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — מייצר `chatLanguageModels.json` עבור קוד VS עם בחירת דגמים בכמות גדולה +- **אשף ההטמעה** — הגדרה מודרכת בת 4 שלבים למשתמשים ראשונים +- **נקודת קצה אחת, כל הדגמים** - הגדר את `http://localhost:20128/v1` פעם אחת, גש ל-36+ ספקים
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "ניהול אסימוני OAuth ממספר ספקים זה גיהנום" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot - כולם משתמשים ב-OAuth 2.0 עם אסימונים שפג תוקפם. מפתחים צריכים לבצע אימות מחדש כל הזמן, להתמודד עם `client_secret is missing`, `redirect_uri_mismatch` וכשלים בשרתים מרוחקים. OAuth ב-LAN/VPS בעייתי במיוחד. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **רענון אסימון אוטומטי** - אסימוני OAuth מתרעננים ברקע לפני פקיעת תוקף +- **OAuth 2.0 (PKCE) מובנה** - זרימה אוטומטית עבור Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- ** OAuth מרובה חשבונות** - מספר חשבונות לכל ספק באמצעות חילוץ אסימון JWT/ID +- **OAuth LAN/תיקון מרחוק** - זיהוי IP פרטי עבור `redirect_uri` + מצב כתובת URL ידני עבור שרתים מרוחקים +- **OAuth Behind Nginx** - משתמש ב-`window.location.origin` עבור תאימות פרוקסי הפוכה +- **מדריך OAuth מרחוק** - מדריך שלב אחר שלב לאישורי Google Cloud ב-VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "אני לא יודע כמה אני מוציא או איפה" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +מפתחים משתמשים במספר ספקים בתשלום אך אין להם ראייה אחידה של הוצאות. לכל ספק יש לוח מחוונים משלו לחיוב, אבל אין תצוגה מאוחדת. עלויות בלתי צפויות עלולות להיערם. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **לוח מחוונים של ניתוח עלויות** - מעקב אחר עלויות לפי אסימון וניהול תקציב לכל ספק +- **מגבלות תקציב לכל שכבה** - תקרת הוצאה לכל שכבה שמפעילה נפילה אוטומטית +- **תצורת תמחור לפי דגם** — מחירים הניתנים להגדרה לכל דגם +- **סטטיסטיקת שימוש לכל מפתח API** - ספירת בקשות וחותמת זמן אחרונה בשימוש לכל מפתח +- **לוח המחוונים של אנליטיקס** - כרטיסי סטטיסטיקה, טבלת שימוש במודל, טבלת ספקים עם אחוזי הצלחה והשהייה
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "אני לא יכול לאבחן שגיאות ובעיות בשיחות AI" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +כאשר שיחה נכשלת, ה-dev לא יודע אם זו הייתה מגבלת תעריף, אסימון שפג תוקפו, פורמט שגוי או שגיאת ספק. יומנים מפוצלים על פני מסופים שונים. ללא צפייה, איתור באגים הוא ניסוי וטעייה. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **לוח מחוונים של יומנים מאוחדים** - 4 כרטיסיות: יומני בקשות, יומני פרוקסי, יומני ביקורת, מסוף +- **מציג יומן מסוף** - מציג בזמן אמת בסגנון טרמינל עם רמות מקודדות צבע, גלילה אוטומטית, חיפוש, סינון +- **SQLite Proxy Logs** - יומנים מתמשכים ששורדים אתחול מחדש של השרת +- **מגרש משחקים לתרגום** - 4 מצבי ניפוי באגים: מגרש משחקים (תרגום פורמט), בודק צ'אט (הלוך ושוב), ספסל בדיקה (אצווה), צג חי (בזמן אמת) +- **Request Telemetry** — חביון p50/p95/p99 + X-Request-Id מעקב +- **רישום מבוסס קבצים עם סיבוב** - מיירט המסוף לוכד הכל ליומן JSON עם סיבוב מבוסס גודל
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "פריסה ותחזוקה של השער מורכבת" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +התקנה, הגדרה ותחזוקה של פרוקסי בינה מלאכותית בסביבות שונות (מקומי, VPS, Docker, ענן) היא עתירת עבודה. בעיות כמו נתיבים מקודדים קשיחים, `EACCES` על ספריות, התנגשויות יציאות ובנייה בין פלטפורמות מוסיפות חיכוך. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **התקנה גלובלית npm** — `npm install -g omniroute && omniroute` — בוצעה +- **Docker Multi-Platform** - מקורי AMD64 + ARM64 (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Docker Compose Profiles** — `base` (ללא כלי CLI) ו-`cli` (עם קוד קלוד, Codex, OpenClaw) +- **אפליקציית Electron Desktop** — אפליקציה מקורית עבור Windows/macOS/Linux עם מגש מערכת, הפעלה אוטומטית, מצב לא מקוון +- **מצב יציאות מפוצלות** - API ולוח מחוונים ביציאות נפרדות עבור תרחישים מתקדמים (פרוקסי הפוך, רשת קונטיינר) +- **Cloud Sync** - הגדרת סנכרון בין מכשירים באמצעות Cloudflare Workers +- **גיבויי DB** - גיבוי, שחזור, ייצוא וייבוא אוטומטי של כל ההגדרות
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "הממשק הוא באנגלית בלבד והצוות שלי לא מדבר אנגלית" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +צוותים במדינות שאינן דוברות אנגלית, במיוחד באמריקה הלטינית, אסיה ואירופה, נאבקים עם ממשקים באנגלית בלבד. מחסומי שפה מפחיתים את האימוץ ומגדילים את שגיאות התצורה. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **לוח המחוונים i18n — 30 שפות** — כל 500+ המקשים מתורגמים כולל ערבית, בולגרית, דנית, גרמנית, ספרדית, פינית, צרפתית, עברית, הינדית, הונגרית, אינדונזית, איטלקית, יפנית, קוריאנית, מלאית, הולנדית, נורווגית, פולנית, פורטוגזית (PT/BR), רומנית, רוסית, סלובקית, שוודית, תאילנדית, סלובקית, שוודית, סינית, סלובקית, וייטנאם +- **תמיכה ב-RTL** — תמיכה מימין לשמאל לערבית ולעברית +- ** README מרובים שפות** - 30 תרגומי תיעוד מלאים +- **בורר שפה** - סמל גלובוס בכותרת למעבר בזמן אמת
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "אני צריך יותר מצ'אט - אני צריך הטמעות, תמונות, אודיו" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +AI זה לא רק השלמת צ'אט. מפתחים צריכים ליצור תמונות, לתמלל אודיו, ליצור הטמעות עבור RAG, לדרג מחדש מסמכים ולתת תוכן. לכל API יש נקודת קצה ופורמט שונים. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **הטמעות** — `/v1/embeddings` עם 6 ספקים ו-9+ דגמים +- **יצירת תמונות** — `/v1/images/generations` עם 10 ספקים ו-20+ דגמים (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **טקסט לווידאו** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) ו-SD WebUI +- **טקסט למוזיקה** — `/v1/music/generations` — ComfyUI (פתוח אודיו יציב, MusicGen) +- **תמלול אודיו** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **טקסט לדיבור** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + ספקים קיימים +- **מודציות** — `/v1/moderations` — בדיקות בטיחות תוכן +- **דירוג מחדש** — `/v1/rerank` — דירוג מחדש של רלוונטיות המסמך +- **Responses API** — תמיכה מלאה ב-`/v1/responses` עבור Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "אין לי דרך לבדוק ולהשוות איכות בין דגמים" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +מפתחים רוצים לדעת איזה דגם הוא הטוב ביותר עבור מקרה השימוש שלהם - קוד, תרגום, הנמקה - אבל ההשוואה ידנית היא איטית. לא קיימים כלי eval משולבים. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **הערכות LLM** - בדיקת סט זהב עם 10 מקרים טעונים מראש המכסים ברכות, מתמטיקה, גיאוגרפיה, יצירת קוד, תאימות ל-JSON, תרגום, סימון, סירוב בטיחות +- **4 אסטרטגיות התאמה** — `exact`, `contains`, `regex`, `custom` (פונקציית JS) +- **ספסל בדיקה במגרש משחקים של מתרגם** - בדיקות אצווה עם מספר כניסות ויציאות צפויות, השוואה בין ספקים +- ** בודק צ'אט** - הלוך ושוב מלא עם עיבוד תגובה ויזואלית +- **מעקב חי** - זרם בזמן אמת של כל הבקשות הזורמות דרך ה-proxy
-📈 15. "I need to scale without losing performance" +📈 15. "אני צריך לשנות קנה מידה מבלי לאבד ביצועים" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +ככל שנפח הבקשות גדל, ללא שמירה במטמון, אותן שאלות מייצרות עלויות כפולות. ללא אימפוטנציה, עיבוד פסולת בקשות כפולות. יש לכבד את מגבלות התעריפים לכל ספק. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **מטמון סמנטי** - מטמון דו-שכבתי (חתימה + סמנטי) מפחית את העלות והשהייה +- **Request Idempotency** — חלון מניעת כפילויות של 5 שניות לבקשות זהות +- **זיהוי מגבלת תעריף** - RPM לכל ספק, פער מינימלי ומעקב מרבי בו-זמנית +- **מגבלות קצב הניתנות לעריכה** - ברירות מחדל הניתנות להגדרה בהגדרות ← חוסן עם התמדה +- **מטמון מפתח API** - מטמון בן 3 שכבות לביצועי ייצור +- **לוח מחוונים לבריאות עם טלמטריה** - זמן אחזור p50/p95/p99, סטטיסטיקות מטמון, זמן פעולה
-🤖 16. "I want to control model behavior globally" +🤖 16. "אני רוצה לשלוט בהתנהגות המודל באופן גלובלי" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +מפתחים שרוצים את כל התגובות בשפה ספציפית, עם טון ספציפי, או רוצים להגביל את אסימוני הנמקה. הגדרה זו בכל כלי/בקשה אינה מעשית. -**How OmniRoute solves it:** +**איך OmniRoute פותר את זה:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **הזרקת הנחיית מערכת** - הנחיה גלובלית חלה על כל הבקשות +- **אימות תקציב חשיבה** - בקרת הקצאת אסימונים בהיגיון לכל בקשה (מעבר, אוטומטי, מותאם אישית, אדפטיבי) +- **6 אסטרטגיות ניתוב** - אסטרטגיות גלובליות הקובעות את אופן הפצת הבקשות +- **נתב תווים כלליים** — תבניות `provider/*` מנותבות באופן דינמי לכל ספק +- **הפעל/השבת שילוב של החלפה** — החלף שילובים ישירות מלוח המחוונים +- **החלפת ספק** — הפעל/השבת את כל החיבורים עבור ספק בלחיצה אחת +- **ספקים חסומים** — אל תכלול ספקים ספציפיים מרשימת `/v1/models`
+
+🧰 17. "אני צריך כלי MCP כיכולות מוצר מהשורה הראשונה" + +שערי AI רבים חושפים את MCP רק כפרט יישום נסתר. צוותים צריכים שכבת פעולה גלויה וניתנת לניהול. + +**איך OmniRoute פותר את זה:** + +- MCP מופיע בכרטיסיית הניווט של לוח המחוונים ופרוטוקול נקודת הקצה +- דף ניהול MCP ייעודי עם תהליך, כלים, היקפים וביקורת +- התחלה מהירה מובנית עבור `omniroute --mcp` וכניסה ללקוח + +
+ +
+🧠 18. "אני צריך תזמור A2A עם נתיבי משימות סינכרון + זרם" + +זרימות עבודה של סוכן זקוקות הן לתשובות ישירות והן לביצוע זרימה ארוך טווח עם בקרת מחזור חיים. + +**איך OmniRoute פותר את זה:** + +- נקודת קצה A2A JSON-RPC (`POST /a2a`) עם `message/send` ו-`message/stream` +- הזרמת SSE עם הפצת מצב מסוף +- ממשקי API של מחזור חיים של משימות עבור `tasks/get` ו-`tasks/cancel` + +
+ +
+🛰️ 19. "אני צריך בריאות של תהליך MCP אמיתי, מצב לא מנחש" + +צוותים תפעוליים צריכים לדעת אם MCP באמת חי, לא רק אם ניתן להגיע ל-API. + +**איך OmniRoute פותר את זה:** + +- קובץ פעימות לב בזמן ריצה עם PID, חותמות זמן, תחבורה, ספירת כלים ומצב היקף +- MCP status API המשלב פעימות לב + פעילות אחרונה +- כרטיסי סטטוס ממשק משתמש עבור תהליך/זמן פעולה/רעננות פעימות לב + +
+ +
+📋 20. "אני צריך ביצוע כלי MCP שניתן לביקורת" + +כאשר כלים משתנים בתצורה או מפעילים פעולות מבצעיות, הצוותים זקוקים למעקב פורנזי. + +**איך OmniRoute פותר את זה:** + +- רישום ביקורת מגובה SQLite עבור קריאות לכלי MCP +- מסננים לפי כלי, הצלחה/כישלון, מפתח API ועימוד +- טבלת ביקורת לוח המחוונים + נקודות קצה סטטיסטיקות לאוטומציה + +
+ +
+🔐 21. "אני צריך הרשאות MCP בטווחים לכל אינטגרציה" + +ללקוחות שונים צריכה להיות גישה בעלת הרשאות מינימליות לקטגוריות כלים. + +**איך OmniRoute פותר את זה:** + +- 9 היקפי MCP גרגירים לגישה מבוקרת לכלי +- אכיפה של היקף ונראות בממשק המשתמש של ניהול MCP +- תנוחת ברירת מחדל בטוחה עבור כלי עבודה תפעוליים + +
+ +
+⚙️ 22. "אני צריך בקרות תפעוליות בלי לפרוס מחדש" + +צוותים זקוקים לשינויים מהירים בזמן ריצה במהלך אירועים או אירועי עלות. + +**איך OmniRoute פותר את זה:** + +- החלף הפעלה משולבת ישירות מלוח המחוונים של MCP +- החל פרופילי חוסן מחבילות מדיניות מוגדרות מראש +- אפס את מצב מפסק החשמל מאותו לוח פעולות + +
+ +
+🔄 23. "אני צריך נראות וביטול של מחזור החיים של משימות A2A בשידור חי" + +ללא נראות של מחזור חיים, אירועי משימות הופכים קשים לבדיקה. + +**איך OmniRoute פותר את זה:** + +- רישום משימות/סינון לפי מצב/מיומנות עם עימוד +- פירוט על מטא נתונים של משימות, אירועים וחפצים +- נקודת קצה לביטול משימות ופעולת ממשק משתמש עם אישור + +
+ +
+🌊 24. "אני צריך מדדי סטרימינג פעילים עבור טעינת A2A" + +זרימות עבודה בסטרימינג דורשות תובנה תפעולית לגבי חיבורים במקביל וחיבורים חיים. + +**איך OmniRoute פותר את זה:** + +- מוני זרמים פעילים משולבים בסטטוס A2A +- חותמת הזמן האחרונה של המשימה וספירות לכל מדינה +- כרטיסי לוח מחוונים A2A לניטור פעולות בזמן אמת + +
+ +
+🪪 25. "אני צריך גילוי סוכן סטנדרטי עבור לקוחות" + +לקוחות חיצוניים ומתזמרים זקוקים למטא-נתונים הניתנים לקריאת מכונה לצורך הצטרפות. + +**איך OmniRoute פותר את זה:** + +- כרטיס סוכן חשוף ב-`/.well-known/agent.json` +- יכולות ומיומנויות המוצגות בממשק המשתמש לניהול +- API לסטטוס A2A כולל מטא נתונים של גילוי לאוטומציה + +
+ +
+🧭 26. "אני צריך גילוי פרוטוקול ב-UX של המוצר" + +אם משתמשים לא יכולים לגלות משטחי פרוטוקול, האימוץ והתמיכה יורדים. + +**איך OmniRoute פותר את זה:** + +- ערכים בסרגל הצד עבור MCP ו-A2A +- כרטיסיית פרוטוקולים של דף נקודות קצה עם התחלה מהירה ומצב +- קישורים מסקירה כללית ללוחות ניהול ייעודיים + +
+ +
+🧪 27. "אני צריך אימות פרוטוקול מקצה לקצה עם לקוחות אמיתיים" + +בדיקות מדומה אינן מספיקות כדי לאמת תאימות פרוטוקול לפני השחרור. + +**איך OmniRoute פותר את זה:** + +- חבילת E2E המאתחלת אפליקציה ומשתמשת בהעברת לקוח MCP SDK אמיתית +- בדיקות לקוח A2A לאיתור, לשלוח, להזרים, לקבל ולבטל זרימות +- צלב הצהרות מול ביקורת MCP ומשימות A2A APIs + +
+ +
+📡 28. "אני צריך צפייה מאוחדת בכל הממשקים" + +פיצול צפיות לפי פרוטוקול יוצר כתמים עיוורים ו-MTTR ארוך יותר. + +**איך OmniRoute פותר את זה:** + +- לוחות מחוונים/יומנים/ניתוח מאוחדים במוצר אחד +- בריאות + ביקורת + טלמטריית בקשה על פני שכבות OpenAI, MCP ו-A2A +- APIs תפעוליים לסטטוס ואוטומציה + +
+ +
+💼 29. "אני צריך זמן ריצה אחד עבור פרוקסי + כלים + תזמור סוכן" + +הפעלת שירותים נפרדים רבים מגדילה את העלות התפעולית ואת מצבי הכשל. + +**איך OmniRoute פותר את זה:** + +- פרוקסי תואם OpenAI, שרת MCP ושרת A2A בערימה אחת +- אימות משותף, חוסן, מאגר נתונים וצפייה +- מודל מדיניות עקבי בכל משטחי האינטראקציה + +
+ +
+🚀 30. "אני צריך לשלוח זרימות עבודה סוכניות ללא התפשטות קוד דבק" + +צוותים מאבדים מהירות בעת תפירת שירותים ותסריטים אד-הוק מרובים. + +**איך OmniRoute פותר את זה:** + +- אסטרטגיית נקודות קצה אחידה עבור לקוחות וסוכנים +- ממשקי משתמש מובנים לניהול פרוטוקול ונתיבי אימות עשן +- יסודות מוכנים לייצור (אבטחה, רישום, חוסן, גיבוי) + +
+ +### ספרי הפעלה לדוגמה (מקרי שימוש משולבים) + +**Playbook A: מקסום מנוי בתשלום + גיבוי זול** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: ערימת קידוד בעלות אפסית** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: שרשרת ניצול תמיד 24/7** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: סוכן מבצע עם MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ התחלה מהירה **1. התקן ברחבי העולם:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +990,26 @@ OmniRoute כולל מגרש משחקי מתרגמים מובנה רב עוצמה
---- +## 🧪 הערכות (הערכות) -## 🎯 מקרי שימוש +OmniRoute כולל מסגרת הערכה מובנית לבדיקת איכות תגובת LLM מול סט מוזהב. גש אליו דרך **Analytics → Evals** בלוח המחוונים. -### מקרה 1: "יש לי מנוי לקלוד פרו" +### סט מוזהב מובנה -**בעיה:** תוקף המכסה פג ללא שימוש, מגבלות תעריף במהלך קידוד כבד +ה-"OmniRoute Golden Set" הנטען מראש מכיל 10 מקרי בדיקה המכסים: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- ברכות, מתמטיקה, גיאוגרפיה, יצירת קוד +- תאימות לפורמט JSON, תרגום, סימון +- סירוב בטיחותי (תוכן מזיק), ספירה, היגיון בוליאני -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### אסטרטגיות הערכה -### מקרה 2: "אני רוצה עלות אפס" - -**בעיה:** לא יכול להרשות לעצמו מנויים, צריך קידוד AI אמין - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### מקרה 3: "אני צריך קידוד 24/7, ללא הפרעות" - -**בעיה:** מועדים, לא יכול להרשות לעצמו זמן השבתה - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### מקרה 4: "אני רוצה AI בחינם ב-OpenClaw" - -**בעיה:** צריך עוזר בינה מלאכותית באפליקציות הודעות, בחינם לחלוטין - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| אסטרטגיה | תיאור | דוגמה | +| ---------- | ------------------------------------------ | -------------------------------- | +| `exact` | הפלט חייב להתאים בדיוק | `"4"` | +| `contains` | הפלט חייב להכיל תת מחרוזת (לא תלוי רישיות) | `"Paris"` | +| `regex` | הפלט חייב להתאים לדפוס הרקס | `"1.*2.*3"` | +| `custom` | פונקציית JS מותאמת מחזירה true/false | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 הערכות (הערכות) - -OmniRoute כולל מסגרת הערכה מובנית לבדיקת איכות תגובת LLM מול סט מוזהב. גש אליו דרך **Analytics → Evals** בלוח המחוונים. - -### סט מוזהב מובנה - -ה-"OmniRoute Golden Set" הנטען מראש מכיל 10 מקרי בדיקה המכסים: - -- ברכות, מתמטיקה, גיאוגרפיה, יצירת קוד -- תאימות לפורמט JSON, תרגום, סימון -- סירוב בטיחותי (תוכן מזיק), ספירה, היגיון בוליאני - -### אסטרטגיות הערכה - -| אסטרטגיה | תיאור | דוגמה | -| ---------- | ------------------------------------------ | -------------------------------- | -| `exact` | הפלט חייב להתאים בדיוק | `"4"` | -| `contains` | הפלט חייב להכיל תת מחרוזת (לא תלוי רישיות) | `"Paris"` | -| `regex` | הפלט חייב להתאים לדפוס הרקס | `"1.*2.*3"` | -| `custom` | פונקציית JS מותאמת מחזירה true/false | `(output) => output.length > 10` | - ---- - ## 🐛 פתרון בעיות
@@ -1132,7 +1344,7 @@ OmniRoute כולל מסגרת הערכה מובנית לבדיקת איכות ת - OmniRoute v1.0.6+ כולל אימות חוזר באמצעות השלמת צ'אט - ודא שכתובת האתר הבסיסית כוללת את הסיומת `/v1` -### 🔐 OAuth em Servidor Remoto (הגדרת OAuth מרחוק) +### 🔐 OAuth @@ -1227,7 +1439,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🛠️ Tech Stack +## 🛠️ - **זמן ריצה**: Node.js 18–22 LTS (⚠️ Node.js 24+ **לא נתמך** - `better-sqlite3` קבצים בינאריים מקוריים אינם תואמים) - **שפה**: TypeScript 5.9 — **100% TypeScript** על פני `src/` ו`open-sse/` (v1.0.6) @@ -1279,7 +1491,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🗺️ מפת דרכים +## 🗺️ ל-OmniRoute יש **210+ תכונות מתוכננות** לאורך שלבי פיתוח מרובים. להלן תחומי המפתח: @@ -1304,18 +1516,6 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 📧 תמיכה - -> 💬 **הצטרפו לקהילה שלנו!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — קבל עזרה, שתף טיפים והישאר מעודכן. - -- **אתר**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **בעיות**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **וואטסאפ**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **פרויקט מקורי**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 תורמים [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.hu.md b/README.hu.md index 746b5f7744..b21da026cc 100644 --- a/README.hu.md +++ b/README.hu.md @@ -110,6 +110,35 @@ _Csatlakoztasson bármilyen mesterséges intelligencia-alapú IDE-t vagy CLI-esz --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Miért az OmniRoute? **Ne pazarolja a pénzt, és ne lépje túl a limiteket:** @@ -128,6 +157,18 @@ _Csatlakoztasson bármilyen mesterséges intelligencia-alapú IDE-t vagy CLI-esz --- +## 📧 Támogatás + +> 💬 **Csatlakozzon közösségünkhöz!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Kérjen segítséget, ossza meg tippjeit, és naprakész legyen. + +- **Webhely**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Problémák**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Eredeti projekt**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Hogyan működik ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Mit old meg az OmniRoute – 30 valódi fájdalompont és használati eset -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Minden mesterséges intelligencia-eszközöket használó fejlesztő naponta szembesül ezekkel a problémákkal.** Az OmniRoute úgy készült, hogy ezeket mind megoldja – a költségtúllépésektől a regionális blokkokig, a megszakadt OAuth-folyamatoktól a protokollműveletekig és a vállalati megfigyelhetőségig.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Drága előfizetésért fizetek, de még mindig megszakítanak a korlátozások" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +A fejlesztők havi 20–200 dollárt fizetnek a Claude Pro, Codex Pro vagy GitHub Copilotért. A kvótának még fizetés esetén is van felső határa – 5 óra használat, heti limitek vagy percdíjkorlátok. A kódolási munkamenet közepén a szolgáltató leáll, és a fejlesztő elveszíti a folyamatot és a termelékenységet. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-Tier Fallback** – Ha az előfizetési kvóta kimerül, automatikusan átirányítja az API-kulcs → Olcsó → Ingyenes, manuális beavatkozás nélkül +- **Valós idejű kvótakövetés** – Valós időben mutatja a token felhasználást, visszaszámlálással (5 óra, napi, heti) +- **Több fiók támogatása** - Több fiók szolgáltatónként automatikus körváltással - ha az egyik elfogy, átvált a következőre +- **Egyéni kombók** — Testreszabható tartalék láncok 6 kiegyensúlyozási stratégiával (fill-first, round-robin, P2C, véletlenszerű, legkevésbé használt, költségoptimalizált) +- **Codex üzleti kvóták** — Üzleti/csapat munkaterület-kvóta figyelése közvetlenül az irányítópulton
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Több szolgáltatót kell használnom, de mindegyiknek más API" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +Az OpenAI egy formátumot használ, a Claude (Anthropic) egy másikat, a Gemini pedig egy másikat. Ha egy fejlesztő különböző szolgáltatók modelljeit szeretné tesztelni, vagy tartalékot szeretne közöttük, akkor újra kell konfigurálnia az SDK-kat, módosítania kell a végpontokat, és kezelnie kell az inkompatibilis formátumokat. Az egyéni szolgáltatók (FriendLI, NIM) nem szabványos modellvégpontokkal rendelkeznek. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Egységes végpont** - Egy `http://localhost:20128/v1` proxyként szolgál mind a 36+ szolgáltató számára +- **Formátumfordítás** - Automatikus és átlátható: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **Response Sanitization** – Eltávolítja azokat a nem szabványos mezőket (`x_groq`, `usage_breakdown`, `service_tier`), amelyek megszakítják az OpenAI SDK v1.83+ verzióját +- **Szerepek normalizálása** — `developer` → `system` konvertálása nem OpenAI szolgáltatók számára; `system` → `user` a GLM/ERNIE számára +- **Think Tag Extraction** – `` blokkokat bont ki olyan modellekből, mint a DeepSeek R1 szabványos `reasoning_content`-be +- **Strukturált kimenet a Gemini számára** — `json_schema` → `responseMimeType`/`responseSchema` automatikus átalakítás +- **`stream` az alapértelmezett `false`** - Az OpenAI specifikációhoz igazodik, elkerülve a váratlan SSE-t a Python/Rust/Go SDK-kban
-🌐 3. "My AI provider blocks my region/country" +🌐 3. „Az AI-szolgáltatóm blokkolja a régiómat/országomat” -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Az olyan szolgáltatók, mint az OpenAI/Codex, blokkolják a hozzáférést bizonyos földrajzi régiókból. A felhasználók OAuth- és API-kapcsolatok során olyan hibákat kapnak, mint az `unsupported_country_region_territory`. Ez különösen frusztráló a fejlődő országok fejlesztői számára. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **3-szintű proxykonfiguráció** – 3 szinten konfigurálható proxy: globális (teljes forgalom), szolgáltatónként (csak egy szolgáltató) és kapcsolatonként/kulcsonként +- **Színes proxy jelvények** - Vizuális jelzők: 🟢 globális proxy, 🟡 szolgáltató proxy, 🔵 kapcsolat proxy, mindig az IP-t mutatja +- **OAuth-tokencsere proxyn keresztül** — Az OAuth-folyamat a proxyn keresztül is megy, megoldva az `unsupported_country_region_territory` problémát +- **Kapcsolódási tesztek proxyn keresztül** - A csatlakozási tesztek a konfigurált proxyt használják (nincs többé közvetlen kiiktatás) +- **SOCKS5 támogatás** — Teljes SOCKS5 proxy támogatás a kimenő útválasztáshoz +- **TLS-ujjlenyomat-hamisítás** — Böngészőszerű TLS-ujjlenyomat az `wreq-js`-n keresztül a botészlelés megkerüléséhez
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "MI-t akarok használni kódoláshoz, de nincs pénzem" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Nem mindenki fizethet havi 20–200 dollárt az AI-előfizetésekért. A feltörekvő országok diákjainak, fejlesztőinek, amatőröknek és szabadúszóknak nulla költséggel kell hozzáférniük a minőségi modellekhez. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Beépített ingyenes szolgáltatók** - Natív támogatás 100%-ban ingyenes szolgáltatókhoz: iFlow (8 korlátlan modell), Qwen (3 korlátlan modell), Kiro (Claude ingyenes), Gemini CLI (180 000/hónap ingyenes) +- **Csak ingyenes kombók** — `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` lánc = 0 USD/hó nulla állásidővel +- **NVIDIA NIM ingyenes kreditek** – 1000 ingyenes kredit integrálva +- **Költségoptimalizált stratégia** — Útválasztási stratégia, amely automatikusan a legolcsóbb elérhető szolgáltatót választja
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Meg kell védenem a mesterséges intelligencia átjárómat a jogosulatlan hozzáféréstől" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Ha AI átjárót teszünk ki a hálózatnak (LAN, VPS, Docker), a cím birtokában bárki felhasználhatja a fejlesztő tokenjeit/kvótáját. Védelem nélkül az API-k sebezhetőek a visszaélésekkel, azonnali befecskendezéssel és visszaélésekkel szemben. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **API-kulcskezelés** — Generálás, rotáció és hatókör szolgáltatónként egy dedikált `/dashboard/api-manager`-oldallal +- **Modellszintű engedélyek** - API-kulcsok korlátozása adott modellekre (`openai/*`, helyettesítő karakteres minták), az Összes engedélyezése/Korlátozása kapcsolóval +- **API Endpoint Protection** — Kulcs szükséges az `/v1/models` számára, és bizonyos szolgáltatók letiltása a listáról +- **Auth Guard + CSRF védelem** - Minden irányítópult-útvonal `withAuth` köztes szoftverrel + CSRF tokenekkel védett +- **Rate Limiter** — IP-nkénti sebességkorlátozás konfigurálható ablakokkal +- **IP-szűrés** — Engedélyezési lista/blokkolólista a hozzáférés-vezérléshez +- **Prompt Injection Guard** – fertőtlenítés a rosszindulatú felszólítási minták ellen +- **AES-256-GCM titkosítás** - A hitelesítő adatok nyugalmi állapotban titkosítva
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "A szolgáltatóm leállt, és elvesztettem a kódolási folyamatomat" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Az AI-szolgáltatók instabillá válhatnak, 5xx-es hibákat adnak vissza, vagy elérhetik az ideiglenes sebességkorlátokat. Ha egy fejlesztő egyetlen szolgáltatótól függ, akkor megszakad. Megszakítók nélkül az ismételt újrapróbálkozások összeomolhatják az alkalmazást. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Megszakító szolgáltatónként** - Automatikus nyitás/zárás konfigurálható küszöbértékekkel és lehűtéssel (zárt/nyitott/félig nyitott) +- **Exponenciális visszalépés** — Progresszív újrapróbálkozási késések +- **Mennydörgés elleni csorda** - Mutex + szemafor védelem az egyidejű újrapróbálkozási viharok ellen +- **Kombinált tartalék láncok** – Ha az elsődleges szolgáltató meghibásodik, automatikusan, beavatkozás nélkül átesik a láncon +- **Combo Circuit Breaker** – Automatikusan letiltja a hibás szolgáltatókat a kombinált láncon belül +- **Egészségügyi irányítópult** — Üzemidő-figyelés, áramkör-megszakító állapotok, zárolások, gyorsítótár-statisztika, p50/p95/p99 késleltetés
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "Az egyes AI-eszközök konfigurálása fárasztó és ismétlődő" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +A fejlesztők Cursort, Claude Code-ot, Codex CLI-t, OpenClaw-ot, Gemini CLI-t, Kilo Code-ot használnak... Minden eszköznek más konfigurációra van szüksége (API végpont, kulcs, modell). Az újrakonfigurálás szolgáltató- vagy modellváltáskor időpocsékolás. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **CLI Tools Dashboard** - Dedikált oldal egykattintásos beállítással a Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline számára +- **GitHub másodpilóta konfigurációs generátor** — `chatLanguageModels.json` kódot generál VS kódhoz tömeges modellválasztással +- **Bevezető varázsló** – Irányított 4 lépéses beállítás első felhasználók számára +- **Egy végpont, minden modell** — Az `http://localhost:20128/v1` egyszeri konfigurálása, 36+ szolgáltató elérése
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "A több szolgáltatótól származó OAuth-tokenek kezelése pokol" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot – mindegyik az OAuth 2.0-t használja lejáró tokenekkel. A fejlesztőknek folyamatosan újra kell hitelesíteniük, kezelniük kell az `client_secret is missing`, `redirect_uri_mismatch` és a távoli szerverek hibáit. Az OAuth a LAN/VPS-en különösen problémás. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Automatikus tokenfrissítés** - Az OAuth-tokenek a háttérben frissülnek a lejárat előtt +- **OAuth 2.0 (PKCE) beépített** - Automatikus áramlás Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow számára +- **Multi-Account OAuth** - Több fiók szolgáltatónként a JWT/ID token kivonattal +- **OAuth LAN/Távoli javítás** - Privát IP-észlelés `redirect_uri`-hez + kézi URL mód távoli szerverekhez +- **OAuth az Nginx mögött** - `window.location.origin`-t használ a fordított proxy kompatibilitás érdekében +- **Távoli OAuth útmutató** – Lépésről lépésre útmutató a Google Cloud hitelesítő adataihoz VPS/Docker rendszeren
-📊 9. "I don't know how much I'm spending or where" +📊 9. "Nem tudom, mennyit költök vagy hova" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +A fejlesztők több fizetős szolgáltatót használnak, de nincs egységes nézetük a kiadásokról. Minden szolgáltató saját számlázási irányítópulttal rendelkezik, de nincs összevont nézet. A váratlan költségek felhalmozódhatnak. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Költségelemzési irányítópult** – Tokenenkénti költségkövetés és költségkeret-kezelés szolgáltatónként +- **Költségkeret-korlátok rétegenként** - Költési felső határ szintenként, amely automatikus visszalépést vált ki +- **Modellenkénti árképzés** - Konfigurálható árak modellenként +- **Használati statisztika API-kulcsonként** — A kérések száma és az utoljára használt időbélyeg kulcsonként +- **Analytics Dashboard** — Statisztikai kártyák, modellhasználati diagram, szolgáltatói táblázat sikerarányokkal és késleltetéssel
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "Nem tudom diagnosztizálni a hibákat és problémákat az AI-hívásoknál" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Ha egy hívás meghiúsul, a fejlesztő nem tudja, hogy sebességkorlátozás, lejárt token, rossz formátum vagy szolgáltatói hiba volt-e. Töredezett naplók különböző terminálokon. Megfigyelhetőség nélkül a hibakeresés próba és hiba. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Egységes naplók irányítópultja** - 4 lap: Kérelemnaplók, Proxynaplók, Auditnaplók, Konzol +- **Konzolnapló-nézegető** — Valós idejű terminál stílusú megjelenítő színkódolt szintekkel, automatikus görgetés, keresés, szűrés +- **SQLite proxynaplók** – Állandó naplók, amelyek túlélik a szerver újraindítását +- **Translator Playground** – 4 hibakeresési mód: Playground (formátum fordítás), Chat Tester (oda-vissza út), Tesztpad (kötegelt), Élő monitor (valós idejű) +- **Request Telemetria** – p50/p95/p99 késleltetés + X-Request-Id nyomkövetés +- **Fájlalapú naplózás elforgatással** - A konzolelfogó mindent JSON-naplóba rögzít méretalapú elforgatással
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "Az átjáró telepítése és karbantartása összetett" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Az AI-proxy telepítése, konfigurálása és karbantartása különböző környezetekben (helyi, VPS, Docker, felhő) munkaigényes. Az olyan problémák, mint a keménykódolt elérési utak, az `EACCES` a könyvtárakon, a portütközések és a többplatformos buildek súrlódást okoznak. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **npm globális telepítés** — `npm install -g omniroute && omniroute` — kész +- **Docker Multi-Platform** – AMD64 + ARM64 natív (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Docker Compose Profiles** — `base` (nincs CLI-eszközök) és `cli` (Claude Code-al, Codex-szel, OpenClaw-val) +- **Electron Desktop App** – Natív alkalmazás Windows/macOS/Linux rendszerhez rendszertálcával, automatikus indítással, offline móddal +- **Split-Port Mode** – API és irányítópult külön portokon haladó forgatókönyvekhez (fordított proxy, konténerhálózat) +- **Cloud Sync** – Szinkronizálás konfigurálása az eszközök között a Cloudflare Workers segítségével +- **DB biztonsági mentések** — Az összes beállítás automatikus biztonsági mentése, visszaállítása, exportálása és importálása
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "A felület csak angol nyelvű, és a csapatom nem beszél angolul" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +A nem angol nyelvű országokban, különösen Latin-Amerikában, Ázsiában és Európában működő csapatok csak angol nyelvű felületekkel küszködnek. A nyelvi akadályok csökkentik az átvételt és növelik a konfigurációs hibákat. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- ** Irányítópult i18n – 30 nyelv** – Mind az 500+ billentyű lefordítva, beleértve arab, bolgár, dán, német, spanyol, finn, francia, héber, hindi, magyar, indonéz, olasz, japán, koreai, maláj, holland, norvég, lengyel, portugál (PT/BR), román, thai, orosz, szlovák, svéd, filippínó, angol, thai, orosz, kínai, filippínó +- **RTL támogatás** – Jobbról balra haladó arab és héber nyelv támogatása +- **Többnyelvű README-k** — 30 teljes dokumentáció fordítás +- **Nyelvválasztó** — Globe ikon a fejlécben a valós idejű váltáshoz
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "Többre van szükségem, mint csevegésre – beágyazásra, képekre, hangra van szükségem" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +Az AI nem csak a csevegés befejezése. A fejlesztőknek képeket kell generálniuk, hangot kell átírniuk, beágyazást kell létrehozniuk a RAG számára, át kell sorolniuk a dokumentumokat, és moderálniuk kell a tartalmat. Minden API más végponttal és formátummal rendelkezik. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Beágyazások** — `/v1/embeddings` 6 szolgáltatóval és 9+ modellel +- **Képgenerálás** — `/v1/images/generations` 10 szolgáltatóval és 20+ modellel (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Text-to-Video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) és SD WebUI +- **Text-to-Music** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Audio átírás** - `/v1/audio/transcriptions` - Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Szövegfelolvasó** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + meglévő szolgáltatók +- **Moderálás** — `/v1/moderations` — Tartalombiztonsági ellenőrzések +- **Átsorolás** — `/v1/rerank` — Dokumentumreleváns átsorolás +- **Responses API** - Teljes `/v1/responses` támogatás a Codexhez
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "Nincs módom tesztelni és összehasonlítani a minőséget a különböző modellek között" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +A fejlesztők szeretnék tudni, hogy melyik modell a legjobb az ő használati esetükben – kód, fordítás, érvelés –, de a manuális összehasonlítás lassú. Nincsenek integrált eval eszközök. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **LLM-értékelések** — Arany készlet tesztelése 10 előre betöltött esettel, beleértve az üdvözlést, a matematikát, a földrajzot, a kódgenerálást, a JSON-megfelelőséget, a fordítást, a leértékelést, a biztonsági megtagadást +- **4 egyezési stratégia** — `exact`, `contains`, `regex`, `custom` (JS funkció) +- **Translator Playground Test Bench** - Kötegelt tesztelés több bemenettel és várható kimenettel, szolgáltatók közötti összehasonlítás +- **Csevegés tesztelő** - Teljes körút vizuális válaszmegjelenítéssel +- **Élő monitor** – Valós idejű adatfolyam a proxyn keresztül folyó összes kérésről
-📈 15. "I need to scale without losing performance" +📈 15. "A teljesítmény elvesztése nélkül kell méreteznem" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +A kérelmek mennyiségének növekedésével ugyanazok a kérdések a gyorsítótárazás nélkül duplikált költségeket generálnak. Idempotencia nélkül a duplikált hulladékfeldolgozási kérelmek. A szolgáltatónkénti díjkorlátokat be kell tartani. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Szemantikus gyorsítótár** – A kétszintű gyorsítótár (aláírás + szemantikai) csökkenti a költségeket és a késleltetést +- **Idempotency kérése** – 5 másodperces deduplikációs ablak azonos kérések esetén +- **Drátakorlát észlelése** – Szolgáltatónkénti RPM, minimális rés és maximális egyidejű követés +- **Szerkeszthető sebességkorlátok** - Konfigurálható alapértékek a Beállítások → Kitartással ellenálló képesség menüpontban +- **API Key Validation Cache** – 3-szintű gyorsítótár az éles teljesítményhez +- **Egészségügyi irányítópult telemetriával** — p50/p95/p99 késleltetés, gyorsítótár statisztika, üzemidő
-🤖 16. "I want to control model behavior globally" +🤖 16. "Globálisan szeretném szabályozni a modell viselkedését" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Azok a fejlesztők, akik minden választ egy adott nyelven, egy adott hangnemben szeretnének, vagy korlátozni szeretnék az érvelési tokeneket. Ennek konfigurálása minden eszközben/kérelemben nem praktikus. -**How OmniRoute solves it:** +**Hogyan oldja meg az OmniRoute:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **Rendszerprompt Injection** — Globális prompt minden kérelemre vonatkozik +- **A költségkeret átgondolásának ellenőrzése** – Indoklási token-kiosztás ellenőrzése kérésenként (áthaladó, automatikus, egyéni, adaptív) +- **6 Útválasztási stratégia** – Globális stratégiák, amelyek meghatározzák a kérések elosztását +- **Wildcard Router** — `provider/*` minták dinamikusan továbbítanak bármely szolgáltatóhoz +- **Kombinációs engedélyezés/letiltás váltás** - A kombók váltása közvetlenül az irányítópultról +- **Provider Toggle** — Egy szolgáltató összes kapcsolatának engedélyezése/letiltása egyetlen kattintással +- **Letiltott szolgáltatók** - Adott szolgáltatók kizárása az `/v1/models` listáról
+
+🧰 17. "MCP eszközökre van szükségem, mint első osztályú termékképességekre" + +Sok mesterséges intelligencia-átjáró csak rejtett megvalósítási részletként teszi közzé az MCP-t. A csapatoknak látható, kezelhető műveleti rétegre van szükségük. + +**Hogyan oldja meg az OmniRoute:** + +- Az MCP megjelenik az irányítópult navigációs és végponti protokoll lapján +- Dedikált MCP-kezelési oldal folyamatokkal, eszközökkel, hatókörökkel és audittal +- Beépített gyorsindítás az `omniroute --mcp` és a kliens beépítéséhez + +
+ +
+🧠 18. "A2A hangszerelésre van szükségem szinkronizálással + adatfolyam feladatútvonalak" + +Az ügynöki munkafolyamatokhoz közvetlen válaszokra és hosszú távú, streamelt végrehajtásra van szükség életciklus-vezérléssel. + +**Hogyan oldja meg az OmniRoute:** + +- A2A JSON-RPC végpont (`POST /a2a`) `message/send` és `message/stream` +- SSE streaming terminál állapot terjesztéssel +- Feladat életciklus API-k `tasks/get` és `tasks/cancel` + +
+ +
+🛰️ 19. "Valódi MCP folyamatállapotra van szükségem, nem kitalált állapotra" + +Az operatív csapatoknak tudniuk kell, hogy az MCP valóban életben van-e, nem csak azt, hogy egy API elérhető-e. + +**Hogyan oldja meg az OmniRoute:** + +- Futásidejű szívverés fájl PID-vel, időbélyegekkel, szállítással, szerszámszámmal és hatókör móddal +- MCP állapot API, amely kombinálja a szívverést + a legutóbbi tevékenységet +- UI állapotkártyák a folyamat/üzemidő/szívverés frissességéhez + +
+ +
+📋 20. "Kivizsgálható MCP-eszköz végrehajtásra van szükségem" + +Amikor az eszközök módosítják a konfigurációt vagy működési műveleteket indítanak el, a csapatoknak kriminalisztikai nyomon követhetőségre van szükségük. + +**Hogyan oldja meg az OmniRoute:** + +- SQLite-alapú audit naplózás MCP-eszközhívásokhoz +- Szűrések eszköz, siker/kudarc, API-kulcs és oldalszámozás szerint +- Irányítópult audit táblázat + statisztikai végpontok az automatizáláshoz + +
+ +
+🔐 21. "Hatókörű MCP-engedélyekre van szükségem integrációnként" + +A különböző ügyfeleknek a legkevesebb jogosultsággal kell rendelkezniük az eszközkategóriákhoz. + +**Hogyan oldja meg az OmniRoute:** + +- 9 szemcsés MCP hatókör az ellenőrzött szerszámhozzáféréshez +- Hatályérvényesítés és láthatóság az MCP-kezelő felületen +- Biztonságos alaphelyzet az üzemi szerszámokhoz + +
+ +
+⚙️ 22. "Üzemeltetési vezérlőkre van szükségem átcsoportosítás nélkül" + +A csapatoknak gyors futásidejű változtatásokra van szükségük incidensek vagy költségesemények során. + +**Hogyan oldja meg az OmniRoute:** + +- A kombinált aktiválás váltása közvetlenül az MCP műszerfaláról +- Rugalmassági profilok alkalmazása előre meghatározott házirend-csomagokból +- Állítsa vissza a megszakító állapotát ugyanarról a kezelőpanelről + +
+ +
+🔄 23. "Szükségem van élő A2A feladatok életciklusának láthatóságára és törlésére" + +Az életciklus láthatósága nélkül a feladat-incidensek nehezen osztályozhatók. + +**Hogyan oldja meg az OmniRoute:** + +- Feladatok listázása/szűrés állapot/készség szerint oldalszámozással +- A feladatok metaadatainak, eseményeinek és műtermékeinek részletezése +- Feladat törlési végpont és felhasználói felület művelet megerősítéssel + +
+ +
+🌊 24. "Aktív adatfolyam-metrikákra van szükségem A2A terheléshez" + +A streamelési munkafolyamatok működési betekintést igényelnek a párhuzamosság és az élő kapcsolatok terén. + +**Hogyan oldja meg az OmniRoute:** + +- Az A2A állapotba integrált aktív folyamszámlálók +- Utolsó feladat időbélyegzője és állapotonkénti száma +- A2A műszerfalkártyák a valós idejű műveletek figyeléséhez + +
+ +
+🪪 25. "Szabványos ügynökfelderítésre van szükségem az ügyfelek számára" + +A külső klienseknek és hangszerelőknek géppel olvasható metaadatokra van szükségük a bevezetéshez. + +**Hogyan oldja meg az OmniRoute:** + +- Az ügynökkártya az `/.well-known/agent.json` címen látható +- A menedzsment felületen látható képességek és készségek +- Az A2A állapot API felfedezési metaadatokat tartalmaz az automatizáláshoz + +
+ +
+🧭 26. "Protokoll felfedezhetőségre van szükségem az UX termékben" + +Ha a felhasználók nem fedezik fel a protokollfelületeket, az elfogadás és a támogatás minősége csökken. + +**Hogyan oldja meg az OmniRoute:** + +- Oldalsáv bejegyzések MCP és A2A számára +- Végpont oldal Protokollok lap gyorsindítással és állapottal +- Linkek az áttekintésből a dedikált felügyeleti irányítópultokhoz + +
+ +
+🧪 27. "Végponttól végpontig terjedő protokoll-érvényesítésre van szükségem valós kliensekkel" + +A próbatesztek nem elegendőek a protokoll-kompatibilitás ellenőrzéséhez a kiadás előtt. + +**Hogyan oldja meg az OmniRoute:** + +- E2E csomag, amely elindítja az alkalmazást, és valódi MCP SDK kliens szállítást használ +- Az A2A kliens teszteli az áramlások felfedezését, küldését, streamingjét, lekérését és megszakítását +- Az állítások keresztellenőrzése az MCP audit és az A2A feladatok API-jával szemben + +
+ +
+📡 28. "Egységes megfigyelhetőségre van szükségem minden interfészen" + +A megfigyelhetőség protokoll szerinti felosztása vakfoltokat és hosszabb MTTR-t hoz létre. + +**Hogyan oldja meg az OmniRoute:** + +- Egységes irányítópultok/naplók/analytics egy termékben +- Egészség + audit + kérés telemetria OpenAI, MCP és A2A rétegeken keresztül +- Működési API-k az állapothoz és az automatizáláshoz + +
+ +
+💼 29. "Egy futási időre van szükségem a proxyhoz + eszközökhöz + ügynök hangszereléshez" + +Számos külön szolgáltatás futtatása növeli a működési költségeket és a hibamódokat. + +**Hogyan oldja meg az OmniRoute:** + +- OpenAI-kompatibilis proxy, MCP szerver és A2A szerver egy veremben +- Megosztott hitelesítés, rugalmasság, adattárolás és megfigyelhetőség +- Konzisztens politikai modell az összes interakciós felületen + +
+ +
+🚀 30. "Az ügynöki munkafolyamatokat ragasztókód szétszórása nélkül kell szállítanom" + +A csapatok veszítenek sebességükből, amikor több ad-hoc szolgáltatást és szkriptet illesztenek össze. + +**Hogyan oldja meg az OmniRoute:** + +- Egységes végpont stratégia az ügyfelek és ügynökök számára +- Beépített protokollkezelő felhasználói felületek és füstellenőrzési útvonalak +- Gyártásra kész alapok (biztonság, naplózás, rugalmasság, biztonsági mentés) + +
+ +### Példa forgatókönyvekre (integrált használati esetek) + +**A játékkönyv: Maximalizálja a fizetett előfizetést + olcsó biztonsági mentés** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: Zéró költségű kódolási verem** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: 24/7 mindig bekapcsolt tartalék lánc** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**D játékkönyv: Az ügynök MCP + A2A-val működik** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Gyors kezdés **1. Globális telepítés:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +990,26 @@ Az OmniRoute egy erőteljes beépített fordítói játszóteret tartalmaz **4 m
---- +## 🧪 Értékelések (Evals) -## 🎯 Használati esetek +Az OmniRoute egy beépített értékelési keretrendszert tartalmaz az LLM-válasz minőségének tesztelésére egy aranykészlettel összehasonlítva. Az irányítópult **Analytics → Evals** menüpontjában érheti el. -### 1. eset: "Claude Pro előfizetésem van" +### Beépített arany készlet -**Probléma:** A kvóta lejár, kihasználatlanul, sebességkorlátozások erős kódolás közben +Az előre feltöltött "OmniRoute Golden Set" 10 tesztesetet tartalmaz, amelyek lefedik: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Üdvözlet, matematika, földrajz, kódgenerálás +- JSON formátum megfelelés, fordítás, leértékelés +- Biztonsági elutasítás (káros tartalom), számlálás, logikai logika -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Értékelési stratégiák -### 2. eset: "Nulla költséget akarok" - -**Probléma:** Nem engedheti meg magának az előfizetést, megbízható mesterséges intelligencia kódolásra van szüksége - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### 3. eset: "24 órás kódolásra van szükségem, megszakítás nélkül" - -**Probléma:** Határidők, nem engedheti meg magának az állásidőt - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### 4. eset: "INGYENES AI-t akarok az OpenClawban" - -**Probléma:** AI-asszisztens szükséges az üzenetküldő alkalmazásokhoz, teljesen ingyenes - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Stratégia | Leírás | Példa | +| ---------- | ------------------------------------------------------------------------------------------------- | -------------------------------- | +| `exact` | A kimenetnek pontosan meg kell egyeznie | `"4"` | +| `contains` | A kimenetnek tartalmaznia kell részkarakterláncot (a kis- és nagybetűk nem különböznek egymástól) | `"Paris"` | +| `regex` | A kimenetnek meg kell egyeznie a regex mintával | `"1.*2.*3"` | +| `custom` | Az egyéni JS függvény igaz/hamis | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 Értékelések (Evals) - -Az OmniRoute egy beépített értékelési keretrendszert tartalmaz az LLM-válasz minőségének tesztelésére egy aranykészlettel összehasonlítva. Az irányítópult **Analytics → Evals** menüpontjában érheti el. - -### Beépített arany készlet - -Az előre feltöltött "OmniRoute Golden Set" 10 tesztesetet tartalmaz, amelyek lefedik: - -- Üdvözlet, matematika, földrajz, kódgenerálás -- JSON formátum megfelelés, fordítás, leértékelés -- Biztonsági elutasítás (káros tartalom), számlálás, logikai logika - -### Értékelési stratégiák - -| Stratégia | Leírás | Példa | -| ---------- | ------------------------------------------------------------------------------------------------- | -------------------------------- | -| `exact` | A kimenetnek pontosan meg kell egyeznie | `"4"` | -| `contains` | A kimenetnek tartalmaznia kell részkarakterláncot (a kis- és nagybetűk nem különböznek egymástól) | `"Paris"` | -| `regex` | A kimenetnek meg kell egyeznie a regex mintával | `"1.*2.*3"` | -| `custom` | Az egyéni JS függvény igaz/hamis | `(output) => output.length > 10` | - ---- - ## 🐛 Hibaelhárítás
@@ -1132,13 +1344,13 @@ Az előre feltöltött "OmniRoute Golden Set" 10 tesztesetet tartalmaz, amelyek - Az OmniRoute v1.0.6+ tartalmazza a tartalék érvényesítést a csevegés befejezésén keresztül - Győződjön meg arról, hogy az alap URL tartalmazza a `/v1` utótagot -### 🔐 OAuth em Servidor Remoto (távoli OAuth beállítás) +### 🔐 OAuth > **⚠️ FONTOS az OmniRoute em VPS/Docker/servidor Remoto használatához** -### Az OAuth do Antigravity / Gemini CLI falha em servidores remotos? +### OAuth Az **Antigravitáció** és a **Gemini CLI** usam **Google OAuth 2.0** hitelesítése. A Google exige que a `redirect_uri` nincs fluxo OAuth seja **exatamente** uma das URI-k pre-cadastradas no Google Cloud Console do aplicativo. @@ -1227,7 +1439,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🛠️ Tech Stack +## 🛠️ - **Futtatási idejű**: Node.js 18–22 LTS (⚠️ A Node.js 24+ **nem támogatott** - A `better-sqlite3` natív binárisok nem kompatibilisek) - **Nyelv**: TypeScript 5.9 – **100% TypeScript** `src/` és `open-sse/` (v1.0.6) között @@ -1279,7 +1491,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🗺️ Útiterv +## 🗺️ Az OmniRoute **210+ funkciót tervez** több fejlesztési fázisban. Íme a legfontosabb területek: @@ -1304,18 +1516,6 @@ Az OmniRoute **210+ funkciót tervez** több fejlesztési fázisban. Íme a legf --- -## 📧 Támogatás - -> 💬 **Csatlakozzon közösségünkhöz!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Kérjen segítséget, ossza meg tippjeit, és naprakész legyen. - -- **Webhely**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Problémák**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Eredeti projekt**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Közreműködők [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.id.md b/README.id.md index 0a0c7d7fef..cdecb4c739 100644 --- a/README.id.md +++ b/README.id.md @@ -110,6 +110,35 @@ _Hubungkan alat IDE atau CLI apa pun yang didukung AI melalui OmniRoute — gerb --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Mengapa OmniRoute? **Berhenti membuang-buang uang dan mencapai batas:** @@ -128,6 +157,18 @@ _Hubungkan alat IDE atau CLI apa pun yang didukung AI melalui OmniRoute — gerb --- +## 📧 Dukungan + +> 💬 **Bergabunglah dengan komunitas kami!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Dapatkan bantuan, berbagi kiat, dan dapatkan informasi terbaru. + +- **Situs Web**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Masalah**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Proyek Asli**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Cara Kerjanya ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Apa yang Dipecahkan OmniRoute — 30 Masalah Nyata & Kasus Penggunaan -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Setiap pengembang yang menggunakan alat AI menghadapi masalah ini setiap hari.** OmniRoute dibuat untuk menyelesaikan semuanya — mulai dari pembengkakan biaya hingga pemblokiran regional, mulai dari aliran OAuth yang rusak hingga operasi protokol dan kemampuan observasi perusahaan.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Saya membayar langganan yang mahal tetapi masih terganggu oleh batasan" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Pengembang membayar $20–200/bulan untuk Claude Pro, Codex Pro, atau GitHub Copilot. Bahkan saat membayar, kuota memiliki batas tertinggi — penggunaan 5 jam, batas mingguan, atau batas tarif per menit. Di tengah sesi pengkodean, penyedia berhenti merespons dan pengembang kehilangan aliran dan produktivitas. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-Tier Fallback** — Jika kuota berlangganan habis, otomatis dialihkan ke Kunci API → Murah → Gratis tanpa intervensi manual +- **Pelacakan Kuota Real-Time** — Menampilkan konsumsi token secara real-time dengan hitungan mundur reset (5 jam, harian, mingguan) +- **Dukungan Multi-Akun** — Beberapa akun per penyedia dengan sistem round-robin otomatis — jika satu akun habis, beralih ke akun berikutnya +- **Kombo Khusus** — Rantai cadangan yang dapat disesuaikan dengan 6 strategi penyeimbangan (isi terlebih dahulu, round-robin, P2C, acak, paling jarang digunakan, hemat biaya) +- **Codex Business Quotas** — Pemantauan kuota ruang kerja Bisnis/Tim langsung di dasbor
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Saya perlu menggunakan beberapa penyedia tetapi masing-masing memiliki API yang berbeda" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI menggunakan satu format, Claude (Anthropic) menggunakan format lain, Gemini menggunakan format lain. Jika pengembang ingin menguji model dari penyedia yang berbeda atau melakukan fallback di antara penyedia tersebut, mereka perlu mengonfigurasi ulang SDK, mengubah titik akhir, menangani format yang tidak kompatibel. Penyedia khusus (FriendLI, NIM) memiliki titik akhir model non-standar. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Titik Akhir Terpadu** — Satu `http://localhost:20128/v1` berfungsi sebagai proxy untuk 36+ penyedia +- **Terjemahan Format** — Otomatis dan transparan: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **Sanitasi Respons** — Menghapus kolom non-standar (`x_groq`, `usage_breakdown`, `service_tier`) yang merusak OpenAI SDK v1.83+ +- **Normalisasi Peran** — Mengonversi `developer` → `system` untuk penyedia non-OpenAI; `system` → `user` untuk GLM/ERNIE +- **Think Tag Extraction** — Mengekstrak blok `` dari model seperti DeepSeek R1 ke dalam `reasoning_content` standar +- **Output Terstruktur untuk Gemini** — `json_schema` → `responseMimeType`/`responseSchema` konversi otomatis +- **`stream` defaultnya adalah `false`** — Sesuai dengan spesifikasi OpenAI, menghindari SSE yang tidak terduga di SDK Python/Rust/Go
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "Penyedia AI saya memblokir wilayah/negara saya" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Penyedia seperti OpenAI/Codex memblokir akses dari wilayah geografis tertentu. Pengguna mendapatkan kesalahan seperti `unsupported_country_region_territory` selama koneksi OAuth dan API. Hal ini sangat membuat frustasi bagi pengembang dari negara-negara berkembang. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **Konfigurasi Proksi 3 Tingkat** — Proksi yang dapat dikonfigurasi pada 3 tingkat: global (semua lalu lintas), per penyedia (hanya satu penyedia), dan per koneksi/kunci +- **Lencana Proksi Berkode Warna** — Indikator visual: 🟢 proksi global, 🟡 proksi penyedia, 🔵 proksi koneksi, selalu menampilkan IP +- **OAuth Token Exchange Through Proxy** — Aliran OAuth juga melewati proxy, menyelesaikan `unsupported_country_region_territory` +- **Tes Koneksi melalui Proxy** — Tes koneksi menggunakan proxy yang dikonfigurasi (tidak ada lagi bypass langsung) +- **Dukungan SOCKS5** — Dukungan proksi SOCKS5 penuh untuk perutean keluar +- **TLS Fingerprint Spoofing** — Sidik jari TLS mirip browser melalui `wreq-js` untuk melewati deteksi bot
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "Saya ingin menggunakan AI untuk coding tetapi saya tidak punya uang" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Tidak semua orang mampu membayar $20–200/bulan untuk berlangganan AI. Pelajar, pengembang dari negara-negara berkembang, penghobi, dan pekerja lepas memerlukan akses ke model berkualitas tanpa biaya. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Terintegrasi Penyedia Tingkat Gratis** — Dukungan asli untuk 100% penyedia gratis: iFlow (8 model tak terbatas), Qwen (3 model tak terbatas), Kiro (Claude gratis), Gemini CLI (gratis 180K/bulan) +- **Kombo Khusus Gratis** — Rantai `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/bulan tanpa downtime +- **Kredit Gratis NVIDIA NIM** — 1000 kredit gratis terintegrasi +- **Strategi Pengoptimalan Biaya** — Strategi perutean yang secara otomatis memilih penyedia termurah yang tersedia
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Saya perlu melindungi gateway AI saya dari akses tidak sah" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Saat mengekspos gateway AI ke jaringan (LAN, VPS, Docker), siapa pun yang memiliki alamat tersebut dapat menggunakan token/kuota pengembang. Tanpa perlindungan, API rentan terhadap penyalahgunaan, injeksi cepat, dan penyalahgunaan. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Manajemen Kunci API** — Pembuatan, rotasi, dan pelingkupan per penyedia dengan halaman `/dashboard/api-manager` khusus +- **Izin Tingkat Model** — Membatasi kunci API untuk model tertentu (`openai/*`, pola karakter pengganti), dengan tombol Izinkan Semua/Batasi +- **API Endpoint Protection** — Memerlukan kunci untuk `/v1/models` dan memblokir penyedia tertentu dari daftar +- **Auth Guard + Perlindungan CSRF** — Semua rute dasbor dilindungi dengan middleware `withAuth` + token CSRF +- **Pembatas Kecepatan** — Pembatasan kecepatan per-IP dengan jendela yang dapat dikonfigurasi +- **Pemfilteran IP** — Daftar yang diizinkan/daftar blokir untuk kontrol akses +- **Prompt Injection Guard** — Sanitasi terhadap pola prompt berbahaya +- **Enkripsi AES-256-GCM** — Kredensial dienkripsi saat disimpan
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "Penyedia saya down dan saya kehilangan alur pengkodean" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Penyedia AI bisa menjadi tidak stabil, menampilkan kesalahan 5xx, atau mencapai batas kecepatan sementara. Jika pengembang bergantung pada satu penyedia, mereka akan terganggu. Tanpa pemutus sirkuit, percobaan ulang yang berulang-ulang dapat membuat aplikasi crash. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Pemutus Sirkuit per penyedia** — Buka/tutup otomatis dengan ambang batas dan cooldown yang dapat dikonfigurasi (Tertutup/Terbuka/Setengah Terbuka) +- **Kemunduran Eksponensial** — Penundaan percobaan ulang yang progresif +- **Kawanan Anti-Guntur** — Perlindungan mutex + semaphore terhadap badai percobaan ulang secara bersamaan +- **Combo Fallback Chains** — Jika penyedia utama gagal, otomatis gagal dalam rantai tanpa intervensi +- **Combo Circuit Breaker** — Menonaktifkan secara otomatis penyedia yang gagal dalam rantai kombo +- **Dasbor Kesehatan** — Pemantauan waktu aktif, status pemutus sirkuit, penguncian, statistik cache, latensi p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "Mengonfigurasi setiap alat AI membosankan dan berulang-ulang" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Pengembang menggunakan Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Setiap alat memerlukan konfigurasi yang berbeda (titik akhir API, kunci, model). Mengonfigurasi ulang saat berpindah penyedia atau model hanya membuang-buang waktu. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **Dasbor Alat CLI** — Halaman khusus dengan pengaturan sekali klik untuk Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — Menghasilkan `chatLanguageModels.json` untuk VS Code dengan pemilihan model massal +- **Onboarding Wizard** — Panduan penyiapan 4 langkah untuk pengguna pertama kali +- **Satu titik akhir, semua model** — Konfigurasikan `http://localhost:20128/v1` satu kali, akses 36+ penyedia
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "Mengelola token OAuth dari banyak penyedia adalah neraka" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot — semuanya menggunakan OAuth 2.0 dengan token yang kedaluwarsa. Pengembang perlu melakukan autentikasi ulang terus-menerus, menangani `client_secret is missing`, `redirect_uri_mismatch`, dan kegagalan pada server jarak jauh. OAuth pada LAN/VPS sangat bermasalah. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Penyegaran Token Otomatis** — Penyegaran token OAuth di latar belakang sebelum masa berlakunya habis +- **OAuth 2.0 (PKCE) Bawaan** — Aliran otomatis untuk Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **OAuth Multi-Akun** — Beberapa akun per penyedia melalui ekstraksi token JWT/ID +- **OAuth LAN/Remote Fix** — Deteksi IP pribadi untuk `redirect_uri` + mode URL manual untuk server jarak jauh +- **OAuth Dibalik Nginx** — Menggunakan `window.location.origin` untuk kompatibilitas proxy terbalik +- **Panduan OAuth Jarak Jauh** — Panduan langkah demi langkah untuk kredensial Google Cloud di VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "Saya tidak tahu berapa banyak yang saya belanjakan atau di mana" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Pengembang menggunakan beberapa penyedia berbayar tetapi tidak memiliki pandangan terpadu mengenai pembelanjaan. Setiap penyedia memiliki dasbor penagihannya sendiri, namun tidak ada tampilan gabungan. Biaya tak terduga bisa menumpuk. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Dasbor Analisis Biaya** — Pelacakan biaya per token dan pengelolaan anggaran per penyedia +- **Batas Anggaran per Tingkat** — Batas pembelanjaan per tingkat yang memicu penggantian otomatis +- **Konfigurasi Harga Per Model** — Harga per model yang dapat dikonfigurasi +- **Statistik Penggunaan Per Kunci API** — Jumlah permintaan dan stempel waktu terakhir digunakan per kunci +- **Dasbor Analytics** — Kartu statistik, diagram penggunaan model, tabel penyedia dengan tingkat keberhasilan dan latensi
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "Saya tidak dapat mendiagnosis kesalahan dan masalah dalam panggilan AI" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Saat panggilan gagal, pengembang tidak mengetahui apakah itu batas kecepatan, token kedaluwarsa, format salah, atau kesalahan penyedia. Log terfragmentasi di terminal yang berbeda. Tanpa observabilitas, debugging adalah trial-and-error. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Dasbor Log Terpadu** — 4 tab: Log Permintaan, Log Proksi, Log Audit, Konsol +- **Penampil Log Konsol** — Penampil gaya terminal real-time dengan level kode warna, gulir otomatis, pencarian, filter +- **Log Proxy SQLite** — Log persisten yang bertahan saat server dimulai ulang +- **Translator Playground** — 4 mode debugging: Playground (terjemahan format), Chat Tester (pulang pergi), Test Bench (batch), Live Monitor (real-time) +- **Telemetri Permintaan** — latensi p50/p95/p99 + penelusuran X-Request-Id +- **Logging Berbasis File dengan Rotasi** — Pencegat konsol menangkap semuanya ke log JSON dengan rotasi berbasis ukuran
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "Menyebarkan dan memelihara gateway itu rumit" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Menginstal, mengonfigurasi, dan memelihara proksi AI di berbagai lingkungan (lokal, VPS, Docker, cloud) membutuhkan banyak tenaga. Masalah seperti jalur hardcode, `EACCES` pada direktori, konflik port, dan pembangunan lintas platform menambah gesekan. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **instal global npm** — `npm install -g omniroute && omniroute` — selesai +- **Docker Multi-Platform** — asli AMD64 + ARM64 (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Docker Compose Profiles** — `base` (tanpa alat CLI) dan `cli` (dengan Claude Code, Codex, OpenClaw) +- **Aplikasi Desktop Electron** — Aplikasi asli untuk Windows/macOS/Linux dengan baki sistem, mulai otomatis, mode offline +- **Mode Port Terpisah** — API dan Dasbor pada port terpisah untuk skenario tingkat lanjut (proksi terbalik, jaringan kontainer) +- **Cloud Sync** — Konfigurasi sinkronisasi antar perangkat melalui Cloudflare Workers +- **DB Backups** — Pencadangan otomatis, pemulihan, ekspor dan impor semua pengaturan
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "Antarmuka hanya berbahasa Inggris dan tim saya tidak bisa berbahasa Inggris" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Tim di negara-negara yang tidak berbahasa Inggris, khususnya di Amerika Latin, Asia, dan Eropa, kesulitan dengan antarmuka yang hanya berbahasa Inggris. Hambatan bahasa mengurangi adopsi dan meningkatkan kesalahan konfigurasi. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Dasbor i18n — 30 Bahasa** — 500+ tombol diterjemahkan termasuk Arab, Bulgaria, Denmark, Jerman, Spanyol, Finlandia, Prancis, Ibrani, Hindi, Hungaria, Indonesia, Italia, Jepang, Korea, Melayu, Belanda, Norwegia, Polandia, Portugis (PT/BR), Rumania, Rusia, Slovakia, Swedia, Thailand, Ukraina, Vietnam, China, Filipina, Inggris +- **Dukungan RTL** — Dukungan kanan ke kiri untuk bahasa Arab dan Ibrani +- **README Multi-Bahasa** — 30 terjemahan dokumentasi lengkap +- **Pemilih Bahasa** — Ikon bola dunia di header untuk peralihan waktu nyata
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "Saya memerlukan lebih dari sekadar obrolan — saya memerlukan penyematan, gambar, audio" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +AI bukan hanya penyelesaian obrolan. Pengembang perlu membuat gambar, mentranskripsikan audio, membuat penyematan untuk RAG, mengubah peringkat dokumen, dan memoderasi konten. Setiap API memiliki titik akhir dan format yang berbeda. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Sematan** — `/v1/embeddings` dengan 6 penyedia dan 9+ model +- **Image Generation** — `/v1/images/generations` dengan 10 penyedia dan 20+ model (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Teks-ke-Video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) dan SD WebUI +- **Teks-ke-Musik** — `/v1/music/generations` — ComfyUI (Audio Terbuka Stabil, MusicGen) +- **Transkripsi Audio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Text-to-Speech** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + penyedia yang ada +- **Moderasi** — `/v1/moderations` — Pemeriksaan keamanan konten +- **Pemeringkatan ulang** — `/v1/rerank` — Pemeringkatan ulang relevansi dokumen +- **Respon API** — Dukungan penuh `/v1/responses` untuk Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "Saya tidak punya cara untuk menguji dan membandingkan kualitas antar model" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Pengembang ingin mengetahui model mana yang terbaik untuk kasus penggunaan mereka — kode, terjemahan, penalaran — tetapi membandingkan secara manual itu lambat. Tidak ada alat evaluasi terintegrasi. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Evaluasi LLM** — Pengujian set emas dengan 10 kasus yang dimuat sebelumnya yang mencakup salam, matematika, geografi, pembuatan kode, kepatuhan JSON, terjemahan, penurunan harga, penolakan keamanan +- **4 Strategi Pertandingan** — `exact`, `contains`, `regex`, `custom` (fungsi JS) +- **Bangku Tes Taman Bermain Penerjemah** — Pengujian batch dengan banyak masukan dan keluaran yang diharapkan, perbandingan lintas penyedia +- **Penguji Obrolan** — Perjalanan bolak-balik penuh dengan rendering respons visual +- **Monitor Langsung** — Aliran real-time dari semua permintaan yang mengalir melalui proxy
-📈 15. "I need to scale without losing performance" +📈 15. "Saya perlu melakukan penskalaan tanpa kehilangan performa" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +Seiring bertambahnya volume permintaan, tanpa menyimpan pertanyaan yang sama akan menghasilkan biaya duplikat. Tanpa idempotensi, permintaan duplikat akan membuang-buang pemrosesan. Batasan tarif per penyedia harus dipatuhi. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Cache Semantik** — Cache dua tingkat (tanda tangan + semantik) mengurangi biaya dan latensi +- **Request Idempoency** — Jendela deduplikasi 5 detik untuk permintaan yang identik +- **Deteksi Batas Tarif** — RPM per penyedia, selisih minimum, dan pelacakan serentak maks +- **Batas Nilai yang Dapat Diedit** — Default yang dapat dikonfigurasi di Pengaturan → Ketahanan dengan persistensi +- **Cache Validasi Kunci API** — cache 3 tingkat untuk kinerja produksi +- **Dasbor Kesehatan dengan Telemetri** — latensi p50/p95/p99, statistik cache, waktu aktif
-🤖 16. "I want to control model behavior globally" +🤖 16. "Saya ingin mengontrol perilaku model secara global" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Pengembang yang menginginkan semua respons dalam bahasa tertentu, dengan nada tertentu, atau ingin membatasi token penalaran. Mengonfigurasi ini di setiap alat/permintaan tidak praktis. -**How OmniRoute solves it:** +**Bagaimana OmniRoute menyelesaikannya:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **Injeksi Perintah Sistem** — Perintah global diterapkan ke semua permintaan +- **Validasi Anggaran Berpikir** — Kontrol alokasi token penalaran per permintaan (passthrough, otomatis, kustom, adaptif) +- **6 Strategi Perutean** — Strategi global yang menentukan cara permintaan didistribusikan +- **Wildcard Router** — Pola `provider/*` dirutekan secara dinamis ke penyedia mana pun +- **Combo Aktifkan/Nonaktifkan Toggle** — Beralih kombo langsung dari dasbor +- **Toggle Penyedia** — Mengaktifkan/menonaktifkan semua koneksi untuk penyedia dengan satu klik +- **Penyedia yang Diblokir** — Kecualikan penyedia tertentu dari daftar `/v1/models`
+
+🧰 17. "Saya membutuhkan alat MCP sebagai kemampuan produk kelas satu" + +Banyak gateway AI yang mengekspos MCP hanya sebagai detail implementasi yang tersembunyi. Tim memerlukan lapisan operasi yang terlihat dan dapat dikelola. + +**Bagaimana OmniRoute menyelesaikannya:** + +- MCP muncul di navigasi dasbor dan tab protokol titik akhir +- Halaman manajemen MCP khusus dengan proses, alat, cakupan, dan audit +- Mulai cepat bawaan untuk `omniroute --mcp` dan orientasi klien + +
+ +
+🧠 18. "Saya memerlukan orkestrasi A2A dengan jalur tugas sinkronisasi + streaming" + +Alur kerja agen memerlukan balasan langsung dan eksekusi streaming jangka panjang dengan kontrol siklus hidup. + +**Bagaimana OmniRoute menyelesaikannya:** + +- Titik akhir A2A JSON-RPC (`POST /a2a`) dengan `message/send` dan `message/stream` +- Streaming SSE dengan propagasi status terminal +- API siklus hidup tugas untuk `tasks/get` dan `tasks/cancel` + +
+ +
+🛰️ 19. "Saya membutuhkan kesehatan proses MCP yang nyata, bukan status yang dapat ditebak" + +Tim operasional perlu mengetahui apakah MCP benar-benar aktif, bukan hanya apakah API dapat dijangkau. + +**Bagaimana OmniRoute menyelesaikannya:** + +- File detak jantung runtime dengan PID, stempel waktu, transportasi, jumlah alat, dan mode cakupan +- API status MCP menggabungkan detak jantung + aktivitas terkini +- Kartu status UI untuk kesegaran proses/waktu aktif/detak jantung + +
+ +
+📋 20. "Saya memerlukan eksekusi alat MCP yang dapat diaudit" + +Saat alat mengubah konfigurasi atau memicu tindakan operasi, tim memerlukan kemampuan penelusuran forensik. + +**Bagaimana OmniRoute menyelesaikannya:** + +- Pencatatan audit yang didukung SQLite untuk panggilan alat MCP +- Filter berdasarkan alat, keberhasilan/kegagalan, kunci API, dan penomoran halaman +- Tabel audit dasbor + titik akhir statistik untuk otomatisasi + +
+ +
+🔐 21. "Saya memerlukan izin MCP terbatas per integrasi" + +Klien yang berbeda harus memiliki akses dengan hak istimewa paling rendah ke kategori alat. + +**Bagaimana OmniRoute menyelesaikannya:** + +- 9 cakupan MCP granular untuk akses alat terkontrol +- Penegakan cakupan dan visibilitas di UI manajemen MCP +- Postur default yang aman untuk perkakas operasional + +
+ +
+⚙️ 22. "Saya memerlukan kontrol operasional tanpa memindahkan" + +Tim memerlukan perubahan runtime yang cepat selama insiden atau peristiwa biaya. + +**Bagaimana OmniRoute menyelesaikannya:** + +- Beralih aktivasi kombo langsung dari dasbor MCP +- Menerapkan profil ketahanan dari paket kebijakan yang telah ditentukan sebelumnya +- Reset status pemutus sirkuit dari panel operasi yang sama + +
+ +
+🔄 23. "Saya memerlukan visibilitas dan pembatalan siklus hidup tugas A2A langsung" + +Tanpa visibilitas siklus hidup, insiden tugas menjadi sulit untuk diprioritaskan. + +**Bagaimana OmniRoute menyelesaikannya:** + +- Daftar tugas/pemfilteran berdasarkan status/keterampilan dengan penomoran halaman +- Telusuri metadata tugas, peristiwa, dan artefak +- Titik akhir pembatalan tugas dan tindakan UI dengan konfirmasi + +
+ +
+🌊 24. "Saya memerlukan metrik streaming aktif untuk memuat A2A" + +Alur kerja streaming memerlukan wawasan operasional tentang konkurensi dan koneksi langsung. + +**Bagaimana OmniRoute menyelesaikannya:** + +- Penghitung aliran aktif terintegrasi ke dalam status A2A +- Stempel waktu tugas terakhir dan jumlah per negara bagian +- Kartu dasbor A2A untuk pemantauan operasi waktu nyata + +
+ +
+🪪 25. "Saya memerlukan penemuan agen standar untuk klien" + +Klien dan orkestra eksternal memerlukan metadata yang dapat dibaca mesin untuk orientasi. + +**Bagaimana OmniRoute menyelesaikannya:** + +- Kartu Agen terekspos di `/.well-known/agent.json` +- Kemampuan dan keterampilan yang ditunjukkan dalam manajemen UI +- API status A2A mencakup metadata penemuan untuk otomatisasi + +
+ +
+🧭 26. "Saya memerlukan kemampuan protokol untuk ditemukan di UX produk" + +Jika pengguna tidak dapat menemukan permukaan protokol, kualitas adopsi dan dukungan akan menurun. + +**Bagaimana OmniRoute menyelesaikannya:** + +- Entri sidebar untuk MCP dan A2A +- Tab Protokol halaman titik akhir dengan mulai cepat dan status +- Tautan dari ikhtisar ke dasbor manajemen khusus + +
+ +
+🧪 27. "Saya memerlukan validasi protokol end-to-end dengan klien nyata" + +Tes tiruan tidak cukup untuk memvalidasi kompatibilitas protokol sebelum rilis. + +**Bagaimana OmniRoute menyelesaikannya:** + +- Suite E2E yang mem-boot aplikasi dan menggunakan transportasi klien MCP SDK yang sebenarnya +- Klien A2A menguji penemuan, pengiriman, streaming, dapatkan, dan pembatalan aliran +- Periksa silang pernyataan terhadap audit MCP dan API tugas A2A + +
+ +
+📡 28. "Saya memerlukan kemampuan pengamatan terpadu di semua antarmuka" + +Memisahkan observabilitas berdasarkan protokol menciptakan titik buta dan MTTR yang lebih panjang. + +**Bagaimana OmniRoute menyelesaikannya:** + +- Dasbor/log/analitik terpadu dalam satu produk +- Kesehatan + audit + permintaan telemetri di seluruh lapisan OpenAI, MCP, dan A2A +- API Operasional untuk status dan otomatisasi + +
+ +
+💼 29. "Saya memerlukan satu runtime untuk proxy + alat + orkestrasi agen" + +Menjalankan banyak layanan terpisah akan meningkatkan biaya operasional dan mode kegagalan. + +**Bagaimana OmniRoute menyelesaikannya:** + +- Proksi yang kompatibel dengan OpenAI, server MCP, dan server A2A dalam satu tumpukan +- Otentikasi bersama, ketahanan, penyimpanan data, dan kemampuan observasi +- Model kebijakan yang konsisten di seluruh platform interaksi + +
+ +
+🚀 30. "Saya perlu mengirimkan alur kerja agen tanpa gepeng kode lem" + +Tim kehilangan kecepatan saat menggabungkan beberapa layanan dan skrip ad-hoc. + +**Bagaimana OmniRoute menyelesaikannya:** + +- Strategi titik akhir terpadu untuk klien dan agen +- UI manajemen protokol bawaan dan jalur validasi asap +- Fondasi siap produksi (keamanan, logging, ketahanan, cadangan) + +
+ +### Contoh Playbook (Kasus Penggunaan Terintegrasi) + +**Playbook A: Maksimalkan langganan berbayar + cadangan murah** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: Tumpukan coding tanpa biaya** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: Rantai fallback yang selalu aktif 24/7** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: Operasi agen dengan MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Mulai Cepat **1. Instal secara global:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +990,26 @@ OmniRoute menyertakan Taman Bermain Penerjemah bawaan yang canggih dengan **4 mo
---- +## 🧪 Evaluasi (Eval) -## 🎯 Kasus Penggunaan +OmniRoute menyertakan kerangka evaluasi bawaan untuk menguji kualitas respons LLM terhadap rangkaian emas. Akses melalui **Analytics → Evals** di dasbor. -### Kasus 1: "Saya berlangganan Claude Pro" +### Set Emas Bawaan -**Masalah:** Kuota habis tanpa terpakai, batas kecepatan selama coding berat +"OmniRoute Golden Set" yang dimuat sebelumnya berisi 10 kasus uji yang meliputi: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Salam, matematika, geografi, pembuatan kode +- Kepatuhan format JSON, terjemahan, penurunan harga +- Penolakan keamanan (konten berbahaya), penghitungan, logika boolean -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Strategi Evaluasi -### Kasus 2: "Saya ingin tanpa biaya" - -**Masalah:** Tidak mampu berlangganan, memerlukan pengkodean AI yang andal - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Kasus 3: "Saya memerlukan pengkodean 24/7, tanpa gangguan" - -**Masalah:** Tenggat waktu, tidak mampu membayar downtime - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Kasus 4: "Saya ingin AI GRATIS di OpenClaw" - -**Masalah:** Membutuhkan asisten AI dalam aplikasi perpesanan, sepenuhnya gratis - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Strategi | Deskripsi | Contoh | +| ---------- | ------------------------------------------------------------ | -------------------------------- | +| `exact` | Output harus sama persis | `"4"` | +| `contains` | Output harus berisi substring (tidak peka huruf besar-kecil) | `"Paris"` | +| `regex` | Output harus sesuai dengan pola regex | `"1.*2.*3"` | +| `custom` | Fungsi JS khusus mengembalikan benar/salah | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 Evaluasi (Eval) - -OmniRoute menyertakan kerangka evaluasi bawaan untuk menguji kualitas respons LLM terhadap rangkaian emas. Akses melalui **Analytics → Evals** di dasbor. - -### Set Emas Bawaan - -"OmniRoute Golden Set" yang dimuat sebelumnya berisi 10 kasus uji yang meliputi: - -- Salam, matematika, geografi, pembuatan kode -- Kepatuhan format JSON, terjemahan, penurunan harga -- Penolakan keamanan (konten berbahaya), penghitungan, logika boolean - -### Strategi Evaluasi - -| Strategi | Deskripsi | Contoh | -| ---------- | ------------------------------------------------------------ | -------------------------------- | -| `exact` | Output harus sama persis | `"4"` | -| `contains` | Output harus berisi substring (tidak peka huruf besar-kecil) | `"Paris"` | -| `regex` | Output harus sesuai dengan pola regex | `"1.*2.*3"` | -| `custom` | Fungsi JS khusus mengembalikan benar/salah | `(output) => output.length > 10` | - ---- - ## 🐛 Pemecahan masalah
@@ -1132,13 +1344,13 @@ OmniRoute menyertakan kerangka evaluasi bawaan untuk menguji kualitas respons LL - OmniRoute v1.0.6+ menyertakan validasi fallback melalui penyelesaian obrolan - Pastikan URL dasar menyertakan akhiran `/v1` -### 🔐 OAuth em Servidor Remoto (Pengaturan OAuth Jarak Jauh) +### 🔐 OAuth > **⚠️ PENTING bagi pengguna dengan OmniRoute pada VPS/Docker/server jarak jauh** -### Mengapa OAuth melakukan Antigravity / Gemini CLI gagal dalam layanan jarak jauh? +### OAuth Pembuktiannya **Antigravitasi** dan **Gemini CLI** digunakan **Google OAuth 2.0** untuk autentikasi. Google meminta agar `redirect_uri` menggunakan OAuth yang terus berubah, jadi **exatamente** adalah URI yang sudah ada sebelumnya di Google Cloud Console yang dapat diterapkan. @@ -1227,7 +1439,7 @@ Jika Anda tidak ingin membuat kredensial pribadi sekarang, Anda mungkin dapat me --- -## 🛠️ Tumpukan Teknologi +## 🛠️ - **Runtime**: Node.js 18–22 LTS (⚠️ Node.js 24+ **tidak didukung** — `better-sqlite3` biner asli tidak kompatibel) - **Bahasa**: TypeScript 5.9 — **100% TypeScript** di `src/` dan `open-sse/` (v1.0.6) @@ -1279,7 +1491,7 @@ Jika Anda tidak ingin membuat kredensial pribadi sekarang, Anda mungkin dapat me --- -## 🗺️ Peta Jalan +## 🗺️ OmniRoute memiliki **210+ fitur yang direncanakan** di berbagai fase pengembangan. Berikut adalah bidang-bidang utamanya: @@ -1304,18 +1516,6 @@ OmniRoute memiliki **210+ fitur yang direncanakan** di berbagai fase pengembanga --- -## 📧 Dukungan - -> 💬 **Bergabunglah dengan komunitas kami!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Dapatkan bantuan, berbagi kiat, dan dapatkan informasi terbaru. - -- **Situs Web**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Masalah**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Proyek Asli**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Kontributor [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.in.md b/README.in.md index 885bde3284..969e9453e7 100644 --- a/README.in.md +++ b/README.in.md @@ -33,6 +33,35 @@ _OmniRoute के माध्यम से किसी भी AI-संचा --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔ओम्नीरूट क्यों? **पैसा बर्बाद करना और सीमा पार करना बंद करें:** @@ -51,6 +80,18 @@ _OmniRoute के माध्यम से किसी भी AI-संचा --- +## 📧समर्थन + +> 💬 **हमारे समुदाय में शामिल हों!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) - सहायता प्राप्त करें, सुझाव साझा करें और अपडेट रहें। + +- **वेबसाइट**: [omniroute.online](https://omniroute.online) +- **गिटहब**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **मुद्दे**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **व्हाट्सएप**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **मूल परियोजना**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 यह कैसे काम करता है ``` @@ -80,263 +121,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 ओमनीरूट क्या समाधान करता है - 30 वास्तविक समस्या बिंदु और उपयोग के मामले -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **एआई टूल का उपयोग करने वाला प्रत्येक डेवलपर प्रतिदिन इन समस्याओं का सामना करता है।** ओम्नीरूट को उन सभी को हल करने के लिए बनाया गया था - लागत वृद्धि से लेकर क्षेत्रीय ब्लॉक तक, टूटे हुए ओएथ प्रवाह से लेकर प्रोटोकॉल संचालन और एंटरप्राइज़ अवलोकन तक।
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "मैं एक महंगी सदस्यता के लिए भुगतान करता हूं लेकिन फिर भी सीमा से बाधित होता हूं" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +डेवलपर्स क्लाउड प्रो, कोडेक्स प्रो, या गिटहब कोपायलट के लिए $20-200/माह का भुगतान करते हैं। यहां तक ​​कि भुगतान करने पर भी, कोटा की एक सीमा होती है - 5 घंटे का उपयोग, साप्ताहिक सीमा, या प्रति मिनट की दर सीमा। मध्य-कोडिंग सत्र में, प्रदाता प्रत्युत्तर देना बंद कर देता है और डेवलपर प्रवाह और उत्पादकता खो देता है। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **स्मार्ट 4-टियर फ़ॉलबैक** - यदि सदस्यता कोटा समाप्त हो जाता है, तो स्वचालित रूप से एपीआई कुंजी पर रीडायरेक्ट हो जाता है → सस्ता → शून्य मैन्युअल हस्तक्षेप के साथ मुफ़्त +- **वास्तविक समय कोटा ट्रैकिंग** - रीसेट उलटी गिनती के साथ वास्तविक समय में टोकन खपत दिखाता है (5 घंटे, दैनिक, साप्ताहिक) +- **मल्टी-अकाउंट सपोर्ट** - ऑटो राउंड-रॉबिन के साथ प्रति प्रदाता एकाधिक खाते - जब एक खत्म हो जाता है, तो अगले पर स्विच हो जाता है +- **कस्टम कॉम्बो** - 6 संतुलन रणनीतियों (भरण-प्रथम, राउंड-रॉबिन, पी2सी, यादृच्छिक, कम से कम उपयोग, लागत-अनुकूलित) के साथ अनुकूलन योग्य फ़ॉलबैक चेन +- **कोडेक्स बिजनेस कोटा** - बिजनेस/टीम कार्यक्षेत्र कोटा की निगरानी सीधे डैशबोर्ड में
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "मुझे कई प्रदाताओं का उपयोग करने की आवश्यकता है लेकिन प्रत्येक के पास एक अलग एपीआई है" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +ओपनएआई एक प्रारूप का उपयोग करता है, क्लाउड (एंथ्रोपिक) दूसरे का उपयोग करता है, जेमिनी एक और का उपयोग करता है। यदि कोई डेवलपर विभिन्न प्रदाताओं के मॉडल का परीक्षण करना चाहता है या उनके बीच फ़ॉलबैक करना चाहता है, तो उन्हें एसडीके को फिर से कॉन्फ़िगर करना होगा, एंडपॉइंट बदलना होगा, असंगत प्रारूपों से निपटना होगा। कस्टम प्रदाताओं (फ्रेंडएलआई, एनआईएम) के पास गैर-मानक मॉडल एंडपॉइंट हैं। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **एकीकृत समापन बिंदु** - एक एकल `http://localhost:20128/v1` सभी 36+ प्रदाताओं के लिए प्रॉक्सी के रूप में कार्य करता है +- **प्रारूप अनुवाद** - स्वचालित और पारदर्शी: ओपनएआई ↔ क्लाउड ↔ जेमिनी ↔ प्रतिक्रिया एपीआई +- **प्रतिक्रिया स्वच्छता** - गैर-मानक फ़ील्ड (`x_groq`, `usage_breakdown`, `service_tier`) को स्ट्रिप्स करता है जो OpenAI SDK v1.83+ को तोड़ता है +- **भूमिका सामान्यीकरण** - गैर-ओपनएआई प्रदाताओं के लिए `developer` → `system` परिवर्तित करता है; `system` → GLM/ERNIE के लिए `user` +- **टैग एक्सट्रैक्शन के बारे में सोचें** - डीपसीक R1 जैसे मॉडलों से `` ब्लॉक को मानकीकृत `reasoning_content` में निकालता है +- **मिथुन राशि वालों के लिए संरचित आउटपुट** — `json_schema` → `responseMimeType`/`responseSchema` स्वचालित रूपांतरण +- **`stream` डिफ़ॉल्ट रूप से `false`** पर आता है - OpenAI स्पेक के साथ संरेखित होता है, Python/Rust/Go SDKs में अप्रत्याशित SSE से बचता है
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "मेरा AI प्रदाता मेरे क्षेत्र/देश को ब्लॉक कर देता है" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +OpenAI/Codex जैसे प्रदाता कुछ भौगोलिक क्षेत्रों से पहुंच को रोकते हैं। OAuth और API कनेक्शन के दौरान उपयोगकर्ताओं को `unsupported_country_region_territory` जैसी त्रुटियां मिलती हैं। यह विकासशील देशों के डेवलपर्स के लिए विशेष रूप से निराशाजनक है। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **3-स्तरीय प्रॉक्सी कॉन्फ़िगरेशन** - 3 स्तरों पर कॉन्फ़िगर करने योग्य प्रॉक्सी: वैश्विक (सभी ट्रैफ़िक), प्रति-प्रदाता (केवल एक प्रदाता), और प्रति-कनेक्शन/कुंजी +- **रंग-कोडित प्रॉक्सी बैज** - दृश्य संकेतक: 🟢 वैश्विक प्रॉक्सी, 🟡 प्रदाता प्रॉक्सी, 🔵 कनेक्शन प्रॉक्सी, हमेशा आईपी दिखाता है +- **प्रॉक्सी के माध्यम से OAuth टोकन एक्सचेंज** - OAuth प्रवाह भी प्रॉक्सी के माध्यम से चलता है, `unsupported_country_region_territory` को हल करता है +- **प्रॉक्सी के माध्यम से कनेक्शन परीक्षण** - कनेक्शन परीक्षण कॉन्फ़िगर प्रॉक्सी का उपयोग करते हैं (अब कोई प्रत्यक्ष बाईपास नहीं) +- **SOCKS5 समर्थन** - आउटबाउंड रूटिंग के लिए पूर्ण SOCKS5 प्रॉक्सी समर्थन +- **टीएलएस फिंगरप्रिंट स्पूफिंग** - बॉट डिटेक्शन को बायपास करने के लिए `wreq-js` के माध्यम से ब्राउज़र जैसा टीएलएस फिंगरप्रिंट
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "मैं कोडिंग के लिए AI का उपयोग करना चाहता हूं लेकिन मेरे पास पैसे नहीं हैं" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +हर कोई AI सदस्यता के लिए $20-200/माह का भुगतान नहीं कर सकता। छात्रों, उभरते देशों के डेवलपर्स, शौकीनों और फ्रीलांसरों को शून्य लागत पर गुणवत्ता वाले मॉडल तक पहुंच की आवश्यकता है। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **फ्री टियर प्रोवाइडर बिल्ट-इन** - 100% फ्री प्रदाताओं के लिए मूल समर्थन: आईफ्लो (8 असीमित मॉडल), क्वेन (3 असीमित मॉडल), किरो (क्लाउड मुफ्त में), जेमिनी सीएलआई (180K/माह मुफ्त) +- **केवल-निःशुल्क कॉम्बो** - चेन `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = शून्य डाउनटाइम के साथ $0/माह +- **एनवीडिया एनआईएम फ्री क्रेडिट** - 1000 मुफ्त क्रेडिट एकीकृत +- **लागत अनुकूलित रणनीति** - रूटिंग रणनीति जो स्वचालित रूप से सबसे सस्ते उपलब्ध प्रदाता को चुनती है
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "मुझे अपने AI गेटवे को अनधिकृत पहुंच से सुरक्षित रखने की आवश्यकता है" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +नेटवर्क (LAN, VPS, Docker) में AI गेटवे को उजागर करते समय, पते वाला कोई भी व्यक्ति डेवलपर के टोकन/कोटा का उपभोग कर सकता है। सुरक्षा के बिना, एपीआई दुरुपयोग, त्वरित इंजेक्शन और दुरुपयोग के प्रति संवेदनशील हैं। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **एपीआई कुंजी प्रबंधन** - एक समर्पित `/dashboard/api-manager` पेज के साथ प्रति प्रदाता जेनरेशन, रोटेशन और स्कोपिंग +- **मॉडल-स्तरीय अनुमतियाँ** - एपीआई कुंजियों को विशिष्ट मॉडलों (`openai/*`, वाइल्डकार्ड पैटर्न) तक सीमित करें, सभी को अनुमति दें/प्रतिबंधित टॉगल के साथ +- **एपीआई एंडपॉइंट सुरक्षा** - `/v1/models` के लिए एक कुंजी की आवश्यकता है और लिस्टिंग से विशिष्ट प्रदाताओं को ब्लॉक करें +- **ऑथ गार्ड + सीएसआरएफ सुरक्षा** - सभी डैशबोर्ड रूट `withAuth` मिडलवेयर + सीएसआरएफ टोकन से सुरक्षित हैं +- **रेट लिमिटर** - कॉन्फ़िगर करने योग्य विंडो के साथ प्रति-आईपी दर सीमित करना +- **आईपी फ़िल्टरिंग** - अभिगम नियंत्रण के लिए अनुमति सूची/अवरुद्ध सूची +- **प्रॉम्प्ट इंजेक्शन गार्ड** - दुर्भावनापूर्ण प्रॉम्प्ट पैटर्न के विरुद्ध स्वच्छता +- **एईएस-256-जीसीएम एन्क्रिप्शन** - क्रेडेंशियल आराम से एन्क्रिप्ट किए गए
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "मेरा प्रदाता बंद हो गया और मैंने अपना कोडिंग प्रवाह खो दिया" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +एआई प्रदाता अस्थिर हो सकते हैं, 5xx त्रुटियाँ लौटा सकते हैं, या अस्थायी दर सीमा तक पहुँच सकते हैं। यदि कोई डेवलपर किसी एकल प्रदाता पर निर्भर करता है, तो वे बाधित हो जाते हैं। सर्किट ब्रेकर के बिना, बार-बार पुनः प्रयास करने से एप्लिकेशन क्रैश हो सकता है। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **सर्किट ब्रेकर प्रति-प्रदाता** - कॉन्फ़िगर करने योग्य थ्रेसहोल्ड और कूलडाउन के साथ ऑटो-खुला/बंद (बंद/खुला/आधा-खुला) +- **एक्सपोनेंशियल बैकऑफ़** - प्रगतिशील पुनः प्रयास में देरी +- **एंटी-थंडरिंग हर्ड** - म्यूटेक्स + समवर्ती रिट्री तूफानों के खिलाफ सेमाफोर सुरक्षा +- **कॉम्बो फ़ॉलबैक चेन** - यदि प्राथमिक प्रदाता विफल हो जाता है, तो बिना किसी हस्तक्षेप के स्वचालित रूप से चेन से गिर जाता है +- **कॉम्बो सर्किट ब्रेकर** - कॉम्बो श्रृंखला के भीतर विफल प्रदाताओं को स्वचालित रूप से अक्षम करता है +- **स्वास्थ्य डैशबोर्ड** - अपटाइम मॉनिटरिंग, सर्किट ब्रेकर स्थिति, लॉकआउट, कैश आँकड़े, p50/p95/p99 विलंबता
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "प्रत्येक AI उपकरण को कॉन्फ़िगर करना कठिन और दोहराव वाला है" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +डेवलपर्स कर्सर, क्लाउड कोड, कोडेक्स सीएलआई, ओपनक्लाव, जेमिनी सीएलआई, किलो कोड का उपयोग करते हैं... प्रत्येक टूल को एक अलग कॉन्फ़िगरेशन (एपीआई एंडपॉइंट, कुंजी, मॉडल) की आवश्यकता होती है। प्रदाताओं या मॉडलों को स्विच करते समय पुन: कॉन्फ़िगर करना समय की बर्बादी है। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **सीएलआई टूल्स डैशबोर्ड** - क्लाउड कोड, कोडेक्स सीएलआई, ओपनक्लाव, किलो कोड, एंटीग्रेविटी, क्लाइन के लिए एक-क्लिक सेटअप वाला समर्पित पृष्ठ +- **GitHub Copilot कॉन्फिग जेनरेटर** - बल्क मॉडल चयन के साथ VS कोड के लिए `chatLanguageModels.json` जेनरेट करता है +- **ऑनबोर्डिंग विज़ार्ड** - पहली बार उपयोगकर्ताओं के लिए निर्देशित 4-चरणीय सेटअप +- **एक समापन बिंदु, सभी मॉडल** - `http://localhost:20128/v1` को एक बार कॉन्फ़िगर करें, 36+ प्रदाताओं तक पहुंचें
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "एकाधिक प्रदाताओं से OAuth टोकन प्रबंधित करना नरक है" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +क्लाउड कोड, कोडेक्स, जेमिनी सीएलआई, कोपायलट - सभी समाप्त होने वाले टोकन के साथ OAuth 2.0 का उपयोग करते हैं। डेवलपर्स को लगातार पुन: प्रमाणित करने, `client_secret is missing`, `redirect_uri_mismatch` और दूरस्थ सर्वर पर विफलताओं से निपटने की आवश्यकता है। LAN/VPS पर OAuth विशेष रूप से समस्याग्रस्त है। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **ऑटो टोकन रिफ्रेश** - OAuth टोकन समाप्ति से पहले पृष्ठभूमि में रिफ्रेश होते हैं +- **OAuth 2.0 (PKCE) बिल्ट-इन** - क्लाउड कोड, कोडेक्स, जेमिनी सीएलआई, कोपायलट, किरो, क्वेन, आईफ्लो के लिए स्वचालित प्रवाह +- **मल्टी-अकाउंट OAuth** - JWT/ID टोकन निष्कर्षण के माध्यम से प्रति प्रदाता एकाधिक खाते +- **OAuth LAN/रिमोट फिक्स** - `redirect_uri` के लिए निजी आईपी डिटेक्शन + रिमोट सर्वर के लिए मैनुअल यूआरएल मोड +- **Nginx के पीछे OAuth** - रिवर्स प्रॉक्सी संगतता के लिए `window.location.origin` का उपयोग करता है +- **दूरस्थ OAuth मार्गदर्शिका** — VPS/Docker पर Google क्लाउड क्रेडेंशियल के लिए चरण-दर-चरण मार्गदर्शिका
-📊 9. "I don't know how much I'm spending or where" +📊 9. "मुझे नहीं पता कि मैं कितना और कहां खर्च कर रहा हूं" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +डेवलपर्स कई भुगतान प्रदाताओं का उपयोग करते हैं लेकिन खर्च के बारे में कोई एकीकृत दृष्टिकोण नहीं रखते हैं। प्रत्येक प्रदाता का अपना बिलिंग डैशबोर्ड होता है, लेकिन कोई समेकित दृश्य नहीं होता है। अप्रत्याशित लागतें बढ़ सकती हैं। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **लागत विश्लेषण डैशबोर्ड** — प्रति प्रदाता प्रति टोकन लागत ट्रैकिंग और बजट प्रबंधन +- **प्रति स्तर बजट सीमा** - प्रति स्तर खर्च की अधिकतम सीमा जो स्वचालित फ़ॉलबैक को ट्रिगर करती है +- **प्रति-मॉडल मूल्य निर्धारण कॉन्फ़िगरेशन** - प्रति मॉडल कॉन्फ़िगर करने योग्य कीमतें +- **प्रति एपीआई कुंजी उपयोग सांख्यिकी** - अनुरोध गणना और प्रति कुंजी अंतिम बार उपयोग किया गया टाइमस्टैम्प +- **एनालिटिक्स डैशबोर्ड** - स्टेट कार्ड, मॉडल उपयोग चार्ट, सफलता दर और विलंबता के साथ प्रदाता तालिका
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "मैं AI कॉल में त्रुटियों और समस्याओं का निदान नहीं कर सकता" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +जब कोई कॉल विफल हो जाती है, तो देव को पता नहीं चलता कि यह दर सीमा, समाप्त टोकन, गलत प्रारूप या प्रदाता त्रुटि थी। विभिन्न टर्मिनलों पर खंडित लॉग। अवलोकन के बिना, डिबगिंग परीक्षण-और-त्रुटि है। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **एकीकृत लॉग डैशबोर्ड** - 4 टैब: अनुरोध लॉग, प्रॉक्सी लॉग, ऑडिट लॉग, कंसोल +- **कंसोल लॉग व्यूअर** - रंग-कोडित स्तरों, ऑटो-स्क्रॉल, खोज, फ़िल्टर के साथ वास्तविक समय टर्मिनल-शैली व्यूअर +- **SQLite प्रॉक्सी लॉग** - लगातार लॉग जो सर्वर पुनरारंभ होने से बचे रहते हैं +- **अनुवादक खेल का मैदान** - 4 डिबगिंग मोड: खेल का मैदान (प्रारूप अनुवाद), चैट टेस्टर (राउंड-ट्रिप), टेस्ट बेंच (बैच), लाइव मॉनिटर (वास्तविक समय) +- **अनुरोध टेलीमेट्री** - p50/p95/p99 विलंबता + X-अनुरोध-आईडी ट्रेसिंग +- **रोटेशन के साथ फ़ाइल-आधारित लॉगिंग** - कंसोल इंटरसेप्टर आकार-आधारित रोटेशन के साथ JSON लॉग में सब कुछ कैप्चर करता है
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "गेटवे की तैनाती और रखरखाव जटिल है" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +विभिन्न वातावरणों (स्थानीय, वीपीएस, डॉकर, क्लाउड) में एआई प्रॉक्सी को स्थापित करना, कॉन्फ़िगर करना और बनाए रखना श्रम-गहन है। हार्डकोडेड पथ, निर्देशिकाओं पर `EACCES`, पोर्ट विरोध और क्रॉस-प्लेटफ़ॉर्म बिल्ड जैसी समस्याएं घर्षण बढ़ाती हैं। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **npm ग्लोबल इंस्टाल** — `npm install -g omniroute && omniroute` — हो गया +- **डॉकर मल्टी-प्लेटफ़ॉर्म** - AMD64 + ARM64 नेटिव (Apple सिलिकॉन, AWS ग्रेविटॉन, रास्पबेरी पाई) +- **डॉकर कंपोज प्रोफाइल** - `base` (कोई CLI उपकरण नहीं) और `cli` (क्लाउड कोड, कोडेक्स, ओपनक्लाव के साथ) +- **इलेक्ट्रॉन डेस्कटॉप ऐप** - सिस्टम ट्रे, ऑटो-स्टार्ट, ऑफ़लाइन मोड के साथ विंडोज/मैकओएस/लिनक्स के लिए मूल ऐप +- **स्प्लिट-पोर्ट मोड** - उन्नत परिदृश्यों के लिए अलग-अलग पोर्ट पर एपीआई और डैशबोर्ड (रिवर्स प्रॉक्सी, कंटेनर नेटवर्किंग) +- **क्लाउड सिंक** - क्लाउडफ्लेयर वर्कर्स के माध्यम से सभी डिवाइसों में कॉन्फिग सिंक्रोनाइजेशन +- **डीबी बैकअप** - सभी सेटिंग्स का स्वचालित बैकअप, पुनर्स्थापना, निर्यात और आयात
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "इंटरफ़ेस केवल अंग्रेजी है और मेरी टीम अंग्रेजी नहीं बोलती है" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +गैर-अंग्रेजी भाषी देशों, विशेष रूप से लैटिन अमेरिका, एशिया और यूरोप में टीमें, केवल अंग्रेजी इंटरफेस के साथ संघर्ष करती हैं। भाषा बाधाएँ अपनाने को कम करती हैं और कॉन्फ़िगरेशन त्रुटियों को बढ़ाती हैं। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **डैशबोर्ड i18n - 30 भाषाएँ** - अरबी, बल्गेरियाई, डेनिश, जर्मन, स्पेनिश, फिनिश, फ्रेंच, हिब्रू, हिंदी, हंगेरियन, इंडोनेशियाई, इतालवी, जापानी, कोरियाई, मलय, डच, नॉर्वेजियन, पोलिश, पुर्तगाली (पीटी/बीआर), रोमानियाई, रूसी, स्लोवाक, स्वीडिश, थाई, यूक्रेनी, वियतनामी, चीनी, फिलिपिनो, अंग्रेजी सहित सभी 500+ कुंजियाँ अनुवादित +- **आरटीएल समर्थन** - अरबी और हिब्रू के लिए दाएं से बाएं समर्थन +- **बहु-भाषा रीडमी** - 30 पूर्ण दस्तावेज़ीकरण अनुवाद +- **भाषा चयनकर्ता** - वास्तविक समय स्विचिंग के लिए हेडर में ग्लोब आइकन
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "मुझे चैट से अधिक की आवश्यकता है - मुझे एम्बेडिंग, चित्र, ऑडियो की आवश्यकता है" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +एआई का मतलब सिर्फ चैट पूरा करना नहीं है। डेवलपर्स को छवियां उत्पन्न करने, ऑडियो ट्रांसक्राइब करने, आरएजी के लिए एम्बेडिंग बनाने, दस्तावेज़ों को फिर से रैंक करने और सामग्री को मॉडरेट करने की आवश्यकता होती है। प्रत्येक एपीआई का एक अलग समापन बिंदु और प्रारूप होता है। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **एम्बेडिंग्स** - 6 प्रदाताओं और 9+ मॉडलों के साथ `/v1/embeddings` +- **इमेज जेनरेशन** - `/v1/images/generations` 10 प्रदाताओं और 20+ मॉडलों के साथ (ओपनएआई, एक्सएआई, टुगेदर, फायरवर्क्स, नेबियस, हाइपरबोलिक, नैनोबनाना, एंटीग्रेविटी, एसडी वेबयूआई, कॉम्फीयूआई) +- **टेक्स्ट-टू-वीडियो** — `/v1/videos/generations` — कॉम्फीयूआई (एनिमेटडिफ, एसवीडी) और एसडी वेबयूआई +- **टेक्स्ट-टू-म्यूजिक** — `/v1/music/generations` — कॉम्फीयूआई (स्थिर ऑडियो ओपन, म्यूजिकजेन) +- **ऑडियो ट्रांसक्रिप्शन** - `/v1/audio/transcriptions` - व्हिस्पर + एनवीडिया एनआईएम, हगिंगफेस, क्वेन3 +- **टेक्स्ट-टू-स्पीच** - `/v1/audio/speech` - इलेवनलैब्स, एनवीडिया एनआईएम, हगिंगफेस, कोक्वी, टोरटोइज़, क्वेन3, + मौजूदा प्रदाता +- **संयम** — `/v1/moderations` — सामग्री सुरक्षा जांच +- **पुनर्रैंकिंग** — `/v1/rerank` — दस्तावेज़ प्रासंगिकता पुनर्रैंकिंग +- **प्रतिक्रिया एपीआई** - कोडेक्स के लिए पूर्ण `/v1/responses` समर्थन
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "मेरे पास सभी मॉडलों की गुणवत्ता का परीक्षण और तुलना करने का कोई तरीका नहीं है" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +डेवलपर्स जानना चाहते हैं कि उनके उपयोग के मामले में कौन सा मॉडल सबसे अच्छा है - कोड, अनुवाद, तर्क - लेकिन मैन्युअल रूप से तुलना करना धीमा है। कोई एकीकृत eval उपकरण मौजूद नहीं है। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **एलएलएम मूल्यांकन** - अभिवादन, गणित, भूगोल, कोड जनरेशन, JSON अनुपालन, अनुवाद, मार्कडाउन, सुरक्षा इनकार को कवर करने वाले 10 प्री-लोडेड मामलों के साथ गोल्डन सेट परीक्षण +- **4 मैच रणनीतियाँ** - `exact`, `contains`, `regex`, `custom` (JS फ़ंक्शन) +- **अनुवादक खेल का मैदान परीक्षण बेंच** - एकाधिक इनपुट और अपेक्षित आउटपुट, क्रॉस-प्रदाता तुलना के साथ बैच परीक्षण +- **चैट परीक्षक** - दृश्य प्रतिक्रिया प्रतिपादन के साथ पूर्ण राउंड-ट्रिप +- **लाइव मॉनिटर** - प्रॉक्सी के माध्यम से बहने वाले सभी अनुरोधों की वास्तविक समय स्ट्रीम
-📈 15. "I need to scale without losing performance" +📈 15. "मुझे प्रदर्शन खोए बिना स्केल करने की आवश्यकता है" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +जैसे-जैसे अनुरोध की मात्रा बढ़ती है, कैशिंग के बिना वही प्रश्न डुप्लिकेट लागत उत्पन्न करते हैं। निष्क्रियता के बिना, डुप्लिकेट अपशिष्ट प्रसंस्करण का अनुरोध करता है। प्रति-प्रदाता दर सीमा का सम्मान किया जाना चाहिए। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **सिमेंटिक कैश** - दो-स्तरीय कैश (हस्ताक्षर + सिमेंटिक) लागत और विलंबता को कम करता है +- **अनुरोध Idempotency** - समान अनुरोधों के लिए 5s डिडुप्लीकेशन विंडो +- **दर सीमा का पता लगाना** - प्रति-प्रदाता आरपीएम, न्यूनतम अंतर, और अधिकतम समवर्ती ट्रैकिंग +- **संपादन योग्य दर सीमाएँ** — सेटिंग्स में कॉन्फ़िगर करने योग्य डिफ़ॉल्ट → दृढ़ता के साथ लचीलापन +- **एपीआई कुंजी सत्यापन कैश** - उत्पादन प्रदर्शन के लिए 3-स्तरीय कैश +- **टेलीमेट्री के साथ स्वास्थ्य डैशबोर्ड** — p50/p95/p99 विलंबता, कैश आँकड़े, अपटाइम
-🤖 16. "I want to control model behavior globally" +🤖 16. "मैं विश्व स्तर पर मॉडल व्यवहार को नियंत्रित करना चाहता हूं" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +ऐसे डेवलपर जो सभी प्रतिक्रियाएं एक विशिष्ट भाषा में, एक विशिष्ट लहजे में चाहते हैं, या तर्क टोकन को सीमित करना चाहते हैं। प्रत्येक टूल/अनुरोध में इसे कॉन्फ़िगर करना अव्यावहारिक है। -**How OmniRoute solves it:** +**ओम्नीरूट इसे कैसे हल करता है:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **सिस्टम प्रॉम्प्ट इंजेक्शन** — ग्लोबल प्रॉम्प्ट सभी अनुरोधों पर लागू होता है +- **सोच बजट सत्यापन** - प्रति अनुरोध तर्क टोकन आवंटन नियंत्रण (पासथ्रू, ऑटो, कस्टम, अनुकूली) +- **6 रूटिंग रणनीतियाँ** - वैश्विक रणनीतियाँ जो यह निर्धारित करती हैं कि अनुरोध कैसे वितरित किए जाते हैं +- **वाइल्डकार्ड राउटर** - `provider/*` पैटर्न किसी भी प्रदाता को गतिशील रूप से रूट करता है +- **कॉम्बो सक्षम/अक्षम टॉगल** — कॉम्बो को सीधे डैशबोर्ड से टॉगल करें +- **प्रदाता टॉगल** — एक क्लिक से प्रदाता के लिए सभी कनेक्शन सक्षम/अक्षम करें +- **अवरुद्ध प्रदाता** - `/v1/models` सूची से विशिष्ट प्रदाताओं को बाहर करें
+
+🧰 17. "मुझे प्रथम श्रेणी उत्पाद क्षमताओं के रूप में MCP टूल की आवश्यकता है" + +कई एआई गेटवे एमसीपी को केवल एक छिपे हुए कार्यान्वयन विवरण के रूप में उजागर करते हैं। टीमों को एक दृश्यमान, प्रबंधनीय संचालन परत की आवश्यकता होती है। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- एमसीपी डैशबोर्ड नेविगेशन और एंडपॉइंट प्रोटोकॉल टैब में दिखाई देता है +- प्रक्रिया, उपकरण, कार्यक्षेत्र और ऑडिट के साथ समर्पित एमसीपी प्रबंधन पृष्ठ +- `omniroute --mcp` और क्लाइंट ऑनबोर्डिंग के लिए बिल्ट-इन क्विक-स्टार्ट + +
+ +
+🧠 18. "मुझे सिंक + स्ट्रीम कार्य पथों के साथ A2A ऑर्केस्ट्रेशन की आवश्यकता है" + +एजेंट वर्कफ़्लो को जीवनचक्र नियंत्रण के साथ सीधे उत्तर और लंबे समय तक चलने वाले स्ट्रीम निष्पादन दोनों की आवश्यकता होती है। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- A2A JSON-RPC एंडपॉइंट (`POST /a2a`) `message/send` और `message/stream` के साथ +- टर्मिनल राज्य प्रसार के साथ एसएसई स्ट्रीमिंग +- `tasks/get` और `tasks/cancel` के लिए कार्य जीवनचक्र एपीआई + +
+ +
+🛰️ 19. "मुझे वास्तविक MCP प्रक्रिया स्वास्थ्य की आवश्यकता है, अनुमानित स्थिति की नहीं" + +परिचालन टीमों को यह जानने की जरूरत है कि क्या एमसीपी वास्तव में जीवित है, न कि केवल एपीआई पहुंच योग्य है या नहीं। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- पीआईडी, टाइमस्टैम्प, ट्रांसपोर्ट, टूल काउंट और स्कोप मोड के साथ रनटाइम हार्टबीट फ़ाइल +- एमसीपी स्थिति एपीआई दिल की धड़कन + हाल की गतिविधि का संयोजन +- प्रक्रिया/अपटाइम/दिल की धड़कन ताजगी के लिए यूआई स्टेटस कार्ड + +
+ +
+📋 20. "मुझे ऑडिटेबल MCP टूल निष्पादन की आवश्यकता है" + +जब उपकरण कॉन्फ़िगरेशन को बदलते हैं या ऑप्स क्रियाओं को ट्रिगर करते हैं, तो टीमों को फोरेंसिक ट्रैसेबिलिटी की आवश्यकता होती है। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- MCP टूल कॉल के लिए SQLite समर्थित ऑडिट लॉगिंग +- टूल, सफलता/असफलता, एपीआई कुंजी और पेजिनेशन द्वारा फ़िल्टर +- डैशबोर्ड ऑडिट टेबल + स्वचालन के लिए आँकड़े समापन बिंदु + +
+ +
+🔐 21. "मुझे प्रति एकीकरण के लिए स्कोप्ड MCP अनुमतियों की आवश्यकता है" + +विभिन्न ग्राहकों को टूल श्रेणियों तक कम से कम विशेषाधिकार प्राप्त होना चाहिए। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- नियंत्रित टूल एक्सेस के लिए 9 दानेदार एमसीपी स्कोप +- एमसीपी प्रबंधन यूआई में दायरा प्रवर्तन और दृश्यता +- परिचालन टूलींग के लिए सुरक्षित डिफ़ॉल्ट मुद्रा + +
+ +
+⚙️ 22. "मुझे पुनः तैनाती के बिना परिचालन नियंत्रण की आवश्यकता है" + +घटनाओं या लागत आयोजनों के दौरान टीमों को त्वरित रनटाइम परिवर्तन की आवश्यकता होती है। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- कॉम्बो सक्रियण को सीधे एमसीपी डैशबोर्ड से स्विच करें +- पूर्व-निर्धारित पॉलिसी पैक से लचीलापन प्रोफ़ाइल लागू करें +- उसी ऑपरेशन पैनल से सर्किट ब्रेकर स्थिति को रीसेट करें + +
+ +
+🔄 23. "मुझे लाइव A2A कार्य जीवनचक्र दृश्यता और रद्दीकरण की आवश्यकता है" + +जीवनचक्र दृश्यता के बिना, कार्य घटनाओं का परीक्षण करना कठिन हो जाता है। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- पेजिनेशन के साथ राज्य/कौशल द्वारा कार्य सूचीकरण/फ़िल्टरिंग +- कार्य मेटाडेटा, घटनाओं और कलाकृतियों पर ड्रिल-डाउन +- पुष्टि के साथ कार्य रद्दीकरण समापन बिंदु और यूआई कार्रवाई + +
+ +
+🌊 24. "मुझे A2A लोड के लिए सक्रिय स्ट्रीम मेट्रिक्स की आवश्यकता है" + +स्ट्रीमिंग वर्कफ़्लो के लिए समवर्ती और लाइव कनेक्शन में परिचालन अंतर्दृष्टि की आवश्यकता होती है। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- सक्रिय स्ट्रीम काउंटर A2A स्थिति में एकीकृत +- अंतिम कार्य टाइमस्टैम्प और प्रति-राज्य गणना +- वास्तविक समय ऑप्स निगरानी के लिए A2A डैशबोर्ड कार्ड + +
+ +
+🪪 25. "मुझे ग्राहकों के लिए मानक एजेंट खोज की आवश्यकता है" + +बाहरी ग्राहकों और ऑर्केस्ट्रेटर्स को ऑनबोर्डिंग के लिए मशीन-पठनीय मेटाडेटा की आवश्यकता होती है। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- एजेंट कार्ड `/.well-known/agent.json` पर प्रदर्शित हुआ +- प्रबंधन यूआई में दिखाई गई क्षमताएं और कौशल +- A2A स्थिति API में स्वचालन के लिए खोज मेटाडेटा शामिल है + +
+ +
+🧭 26. "मुझे उत्पाद UX में प्रोटोकॉल खोज योग्यता की आवश्यकता है" + +यदि उपयोगकर्ता प्रोटोकॉल सतहों की खोज नहीं कर पाते हैं, तो अपनाने और समर्थन की गुणवत्ता में गिरावट आती है। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- MCP और A2A के लिए साइडबार प्रविष्टियाँ +- समापन बिंदु पृष्ठ प्रोटोकॉल टैब त्वरित-प्रारंभ और स्थिति के साथ +- सिंहावलोकन से लेकर समर्पित प्रबंधन डैशबोर्ड तक के लिंक + +
+ +
+🧪 27. "मुझे वास्तविक ग्राहकों के साथ एंड-टू-एंड प्रोटोकॉल सत्यापन की आवश्यकता है" + +रिलीज़ से पहले प्रोटोकॉल संगतता को सत्यापित करने के लिए मॉक परीक्षण पर्याप्त नहीं हैं। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- E2E सुइट जो ऐप को बूट करता है और वास्तविक MCP SDK क्लाइंट ट्रांसपोर्ट का उपयोग करता है +- A2A क्लाइंट खोज, भेजने, स्ट्रीम करने, प्राप्त करने और प्रवाह को रद्द करने के लिए परीक्षण करता है +- एमसीपी ऑडिट और ए2ए कार्य एपीआई के खिलाफ दावों की क्रॉस-चेक करें + +
+ +
+📡 28. "मुझे सभी इंटरफेस में एकीकृत अवलोकन की आवश्यकता है" + +प्रोटोकॉल द्वारा अवलोकनशीलता को विभाजित करने से ब्लाइंड स्पॉट और लंबा एमटीटीआर बनता है। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- एक उत्पाद में एकीकृत डैशबोर्ड/लॉग/एनालिटिक्स +- स्वास्थ्य + ऑडिट + ओपनएआई, एमसीपी और ए2ए परतों में टेलीमेट्री अनुरोध +- स्थिति और स्वचालन के लिए परिचालन एपीआई + +
+ +
+💼 29. "मुझे प्रॉक्सी + टूल + एजेंट ऑर्केस्ट्रेशन के लिए एक रनटाइम की आवश्यकता है" + +कई अलग-अलग सेवाएँ चलाने से परिचालन लागत और विफलता मोड बढ़ जाते हैं। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- OpenAI-संगत प्रॉक्सी, MCP सर्वर और A2A सर्वर एक स्टैक में +- साझा प्रमाणीकरण, लचीलापन, डेटा भंडारण और अवलोकन क्षमता +- सभी संपर्क सतहों पर सुसंगत नीति मॉडल + +
+ +
+🚀 30. "मुझे ग्लू-कोड फैलाव के बिना एजेंटिक वर्कफ़्लो भेजने की आवश्यकता है" + +कई तदर्थ सेवाओं और स्क्रिप्ट्स को सिलाई करते समय टीमों की गति कम हो जाती है। + +**ओम्नीरूट इसे कैसे हल करता है:** + +- ग्राहकों और एजेंटों के लिए एकीकृत समापन बिंदु रणनीति +- अंतर्निहित प्रोटोकॉल प्रबंधन यूआई और धूम्रपान सत्यापन पथ +- उत्पादन के लिए तैयार नींव (सुरक्षा, लॉगिंग, लचीलापन, बैकअप) + +
+ +### उदाहरण प्लेबुक (एकीकृत उपयोग के मामले) + +**प्लेबुक ए: सशुल्क सदस्यता + सस्ता बैकअप अधिकतम करें** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**प्लेबुक बी: शून्य-लागत कोडिंग स्टैक** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**प्लेबुक सी: 24/7 हमेशा चालू फ़ॉलबैक श्रृंखला** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**प्लेबुक डी: एजेंट एमसीपी + ए2ए के साथ काम करता है** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ त्वरित शुरुआत **1. विश्व स्तर पर स्थापित करें:** @@ -403,7 +678,7 @@ docker run -d \ --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -599,56 +874,26 @@ npm run electron:build:linux # Linux (.AppImage) - स्वचालित पृष्ठभूमि सिंक - सुरक्षित एन्क्रिप्टेड भंडारण ---- +## 🧪 मूल्यांकन -## 🎯 उपयोग के मामले +ओमनीरूट में गोल्डन सेट के मुकाबले एलएलएम प्रतिक्रिया गुणवत्ता का परीक्षण करने के लिए एक अंतर्निहित मूल्यांकन ढांचा शामिल है। डैशबोर्ड में **एनालिटिक्स → इवेल्स** के माध्यम से इसे एक्सेस करें। -### केस 1: "मेरे पास क्लाउड प्रो सदस्यता है" +### बिल्ट-इन गोल्डन सेट -**समस्या:** भारी कोडिंग के दौरान कोटा अप्रयुक्त, दर सीमा समाप्त हो जाता है +प्री-लोडेड "ओम्नीरूट गोल्डन सेट" में 10 परीक्षण मामले शामिल हैं: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- नमस्ते, गणित, भूगोल, कोड जनरेशन +- JSON प्रारूप अनुपालन, अनुवाद, मार्कडाउन +- सुरक्षा इनकार (हानिकारक सामग्री), गिनती, बूलियन तर्क -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### मूल्यांकन रणनीतियाँ -### केस 2: "मुझे शून्य लागत चाहिए" - -**समस्या:** सदस्यताएं वहन नहीं कर सकते, विश्वसनीय एआई कोडिंग की आवश्यकता है - -### केस 3: "मुझे 24/7 कोडिंग चाहिए, कोई रुकावट नहीं" - -**समस्या:** समय सीमा, डाउनटाइम बर्दाश्त नहीं कर सकते - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### केस 4: "मुझे ओपनक्लॉ में मुफ़्त एआई चाहिए" - -**समस्या:** मैसेजिंग ऐप्स में AI सहायक की आवश्यकता है, पूरी तरह से निःशुल्क - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| रणनीति | विवरण | उदाहरण | +| ---------- | ------------------------------------------------- | -------------------------------- | +| `exact` | आउटपुट बिल्कुल मेल खाना चाहिए | `"4"` | +| `contains` | आउटपुट में सबस्ट्रिंग (केस-असंवेदनशील) होना चाहिए | `"Paris"` | +| `regex` | आउटपुट रेगेक्स पैटर्न से मेल खाना चाहिए | `"1.*2.*3"` | +| `custom` | कस्टम जेएस फ़ंक्शन सही/गलत लौटाता है | `(output) => output.length > 10` | --- @@ -788,95 +1033,6 @@ Cost: $0 forever! --- -## 📊 उपलब्ध मॉडल - -
-सभी उपलब्ध मॉडल देखें - -**क्लाउड कोड (`cc/`)** - प्रो/मैक्स: - -- `cc/claude-opus-4-6` -- `cc/claude-sonnet-4-5-20250929` -- `cc/claude-haiku-4-5-20251001` - -**कोडेक्स (`cx/`)** - प्लस/प्रो: - -- -- `cx/gpt-5.1-codex-max` - -**मिथुन सीएलआई (`gc/`)** - मुफ़्त: - -- `gc/gemini-3-flash-preview` -- `gc/gemini-2.5-pro` - -**गिटहब कोपायलट (`gh/`)**: - -- `gh/gpt-5` -- `gh/claude-4.5-sonnet` - -**एनवीडिया एनआईएम (`nvidia/`)** - मुफ़्त क्रेडिट: - -- `nvidia/llama-3.3-70b-instruct` -- `nvidia/mistral-7b-instruct` -- [build.nvidia.com](https://build.nvidia.com) पर 50+ अधिक मॉडल - -**जीएलएम (`glm/`)** - $0.6/1M: - -- `glm/glm-4.7` - -**मिनीमैक्स (`minimax/`)** - $0.2/1M: - -- `minimax/MiniMax-M2.1` - -**iFlow (`if/`)** - मुफ़्त: - -- `if/kimi-k2-thinking` -- `if/qwen3-coder-plus` -- `if/deepseek-r1` -- `if/glm-4.7` -- `if/minimax-m2` - -**क्वेन (`qw/`)** - मुफ़्त: - -- `qw/qwen3-coder-plus` -- `qw/qwen3-coder-flash` - -**किरो (`kr/`)** - मुफ़्त: - -- `kr/claude-sonnet-4.5` -- `kr/claude-haiku-4.5` - -**ओपनराउटर (`or/`)** - 100+ मॉडल: - -- `or/anthropic/claude-4-sonnet` -- `or/google/gemini-2.5-pro` -- [openrouter.ai/models](https://openrouter.ai/models) से कोई भी मॉडल - ---- - -## 🧪 मूल्यांकन (Evaluations) - -ओमनीरूट में गोल्डन सेट के मुकाबले एलएलएम प्रतिक्रिया गुणवत्ता का परीक्षण करने के लिए एक अंतर्निहित मूल्यांकन ढांचा शामिल है। डैशबोर्ड में **एनालिटिक्स → इवेल्स** के माध्यम से इसे एक्सेस करें। - -### बिल्ट-इन गोल्डन सेट - -प्री-लोडेड "ओम्नीरूट गोल्डन सेट" में 10 परीक्षण मामले शामिल हैं: - -- नमस्ते, गणित, भूगोल, कोड जनरेशन -- JSON प्रारूप अनुपालन, अनुवाद, मार्कडाउन -- सुरक्षा इनकार (हानिकारक सामग्री), गिनती, बूलियन तर्क - -### मूल्यांकन रणनीतियाँ - -| रणनीति | विवरण | उदाहरण | -| ---------- | ------------------------------------------------- | -------------------------------- | -| `exact` | आउटपुट बिल्कुल मेल खाना चाहिए | `"4"` | -| `contains` | आउटपुट में सबस्ट्रिंग (केस-असंवेदनशील) होना चाहिए | `"Paris"` | -| `regex` | आउटपुट रेगेक्स पैटर्न से मेल खाना चाहिए | `"1.*2.*3"` | -| `custom` | कस्टम जेएस फ़ंक्शन सही/गलत लौटाता है | `(output) => output.length > 10` | - ---- - ## 🐛 समस्या निवारण समस्या निवारण मार्गदर्शिका का विस्तार करने के लिए क्लिक करें @@ -929,7 +1085,7 @@ Cost: $0 forever! --- -## 🛠️ टेक स्टैक +## 🛠️ - **रनटाइम**: Node.js 18–22 LTS (⚠️ Node.js 24+ **समर्थित नहीं** है - `better-sqlite3` मूल बायनेरिज़ असंगत हैं) - **भाषा**: टाइपस्क्रिप्ट 5.9 - **100% टाइपस्क्रिप्ट** `src/` और `open-sse/` (v1.0.6) में @@ -978,7 +1134,7 @@ Cost: $0 forever! --- -## 🗺️ रोडमैप +## 🗺️ ओम्निरूट ने कई विकास चरणों में **210+ सुविधाओं की योजना बनाई है**। यहां प्रमुख क्षेत्र हैं: @@ -1003,18 +1159,6 @@ Cost: $0 forever! --- -## 📧समर्थन - -> 💬 **हमारे समुदाय में शामिल हों!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) - सहायता प्राप्त करें, सुझाव साझा करें और अपडेट रहें। - -- **वेबसाइट**: [omniroute.online](https://omniroute.online) -- **गिटहब**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **मुद्दे**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **व्हाट्सएप**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **मूल परियोजना**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 योगदानकर्ता [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) @@ -1065,84 +1209,3 @@ gh release create v1.0.6 --title "v1.0.6" --generate-notes --- --- - -## 🇧🇷 ओमनीरूट - गेटवे डी आईए ग्रैटुइटो - - - -### नूनका पारे डे कोडर। रोटेमेंटो इंटेलिजेंट पैरा **मॉडलोस डी आईए ग्रैटुइटोस और डे बैक्सो कस्टम** कॉम फ़ॉलबैक ऑटोमेटिको। - -_एसईयू प्रॉक्सी यूनिवर्सल डी एपीआई - उम एंडपॉइंट, 36+ प्रोडोर्स, शून्य डाउनटाइम।_ - -### 🌐 इंटरनेशनलिज़ाकाओ (i18n) - -ओम्नीरूट का डैशबोर्ड **मल्टीप्लोस इडियोमास** का समर्थन करता है। उन्हें वास्तविक वितरण: - -| मुहावरा | कोडिगो | स्थिति | -| ----------------------- | ------- | ----------- | -| 🇺🇸 अंग्रेजी | `en` | ✅ कंप्लीटो | -| 🇧🇷 पोर्टुगुएस (ब्राजील) | `pt-BR` | ✅ कंप्लीटो | - -**मुहावरे के बारे में जानकारी:** मुहावरे के चयन पर क्लिक करें (🇺🇸 EN) डैशबोर्ड पर कोई हेडर नहीं → वाक्यांश के चयन के बारे में क्लिक करें। - -**एक नया मुहावरा जोड़ने के लिए:** - -1. `src/i18n/messages/{codigo}.json` को `en.json` पर आधारित करें -2. `src/i18n/config.ts` → `LOCALES` और `LANGUAGES` कोड का उपयोग -3. सेवा प्रदाता की सेवा - -### ⚡ इनिसियो रैपिडो - -```bash -# Instalar via npm -npx omniroute@latest - -# Ou rodar do código-fonte -cp .env.example .env -npm install -PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev -``` - -### 🐳 डॉकर - -```bash -docker run -d --name omniroute -p 20128:20128 diegosouzapw/omniroute:latest -``` - -### 🔑 फंक्सोनियलिडेड्स प्रिंसिपैस - -- **36+ आईए** - क्लाउड, जीपीटी, जेमिनी, लामा, क्वेन, डीपसीक, और अन्य -- **रोटीमेंटो इंटेलिजेंट** — फ़ॉलबैक ऑटोमेटिको एंटर प्रोवोर्स -- **प्रारूप अनुवाद** — OpenAI ↔ क्लाउड ↔ जेमिनी ऑटोमैटिक -- **मल्टी-कॉन्टा** - चयनित इंटेलिजेंट के लिए मल्टीप्लास कॉन्टास -- **कैश सिमेंटिको** - कस्टम और लेटेंसी रेडुज़ -- **OAuth automático** — टोकन स्वचालित रूप से नवीनीकृत होते हैं -- **व्यक्तिगत संयोजन** — 6 रोटेमेंटो एस्ट्रैटेजीस -- **डैशबोर्ड संपूर्ण** - मॉनिटर, लॉग, विश्लेषण, कॉन्फ़िगरेशन -- **सीएलआई उपकरण** - क्लाउड कोड, कोडेक्स, कर्सर, क्लाइन को एक क्लिक पर कॉन्फ़िगर करें -- **100% टाइपस्क्रिप्ट** — कोडिगो लिम्पो और टिपडो - -### 📖 दस्तावेज़ीकरण - -| डॉक्यूमेंटो | विवरण | -| ----------------------------------------------- | --------------------------------------------- | -| [Guia do Usuário](docs/USER_GUIDE.md) | प्रोवेडोर्स, कॉम्बो, सीएलआई, तैनाती | -| [Referência da API](docs/API_REFERENCE.md) | सभी ओएस एंडपॉइंट उदाहरण उदाहरण | -| [Solução de Problemas](docs/TROUBLESHOOTING.md) | समस्याएं और समाधान | -| [Arquitetura](docs/ARCHITECTURE.md) | आर्किटेक्चर और इंटर्नोस डो सिस्तेमा | -| [Contribuição](CONTRIBUTING.md) | सेटअप डे डेसेनवोल्विमेंटो ई दिशानिर्देश | -| [Deploy em VM](docs/VM_DEPLOYMENT_GUIDE.md) | संपूर्ण मार्गदर्शिका: VM + nginx + Cloudflare | - -### 📧 सपोर्ट - -> 💬 **एक अधिसूचना के लिए प्रवेश!** [Grupo WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — दो सप्ताह, पूर्ण विवरण और पूर्ण विवरण। - -- **वेबसाइट**: [omniroute.online](https://omniroute.online) -- **गिटहब**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **मुद्दे**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) - ---- - -24/7 कोड करने वाले डेवलपर्स के लिए ❤️ के साथ निर्मित - -omniroute.online diff --git a/README.it.md b/README.it.md index d827422147..0efcca8906 100644 --- a/README.it.md +++ b/README.it.md @@ -110,6 +110,35 @@ _Connetti qualsiasi IDE o strumento CLI con IA tramite OmniRoute — gateway API --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Perché OmniRoute? **Smetti di sprecare soldi e di sbattere contro i limiti:** @@ -128,6 +157,19 @@ _Connetti qualsiasi IDE o strumento CLI con IA tramite OmniRoute — gateway API --- +## 📧 Supporto + +> 💬 **Unisciti alla nostra community!** [Gruppo WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Ottieni aiuto, condividi consigli e rimani aggiornato. + +- **Sito Web**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Gruppo della comunità](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **WhatsApp**: [Gruppo della comunità](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Progetto Originale**: [9router di decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Come Funziona ``` @@ -157,263 +199,497 @@ Risultato: Non smettere mai di programmare, costo minimo --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Cosa risolve OmniRoute: 30 punti critici reali e casi d'uso -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Ogni sviluppatore che utilizza strumenti di intelligenza artificiale affronta questi problemi quotidianamente.** OmniRoute è stato creato per risolverli tutti: dai superamenti dei costi ai blocchi regionali, dai flussi OAuth interrotti alle operazioni di protocollo e all'osservabilità aziendale.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Pago un abbonamento costoso ma vengo comunque interrotto dai limiti" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Gli sviluppatori pagano $ 20-200 al mese per Claude Pro, Codex Pro o GitHub Copilot. Anche pagando, la quota ha un tetto: 5 ore di utilizzo, limiti settimanali o limiti di tariffa al minuto. A metà sessione di codifica, il provider smette di rispondere e lo sviluppatore perde flusso e produttività. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Fallback intelligente a 4 livelli**: se la quota dell'abbonamento si esaurisce, reindirizza automaticamente alla chiave API → Economico → Gratuito senza alcun intervento manuale +- **Monitoraggio delle quote in tempo reale**: mostra il consumo di token in tempo reale con il conto alla rovescia ripristinato (5 ore, giornaliero, settimanale) +- **Supporto multi-account**: più account per fornitore con round robin automatico: quando uno si esaurisce, passa a quello successivo +- **Combo personalizzate** — Catene di fallback personalizzabili con 6 strategie di bilanciamento (fill-first, round-robin, P2C, casuale, meno utilizzato, ottimizzato in termini di costi) +- **Quote aziendali Codex**: monitoraggio delle quote dello spazio di lavoro aziendale/team direttamente nella dashboard
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Devo utilizzare più provider ma ognuno ha un'API diversa" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI utilizza un formato, Claude (Anthropic) ne utilizza un altro, Gemini ancora un altro. Se uno sviluppatore desidera testare modelli di fornitori diversi o eseguire il fallback tra di loro, deve riconfigurare gli SDK, modificare gli endpoint e gestire formati incompatibili. I provider personalizzati (FriendLI, NIM) hanno endpoint del modello non standard. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Endpoint unificato**: un singolo `http://localhost:20128/v1` funge da proxy per tutti gli oltre 36 provider +- **Traduzione del formato** — Automatica e trasparente: OpenAI ↔ Claude ↔ Gemini ↔ API di risposta +- **Sanitizzazione della risposta**: rimuove i campi non standard (`x_groq`, `usage_breakdown`, `service_tier`) che interrompono OpenAI SDK v1.83+ +- **Normalizzazione del ruolo**: converte `developer` → `system` per provider non OpenAI; `system` → `user` per GLM/ERNIE +- **Think Tag Extraction** — Estrae i blocchi `` da modelli come DeepSeek R1 in `reasoning_content` standardizzati +- **Uscita strutturata per Gemini** — `json_schema` → `responseMimeType`/`responseSchema` conversione automatica +- **`stream` per impostazione predefinita è `false`** — Si allinea con le specifiche OpenAI, evitando SSE imprevisti negli SDK Python/Rust/Go
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "Il mio fornitore di intelligenza artificiale blocca la mia regione/paese" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Provider come OpenAI/Codex bloccano l'accesso da determinate regioni geografiche. Gli utenti ricevono errori come `unsupported_country_region_territory` durante le connessioni OAuth e API. Ciò è particolarmente frustrante per gli sviluppatori dei paesi in via di sviluppo. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **Configurazione proxy a 3 livelli**: proxy configurabile a 3 livelli: globale (tutto il traffico), per provider (un solo provider) e per connessione/chiave +- **Badge proxy con codice colore** — Indicatori visivi: 🟢 proxy globale, 🟡 proxy provider, 🔵 proxy di connessione, che mostra sempre l'IP +- **Scambio di token OAuth tramite proxy**: anche il flusso OAuth passa attraverso il proxy, risolvendo `unsupported_country_region_territory` +- **Test di connessione tramite proxy**: i test di connessione utilizzano il proxy configurato (non più bypass diretto) +- **Supporto SOCKS5**: supporto completo del proxy SOCKS5 per il routing in uscita +- **Spoofing dell'impronta digitale TLS**: impronta digitale TLS simile a un browser tramite `wreq-js` per bypassare il rilevamento dei bot
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "Voglio usare l'intelligenza artificiale per programmare ma non ho soldi" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Non tutti possono pagare $ 20-200 al mese per gli abbonamenti AI. Studenti, sviluppatori provenienti da paesi emergenti, hobbisti e liberi professionisti hanno bisogno di accedere a modelli di qualità a costo zero. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Fornitori del livello gratuito integrati**: supporto nativo per fornitori gratuiti al 100%: iFlow (8 modelli illimitati), Qwen (3 modelli illimitati), Kiro (Claude gratis), Gemini CLI (180.000/mese gratuiti) +- **Combo solo gratuiti** — Catena `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $ 0/mese senza tempi di inattività +- **Crediti gratuiti NVIDIA NIM**: 1000 crediti gratuiti integrati +- **Strategia di ottimizzazione dei costi**: strategia di routing che sceglie automaticamente il fornitore più economico disponibile
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Devo proteggere il mio gateway AI da accessi non autorizzati" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Quando si espone un gateway AI alla rete (LAN, VPS, Docker), chiunque abbia l'indirizzo può consumare i token/la quota dello sviluppatore. Senza protezione, le API sono vulnerabili ad usi impropri, tempestive iniezioni e abusi. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Gestione delle chiavi API**: generazione, rotazione e ambito per provider con una pagina `/dashboard/api-manager` dedicata +- **Autorizzazioni a livello di modello**: limita le chiavi API a modelli specifici (`openai/*`, modelli con caratteri jolly), con l'interruttore Consenti tutto/Limita +- **API Endpoint Protection**: richiede una chiave per `/v1/models` e blocca provider specifici dall'elenco +- **Auth Guard + Protezione CSRF**: tutti i percorsi del dashboard protetti con middleware `withAuth` + token CSRF +- **Rate Limiter**: limitazione della velocità per IP con finestre configurabili +- **Filtro IP**: lista consentita/lista bloccata per il controllo degli accessi +- **Prompt Injection Guard**: sanificazione contro modelli di prompt dannosi +- **Crittografia AES-256-GCM**: credenziali crittografate a riposo
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "Il mio provider è andato in tilt e ho perso il flusso di codifica" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +I fornitori di intelligenza artificiale possono diventare instabili, restituire errori 5xx o raggiungere limiti di velocità temporanei. Se uno sviluppatore dipende da un singolo fornitore, viene interrotto. Senza interruttori automatici, tentativi ripetuti possono bloccare l'applicazione. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Interruttore automatico per provider**: apertura/chiusura automatica con soglie e raffreddamento configurabili (chiuso/aperto/semiaperto) +- **Backoff esponenziale**: ritardi progressivi tra i tentativi +- **Anti-Thundering Herd** — Mutex + protezione semaforo contro tempeste di tentativi simultanei +- **Catene di fallback combinate**: se il fornitore primario fallisce, cade automaticamente nella catena senza alcun intervento +- **Combo Circuit Breaker**: disabilita automaticamente i provider in errore all'interno di una catena combinata +- **Dashboard integrità**: monitoraggio del tempo di attività, stati degli interruttori automatici, blocchi, statistiche della cache, latenza p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "Configurare ogni strumento AI è noioso e ripetitivo" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Gli sviluppatori utilizzano Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Ogni strumento necessita di una configurazione diversa (endpoint API, chiave, modello). La riconfigurazione quando si cambia fornitore o modello è una perdita di tempo. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **Dashboard degli strumenti CLI**: pagina dedicata con configurazione con un clic per Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator**: genera `chatLanguageModels.json` per VS Code con selezione di modelli in blocco +- **Procedura guidata di onboarding**: configurazione guidata in 4 passaggi per gli utenti alle prime armi +- **Un endpoint, tutti i modelli**: configura `http://localhost:20128/v1` una volta, accedi a oltre 36 provider
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "Gestire token OAuth da più provider è un inferno" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot: utilizzano tutti OAuth 2.0 con token in scadenza. Gli sviluppatori devono autenticarsi nuovamente costantemente, gestire `client_secret is missing`, `redirect_uri_mismatch` e errori sui server remoti. OAuth su LAN/VPS è particolarmente problematico. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Aggiornamento automatico dei token**: i token OAuth si aggiornano in background prima della scadenza +- **OAuth 2.0 (PKCE) integrato**: flusso automatico per Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **OAuth multi-account**: account multipli per provider tramite estrazione di token JWT/ID +- **OAuth LAN/Correzione remota**: rilevamento IP privato per `redirect_uri` + modalità URL manuale per server remoti +- **OAuth Behind Nginx**: utilizza `window.location.origin` per la compatibilità con proxy inverso +- **Guida OAuth remota**: guida passo passo per le credenziali Google Cloud su VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "Non so quanto sto spendendo né dove" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Gli sviluppatori utilizzano più fornitori a pagamento ma non hanno una visione unificata della spesa. Ogni fornitore ha il proprio dashboard di fatturazione, ma non esiste una visualizzazione consolidata. I costi imprevisti possono accumularsi. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Dashboard di analisi dei costi**: monitoraggio dei costi per token e gestione del budget per fornitore +- **Limiti di budget per livello**: massimale di spesa per livello che attiva il fallback automatico +- **Configurazione dei prezzi per modello**: prezzi configurabili per modello +- **Statistiche di utilizzo per chiave API**: conteggio delle richieste e timestamp dell'ultimo utilizzo per chiave +- **Dashboard di analisi**: schede statistiche, grafico di utilizzo del modello, tabella dei fornitori con percentuali di successo e latenza
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "Non riesco a diagnosticare errori e problemi nelle chiamate AI" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Quando una chiamata fallisce, lo sviluppatore non sa se si trattava di un limite di velocità, di un token scaduto, di un formato errato o di un errore del provider. Registri frammentati su diversi terminali. Senza osservabilità, il debug è un processo per tentativi ed errori. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Dashboard dei registri unificati**: 4 schede: registri delle richieste, registri del proxy, registri di controllo, console +- **Visualizzatore log della console**: visualizzatore in stile terminale in tempo reale con livelli codificati a colori, scorrimento automatico, ricerca, filtro +- **Registri proxy SQLite**: registri persistenti che sopravvivono ai riavvii del server +- **Translator Playground** — 4 modalità di debug: Playground (traduzione del formato), Chat Tester (andata e ritorno), Test Bench (batch), Live Monitor (in tempo reale) +- **Telemetria richiesta**: latenza p50/p95/p99 + traccia X-Request-Id +- **Registrazione basata su file con rotazione**: l'interceptor della console acquisisce tutto nel registro JSON con rotazione basata sulle dimensioni
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "L'implementazione e la manutenzione del gateway sono complesse" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +L'installazione, la configurazione e la manutenzione di un proxy AI in diversi ambienti (locale, VPS, Docker, cloud) richiedono molto lavoro. Problemi come percorsi codificati, `EACCES` nelle directory, conflitti di porte e build multipiattaforma aggiungono attrito. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **Installazione globale npm** — `npm install -g omniroute && omniroute` — completata +- **Docker multipiattaforma** — AMD64 + ARM64 nativo (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Docker Compose Profiles** — `base` (senza strumenti CLI) e `cli` (con Claude Code, Codex, OpenClaw) +- **App desktop Electron**: app nativa per Windows/macOS/Linux con barra delle applicazioni, avvio automatico, modalità offline +- **Modalità porta divisa**: API e dashboard su porte separate per scenari avanzati (proxy inverso, rete di contenitori) +- **Cloud Sync**: configura la sincronizzazione tra dispositivi tramite Cloudflare Workers +- **Backup DB**: backup, ripristino, esportazione e importazione automatici di tutte le impostazioni
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "L'interfaccia è solo inglese e il mio team non parla inglese" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +I team nei paesi non anglofoni, soprattutto in America Latina, Asia ed Europa, hanno difficoltà con le interfacce solo in inglese. Le barriere linguistiche riducono l'adozione e aumentano gli errori di configurazione. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Dashboard i18n — 30 lingue** — Tutti gli oltre 500 tasti tradotti tra cui arabo, bulgaro, danese, tedesco, spagnolo, finlandese, francese, ebraico, hindi, ungherese, indonesiano, italiano, giapponese, coreano, malese, olandese, norvegese, polacco, portoghese (PT/BR), rumeno, russo, slovacco, svedese, tailandese, ucraino, vietnamita, cinese, filippino, inglese +- **Supporto RTL**: supporto da destra a sinistra per arabo ed ebraico +- **README multilingue**: 30 traduzioni complete di documentazione +- **Selettore lingua**: icona del globo nell'intestazione per la commutazione in tempo reale
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "Ho bisogno di qualcosa di più della semplice chat: ho bisogno di incorporamenti, immagini, audio" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +L'intelligenza artificiale non è solo il completamento della chat. Gli sviluppatori devono generare immagini, trascrivere audio, creare incorporamenti per RAG, riclassificare i documenti e moderare i contenuti. Ogni API ha un endpoint e un formato diversi. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Incorporamenti** — `/v1/embeddings` con 6 fornitori e oltre 9 modelli +- **Generazione di immagini** — `/v1/images/generations` con 10 provider e oltre 20 modelli (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Da testo a video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) e SD WebUI +- **Trasformazione testo in musica** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Trascrizione audio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Sintesi vocale** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + fornitori esistenti +- **Moderazioni** — `/v1/moderations` — Controlli di sicurezza dei contenuti +- **Riclassificazione** — `/v1/rerank`: riclassificazione della pertinenza del documento +- **API di risposta**: supporto `/v1/responses` completo per Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "Non ho modo di testare e confrontare la qualità tra i modelli" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Gli sviluppatori vogliono sapere quale modello è il migliore per il loro caso d'uso (codice, traduzione, ragionamento), ma il confronto manuale è lento. Non esistono strumenti di valutazione integrati. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Valutazioni LLM**: test Golden Set con 10 casi precaricati che coprono saluti, matematica, geografia, generazione di codice, conformità JSON, traduzione, ribasso, rifiuto di sicurezza +- **4 strategie di corrispondenza** — `exact`, `contains`, `regex`, `custom` (funzione JS) +- **Translator Playground Test Bench**: test in batch con input multipli e output previsti, confronto tra provider +- **Chat Tester**: andata e ritorno completo con rendering della risposta visiva +- **Live Monitor**: flusso in tempo reale di tutte le richieste che passano attraverso il proxy
-📈 15. "I need to scale without losing performance" +📈 15. "Ho bisogno di scalare senza perdere prestazioni" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +Man mano che il volume delle richieste cresce, senza la memorizzazione nella cache le stesse domande generano costi duplicati. Senza idempotenza, le richieste duplicate sprecano elaborazione. I limiti tariffari per fornitore devono essere rispettati. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Cache semantica**: la cache a due livelli (firma + semantica) riduce costi e latenza +- **Idempotenza richiesta**: finestra di deduplicazione di 5 secondi per richieste identiche +- **Rilevamento del limite di velocità**: RPM per provider, gap minimo e monitoraggio simultaneo massimo +- **Limiti di velocità modificabili**: impostazioni predefinite configurabili in Impostazioni → Resilienza con persistenza +- **Cache di convalida della chiave API**: cache a 3 livelli per prestazioni di produzione +- **Dashboard integrità con telemetria**: latenza p50/p95/p99, statistiche cache, tempo di attività
-🤖 16. "I want to control model behavior globally" +🤖 16. "Voglio controllare il comportamento del modello a livello globale" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Sviluppatori che desiderano tutte le risposte in una lingua specifica, con un tono specifico o che desiderano limitare i token di ragionamento. Configurarlo in ogni strumento/richiesta non è pratico. -**How OmniRoute solves it:** +**Come OmniRoute risolve il problema:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **Inserimento prompt di sistema**: prompt globale applicato a tutte le richieste +- **Thinking Budget Validation**: controllo dell'allocazione dei token tramite ragionamento per richiesta (passthrough, automatico, personalizzato, adattivo) +- **6 Strategie di routing**: strategie globali che determinano la modalità di distribuzione delle richieste +- **Wildcard Router**: i modelli `provider/*` instradano dinamicamente a qualsiasi provider +- **Abilita/Disabilita combo**: attiva/disattiva le combo direttamente dalla dashboard +- **Attiva/disattiva provider**: attiva/disattiva tutte le connessioni per un provider con un clic +- **Fornitori bloccati**: esclude fornitori specifici dall'elenco `/v1/models`
+
+🧰 17. "Ho bisogno degli strumenti MCP come funzionalità di prodotto di prima classe" + +Molti gateway AI espongono MCP solo come dettaglio di implementazione nascosto. I team hanno bisogno di un livello operativo visibile e gestibile. + +**Come OmniRoute risolve il problema:** + +- MCP viene visualizzato nella navigazione del dashboard e nella scheda del protocollo dell'endpoint +- Pagina di gestione MCP dedicata con processo, strumenti, ambiti e audit +- Avvio rapido integrato per `omniroute --mcp` e onboarding del client + +
+ +
+🧠 18. "Ho bisogno dell'orchestrazione A2A con percorsi di attività di sincronizzazione + streaming" + +I flussi di lavoro degli agenti necessitano sia di risposte dirette che di esecuzione in streaming di lunga durata con controllo del ciclo di vita. + +**Come OmniRoute risolve il problema:** + +- Endpoint A2A JSON-RPC (`POST /a2a`) con `message/send` e `message/stream` +- Streaming SSE con propagazione dello stato terminale +- API del ciclo di vita delle attività per `tasks/get` e `tasks/cancel` + +
+ +
+🛰️ 19. "Ho bisogno dello stato reale del processo MCP, non di uno stato indovinato" + +I team operativi devono sapere se MCP è effettivamente attivo, non solo se un'API è raggiungibile. + +**Come OmniRoute risolve il problema:** + +- File heartbeat di runtime con PID, timestamp, trasporto, conteggio strumenti e modalità ambito +- API di stato MCP che combina battito cardiaco + attività recente +- Schede di stato dell'interfaccia utente per l'aggiornamento di processo/tempo di attività/battito cardiaco + +
+ +
+📋 20. "Ho bisogno dell'esecuzione verificabile dello strumento MCP" + +Quando gli strumenti modificano la configurazione o attivano azioni operative, i team necessitano di tracciabilità forense. + +**Come OmniRoute risolve il problema:** + +- Registrazione di controllo supportata da SQLite per le chiamate allo strumento MCP +- Filtri per strumento, successo/fallimento, chiave API e impaginazione +- Tabella di controllo della dashboard + endpoint statistici per l'automazione + +
+ +
+🔐 21. "Ho bisogno di autorizzazioni MCP con ambito per integrazione" + +Client diversi dovrebbero avere accesso con privilegi minimi alle categorie di strumenti. + +**Come OmniRoute risolve il problema:** + +- 9 ambiti MCP granulari per l'accesso controllato agli strumenti +- Applicazione dell'ambito e visibilità nell'interfaccia utente di gestione MCP +- Postura predefinita sicura per gli strumenti operativi + +
+ +
+⚙️ 22. "Ho bisogno di controlli operativi senza ridistribuirmi" + +I team necessitano di rapidi cambiamenti di runtime durante incidenti o eventi di costo. + +**Come OmniRoute risolve il problema:** + +- Cambia l'attivazione combinata direttamente dalla dashboard MCP +- Applicare profili di resilienza da pacchetti di policy predefiniti +- Ripristinare lo stato dell'interruttore dallo stesso pannello operativo + +
+ +
+🔄 23. "Ho bisogno di visibilità e cancellazione del ciclo di vita delle attività A2A in tempo reale" + +Senza visibilità del ciclo di vita, gli incidenti relativi alle attività diventano difficili da valutare. + +**Come OmniRoute risolve il problema:** + +- Elenco/filtro delle attività per stato/competenza con impaginazione +- Esamina i metadati, gli eventi e gli artefatti delle attività +- Endpoint di annullamento dell'attività e azione dell'interfaccia utente con conferma + +
+ +
+🌊 24. "Ho bisogno di metriche di flusso attive per il carico A2A" + +I flussi di lavoro in streaming richiedono informazioni operative sulla concorrenza e sulle connessioni live. + +**Come OmniRoute risolve il problema:** + +- Contatori di flussi attivi integrati nello stato A2A +- Timestamp dell'ultima attività e conteggi per stato +- Schede dashboard A2A per il monitoraggio delle operazioni in tempo reale + +
+ +
+🪪 25. "Ho bisogno del rilevamento degli agenti standard per i clienti" + +I client e gli agenti di orchestrazione esterni necessitano di metadati leggibili dal computer per l'onboarding. + +**Come OmniRoute risolve il problema:** + +- Carta Agente esposta a `/.well-known/agent.json` +- Capacità e competenze mostrate nell'interfaccia utente di gestione +- L'API di stato A2A include metadati di rilevamento per l'automazione + +
+ +
+🧭 26. "Ho bisogno della rilevabilità del protocollo nella UX del prodotto" + +Se gli utenti non riescono a scoprire le superfici del protocollo, l'adozione e la qualità del supporto diminuiscono. + +**Come OmniRoute risolve il problema:** + +- Voci della barra laterale per MCP e A2A +- Scheda Protocolli della pagina Endpoint con avvio rapido e stato +- Collegamenti dalla panoramica alle dashboard di gestione dedicate + +
+ +
+🧪 27. "Ho bisogno della convalida del protocollo end-to-end con clienti reali" + +I test simulati non sono sufficienti per verificare la compatibilità del protocollo prima del rilascio. + +**Come OmniRoute risolve il problema:** + +- Suite E2E che avvia l'app e utilizza il trasporto client SDK MCP reale +- Test client A2A per i flussi di rilevamento, invio, streaming, acquisizione e annullamento +- Effettuare un controllo incrociato delle asserzioni con l'audit MCP e le API delle attività A2A + +
+ +
+📡 28. "Ho bisogno di osservabilità unificata su tutte le interfacce" + +Suddividere l'osservabilità per protocollo crea punti ciechi e un MTTR più lungo. + +**Come OmniRoute risolve il problema:** + +- Dashboard/registri/analisi unificati in un unico prodotto +- Salute + audit + richiesta di telemetria su livelli OpenAI, MCP e A2A +- API operative per stato e automazione + +
+ +
+💼 29. "Ho bisogno di un runtime per proxy + strumenti + orchestrazione agente" + +L'esecuzione di numerosi servizi separati aumenta i costi operativi e le modalità di guasto. + +**Come OmniRoute risolve il problema:** + +- Proxy compatibile con OpenAI, server MCP e server A2A in uno stack +- Autenticazione condivisa, resilienza, archivio dati e osservabilità +- Modello politico coerente su tutte le superfici di interazione + +
+ +
+🚀 30. "Ho bisogno di spedire flussi di lavoro di agenti senza la proliferazione del codice adesivo" + +I team perdono velocità quando uniscono più servizi e script ad hoc. + +**Come OmniRoute risolve il problema:** + +- Strategia endpoint unificata per clienti e agenti +- Interfacce utente di gestione del protocollo integrate e percorsi di convalida del fumo +- Fondamenti pronti per la produzione (sicurezza, registrazione, resilienza, backup) + +
+ +### Playbook di esempio (casi d'uso integrati) + +**Playbook A: massimizza l'abbonamento a pagamento + backup economico** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: stack di codifica a costo zero** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: catena di fallback sempre attiva 24 ore su 24, 7 giorni su 7** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: operazioni dell'agente con MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Avvio Rapido **1. Installa globalmente:** @@ -506,7 +782,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -696,66 +972,26 @@ Traduzione trasparente tra formati:
---- +## 🧪 Valutazioni (Evals) -## 🎯 Casi d'Uso +OmniRoute include un framework di valutazione integrato per testare la qualità delle risposte LLM contro un golden set. Accesso via **Analytics → Evals** nella dashboard. -### Caso 1: "Ho un abbonamento Claude Pro" +### Set integrato -**Problema:** La quota scade inutilizzata, limiti di rate durante la programmazione intensa +Il "OmniRoute Golden Set" precaricato contiene 10 casi di test: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (usa l'abbonamento al massimo) - 2. glm/glm-4.7 (backup economico quando la quota è esaurita) - 3. if/kimi-k2-thinking (fallback d'emergenza gratuito) +- Saluti, matematica, geografia, generazione codice +- Conformità formato JSON, traduzione, markdown +- Rifiuto sicurezza (contenuto nocivo), conteggio, logica booleana -Costo mensile: $20 (abbonamento) + ~$5 (backup) = $25 totale -vs. $20 + sbattere contro i limiti = frustrazione -``` +### Strategie di valutazione -### Caso 2: "Voglio costo zero" - -**Problema:** Non può permettersi abbonamenti, ha bisogno di IA affidabile per programmare - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K gratis/mese) - 2. if/kimi-k2-thinking (illimitato gratis) - 3. qw/qwen3-coder-plus (illimitato gratis) - -Costo mensile: $0 -Qualità: Modelli pronti per la produzione -``` - -### Caso 3: "Devo programmare 24/7, senza interruzioni" - -**Problema:** Scadenze strette, non può permettersi downtime - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (migliore qualità) - 2. cx/gpt-5.2-codex (secondo abbonamento) - 3. glm/glm-4.7 (economico, reset giornaliero) - 4. minimax/MiniMax-M2.1 (più economico, reset 5h) - 5. if/kimi-k2-thinking (gratuito illimitato) - -Risultato: 5 livelli di fallback = zero downtime -``` - -### Caso 4: "Voglio IA GRATUITA in OpenClaw" - -**Problema:** Ha bisogno di assistente IA nelle app di messaggistica, completamente gratuito - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (illimitato gratis) - 2. if/minimax-m2.1 (illimitato gratis) - 3. if/kimi-k2-thinking (illimitato gratis) - -Costo mensile: $0 -Accesso via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Strategia | Descrizione | Esempio | +| ---------- | ---------------------------------------------------------- | -------------------------------- | +| `exact` | L'output deve corrispondere esattamente | `"4"` | +| `contains` | L'output deve contenere la sottostringa (case-insensitive) | `"Paris"` | +| `regex` | L'output deve corrispondere al pattern regex | `"1.*2.*3"` | +| `custom` | Funzione JS personalizzata restituisce true/false | `(output) => output.length > 10` | --- @@ -1039,29 +1275,6 @@ Impostazioni → Configurazione API: --- -## 🧪 Valutazioni (Evals) - -OmniRoute include un framework di valutazione integrato per testare la qualità delle risposte LLM contro un golden set. Accesso via **Analytics → Evals** nella dashboard. - -### Golden Set integrato - -Il "OmniRoute Golden Set" precaricato contiene 10 casi di test: - -- Saluti, matematica, geografia, generazione codice -- Conformità formato JSON, traduzione, markdown -- Rifiuto sicurezza (contenuto nocivo), conteggio, logica booleana - -### Strategie di valutazione - -| Strategia | Descrizione | Esempio | -| ---------- | ---------------------------------------------------------- | -------------------------------- | -| `exact` | L'output deve corrispondere esattamente | `"4"` | -| `contains` | L'output deve contenere la sottostringa (case-insensitive) | `"Paris"` | -| `regex` | L'output deve corrispondere al pattern regex | `"1.*2.*3"` | -| `custom` | Funzione JS personalizzata restituisce true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Risoluzione Problemi
@@ -1117,7 +1330,7 @@ Il "OmniRoute Golden Set" precaricato contiene 10 casi di test: --- -## 🛠️ Stack Tecnologico +## 🛠️ - **Runtime**: Node.js 20+ - **Linguaggio**: TypeScript 5.9 — **100% TypeScript** in `src/` e `open-sse/` (v1.0.6) @@ -1148,18 +1361,7 @@ Il "OmniRoute Golden Set" precaricato contiene 10 casi di test: --- -## 📧 Supporto - -> 💬 **Unisciti alla nostra community!** [Gruppo WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Ottieni aiuto, condividi consigli e rimani aggiornato. - -- **Sito Web**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Gruppo della comunità](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **WhatsApp**: [Gruppo della comunità](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Progetto Originale**: [9router di decolua](https://github.com/decolua/9router) - ---- +## 🗺️ ## 👥 Contributori diff --git a/README.ja.md b/README.ja.md index 63d9affbcd..2def3bafd7 100644 --- a/README.ja.md +++ b/README.ja.md @@ -110,6 +110,35 @@ _AI を活用した IDE または CLI ツールを、無制限のコーディン --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 なぜオムニルートなのか? **お金の無駄遣いや限界に達するのはやめましょう:** @@ -128,6 +157,18 @@ _AI を活用した IDE または CLI ツールを、無制限のコーディン --- +## 📧 サポート + +> 💬 **コミュニティに参加してください!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — ヘルプを取得し、ヒントを共有し、最新情報を入手してください。 + +- **ウェブサイト**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **問題**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **オリジナル プロジェクト**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 仕組み ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 OmniRoute が解決するもの — 30 の実際の問題点とユースケース -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **AI ツールを使用するすべての開発者は、これらの問題に日々直面しています。** OmniRoute は、コスト超過から地域ブロック、壊れた OAuth フローからプロトコル操作、企業の可観測性まで、それらすべてを解決するために構築されました。
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. 「高価なサブスクリプションの料金を支払っているのに、制限によって中断されます」 -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +開発者は、Claude Pro、Codex Pro、または GitHub Copilot に月額 20 ~ 200 ドルを支払います。有料であっても、割り当てには上限があり、5 時間の使用量、週ごとの制限、または分ごとのレート制限があります。コーディング セッションの途中でプロバイダーが応答を停止し、開発者はフローと生産性を失います。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **スマート 4 層フォールバック** — サブスクリプション クォータが不足すると、手動介入なしで自動的に API キー→格安→無料にリダイレクトされます。 +- **リアルタイム クォータ トラッキング** — リセット カウントダウン (5 時間、毎日、毎週) でトークンの消費量をリアルタイムで表示します。 +- **マルチアカウントのサポート** — 自動ラウンドロビンによるプロバイダーごとの複数のアカウント — 1 つのアカウントがなくなると、次のアカウントに切り替わります +- **カスタム コンボ** — 6 つのバランシング戦略 (フィルファースト、ラウンドロビン、P2C、ランダム、最小使用、コスト最適化) を備えたカスタマイズ可能なフォールバック チェーン +- **Codex Business クォータ** — ビジネス/チームのワークスペース クォータをダッシュボードで直接監視
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. 「複数のプロバイダーを使用する必要がありますが、それぞれに異なる API があります」 -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI は 1 つの形式を使用し、Claude (Anthropic) は別の形式を使用し、Gemini はさらに別の形式を使用します。開発者が異なるプロバイダーのモデルをテストしたり、プロバイダー間でフォールバックしたりする場合は、SDK を再構成し、エンドポイントを変更し、互換性のない形式に対処する必要があります。カスタム プロバイダー (FriendLI、NIM) には、非標準モデルのエンドポイントがあります。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **統合エンドポイント** - 単一の `http://localhost:20128/v1` が 36 を超えるすべてのプロバイダーのプロキシとして機能します +- **フォーマット変換** — 自動かつ透過的: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **レスポンスのサニタイズ** — OpenAI SDK v1.83 以降を破壊する非標準フィールド (`x_groq`、`usage_breakdown`、`service_tier`) を除去します。 +- **ロールの正規化** — 非 OpenAI プロバイダーに対して `developer` → `system` を変換します。 GLM/ERNIE 用 `system` → `user` +- **Think Tag Extraction** — DeepSeek R1 などのモデルから `` ブロックを標準化された `reasoning_content` に抽出します。 +- **Gemini の構造化出力** — `json_schema` → `responseMimeType`/`responseSchema` 自動変換 +- **`stream` のデフォルトは `false`** — OpenAI 仕様に準拠し、Python/Rust/Go SDK での予期しない SSE を回避します
-🌐 3. "My AI provider blocks my region/country" +🌐 3. 「AI プロバイダーが私の地域/国をブロックしています」 -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +OpenAI/Codex などのプロバイダーは、特定の地理的地域からのアクセスをブロックします。 OAuth および API 接続中に、ユーザーは `unsupported_country_region_territory` のようなエラーを受け取ります。これは、発展途上国の開発者にとって特にイライラさせられます。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **3 レベルのプロキシ構成** — 3 つのレベルで構成可能なプロキシ: グローバル (すべてのトラフィック)、プロバイダーごと (1 つのプロバイダーのみ)、および接続/キーごと +- **色分けされたプロキシ バッジ** — 視覚的なインジケーター: 🟢 グローバル プロキシ、🟡 プロバイダー プロキシ、🔵 接続プロキシ、常に IP を表示 +- **プロキシを介した OAuth トークン交換** — OAuth フローもプロキシを通過し、`unsupported_country_region_territory` を解決します +- **プロキシ経由の接続テスト** — 接続テストは構成されたプロキシを使用します (直接バイパスはありません)。 +- **SOCKS5 サポート** — アウトバウンド ルーティングに対する SOCKS5 プロキシの完全なサポート +- **TLS フィンガープリント スプーフィング** — `wreq-js` を介したブラウザーのような TLS フィンガープリントによりボット検出をバイパスします
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. 「AIを使ってコーディングしたいけどお金がない」 -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +誰もが AI サブスクリプションに月額 20 ~ 200 ドルを支払えるわけではありません。学生、新興国の開発者、愛好家、フリーランサーは、高品質のモデルに無料でアクセスできる必要があります。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **無料利用枠プロバイダーの組み込み** — 100% 無料プロバイダーのネイティブ サポート: iFlow (8 つの無制限のモデル)、Qwen (3 つの無制限のモデル)、Kiro (無料の Claude)、Gemini CLI (180K/月無料) +- **無料のみのコンボ** — チェーン `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = 月額 0 ドル、ダウンタイムなし +- **NVIDIA NIM 無料クレジット** — 1000 の無料クレジットが統合されています +- **コスト最適化戦略** — 利用可能な最も安価なプロバイダーを自動的に選択するルーティング戦略
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. 「AI ゲートウェイを不正アクセスから保護する必要があります」 -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +AI ゲートウェイをネットワーク (LAN、VPS、Docker) に公開すると、アドレスを持っている人は誰でも開発者のトークン/クォータを消費できます。保護がなければ、API は誤用、即時挿入、悪用に対して脆弱になります。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **API キー管理** — 専用の `/dashboard/api-manager` ページを使用したプロバイダーごとの生成、ローテーション、およびスコープ設定 +- **モデルレベルの権限** — すべて許可/制限の切り替えにより、API キーを特定のモデル (`openai/*`、ワイルドカード パターン) に制限します +- **API エンドポイント保護** - `/v1/models` のキーを要求し、リストから特定のプロバイダーをブロックします +- **認証ガード + CSRF 保護** — すべてのダッシュボード ルートは `withAuth` ミドルウェア + CSRF トークンで保護されています +- **レート リミッター** — 構成可能なウィンドウによる IP ごとのレート制限 +- **IP フィルタリング** — アクセス制御の許可リスト/ブロックリスト +- **プロンプト インジェクション ガード** — 悪意のあるプロンプト パターンに対するサニタイズ +- **AES-256-GCM 暗号化** — 認証情報は保存時に暗号化されます
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. 「プロバイダーがダウンしてコーディング フローが失われました」 -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +AI プロバイダーが不安定になったり、5xx エラーを返したり、一時的なレート制限に達したりする可能性があります。開発者が単一のプロバイダーに依存している場合、それらは中断されます。サーキット ブレーカーがないと、再試行を繰り返すとアプリケーションがクラッシュする可能性があります。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **プロバイダーごとのサーキット ブレーカー** — 設定可能なしきい値とクールダウンによる自動開閉 (クローズ/オープン/ハーフオープン) +- **指数バックオフ** — 漸進的な再試行遅延 +- **Anti-Thundering Herd** — 同時再試行の嵐に対するミューテックス + セマフォ保護 +- **コンボ フォールバック チェーン** - プライマリ プロバイダーに障害が発生した場合、介入なしで自動的にチェーンを通過します。 +- **コンボ サーキット ブレーカー** — コンボ チェーン内の障害が発生したプロバイダーを自動的に無効にします +- **ヘルス ダッシュボード** — 稼働時間モニタリング、サーキット ブレーカーの状態、ロックアウト、キャッシュ統計、p50/p95/p99 レイテンシ
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. 「各 AI ツールの設定は面倒で繰り返しが多い」 -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +開発者は、Cursor、Claude Code、Codex CLI、OpenClaw、Gemini CLI、Kilo Code を使用します。各ツールには異なる構成 (API エンドポイント、キー、モデル) が必要です。プロバイダーや機種変更時に再設定するのは時間の無駄です。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **CLI ツール ダッシュボード** — Claude Code、Codex CLI、OpenClaw、Kilo Code、Antigravity、Cline をワンクリックでセットアップできる専用ページ +- **GitHub Copilot Config Generator** — モデルを一括選択して VS Code の `chatLanguageModels.json` を生成します +- **オンボーディング ウィザード** - 初めてユーザー向けのガイド付き 4 ステップ セットアップ +- **1 つのエンドポイント、すべてのモデル** — `http://localhost:20128/v1` を 1 回構成すると、36 を超えるプロバイダーにアクセスできます
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. 「複数のプロバイダーからの OAuth トークンを管理するのは地獄です」 -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code、Codex、Gemini CLI、Copilot — すべては有効期限切れのトークンを持つ OAuth 2.0 を使用します。開発者は定期的に再認証し、`client_secret is missing`、`redirect_uri_mismatch`、およびリモート サーバーの障害に対処する必要があります。 LAN/VPS 上の OAuth は特に問題があります。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **自動トークン更新** — OAuth トークンは有効期限が切れる前にバックグラウンドで更新されます。 +- **OAuth 2.0 (PKCE) ビルトイン** — Claude Code、Codex、Gemini CLI、Copilot、Kiro、Qwen、iFlow の自動フロー +- **マルチアカウント OAuth** — JWT/ID トークン抽出によるプロバイダーごとの複数のアカウント +- **OAuth LAN/リモート修正** — `redirect_uri` のプライベート IP 検出 + リモート サーバーの手動 URL モード +- **Nginx の背後にある OAuth** — リバース プロキシの互換性のために `window.location.origin` を使用します +- **リモート OAuth ガイド** — VPS/Docker での Google Cloud 認証情報のステップバイステップ ガイド
-📊 9. "I don't know how much I'm spending or where" +📊 9. 「どこにいくら使っているのか分かりません」 -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +開発者は複数の有料プロバイダーを使用していますが、支出について統一した見解がありません。各プロバイダーには独自の請求ダッシュボードがありますが、統合されたビューはありません。予期せぬ出費がかさむ可能性があります。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **コスト分析ダッシュボード** — トークンごとのコスト追跡とプロバイダーごとの予算管理 +- **階層ごとの予算制限** — 自動フォールバックをトリガーする階層ごとの支出上限 +- **モデルごとの価格構成** — モデルごとに構成可能な価格 +- **API キーごとの使用統計** — キーごとのリクエスト数と最後に使用されたタイムスタンプ +- **分析ダッシュボード** — 統計カード、モデル使用状況グラフ、成功率と遅延を含むプロバイダー表
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. 「AI 呼び出しのエラーや問題を診断できません」 -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +呼び出しが失敗すると、開発者はそれがレート制限なのか、トークンの期限切れなのか、間違った形式なのか、プロバイダーのエラーなのかわかりません。さまざまな端末にわたる断片化されたログ。可観測性がなければ、デバッグは試行錯誤になります。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **統合ログ ダッシュボード** — 4 つのタブ: リクエスト ログ、プロキシ ログ、監査ログ、コンソール +- **コンソール ログ ビューア** — 色分けされたレベル、自動スクロール、検索、フィルターを備えたリアルタイムのターミナル スタイルのビューア +- **SQLite プロキシ ログ** — サーバーの再起動後も存続する永続的なログ +- **Translator Playground** — 4 つのデバッグ モード: プレイグラウンド (形式変換)、チャット テスター (往復)、テストベンチ (バッチ)、ライブ モニター (リアルタイム) +- **リクエスト テレメトリ** — p50/p95/p99 レイテンシ + X-Request-Id トレース +- **ローテーションを使用したファイルベースのログ** — コンソール インターセプターは、サイズベースのローテーションを使用してすべてを JSON ログにキャプチャします。
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. 「ゲートウェイの導入と保守は複雑です」 -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +さまざまな環境 (ローカル、VPS、Docker、クラウド) 間で AI プロキシをインストール、構成、維持するには、多大な労力がかかります。ハードコーディングされたパス、ディレクトリ上の `EACCES`、ポートの競合、クロスプラットフォーム ビルドなどの問題により、摩擦が増大します。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **npm グローバル インストール** — `npm install -g omniroute && omniroute` — 完了 +- **Docker マルチプラットフォーム** — AMD64 + ARM64 ネイティブ (Apple Silicon、AWS Graviton、Raspberry Pi) +- **Docker Compose プロファイル** — `base` (CLI ツールなし) および `cli` (Claude Code、Codex、OpenClaw あり) +- **Electron デスクトップ アプリ** — システム トレイ、自動起動、オフライン モードを備えた Windows/macOS/Linux 用ネイティブ アプリ +- **分割ポート モード** - 高度なシナリオ (リバース プロキシ、コンテナ ネットワーキング) 向けに個別のポート上の API とダッシュボード +- **Cloud Sync** — Cloudflare Workers を介したデバイス間での設定の同期 +- **DB バックアップ** — すべての設定の自動バックアップ、復元、エクスポート、インポート
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. 「インターフェースは英語のみで、私のチームは英語を話せません」 -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +非英語圏の国、特にラテンアメリカ、アジア、ヨーロッパのチームは、英語のみのインターフェースに苦労しています。言語の壁があると採用が減り、構成エラーが増加します。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **ダッシュボード i18n — 30 言語** — アラビア語、ブルガリア語、デンマーク語、ドイツ語、スペイン語、フィンランド語、フランス語、ヘブライ語、ヒンディー語、ハンガリー語、インドネシア語、イタリア語、日本語、韓国語、マレー語、オランダ語、ノルウェー語、ポーランド語、ポルトガル語 (PT/BR)、ルーマニア語、ロシア語、スロバキア語、スウェーデン語、タイ語、ウクライナ語、ベトナム語、中国語、フィリピン語、英語 +- **RTL サポート** — アラビア語とヘブライ語の右から左へのサポート +- **多言語 README** — 30 件の完全なドキュメント翻訳 +- **言語セレクター** — リアルタイム切り替えのためのヘッダーの地球儀アイコン
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. 「チャット以上のものが必要です — 埋め込み、画像、音声が必要です」 -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +AIは単なるチャット補完ではありません。開発者は、画像の生成、音声の文字起こし、RAG の埋め込みの作成、ドキュメントの再ランク付け、およびコンテンツの管理を行う必要があります。各 API には異なるエンドポイントと形式があります。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **エンベディング** — 6 つのプロバイダーと 9 つ以上のモデルを備えた `/v1/embeddings` +- **画像生成** — 10 プロバイダーと 20 以上のモデルを備えた `/v1/images/generations` (OpenAI、xAI、Togetter、Fireworks、Nebius、Hyperbolic、NanoBanana、Antigravity、SD WebUI、ComfyUI) +- **Text-to-Video** — `/v1/videos/generations` — ComfyUI (AnimateDiff、SVD) および SD WebUI +- **テキストから音楽へ** — `/v1/music/generations` — ComfyUI (安定したオーディオ オープン、MusicGen) +- **音声転写** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM、HuggingFace、Qwen3 +- **テキスト読み上げ** — `/v1/audio/speech` — イレブンラボ、Nvidia NIM、HuggingFace、Coqui、Tortoise、Qwen3、+ 既存のプロバイダー +- **モデレーション** — `/v1/moderations` — コンテンツの安全性チェック +- **再ランキング** — `/v1/rerank` — ドキュメントの関連性の再ランキング +- **応答 API** — Codex の `/v1/responses` の完全サポート
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. 「モデル間で品質をテストして比較する方法がありません」 -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +開発者は、コード、翻訳、推論などのユースケースにどのモデルが最適であるかを知りたいと考えていますが、手動で比較するのは時間がかかります。統合された評価ツールは存在しません。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **LLM 評価** — 挨拶、数学、地理、コード生成、JSON 準拠、翻訳、マークダウン、安全性の拒否をカバーする 10 個の事前ロードされたケースによるゴールデン セット テスト +- **4 つのマッチ戦略** — `exact`、`contains`、`regex`、`custom` (JS 関数) +- **Translator Playground Test Bench** — 複数の入力と予想される出力を使用したバッチ テスト、クロスプロバイダー比較 +- **チャット テスター** — 視覚的な応答レンダリングによる完全な往復 +- **ライブ モニター** — プロキシを通過するすべてのリクエストのリアルタイム ストリーム
-📈 15. "I need to scale without losing performance" +📈 15. 「パフォーマンスを落とさずにスケールする必要がある」 -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +リクエストの量が増えると、同じ質問をキャッシュしないと重複したコストが発生します。冪等性がないと、重複したリクエストにより処理が無駄になります。プロバイダーごとのレート制限を遵守する必要があります。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **セマンティック キャッシュ** — 2 層キャッシュ (署名 + セマンティック) によりコストと遅延が削減されます。 +- **リクエストの冪等性** — 同一のリクエストに対する重複排除ウィンドウは 5 秒です +- **レート制限検出** — プロバイダーごとの RPM、最小ギャップ、最大同時トラッキング +- **編集可能なレート制限** — [設定] → [永続性を伴う回復力] で構成可能なデフォルト +- **API キー検証キャッシュ** — 運用パフォーマンスのための 3 層キャッシュ +- **テレメトリ付きヘルス ダッシュボード** — p50/p95/p99 レイテンシ、キャッシュ統計、稼働時間
-🤖 16. "I want to control model behavior globally" +🤖 16. 「モデルの動作をグローバルに制御したい」 -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +すべての応答を特定の言語、特定の口調で行いたい、または推論トークンを制限したい開発者。すべてのツール/リクエストでこれを設定するのは現実的ではありません。 -**How OmniRoute solves it:** +**OmniRoute がそれを解決する方法:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **システム プロンプト インジェクション** — すべてのリクエストに適用されるグローバル プロンプト +- **思考予算検証** — リクエストごとの推論トークン割り当て制御 (パススルー、自動、カスタム、適応) +- **6 ルーティング戦略** — リクエストの分散方法を決定するグローバル戦略 +- **ワイルドカード ルーター** - `provider/*` パターンは任意のプロバイダーに動的にルーティングします +- **コンボ有効/無効切り替え** — ダッシュボードから直接コンボを切り替えます +- **プロバイダー切り替え** — ワンクリックでプロバイダーのすべての接続を有効/無効にします。 +- **ブロックされたプロバイダー** — `/v1/models` リストから特定のプロバイダーを除外します
+
+🧰 17. 「一流の製品機能として MCP ツールが必要です」 + +多くの AI ゲートウェイは、MCP を非表示の実装詳細としてのみ公開します。チームには、目に見えて管理しやすいオペレーション レイヤーが必要です。 + +**OmniRoute がそれを解決する方法:** + +- MCP はダッシュボードのナビゲーションとエンドポイント プロトコル タブに表示されます +- プロセス、ツール、スコープ、監査を備えた専用の MCP 管理ページ +- `omniroute --mcp` およびクライアントのオンボーディング用の組み込みクイックスタート + +
+ +
+🧠 18. 「同期 + ストリーム タスク パスを備えた A2A オーケストレーションが必要です」 + +エージェント ワークフローには、直接応答と、ライフサイクル制御による長時間実行のストリーミング実行の両方が必要です。 + +**OmniRoute がそれを解決する方法:** + +- A2A JSON-RPC エンドポイント (`POST /a2a`) (`message/send` および `message/stream`) +- 端末状態の伝播を伴う SSE ストリーミング +- `tasks/get` および `tasks/cancel` のタスク ライフサイクル API + +
+ +
+🛰️ 19. 「推測されたステータスではなく、実際の MCP プロセスの健全性が必要です」 + +運用チームは、API が到達可能かどうかだけでなく、MCP が実際に生きているかどうかを知る必要があります。 + +**OmniRoute がそれを解決する方法:** + +- PID、タイムスタンプ、トランスポート、ツール数、およびスコープモードを含むランタイムハートビートファイル +- ハートビートと最近のアクティビティを組み合わせた MCP ステータス API +- プロセス/稼働時間/ハートビートの鮮度を示す UI ステータス カード + +
+ +
+📋 20. 「監査可能な MCP ツールの実行が必要です」 + +ツールが構成を変更したり、運用アクションをトリガーしたりする場合、チームはフォレンジックなトレーサビリティを必要とします。 + +**OmniRoute がそれを解決する方法:** + +- MCP ツール呼び出しの SQLite ベースの監査ログ +- ツール、成功/失敗、API キー、ページネーションによるフィルター +- ダッシュボード監査テーブル + 自動化のための統計エンドポイント + +
+ +
+🔐 21. 「統合ごとにスコープ指定された MCP 権限が必要です」 + +異なるクライアントには、ツール カテゴリへの最小限の特権アクセスが必要です。 + +**OmniRoute がそれを解決する方法:** + +- 制御されたツールアクセスのための 9 つの詳細な MCP スコープ +- MCP 管理 UI でのスコープの適用と可視性 +- 運用ツールの安全なデフォルト姿勢 + +
+ +
+⚙️ 22. 「再デプロイせずに運用制御が必要です」 + +チームは、インシデントやコスト イベントが発生した際に、実行時の変更を迅速に行う必要があります。 + +**OmniRoute がそれを解決する方法:** + +- MCP ダッシュボードからコンボのアクティブ化を直接切り替えます +- 事前定義されたポリシーパックから復元プロファイルを適用 +- 同じ操作パネルからサーキットブレーカーの状態をリセット + +
+ +
+🔄 23. 「ライブ A2A タスクのライフサイクルの可視化とキャンセルが必要です」 + +ライフサイクルの可視性がなければ、タスク インシデントの優先順位付けが困難になります。 + +**OmniRoute がそれを解決する方法:** + +- ページネーションを使用した状態/スキルによるタスクのリスト/フィルタリング +- タスクのメタデータ、イベント、アーティファクトのドリルダウン +- タスクキャンセルエンドポイントと確認付きの UI アクション + +
+ +
+🌊 24. 「A2A ロード用のアクティブ ストリーム メトリクスが必要です」 + +ストリーミング ワークフローには、同時実行性とライブ接続に関する運用上の洞察が必要です。 + +**OmniRoute がそれを解決する方法:** + +- アクティブ ストリーム カウンターが A2A ステータスに統合されました +- 最後のタスクのタイムスタンプと状態ごとのカウント +- リアルタイム運用監視用の A2A ダッシュボード カード + +
+ +
+🪪 25. 「クライアントの標準エージェント検出が必要です」 + +外部クライアントとオーケストレーターには、オンボーディング用の機械可読メタデータが必要です。 + +**OmniRoute がそれを解決する方法:** + +- エージェント カードが `/.well-known/agent.json` で公開される +- 管理UIに表示される能力とスキル +- A2A ステータス API には自動化のための検出メタデータが含まれています + +
+ +
+🧭 26. 「製品 UX にプロトコルの検出機能が必要です」 + +ユーザーがプロトコルの表面を発見できない場合、導入とサポートの品質が低下します。 + +**OmniRoute がそれを解決する方法:** + +- MCP および A2A のサイドバー エントリ +- クイックスタートとステータスを含むエンドポイント ページの [プロトコル] タブ +- 概要から専用の管理ダッシュボードへのリンク + +
+ +
+🧪 27. 「実際のクライアントを使用したエンドツーエンドのプロトコル検証が必要です」 + +模擬テストは、リリース前にプロトコルの互換性を検証するには十分ではありません。 + +**OmniRoute がそれを解決する方法:** + +- アプリを起動し、実際の MCP SDK クライアント トランスポートを使用する E2E スイート +- A2A クライアントは、フローの検出、送信、ストリーミング、取得、キャンセルをテストします。 +- MCP 監査および A2A タスク API に対するアサーションのクロスチェック + +
+ +
+📡 28. 「すべてのインターフェースにわたって統合された可観測性が必要です」 + +プロトコルごとに可観測性を分割すると、盲点が生じ、MTTR が長くなります。 + +**OmniRoute がそれを解決する方法:** + +- ダッシュボード/ログ/分析を 1 つの製品に統合 +- OpenAI、MCP、A2A レイヤーにわたるヘルス + 監査 + リクエスト テレメトリ +- ステータスと自動化のための運用 API + +
+ +
+💼 29. 「プロキシ + ツール + エージェント オーケストレーション用のランタイムが 1 つ必要です」 + +多くの個別のサービスを実行すると、運用コストが増加し、障害モードが増加します。 + +**OmniRoute がそれを解決する方法:** + +- OpenAI互換プロキシ、MCPサーバー、A2Aサーバーを1つのスタックに搭載 +- 共有認証、復元力、データストア、可観測性 +- すべての対話面にわたる一貫したポリシー モデル + +
+ +
+🚀 30. 「グルーコードのスプロールなしでエージェント ワークフローを出荷する必要がある」 + +複数のアドホック サービスとスクリプトをつなぎ合わせると、チームの速度が低下します。 + +**OmniRoute がそれを解決する方法:** + +- クライアントとエージェント向けの統合エンドポイント戦略 +- 組み込みのプロトコル管理 UI とスモーク検証パス +- 本番環境に対応した基盤 (セキュリティ、ロギング、復元力、バックアップ) + +
+ +### プレイブックの例 (統合されたユースケース) + +**戦略 A: 有料サブスクリプション + 安価なバックアップを最大限に活用する** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**プレイブック B: ゼロコストのコーディング スタック** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**プレイブック C: 24 時間年中無休の常時オンのフォールバック チェーン** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**プレイブック D: MCP + A2A を使用したエージェントの運用** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ クイックスタート **1.グローバルにインストール:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ デスクトップアプリ — オフライン&常時稼働 +## 🖥️ > 🆕 **新機能!** OmniRouteが**ネイティブデスクトップアプリケーション**としてWindows、macOS、Linuxで利用可能になりました。 @@ -715,66 +990,26 @@ OmniRoute には、API 翻訳のデバッグ、テスト、監視のための **
---- +## 🧪 評価 (Evals) -## 🎯 使用例 +OmniRoute には、ゴールデン セットに対して LLM 応答品質をテストするための評価フレームワークが組み込まれています。ダッシュボードの **Analytics → Evals** からアクセスします。 -### ケース 1: 「Claude Pro サブスクリプションを持っています」 +### 内蔵ゴールデンセット -**問題:** 大量のコーディング中にクォータが使用されずに期限切れになり、レート制限が発生する +プリロードされた「OmniRoute Golden Set」には、以下をカバーする 10 のテスト ケースが含まれています。 -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- 挨拶、数学、地理、コード生成 +- JSON形式への準拠、翻訳、マークダウン +- 安全拒否(有害なコンテンツ)、カウント、ブール論理 -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### 評価戦略 -### ケース 2: 「コストをゼロにしたい」 - -**問題:** サブスクリプションを購入する余裕がないため、信頼性の高い AI コーディングが必要です - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### ケース 3: 「24 時間年中無休でコーディングが必要で、中断はありません」 - -**問題:** 締め切りが迫っており、ダウンタイムを許すことができません - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### ケース 4: 「OpenClaw に無料の AI が欲しい」 - -**問題:** メッセージング アプリには AI アシスタントが必要ですが、完全に無料です - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| 戦略 | 説明 | 例 | +| ---------- | ------------------------------------------------------------------------------------------- | ----------- | +| `exact` | 出力は正確に一致する必要があります | `"4"` | +| `contains` | 出力には部分文字列が含まれている必要があります (大文字と小文字は区別されません)。 `"Paris"` | +| `regex` | 出力は正規表現パターンと一致する必要があります | `"1.*2.*3"` | +| `custom` | カスタム JS 関数は true/false を返します。 `(output) => output.length > 10` | --- @@ -1057,29 +1292,6 @@ Settings → API Configuration: --- -## 🧪 評価 (Evals) - -OmniRoute には、ゴールデン セットに対して LLM 応答品質をテストするための評価フレームワークが組み込まれています。ダッシュボードの **Analytics → Evals** からアクセスします。 - -### 内蔵ゴールデンセット - -プリロードされた「OmniRoute Golden Set」には、以下をカバーする 10 のテスト ケースが含まれています。 - -- 挨拶、数学、地理、コード生成 -- JSON形式への準拠、翻訳、マークダウン -- 安全拒否(有害なコンテンツ)、カウント、ブール論理 - -### 評価戦略 - -| 戦略 | 説明 | 例 | -| ---------- | ------------------------------------------------------------------------------------------- | ----------- | -| `exact` | 出力は正確に一致する必要があります | `"4"` | -| `contains` | 出力には部分文字列が含まれている必要があります (大文字と小文字は区別されません)。 `"Paris"` | -| `regex` | 出力は正規表現パターンと一致する必要があります | `"1.*2.*3"` | -| `custom` | カスタム JS 関数は true/false を返します。 `(output) => output.length > 10` | - ---- - ## 🐛 トラブルシューティング
@@ -1137,7 +1349,7 @@ OmniRoute には、ゴールデン セットに対して LLM 応答品質をテ > **⚠️ VPS/Docker/サーバーリモートの OmniRoute に関する重要事項** -### Antigravity / Gemini CLI で OAuth を実行すると、リモートのサービスが提供されますか? +### OAuth **反重力** と **Gemini CLI** を使用して **Google OAuth 2.0** を認証します。 O Google exige que a `redirect_uri` usada no fluxo OAuth seja **exatamente** uma das URIs pré-cadastradas Google Cloud Console でアプリケーションを実行できません。 @@ -1226,7 +1438,7 @@ docker restart omniroute --- -## 🛠️ 技術スタック +## 🛠️ - **ランタイム**: Node.js 18–22 LTS (⚠️ Node.js 24+ は **サポートされていません** — `better-sqlite3` ネイティブ バイナリは互換性がありません) - **言語**: TypeScript 5.9 — `src/` および `open-sse/` で **100% TypeScript** (v1.0.6) @@ -1278,7 +1490,7 @@ docker restart omniroute --- -## 🗺️ ロードマップ +## 🗺️ OmniRoute には、複数の開発フェーズにわたって **210 以上の機能が計画されています**。主要な領域は次のとおりです。 @@ -1303,18 +1515,6 @@ OmniRoute には、複数の開発フェーズにわたって **210 以上の機 --- -## 📧 サポート - -> 💬 **コミュニティに参加してください!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — ヘルプを取得し、ヒントを共有し、最新情報を入手してください。 - -- **ウェブサイト**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **問題**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **オリジナル プロジェクト**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 貢献者 [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.ko.md b/README.ko.md index 71eeef6d7a..62029ccc6c 100644 --- a/README.ko.md +++ b/README.ko.md @@ -110,6 +110,35 @@ _무제한 코딩을 위한 무료 API 게이트웨이인 OmniRoute를 통해 AI --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 왜 OmniRoute인가요? **돈을 낭비하지 말고 한도에 도달하지 마세요.** @@ -128,6 +157,18 @@ _무제한 코딩을 위한 무료 API 게이트웨이인 OmniRoute를 통해 AI --- +## 📧 지원 + +> 💬 **커뮤니티에 가입하세요!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — 도움을 받고, 팁을 공유하고, 최신 소식을 받아보세요. + +- **웹사이트**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **문제**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **원래 프로젝트**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 작동 방식 ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 OmniRoute가 해결하는 것 — 30가지 실제 문제점 및 사용 사례 -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **AI 도구를 사용하는 모든 개발자는 매일 이러한 문제에 직면합니다.** OmniRoute는 비용 초과부터 지역적 차단, 손상된 OAuth 흐름부터 프로토콜 운영 및 기업 관찰 가능성까지 모든 문제를 해결하기 위해 구축되었습니다.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "비싼 구독료를 지불했지만 여전히 한도 때문에 방해를 받습니다." -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +개발자는 Claude Pro, Codex Pro 또는 GitHub Copilot에 대해 월 20~200달러를 지불합니다. 비용을 지불하더라도 할당량에는 5시간 사용량, 주간 한도 또는 분당 비율 한도 등 상한선이 있습니다. 코딩 세션이 진행되는 동안 공급자는 응답을 중단하고 개발자는 흐름과 생산성을 잃게 됩니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **스마트 4계층 폴백** — 구독 할당량이 소진되면 수동 개입 없이 자동으로 API 키 → 저렴함 → 무료로 리디렉션됩니다. +- **실시간 할당량 추적** — 재설정 카운트다운(5시간, 매일, 매주)을 통해 실시간으로 토큰 소비를 표시합니다. +- **다중 계정 지원** — 자동 라운드 로빈 기능을 갖춘 공급자당 여러 계정 — 하나가 소진되면 다음 계정으로 전환 +- **사용자 정의 콤보** — 6가지 균형 전략(채우기 우선, 라운드 로빈, P2C, 무작위, 최소 사용, 비용 최적화)을 갖춘 사용자 정의 가능한 폴백 체인 +- **Codex 비즈니스 할당량** — 대시보드에서 직접 비즈니스/팀 작업 공간 할당량 모니터링
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "여러 공급자를 사용해야 하는데 각각 API가 다릅니다" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI는 하나의 형식을 사용하고 Claude(Anthropic)는 또 다른 형식을 사용하고 Gemini는 또 다른 형식을 사용합니다. 개발자가 다른 제공업체의 모델을 테스트하거나 이들 사이에서 대체하려는 경우 SDK를 재구성하고, 엔드포인트를 변경하고, 호환되지 않는 형식을 처리해야 합니다. 사용자 지정 공급자(FriendLI, NIM)에는 비표준 모델 끝점이 있습니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **통합 엔드포인트** — 단일 `http://localhost:20128/v1`가 36개 이상의 모든 공급자에 대한 프록시 역할을 합니다. +- **형식 번역** — 자동 및 투명함: OpenAI ← Claude ← Gemini ← Responses API +- **응답 삭제** — OpenAI SDK v1.83+를 손상시키는 비표준 필드(`x_groq`, `usage_breakdown`, `service_tier`)를 제거합니다. +- **역할 정규화** — OpenAI가 아닌 제공업체에 대해 `developer` → `system`로 변환합니다. GLM/ERNIE의 경우 `system` → `user` +- **Think Tag Extraction** — DeepSeek R1과 같은 모델에서 `` 블록을 표준화된 `reasoning_content`로 추출합니다. +- **Gemini용 구조화된 출력** — `json_schema` → `responseMimeType`/`responseSchema` 자동 변환 +- **`stream`의 기본값은 `false`** — OpenAI 사양에 맞춰 Python/Rust/Go SDK에서 예기치 않은 SSE를 방지합니다.
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "내 AI 공급자가 내 지역/국가를 차단합니다." -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +OpenAI/Codex와 같은 공급자는 특정 지역의 액세스를 차단합니다. OAuth 및 API 연결 중에 사용자에게 `unsupported_country_region_territory`와 같은 오류가 발생합니다. 이는 특히 개발도상국의 개발자에게 실망스러운 일입니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **3레벨 프록시 구성** — 3가지 레벨로 구성 가능한 프록시: 글로벌(모든 트래픽), 공급자별(하나의 공급자만), 연결/키별 +- **색상으로 구분된 프록시 배지** — 시각적 표시기: 🟢 글로벌 프록시, 🟡 공급자 프록시, 🔵 연결 프록시, 항상 IP 표시 +- **프록시를 통한 OAuth 토큰 교환** — OAuth 흐름도 프록시를 통과하여 `unsupported_country_region_territory`를 해결합니다. +- **프록시를 통한 연결 테스트** - 연결 테스트에서는 구성된 프록시를 사용합니다(더 이상 직접 우회 없음). +- **SOCKS5 지원** — 아웃바운드 라우팅을 위한 전체 SOCKS5 프록시 지원 +- **TLS 지문 스푸핑** — `wreq-js`를 통한 브라우저와 유사한 TLS 지문으로 봇 감지 우회
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "AI로 코딩하고 싶은데 돈이 없어요" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +모든 사람이 AI 구독 비용으로 월 20~200달러를 지불할 수 있는 것은 아닙니다. 학생, 신흥 국가의 개발자, 취미생활자, 프리랜서는 무료로 고품질 모델에 액세스해야 합니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **무료 계층 제공자 내장** — 100% 무료 제공자에 대한 기본 지원: iFlow(8개 무제한 모델), Qwen(3개 무제한 모델), Kiro(Claude 무료), Gemini CLI(180K/월 무료) +- **무료 전용 콤보** — 체인 `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/월, 가동 중지 시간 없음 +- **NVIDIA NIM 무료 크레딧** — 1000개의 무료 크레딧 통합 +- **비용 최적화 전략** — 가장 저렴한 공급자를 자동으로 선택하는 라우팅 전략
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "AI 게이트웨이를 무단 액세스로부터 보호해야 합니다" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +AI 게이트웨이를 네트워크(LAN, VPS, Docker)에 노출하면 주소가 있는 사람은 누구나 개발자의 토큰/할당량을 사용할 수 있습니다. 보호하지 않으면 API는 오용, 즉각적인 주입, 남용에 취약해집니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **API 키 관리** — 전용 `/dashboard/api-manager` 페이지를 사용하여 공급자별 생성, 순환 및 범위 지정 +- **모델 수준 권한** — 모두 허용/제한 토글을 사용하여 API 키를 특정 모델(`openai/*`, 와일드카드 패턴)로 제한합니다. +- **API 엔드포인트 보호** — `/v1/models`에 대한 키가 필요하며 목록에서 특정 공급자를 차단합니다. +- **Auth Guard + CSRF 보호** — `withAuth` 미들웨어 + CSRF 토큰으로 보호되는 모든 대시보드 경로 +- **속도 제한기** — 구성 가능한 창으로 IP당 속도 제한 +- **IP 필터링** — 액세스 제어를 위한 허용 목록/차단 목록 +- **프롬프트 주입 가드** — 악성 프롬프트 패턴 제거 +- **AES-256-GCM 암호화** — 저장된 자격 증명은 암호화됩니다.
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "공급업체가 다운되어 코딩 흐름이 손실되었습니다." -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +AI 제공자는 불안정해지거나, 5xx 오류를 반환하거나, 임시 속도 제한에 도달할 수 있습니다. 개발자가 단일 공급자에 의존하는 경우 중단됩니다. 회로 차단기가 없으면 반복적으로 재시도하면 애플리케이션이 중단될 수 있습니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **공급업체별 회로 차단기** — 구성 가능한 임계값 및 쿨다운을 통한 자동 열기/닫기(닫힘/열림/반열림) +- **지수 백오프** — 점진적인 재시도 지연 +- **Anti-Thundering Herd** — 동시 재시도 폭풍에 대한 뮤텍스 + 세마포어 보호 +- **콤보 폴백 체인** — 기본 공급자가 실패하면 개입 없이 자동으로 체인을 통과합니다. +- **콤보 회로 차단기** — 콤보 체인 내에서 실패한 공급자를 자동으로 비활성화합니다. +- **상태 대시보드** — 가동 시간 모니터링, 회로 차단기 상태, 잠금, 캐시 통계, p50/p95/p99 대기 시간
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "각 AI 도구를 구성하는 것은 지루하고 반복적입니다." -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +개발자는 Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code 등을 사용합니다. 각 도구에는 서로 다른 구성(API 엔드포인트, 키, 모델)이 필요합니다. 공급자나 모델을 전환할 때 재구성하는 것은 시간 낭비입니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **CLI 도구 대시보드** — Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline을 원클릭으로 설정할 수 있는 전용 페이지 +- **GitHub Copilot Config Generator** — 대량 모델 선택을 통해 VS Code용 `chatLanguageModels.json`를 생성합니다. +- **온보딩 마법사** — 처음 사용자를 위한 4단계 설정 안내 +- **하나의 엔드포인트, 모든 모델** — `http://localhost:20128/v1`를 한 번 구성하면 36개 이상의 공급자에 액세스할 수 있습니다.
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "여러 공급자의 OAuth 토큰 관리는 지옥입니다" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot — 모두 만료되는 토큰과 함께 OAuth 2.0을 사용합니다. 개발자는 지속적으로 재인증을 수행하고 `client_secret is missing`, `redirect_uri_mismatch` 및 원격 서버의 오류를 처리해야 합니다. LAN/VPS의 OAuth는 특히 문제가 됩니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **자동 토큰 새로 고침** — OAuth 토큰이 만료되기 전에 백그라운드에서 새로 고쳐집니다. +- **OAuth 2.0(PKCE) 내장** — Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow에 대한 자동 흐름 +- **다중 계정 OAuth** — JWT/ID 토큰 추출을 통해 공급자당 여러 계정 +- **OAuth LAN/원격 수정** — `redirect_uri`에 대한 개인 IP 감지 + 원격 서버에 대한 수동 URL 모드 +- **Nginx 뒤의 OAuth** — 역방향 프록시 호환성을 위해 `window.location.origin`를 사용합니다. +- **원격 OAuth 가이드** — VPS/Docker의 Google Cloud 자격 증명에 대한 단계별 가이드
-📊 9. "I don't know how much I'm spending or where" +📊 9. "얼마나 쓰고 있는지, 어디에 쓰는지 모르겠어요" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +개발자는 여러 유료 제공업체를 이용하지만 지출에 대한 통합된 보기가 없습니다. 각 제공업체에는 자체 청구 대시보드가 ​​있지만 통합된 보기는 없습니다. 예상치 못한 비용이 쌓일 수 있습니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **비용 분석 대시보드** — 토큰별 비용 추적 및 공급자별 예산 관리 +- **계층당 예산 한도** — 자동 폴백을 트리거하는 계층당 지출 한도 +- **모델별 가격 구성** — 모델당 가격 구성 가능 +- **API 키당 사용 통계** — 키당 요청 수 및 마지막으로 사용된 타임스탬프 +- **분석 대시보드** — 통계 카드, 모델 사용 차트, 성공률 및 대기 시간이 포함된 공급자 테이블
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "AI 호출 오류 및 문제 진단이 안 돼요" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +호출이 실패하면 개발자는 속도 제한, 만료된 토큰, 잘못된 형식 또는 공급자 오류인지 알 수 없습니다. 여러 터미널에 걸쳐 조각화된 로그. 관찰 가능성이 없으면 디버깅은 시행착오를 겪게 됩니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **통합 로그 대시보드** — 탭 4개: 요청 로그, 프록시 로그, 감사 로그, 콘솔 +- **콘솔 로그 뷰어** — 색상으로 구분된 레벨, 자동 스크롤, 검색, 필터 기능을 갖춘 실시간 터미널 스타일 뷰어 +- **SQLite 프록시 로그** — 서버를 다시 시작해도 지속되는 영구 로그 +- **번역기 플레이그라운드** — 4가지 디버깅 모드: 플레이그라운드(형식 번역), 채팅 테스터(왕복), 테스트 벤치(일괄), 라이브 모니터(실시간) +- **원격 측정 요청** — p50/p95/p99 대기 시간 + X-요청-ID 추적 +- **회전을 통한 파일 기반 로깅** — 콘솔 인터셉터는 크기 기반 회전을 통해 모든 것을 JSON 로그에 캡처합니다.
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "게이트웨이 배포 및 유지 관리가 복잡합니다." -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +다양한 환경(로컬, VPS, Docker, 클라우드)에서 AI 프록시를 설치, 구성 및 유지 관리하는 것은 노동 집약적입니다. 하드코딩된 경로, 디렉터리의 `EACCES`, 포트 충돌, 크로스 플랫폼 빌드와 같은 문제로 인해 마찰이 가중됩니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **npm 전역 설치** — `npm install -g omniroute && omniroute` — 완료 +- **Docker 다중 플랫폼** — AMD64 + ARM64 기본(Apple Silicon, AWS Graviton, Raspberry Pi) +- **Docker Compose 프로필** — `base`(CLI 도구 없음) 및 `cli`(Claude Code, Codex, OpenClaw 포함) +- **Electron 데스크탑 앱** — 시스템 트레이, 자동 시작, 오프라인 모드를 갖춘 Windows/macOS/Linux용 기본 앱 +- **분할 포트 모드** — 고급 시나리오(역방향 프록시, 컨테이너 네트워킹)를 위한 별도의 포트에 있는 API 및 대시보드 +- **클라우드 동기화** — Cloudflare Workers를 통해 장치 간 구성 동기화 +- **DB 백업** — 모든 설정의 자동 백업, 복원, 내보내기 및 가져오기
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "인터페이스는 영어로만 제공되며 우리 팀은 영어를 구사하지 않습니다." -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +영어를 사용하지 않는 국가, 특히 라틴 아메리카, 아시아, 유럽의 팀은 영어 전용 인터페이스로 인해 어려움을 겪고 있습니다. 언어 장벽으로 인해 채택이 줄어들고 구성 오류가 증가합니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **대시보드 i18n — 30개 언어** — 한국어, 아랍어, 불가리아어, 덴마크어, 독일어, 스페인어, 핀란드어, 프랑스어, 히브리어, 힌디어, 헝가리어, 인도네시아어, 이탈리아어, 일본어, 말레이어, 네덜란드어, 노르웨이어, 폴란드어, 포르투갈어(PT/BR), 루마니아어, 러시아어, 슬로바키아어, 스웨덴어, 태국어, 우크라이나어, 베트남어, 중국어, 필리핀어, 영어를 포함한 500개 이상의 키 번역됨 +- **RTL 지원** — 아랍어 및 히브리어에 대해 오른쪽에서 왼쪽으로 지원 +- **다국어 README** — 30개의 완전한 문서 번역 +- **언어 선택기** — 실시간 전환을 위한 헤더의 지구본 아이콘
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "채팅 이상의 것이 필요합니다. 임베딩, 이미지, 오디오가 필요합니다." -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +AI는 단순한 채팅 완성이 아닙니다. 개발자는 이미지를 생성하고, 오디오를 기록하고, RAG용 임베딩을 만들고, 문서 순위를 다시 지정하고, 콘텐츠를 조정해야 합니다. 각 API에는 서로 다른 엔드포인트와 형식이 있습니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **임베딩** — 6개 공급자와 9개 이상의 모델이 포함된 `/v1/embeddings` +- **이미지 생성** — 10개 공급자와 20개 이상의 모델(OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI)을 갖춘 `/v1/images/generations` +- **텍스트-비디오** — `/v1/videos/generations` — ComfyUI(AnimateDiff, SVD) 및 SD WebUI +- **텍스트-음악** — `/v1/music/generations` — ComfyUI(안정적인 오디오 개방형, MusicGen) +- **오디오 녹음** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **텍스트 음성 변환** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + 기존 제공업체 +- **조정** — `/v1/moderations` — 콘텐츠 안전 확인 +- **재순위** — `/v1/rerank` — 문서 관련성 재지정 +- **응답 API** — Codex에 대한 전체 `/v1/responses` 지원
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "모델별 품질을 테스트하고 비교할 방법이 없어요" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +개발자는 자신의 사용 사례(코드, 번역, 추론)에 가장 적합한 모델을 알고 싶어하지만 수동으로 비교하는 것은 느립니다. 통합 평가 도구가 없습니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **LLM 평가** — 인사말, 수학, 지리, 코드 생성, JSON 준수, 번역, 마크다운, 안전 거부를 다루는 사전 로드된 10가지 사례를 사용한 골든 세트 테스트 +- **4가지 일치 전략** — `exact`, `contains`, `regex`, `custom`(JS 함수) +- **번역기 플레이그라운드 테스트 벤치** — 여러 입력 및 예상 출력을 사용한 일괄 테스트, 공급업체 간 비교 +- **채팅 테스터** — 시각적 응답 렌더링을 포함한 전체 왕복 +- **라이브 모니터** — 프록시를 통해 흐르는 모든 요청의 실시간 스트림
-📈 15. "I need to scale without losing performance" +📈 15. "성능 저하 없이 확장해야 합니다" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +요청량이 증가함에 따라 동일한 질문을 캐싱하지 않으면 중복 비용이 발생합니다. 멱등성이 없으면 중복 요청으로 인해 처리가 낭비됩니다. 공급자별 요금 제한을 준수해야 합니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **의미 체계 캐시** — 2계층 캐시(서명 + 의미 체계)로 비용과 대기 시간 감소 +- **멱등성 요청** — 동일한 요청에 대한 중복 제거 기간은 5초입니다. +- **속도 제한 감지** — 제공업체별 RPM, 최소 간격 및 최대 동시 추적 +- **편집 가능한 속도 제한** — 설정 → 지속성을 통한 복원력에서 구성 가능한 기본값 +- **API 키 검증 캐시** — 프로덕션 성능을 위한 3계층 캐시 +- **원격 측정 기능을 갖춘 상태 대시보드** — p50/p95/p99 대기 시간, 캐시 통계, 가동 시간
-🤖 16. "I want to control model behavior globally" +🤖 16. "모델 동작을 전체적으로 제어하고 싶습니다" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +특정 언어, 특정 어조로 모든 응답을 원하거나 추론 토큰을 제한하려는 개발자. 모든 도구/요청에서 이를 구성하는 것은 비현실적입니다. -**How OmniRoute solves it:** +**OmniRoute가 이를 해결하는 방법:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **시스템 프롬프트 삽입** — 모든 요청에 전역 프롬프트 적용 +- **생각 예산 검증** — 요청별 토큰 할당 제어 추론(패스스루, 자동, 사용자 정의, 적응형) +- **6가지 라우팅 전략** — 요청 배포 방법을 결정하는 글로벌 전략 +- **와일드카드 라우터** — `provider/*` 패턴은 모든 공급자에게 동적으로 라우팅됩니다. +- **콤보 활성화/비활성화 토글** — 대시보드에서 직접 콤보를 토글합니다. +- **공급자 토글** — 한 번의 클릭으로 공급자에 대한 모든 연결을 활성화/비활성화합니다. +- **차단된 제공자** — `/v1/models` 목록에서 특정 제공자를 제외합니다.
+
+🧰 17. "일류 제품 기능으로 MCP 도구가 필요합니다" + +많은 AI 게이트웨이는 MCP를 숨겨진 구현 세부 사항으로만 노출합니다. 팀에는 가시적이고 관리 가능한 운영 레이어가 필요합니다. + +**OmniRoute가 이를 해결하는 방법:** + +- 대시보드 탐색 및 엔드포인트 프로토콜 탭에 MCP가 나타납니다. +- 프로세스, 도구, 범위 및 감사가 포함된 전용 MCP 관리 페이지 +- `omniroute --mcp` 및 클라이언트 온보딩을 위한 빠른 시작 내장 + +
+ +
+🧠 18. "동기화 + 스트림 작업 경로를 갖춘 A2A 오케스트레이션이 필요합니다" + +에이전트 워크플로에는 수명 주기 제어를 통해 직접 응답과 장기 실행 스트리밍 실행이 모두 필요합니다. + +**OmniRoute가 이를 해결하는 방법:** + +- `message/send` 및 `message/stream`가 포함된 A2A JSON-RPC 엔드포인트(`POST /a2a`) +- 터미널 상태 전파를 통한 SSE 스트리밍 +- `tasks/get` 및 `tasks/cancel`용 작업 수명 주기 API + +
+ +
+🛰️ 19. "추측된 상태가 아닌 실제 MCP 프로세스 상태가 필요합니다" + +운영팀은 API에 접근할 수 있는지 여부뿐만 아니라 MCP가 실제로 활성화되어 있는지 알아야 합니다. + +**OmniRoute가 이를 해결하는 방법:** + +- PID, 타임스탬프, 전송, 도구 개수 및 범위 모드가 포함된 런타임 하트비트 파일 +- 하트비트 + 최근 활동을 결합한 MCP 상태 API +- 프로세스/가동 시간/하트비트 최신성을 위한 UI 상태 카드 + +
+ +
+📋 20. "감사 가능한 MCP 도구 실행이 필요합니다" + +도구가 구성을 변경하거나 운영 작업을 트리거하는 경우 팀에는 법의학적 추적성이 필요합니다. + +**OmniRoute가 이를 해결하는 방법:** + +- MCP 도구 호출에 대한 SQLite 지원 감사 로깅 +- 도구, 성공/실패, API 키, 페이지 매김 기준으로 필터링 +- 자동화를 위한 대시보드 감사 테이블 + 통계 엔드포인트 + +
+ +
+🔐 21. "통합당 범위가 지정된 MCP 권한이 필요합니다." + +다양한 클라이언트에는 도구 범주에 대한 최소 권한 액세스 권한이 있어야 합니다. + +**OmniRoute가 이를 해결하는 방법:** + +- 제어된 도구 액세스를 위한 9개의 세분화된 MCP 범위 +- MCP 관리 UI의 범위 적용 및 가시성 +- 운영 툴링을 위한 안전한 기본 자세 + +
+ +
+⚙️ 22. "재배치 없이 작전 통제가 필요해요" + +팀은 사고 또는 비용 이벤트 중에 빠른 런타임 변경이 필요합니다. + +**OmniRoute가 이를 해결하는 방법:** + +- MCP 대시보드에서 직접 콤보 활성화 전환 +- 사전 정의된 정책 팩의 복원력 프로필 적용 +- 동일한 운영 패널에서 회로 차단기 상태 재설정 + +
+ +
+🔄 23. "실시간 A2A 작업 수명주기 가시성 및 취소가 필요합니다" + +수명주기 가시성이 없으면 작업 사고를 분류하기가 어려워집니다. + +**OmniRoute가 이를 해결하는 방법:** + +- 페이지 매김을 통한 상태/기술별 작업 목록/필터링 +- 작업 메타데이터, 이벤트 및 아티팩트에 대한 드릴다운 +- 작업 취소 끝점 및 확인이 포함된 UI 작업 + +
+ +
+🌊 24. "A2A 로드를 위한 활성 스트림 메트릭이 필요합니다" + +스트리밍 워크플로에는 동시성 및 라이브 연결에 대한 운영 통찰력이 필요합니다. + +**OmniRoute가 이를 해결하는 방법:** + +- A2A 상태에 통합된 활성 스트림 카운터 +- 마지막 작업 타임스탬프 및 상태별 개수 +- 실시간 운영 모니터링을 위한 A2A 대시보드 카드 + +
+ +
+🪪 25. "클라이언트를 위한 표준 에이전트 검색이 필요합니다" + +외부 클라이언트 및 오케스트레이터에는 온보딩을 위해 컴퓨터에서 읽을 수 있는 메타데이터가 필요합니다. + +**OmniRoute가 이를 해결하는 방법:** + +- `/.well-known/agent.json`에 노출된 에이전트 카드 +- 관리 UI에 표시되는 능력과 기술 +- A2A 상태 API에는 자동화를 위한 검색 메타데이터가 포함되어 있습니다. + +
+ +
+🧭 26. "제품 UX에서 프로토콜 검색 기능이 필요합니다" + +사용자가 프로토콜 표면을 발견할 수 없는 경우 채택 및 지원 품질이 저하됩니다. + +**OmniRoute가 이를 해결하는 방법:** + +- MCP 및 A2A용 사이드바 항목 +- 빠른 시작 및 상태가 포함된 엔드포인트 페이지 프로토콜 탭 +- 개요에서 전용 관리 대시보드로의 링크 + +
+ +
+🧪 27. "실제 클라이언트와의 엔드투엔드 프로토콜 검증이 필요합니다" + +모의 테스트는 출시 전에 프로토콜 호환성을 검증하기에 충분하지 않습니다. + +**OmniRoute가 이를 해결하는 방법:** + +- 앱을 부팅하고 실제 MCP SDK 클라이언트 전송을 사용하는 E2E 제품군 +- 흐름 검색, 전송, 스트리밍, 가져오기 및 취소에 대한 A2A 클라이언트 테스트 +- MCP 감사 및 A2A 작업 API에 대한 교차 확인 주장 + +
+ +
+📡 28. "모든 인터페이스에 걸쳐 통합된 관찰 가능성이 필요합니다" + +프로토콜별로 관찰 가능성을 분할하면 사각지대가 발생하고 MTTR이 길어집니다. + +**OmniRoute가 이를 해결하는 방법:** + +- 대시보드/로그/분석을 하나의 제품으로 통합 +- OpenAI, MCP 및 A2A 계층 전반에 걸쳐 상태 + 감사 + 원격 측정 요청 +- 상태 및 자동화를 위한 운영 API + +
+ +
+💼 29. "프록시 + 도구 + 에이전트 오케스트레이션을 위해 하나의 런타임이 필요합니다." + +여러 개별 서비스를 실행하면 운영 비용과 오류 모드가 증가합니다. + +**OmniRoute가 이를 해결하는 방법:** + +- OpenAI 호환 프록시, MCP 서버, A2A 서버가 하나의 스택에 있음 +- 공유 인증, 복원력, 데이터 저장소 및 관찰 가능성 +- 모든 상호 작용 표면에 걸쳐 일관된 정책 모델 + +
+ +
+🚀 30. "글루 코드 확장 없이 에이전트 워크플로를 제공해야 합니다." + +여러 임시 서비스와 스크립트를 결합할 때 팀의 속도가 느려집니다. + +**OmniRoute가 이를 해결하는 방법:** + +- 클라이언트와 에이전트를 위한 통합 엔드포인트 전략 +- 내장된 프로토콜 관리 UI 및 연기 검증 경로 +- 프로덕션 준비 기반(보안, 로깅, 탄력성, 백업) + +
+ +### 플레이북 예시(통합 사용 사례) + +**플레이북 A: 유료 구독 극대화 + 저렴한 백업** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**플레이북 B: 비용이 전혀 들지 않는 코딩 스택** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**플레이북 C: 연중무휴 상시 가동 폴백 체인** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**플레이북 D: MCP + A2A를 사용한 에이전트 작업** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ 빠른 시작 **1. 전역적으로 설치:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ 데스크톱 앱 — 오프라인 & 상시 가동 +## 🖥️ > 🆕 **새 기능!** OmniRoute가 Windows, macOS, Linux용 **네이티브 데스크톱 앱**으로 출시되었습니다. @@ -715,66 +990,26 @@ OmniRoute에는 API 번역 디버깅, 테스트 및 모니터링을 위한 **4
---- +## 🧪 평가(Evals) -## 🎯 사용 사례 +OmniRoute에는 골든 세트에 대해 LLM 응답 품질을 테스트하기 위한 내장 평가 프레임워크가 포함되어 있습니다. 대시보드의 **분석 → 평가**를 통해 액세스하세요. -### 사례 1: "Claude Pro를 구독하고 있습니다." +### 내장 골든 세트 -**문제:** 할당량은 사용되지 않은 상태로 만료되며, 코딩 작업이 많은 동안 속도 제한이 발생합니다. +사전 로드된 "OmniRoute Golden Set"에는 다음을 다루는 10개의 테스트 사례가 포함되어 있습니다. -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- 인사말, 수학, 지리, 코드 생성 +- JSON 형식 준수, 번역, 마크다운 +- 안전 거부(유해 콘텐츠), 카운팅, 부울 논리 -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### 평가 전략 -### 사례 2: "비용이 0이길 원합니다" - -**문제:** 구독료를 감당할 수 없고 안정적인 AI 코딩이 필요함 - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### 사례 3: "중단 없이 연중무휴 코딩이 필요합니다." - -**문제:** 마감일, 가동 중지 시간을 감당할 수 없음 - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### 사례 4: "OpenClaw에서 무료 AI를 원합니다" - -**문제:** 메시징 앱에 AI 도우미가 필요하며 완전 무료입니다. - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| 전략 | 설명 | 예 | +| ---------- | -------------------------------------------------------------- | -------------------------------- | +| `exact` | 출력은 정확히 일치해야 합니다 | `"4"` | +| `contains` | 출력에는 하위 문자열(대소문자 구분 안 함)이 포함되어야 합니다. | `"Paris"` | +| `regex` | 출력은 정규식 패턴과 일치해야 합니다 | `"1.*2.*3"` | +| `custom` | 사용자 정의 JS 함수가 true/false를 반환합니다. | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 평가(Evals) - -OmniRoute에는 골든 세트에 대해 LLM 응답 품질을 테스트하기 위한 내장 평가 프레임워크가 포함되어 있습니다. 대시보드의 **분석 → 평가**를 통해 액세스하세요. - -### 내장 골든 세트 - -사전 로드된 "OmniRoute Golden Set"에는 다음을 다루는 10개의 테스트 사례가 포함되어 있습니다. - -- 인사말, 수학, 지리, 코드 생성 -- JSON 형식 준수, 번역, 마크다운 -- 안전 거부(유해 콘텐츠), 카운팅, 부울 논리 - -### 평가 전략 - -| 전략 | 설명 | 예 | -| ---------- | -------------------------------------------------------------- | -------------------------------- | -| `exact` | 출력은 정확히 일치해야 합니다 | `"4"` | -| `contains` | 출력에는 하위 문자열(대소문자 구분 안 함)이 포함되어야 합니다. | `"Paris"` | -| `regex` | 출력은 정규식 패턴과 일치해야 합니다 | `"1.*2.*3"` | -| `custom` | 사용자 정의 JS 함수가 true/false를 반환합니다. | `(output) => output.length > 10` | - ---- - ## 🐛 문제 해결
@@ -1132,13 +1344,13 @@ OmniRoute에는 골든 세트에 대해 LLM 응답 품질을 테스트하기 위 - OmniRoute v1.0.6+에는 채팅 완료를 통한 대체 검증이 포함되어 있습니다. - 기본 URL에 `/v1` 접미사가 포함되어 있는지 확인하세요. -### 🔐 OAuth em Servidor Remoto(원격 OAuth 설정) +### 🔐 OAuth > **⚠️ VPS/Docker/remotor의 OmniRoute를 사용하는 경우 중요** -### OAuth에서 Antigravity/Gemini CLI를 원격 서비스로 사용하려면 어떻게 해야 합니까? +### OAuth Os는 **반중력** 및 **Gemini CLI**를 인증하기 위해 **Google OAuth 2.0**을 입증했습니다. O Google exige que a `redirect_uri` usada no fluxo OAuth seja **exatamente** uma das URIs pre-cadastradas no Google Cloud Console do aplicativo. @@ -1227,7 +1439,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🛠️ 기술 스택 +## 🛠️ - **런타임**: Node.js 18–22 LTS(⚠️ Node.js 24+는 **지원되지 않습니다** — `better-sqlite3` 네이티브 바이너리는 호환되지 않습니다) - **언어**: TypeScript 5.9 — `src/` 및 `open-sse/`에서 **100% TypeScript**(v1.0.6) @@ -1279,7 +1491,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🗺️ 로드맵 +## 🗺️ OmniRoute에는 여러 개발 단계에 걸쳐 **210개 이상의 기능이 계획되어 있습니다**. 주요 영역은 다음과 같습니다. @@ -1304,18 +1516,6 @@ OmniRoute에는 여러 개발 단계에 걸쳐 **210개 이상의 기능이 계 --- -## 📧 지원 - -> 💬 **커뮤니티에 가입하세요!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — 도움을 받고, 팁을 공유하고, 최신 소식을 받아보세요. - -- **웹사이트**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **문제**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **원래 프로젝트**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 기여자 [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.md b/README.md index d0513d698f..ac08a21642 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,4 @@ -
- OmniRoute Dashboard - - # 🚀 OmniRoute — The Free AI Gateway +# 🚀 OmniRoute — The Free AI Gateway ### Never stop coding. Smart routing to **FREE & low-cost AI models** with automatic fallback. @@ -11,6 +8,8 @@ _Your universal API proxy — one endpoint, 36+ providers, zero downtime. Now wi --- +
+ [![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute) [![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute) [![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE) @@ -19,12 +18,41 @@ _Your universal API proxy — one endpoint, 36+ providers, zero downtime. Now wi [🌐 Website](https://omniroute.online) • [🚀 Quick Start](#-quick-start) • [💡 Features](#-key-features) • [📖 Docs](#-documentation) • [💰 Pricing](#-pricing-at-a-glance) • [💬 WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +
+ 🌐 **Available in:** 🇺🇸 [English](README.md) | 🇧🇷 [Português (Brasil)](README.pt-BR.md) | 🇪🇸 [Español](README.es.md) | 🇫🇷 [Français](README.fr.md) | 🇮🇹 [Italiano](README.it.md) | 🇷🇺 [Русский](README.ru.md) | 🇨🇳 [中文 (简体)](README.zh-CN.md) | 🇩🇪 [Deutsch](README.de.md) | 🇮🇳 [हिन्दी](README.in.md) | 🇹🇭 [ไทย](README.th.md) | 🇺🇦 [Українська](README.uk-UA.md) | 🇸🇦 [العربية](README.ar.md) | 🇯🇵 [日本語](README.ja.md) | 🇻🇳 [Tiếng Việt](README.vi.md) | 🇧🇬 [Български](README.bg.md) | 🇩🇰 [Dansk](README.da.md) | 🇫🇮 [Suomi](README.fi.md) | 🇮🇱 [עברית](README.he.md) | 🇭🇺 [Magyar](README.hu.md) | 🇮🇩 [Bahasa Indonesia](README.id.md) | 🇰🇷 [한국어](README.ko.md) | 🇲🇾 [Bahasa Melayu](README.ms.md) | 🇳🇱 [Nederlands](README.nl.md) | 🇳🇴 [Norsk](README.no.md) | 🇵🇹 [Português (Portugal)](README.pt.md) | 🇷🇴 [Română](README.ro.md) | 🇵🇱 [Polski](README.pl.md) | 🇸🇰 [Slovenčina](README.sk.md) | 🇸🇪 [Svenska](README.sv.md) | 🇵🇭 [Filipino](README.phi.md) +--- + +## 🖼️ Main Dashboard + +
+ OmniRoute Dashboard
--- +## 📸 Dashboard Preview + +
+Click to see dashboard screenshots + +| Page | Screenshot | +| -------------- | ------------------------------------------------- | +| **Providers** | ![Providers](docs/screenshots/01-providers.png) | +| **Combos** | ![Combos](docs/screenshots/02-combos.png) | +| **Analytics** | ![Analytics](docs/screenshots/03-analytics.png) | +| **Health** | ![Health](docs/screenshots/04-health.png) | +| **Translator** | ![Translator](docs/screenshots/05-translator.png) | +| **Settings** | ![Settings](docs/screenshots/06-settings.png) | +| **CLI Tools** | ![CLI Tools](docs/screenshots/07-cli-tools.png) | +| **Usage Logs** | ![Usage](docs/screenshots/08-usage.png) | +| **Endpoint** | ![Endpoint](docs/screenshots/09-endpoint.png) | + +
+ +--- + ### 🤖 Free AI Provider for your favorite coding agents _Connect any AI-powered IDE or CLI tool through OmniRoute — free API gateway for unlimited coding._ @@ -110,18 +138,6 @@ _Connect any AI-powered IDE or CLI tool through OmniRoute — free API gateway f --- -## 📧 Support - -> 💬 **Join our community!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Get help, share tips, and stay updated. - -- **Website**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Original Project**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 🤔 Why OmniRoute? **Stop wasting money and hitting limits:** @@ -140,6 +156,19 @@ _Connect any AI-powered IDE or CLI tool through OmniRoute — free API gateway f --- +## 📧 Support + +> 💬 **Join our community!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Get help, share tips, and stay updated. + +- **Website**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Contributing**: See [CONTRIBUTING.md](CONTRIBUTING.md), open a PR, or pick a `good first issue` +- **Original Project**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 How It Works ``` @@ -169,9 +198,9 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 What OmniRoute Solves — 30 Real Pain Points & Use Cases -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to protocol operations and enterprise observability.
💸 1. "I pay for an expensive subscription but still get interrupted by limits" @@ -428,24 +457,254 @@ Developers who want all responses in a specific language, with a specific tone,
+
+🧰 17. "I need MCP tools as first-class product capabilities" + +Many AI gateways expose MCP only as a hidden implementation detail. Teams need a visible, manageable operation layer. + +**How OmniRoute solves it:** + +- MCP appears in the dashboard navigation and endpoint protocol tab +- Dedicated MCP management page with process, tools, scopes, and audit +- Built-in quick-start for `omniroute --mcp` and client onboarding + +
+ +
+🧠 18. "I need A2A orchestration with sync + stream task paths" + +Agent workflows need both direct replies and long-running streamed execution with lifecycle control. + +**How OmniRoute solves it:** + +- A2A JSON-RPC endpoint (`POST /a2a`) with `message/send` and `message/stream` +- SSE streaming with terminal state propagation +- Task lifecycle APIs for `tasks/get` and `tasks/cancel` + +
+ +
+🛰️ 19. "I need real MCP process health, not guessed status" + +Operational teams need to know if MCP is actually alive, not just whether an API is reachable. + +**How OmniRoute solves it:** + +- Runtime heartbeat file with PID, timestamps, transport, tool count, and scope mode +- MCP status API combining heartbeat + recent activity +- UI status cards for process/uptime/heartbeat freshness + +
+ +
+📋 20. "I need auditable MCP tool execution" + +When tools mutate config or trigger ops actions, teams need forensic traceability. + +**How OmniRoute solves it:** + +- SQLite-backed audit logging for MCP tool calls +- Filters by tool, success/failure, API key, and pagination +- Dashboard audit table + stats endpoints for automation + +
+ +
+🔐 21. "I need scoped MCP permissions per integration" + +Different clients should have least-privilege access to tool categories. + +**How OmniRoute solves it:** + +- 9 granular MCP scopes for controlled tool access +- Scope enforcement and visibility in MCP management UI +- Safe default posture for operational tooling + +
+ +
+⚙️ 22. "I need operational controls without redeploying" + +Teams need quick runtime changes during incidents or cost events. + +**How OmniRoute solves it:** + +- Switch combo activation directly from MCP dashboard +- Apply resilience profiles from pre-defined policy packs +- Reset circuit breaker state from the same operations panel + +
+ +
+🔄 23. "I need live A2A task lifecycle visibility and cancellation" + +Without lifecycle visibility, task incidents become hard to triage. + +**How OmniRoute solves it:** + +- Task listing/filtering by state/skill with pagination +- Drill-down on task metadata, events, and artifacts +- Task cancellation endpoint and UI action with confirmation + +
+ +
+🌊 24. "I need active stream metrics for A2A load" + +Streaming workflows require operational insight into concurrency and live connections. + +**How OmniRoute solves it:** + +- Active stream counters integrated into A2A status +- Last task timestamp and per-state counts +- A2A dashboard cards for real-time ops monitoring + +
+ +
+🪪 25. "I need standard agent discovery for clients" + +External clients and orchestrators need machine-readable metadata for onboarding. + +**How OmniRoute solves it:** + +- Agent Card exposed at `/.well-known/agent.json` +- Capabilities and skills shown in management UI +- A2A status API includes discovery metadata for automation + +
+ +
+🧭 26. "I need protocol discoverability in the product UX" + +If users cannot discover protocol surfaces, adoption and support quality drop. + +**How OmniRoute solves it:** + +- Sidebar entries for MCP and A2A +- Endpoint page Protocols tab with quick-start and status +- Links from overview to dedicated management dashboards + +
+ +
+🧪 27. "I need end-to-end protocol validation with real clients" + +Mock tests are not enough to validate protocol compatibility before release. + +**How OmniRoute solves it:** + +- E2E suite that boots app and uses real MCP SDK client transport +- A2A client tests for discovery, send, stream, get, and cancel flows +- Cross-check assertions against MCP audit and A2A tasks APIs + +
+ +
+📡 28. "I need unified observability across all interfaces" + +Splitting observability by protocol creates blind spots and longer MTTR. + +**How OmniRoute solves it:** + +- Unified dashboards/logs/analytics in one product +- Health + audit + request telemetry across OpenAI, MCP, and A2A layers +- Operational APIs for status and automation + +
+ +
+💼 29. "I need one runtime for proxy + tools + agent orchestration" + +Running many separate services increases operational cost and failure modes. + +**How OmniRoute solves it:** + +- OpenAI-compatible proxy, MCP server, and A2A server in one stack +- Shared auth, resilience, data store, and observability +- Consistent policy model across all interaction surfaces + +
+ +
+🚀 30. "I need to ship agentic workflows without glue-code sprawl" + +Teams lose velocity when stitching multiple ad-hoc services and scripts. + +**How OmniRoute solves it:** + +- Unified endpoint strategy for clients and agents +- Built-in protocol management UIs and smoke validation paths +- Production-ready foundations (security, logging, resilience, backup) + +
+ +### Example Playbooks (Integrated Use Cases) + +**Playbook A: Maximize paid subscription + cheap backup** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: Zero-cost coding stack** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: 24/7 always-on fallback chain** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: Agent ops with MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + --- ## ⚡ Quick Start -**1. Install globally:** +### 1) Install and run ```bash npm install -g omniroute omniroute ``` -🎉 Dashboard opens at `http://localhost:20128` +Dashboard opens at `http://localhost:20128` and API base URL is `http://localhost:20128/v1`. | Command | Description | | ----------------------- | ----------------------------------------------------------- | | `omniroute` | Start server (`PORT=20128`, API and dashboard on same port) | | `omniroute --port 3000` | Set canonical/API port to 3000 | -| `omniroute --mcp` | Start MCP server (stdio transport) for IDE integration | +| `omniroute --mcp` | Start MCP server (stdio transport) | | `omniroute --no-open` | Don't auto-open browser | | `omniroute --help` | Show help | @@ -457,24 +716,56 @@ PORT=20128 DASHBOARD_PORT=20129 omniroute # Dashboard: http://localhost:20129 ``` -When ports are split, the API port serves only OpenAI-compatible routes (`/v1`, `/chat/completions`, `/responses`, `/models`, `/codex/*`). +### 2) Connect providers and create your API key -**2. Connect a FREE provider:** +1. Open Dashboard → `Providers` and connect at least one provider (OAuth or API key). +2. Open Dashboard → `Endpoint` and create an API key. +3. (Optional) Open Dashboard → `Combos` and set your fallback chain. -Dashboard → Providers → Connect **Claude Code** or **Antigravity** → OAuth login → Done! +### 3) Point your coding tool to OmniRoute -**3. Use in your CLI tool:** - -``` -Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings: - Endpoint: http://localhost:20128/v1 - API Key: [copy from dashboard] - Model: if/kimi-k2-thinking +```txt +Base URL: http://localhost:20128/v1 +API Key: [copy from Endpoint page] +Model: if/kimi-k2-thinking (or any provider/model prefix) ``` -**That's it!** Start coding with FREE AI models. +Works with Claude Code, Codex CLI, Gemini CLI, Cursor, Cline, OpenClaw, OpenCode, and OpenAI-compatible SDKs. -**Alternative — run from source:** +### 4) Enable and validate protocols (v2.0) + +**MCP (for tool-driven operations):** + +```bash +omniroute --mcp +``` + +Then connect your MCP client over `stdio` and test tools like: + +- `omniroute_get_health` +- `omniroute_list_combos` + +**A2A (for agent-to-agent workflows):** + +```bash +curl http://localhost:20128/.well-known/agent.json +``` + +```bash +curl -X POST http://localhost:20128/a2a \ + -H 'content-type: application/json' \ + -d '{"jsonrpc":"2.0","id":"quickstart","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Give me a short quota summary."}]}}' +``` + +### 5) Validate everything end-to-end (recommended) + +```bash +npm run test:protocols:e2e +``` + +This suite validates real MCP and A2A client flows against a running app. + +### Alternative: run from source ```bash cp .env.example .env @@ -595,250 +886,225 @@ When minimized, OmniRoute lives in your system tray with quick actions: ## 💡 Key Features -### 🤖 Agent Integration (NEW in v2.0) +OmniRoute v2.0 is built as an operational platform, not just a relay proxy. -| Feature | What It Does | -| ---------------------------- | ----------------------------------------------------------------------------------- | -| 🔧 **MCP Server (16 Tools)** | IDE agents control OmniRoute via Model Context Protocol — health, routing, budgets | -| 🤝 **A2A Server (v0.3)** | Multi-agent orchestration via JSON-RPC 2.0 with smart-routing & quota-management | -| ⚡ **Auto-Combo Engine** | Self-healing 6-factor scoring with task fitness, mode packs, and bandit exploration | -| 🎯 **Scope Enforcement** | 9 granular permission scopes for MCP tool access control | -| 📊 **Audit Logging** | SHA-256 hashed tool call audit trail in SQLite | -| 📡 **SSE Streaming** | Real-time A2A task streaming with heartbeat and completion events | -| 🛡️ **Budget Guard** | Session-level budget enforcement with degrade/block/alert actions | -| 📋 **Agent Card Discovery** | `/.well-known/agent.json` for automatic A2A agent discovery | +### 🤖 Agent & Protocol Operations (v2.0) -> 📖 **[MCP Server README](open-sse/mcp-server/README.md)** — Full tool reference, IDE configs, and client examples in Python/TypeScript/Go -> -> 📖 **[A2A Server README](src/lib/a2a/README.md)** — Skills reference, JSON-RPC methods, LangChain integration, and streaming examples +| Feature | What It Does | +| ------------------------------------ | -------------------------------------------------------------------------------- | +| 🔧 **MCP Server (16 tools)** | IDE/agent tools control routing, health, combos, limits, and operations | +| 🤝 **A2A Server (JSON-RPC + SSE)** | Agent-to-agent task execution with sync and streaming flows | +| 🧭 **MCP/A2A Dashboards** | Dedicated management pages (`/dashboard/mcp`, `/dashboard/a2a`) | +| 🛰️ **MCP Runtime Heartbeat** | Real process status (pid, uptime, heartbeat age, transport, scope mode) | +| 📋 **MCP Audit Trail** | Filterable audit logs with success/failure and key attribution | +| 🔐 **MCP Scope Enforcement** | 9 granular scope permissions for controlled tool access | +| 📡 **A2A Task Lifecycle Management** | List/filter tasks, inspect events/artifacts, cancel running tasks | +| 📋 **Agent Card Discovery** | `/.well-known/agent.json` for client auto-discovery | +| 🧪 **Protocol E2E Test Harness** | Real MCP SDK + A2A client flows in `test:protocols:e2e` | +| ⚙️ **Operational Controls** | Switch combo, apply resilience profiles, reset breakers from one control surface | -### 🧠 Core Routing & Intelligence +### 🧠 Routing & Intelligence -| Feature | What It Does | -| ------------------------------- | ------------------------------------------------------------------------------ | -| 🎯 **Smart 4-Tier Fallback** | Auto-route: Subscription → API Key → Cheap → Free | -| 📊 **Real-Time Quota Tracking** | Live token count + reset countdown per provider | -| 🔄 **Format Translation** | OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro seamless + response sanitization | -| 👥 **Multi-Account Support** | Multiple accounts per provider with intelligent selection | -| 🔄 **Auto Token Refresh** | OAuth tokens refresh automatically with retry | -| 🎨 **Custom Combos** | 6 strategies: fill-first, round-robin, p2c, random, least-used, cost-optimized | -| 🧩 **Custom Models** | Add any model ID to any provider | -| 🌐 **Wildcard Router** | Route `provider/*` patterns to any provider dynamically | -| 🧠 **Thinking Budget** | Passthrough, auto, custom, and adaptive modes for reasoning models | -| 🔀 **Model Aliases** | Auto-forward deprecated model IDs to current replacements (built-in + custom) | -| ⚡ **Background Degradation** | Auto-route background tasks (titles, summaries) to cheaper models | -| 💬 **System Prompt Injection** | Global system prompt applied across all requests | -| 📄 **Responses API** | Full OpenAI Responses API (`/v1/responses`) support for Codex | +| Feature | What It Does | +| ---------------------------------- | --------------------------------------------------------------------- | +| 🎯 **Smart 4-Tier Fallback** | Auto-route: Subscription → API Key → Cheap → Free | +| 📊 **Real-Time Quota Tracking** | Live token count + reset countdown per provider | +| 🔄 **Format Translation** | OpenAI ↔ Claude ↔ Gemini ↔ Responses with schema-safe conversions | +| 👥 **Multi-Account Support** | Multiple accounts per provider with intelligent selection | +| 🔄 **Auto Token Refresh** | OAuth tokens refresh automatically with retry | +| 🎨 **Custom Combos** | 6 balancing strategies + fallback chain control | +| 🌐 **Wildcard Router** | `provider/*` dynamic routing | +| 🧠 **Thinking Budget Controls** | Passthrough, auto, custom, and adaptive reasoning limits | +| 🔀 **Model Aliases** | Built-in + custom model aliasing and migration safety | +| ⚡ **Background Degradation** | Route low-priority background tasks to cheaper models | +| 💬 **System Prompt Injection** | Global behavior controls applied consistently | +| 📄 **Responses API Compatibility** | Full `/v1/responses` support for Codex and advanced agentic workflows | ### 🎵 Multi-Modal APIs -| Feature | What It Does | -| -------------------------- | -------------------------------------------------------------------------------- | -| 🖼️ **Image Generation** | `/v1/images/generations` — 10 providers, 20+ models (cloud + local) | -| 📐 **Embeddings** | `/v1/embeddings` — 6 providers, 9+ models | -| 🎤 **Audio Transcription** | `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 | -| 🔊 **Text-to-Speech** | `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3 | -| 🎬 **Video Generation** | `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD), SD WebUI | -| 🎵 **Music Generation** | `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) | -| 🛡️ **Moderations** | `/v1/moderations` — Content safety checks | -| 🔀 **Reranking** | `/v1/rerank` — Document relevance reranking | +| Feature | What It Does | +| -------------------------- | ------------------------------------------------------------- | +| 🖼️ **Image Generation** | `/v1/images/generations` with cloud and local backends | +| 📐 **Embeddings** | `/v1/embeddings` for search and RAG pipelines | +| 🎤 **Audio Transcription** | `/v1/audio/transcriptions` (Whisper and additional providers) | +| 🔊 **Text-to-Speech** | `/v1/audio/speech` (multiple engines/providers) | +| 🎬 **Video Generation** | `/v1/videos/generations` (ComfyUI + SD WebUI workflows) | +| 🎵 **Music Generation** | `/v1/music/generations` (ComfyUI workflows) | +| 🛡️ **Moderations** | `/v1/moderations` safety checks | +| 🔀 **Reranking** | `/v1/rerank` for relevance scoring | -### 🛡️ Resilience & Security +### 🛡️ Resilience, Security & Governance -| Feature | What It Does | -| ------------------------------- | ----------------------------------------------------------------------------- | -| 🔌 **Circuit Breaker** | Auto-open/close per-provider with configurable thresholds | -| 🛡️ **Anti-Thundering Herd** | Mutex + semaphore rate-limit for API key providers | -| 🧠 **Semantic Cache** | Two-tier cache (signature + semantic) reduces cost & latency | -| ⚡ **Request Idempotency** | 5s dedup window for duplicate requests | -| 🔒 **TLS Fingerprint Spoofing** | Bypass TLS-based bot detection via wreq-js | -| 🌐 **IP Filtering** | Allowlist/blocklist for API access control | -| 📊 **Editable Rate Limits** | Configurable RPM, min gap, and max concurrent at system level | -| 💾 **Rate Limit Persistence** | Learned limits survive restarts via SQLite with 60s debounce + 24h staleness | -| 🔄 **Token Refresh Resilience** | Per-provider circuit breaker (5 fails→30min) + 30s timeout per attempt | -| 🛡 **API Endpoint Protection** | Auth gating + provider blocking for the `/models` endpoint | -| 🔒 **Proxy Visibility** | Color-coded badges: 🟢 global, 🟡 provider, 🔵 per-connection with IP display | -| 🌐 **3-Level Proxy Config** | Configure proxies at global, per-provider, or per-connection level | +| Feature | What It Does | +| ----------------------------------- | ---------------------------------------------------------- | +| 🔌 **Circuit Breakers** | Provider-level trip/recover with threshold controls | +| 🛡️ **Anti-Thundering Herd** | Mutex + semaphore protections on retry/rate events | +| 🧠 **Semantic + Signature Cache** | Cost/latency reduction with two cache layers | +| ⚡ **Request Idempotency** | Duplicate protection window | +| 🔒 **TLS Fingerprint Spoofing** | Better compatibility with anti-bot filtered providers | +| 🌐 **IP Filtering** | Allowlist/blocklist control for exposed deployments | +| 📊 **Editable Rate Limits** | Configurable global/provider-level limits with persistence | +| 🔑 **API Key Management + Scoping** | Secure key issuance/rotation and model/provider controls | +| 🛡️ **Protected `/models`** | Optional auth gating and provider hiding for model catalog | ### 📊 Observability & Analytics -| Feature | What It Does | -| -------------------------- | ---------------------------------------------------------------------- | -| 📝 **Request Logging** | Debug mode with full request/response logs | -| 💾 **SQLite Proxy Logs** | Persistent proxy logs survive server restarts | -| 📊 **Analytics Dashboard** | Recharts-powered: stat cards, model usage chart, provider table | -| 📈 **Progress Tracking** | Opt-in SSE progress events for streaming | -| 🧪 **LLM Evaluations** | Golden set testing with 4 match strategies | -| 🔍 **Request Telemetry** | p50/p95/p99 latency aggregation + X-Request-Id tracing | -| 📋 **Logs Dashboard** | Unified 4-tab page: Request Logs, Proxy Logs, Audit Logs, Console | -| 🖥️ **Console Log Viewer** | Real-time terminal-style viewer with level filter, search, auto-scroll | -| 📑 **File-Based Logging** | Console interceptor captures all output to JSON log file with rotation | -| 🏥 **Health Dashboard** | System uptime, circuit breaker states, lockouts, cache stats | -| 💰 **Cost Tracking** | Budget management + per-model pricing configuration | +| Feature | What It Does | +| ------------------------------- | ----------------------------------------------------- | +| 📝 **Request + Proxy Logging** | Full request/response and proxy logging | +| 📋 **Unified Logs Dashboard** | Request, proxy, audit, and console views in one page | +| 🔍 **Request Telemetry** | p50/p95/p99 latency and request tracing | +| 🏥 **Health Dashboard** | Uptime, breaker states, lockouts, cache stats | +| 💰 **Cost Tracking** | Budget controls and per-model pricing visibility | +| 📈 **Analytics Visualizations** | Model/provider usage insights and trend views | +| 🧪 **Evaluation Framework** | Golden set testing with configurable match strategies | -### ☁️ Deployment & Sync +### ☁️ Deployment & Platform -| Feature | What It Does | -| ---------------------------- | --------------------------------------------------------------------- | -| 💾 **Cloud Sync** | Sync config across devices via Cloudflare Workers | -| 🌐 **Deploy Anywhere** | Localhost, VPS, Docker, Cloudflare Workers | -| 🔑 **API Key Management** | Generate, rotate, and scope API keys per provider | -| 🧙 **Onboarding Wizard** | 4-step guided setup for first-time users | -| 🔧 **CLI Tools Dashboard** | One-click configure Claude, Codex, Cline, OpenClaw, Kilo, Antigravity | -| 🔄 **DB Backups** | Automatic backup, restore, export & import for all settings | -| 🌐 **Internationalization** | Full i18n with next-intl — 30 languages including RTL support | -| 🌍 **Language Selector** | Globe icon in header for real-time switching between 30 languages | -| 📂 **Custom Data Directory** | `DATA_DIR` env var to override default `~/.omniroute` storage path | +| Feature | What It Does | +| ---------------------------- | -------------------------------------------------------- | +| 🌐 **Deploy Anywhere** | Localhost, VPS, Docker, Cloud environments | +| 💾 **Cloud Sync** | Configuration sync via cloud worker | +| 🔄 **Backup/Restore** | Export/import and disaster recovery flows | +| 🧙 **Onboarding Wizard** | First-run guided setup | +| 🔧 **CLI Tools Dashboard** | One-click setup for popular coding tools | +| 🌐 **i18n (30 languages)** | Full dashboard + docs language support with RTL coverage | +| 📂 **Custom Data Directory** | `DATA_DIR` override for storage location | -
-📖 Feature Details +### Feature Deep Dive -### 🎯 Smart 4-Tier Fallback +#### Smart fallback with practical cost control -Create combos with automatic fallback: - -``` +```txt Combo: "my-coding-stack" - 1. cc/claude-opus-4-6 (your subscription) - 2. nvidia/llama-3.3-70b (free NVIDIA API) - 3. glm/glm-4.7 (cheap backup, $0.6/1M) - 4. if/kimi-k2-thinking (free fallback) - -→ Auto switches when quota runs out or errors occur + 1. cc/claude-opus-4-6 + 2. nvidia/llama-3.3-70b + 3. glm/glm-4.7 + 4. if/kimi-k2-thinking ``` -### 📊 Real-Time Quota Tracking +When quota, rate, or health fails, OmniRoute automatically moves to the next candidate without manual switching. -- Token consumption per provider -- Reset countdown (5-hour, daily, weekly) -- Cost estimation for paid tiers -- Monthly spending reports +#### Protocol management that is visible and operable -### 🔄 Format Translation +- MCP + A2A are discoverable in UI and docs (not hidden) +- Protocol status APIs expose live operational data (`/api/mcp/*`, `/api/a2a/*`) +- Dashboards include actions for day-2 ops (combo toggles, breaker resets, task cancellation) -Seamless translation between formats: +#### Translator + validation workflow -- **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **OpenAI Responses** -- Your CLI tool sends OpenAI format → OmniRoute translates → Provider receives native format -- Works with any tool that supports custom OpenAI endpoints -- **Response sanitization** — Strips non-standard fields for strict OpenAI SDK compatibility -- **Role normalization** — `developer` → `system` for non-OpenAI; `system` → `user` for GLM/ERNIE models -- **Think tag extraction** — `` blocks → `reasoning_content` for thinking models -- **Structured output** — `json_schema` → Gemini's `responseMimeType`/`responseSchema` +The Translator area includes: -### 👥 Multi-Account Support +- **Playground**: request transformation checks +- **Chat Tester**: full request/response round-trip +- **Test Bench**: multiple cases in one run +- **Live Monitor**: real-time traffic view -- Add multiple accounts per provider -- Auto round-robin or priority-based routing -- Fallback to next account when one hits quota +Plus protocol validation with real clients via `npm run test:protocols:e2e`. -### 🔄 Auto Token Refresh +> 📖 **[MCP Server README](open-sse/mcp-server/README.md)** — Tool reference, IDE configs, and client examples +> +> 📖 **[A2A Server README](src/lib/a2a/README.md)** — Skills, JSON-RPC methods, streaming, and task lifecycle -- OAuth tokens automatically refresh before expiration -- No manual re-authentication needed -- Seamless experience across all providers +## 🧪 Evaluations (Evals) -### 🎨 Custom Combos +OmniRoute includes a built-in evaluation framework to test LLM response quality against a golden set. Access it via **Analytics → Evals** in the dashboard. -- Create unlimited model combinations -- 6 strategies: fill-first, round-robin, power-of-two-choices, random, least-used, cost-optimized -- Share combos across devices with Cloud Sync +### Built-in Golden Set -### 🏥 Health Dashboard +The pre-loaded "OmniRoute Golden Set" contains test cases for: -- System status (uptime, version, memory usage) -- Circuit breaker states per provider (Closed/Open/Half-Open) -- Rate limit status and active lockouts -- Signature cache statistics -- Latency telemetry (p50/p95/p99) + prompt cache -- Reset health status with one click +- Greetings, math, geography, code generation +- JSON format compliance, translation, markdown generation +- Safety refusal (harmful content), counting, boolean logic -### 🔧 Translator Playground +### Evaluation Strategies -OmniRoute includes a powerful built-in Translator Playground with **4 modes** for debugging, testing, and monitoring API translations: - -| Mode | Description | -| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **💻 Playground** | Direct format translation — paste any API request body and instantly see how OmniRoute translates it between provider formats (OpenAI ↔ Claude ↔ Gemini ↔ Responses API). Includes example templates and format auto-detection. | -| **💬 Chat Tester** | Send real chat requests through OmniRoute and see the full round-trip: your input, the translated request, the provider response, and the translated response back. Invaluable for validating combo routing. | -| **🧪 Test Bench** | Batch testing mode — define multiple test cases with different inputs and expected outputs, run them all at once, and compare results across providers and models. | -| **📱 Live Monitor** | Real-time request monitoring — watch incoming requests as they flow through OmniRoute, see format translations happening live, and identify issues instantly. | - -**Access:** Dashboard → Translator (sidebar) - -### 💾 Cloud Sync - -- Sync providers, combos, and settings across devices -- Automatic background sync -- Secure encrypted storage - -
- ---- - -## 🎯 Use Cases - -### Case 1: "I have Claude Pro subscription" - -**Problem:** Quota expires unused, rate limits during heavy coding - -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) - -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` - -### Case 2: "I want zero cost" - -**Problem:** Can't afford subscriptions, need reliable AI coding - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Case 3: "I need 24/7 coding, no interruptions" - -**Problem:** Deadlines, can't afford downtime - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Case 4: "I want FREE AI in OpenClaw" - -**Problem:** Need AI assistant in messaging apps, completely free - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Strategy | Description | Example | +| ---------- | ------------------------------------------------ | -------------------------------- | +| `exact` | Output must match exactly | `"4"` | +| `contains` | Output must contain substring (case-insensitive) | `"Paris"` | +| `regex` | Output must match regex pattern | `"1.*2.*3"` | +| `custom` | Custom JS function returns true/false | `(output) => output.length > 10` | --- ## 📖 Setup Guide +### Protocol Setup (MCP + A2A) + +
+🧩 MCP Setup (Model Context Protocol) + +Start MCP transport in stdio mode: + +```bash +omniroute --mcp +``` + +Recommended validation flow: + +1. Connect your MCP client over stdio. +2. Run `omniroute_get_health`. +3. Run `omniroute_list_combos`. +4. Open `/dashboard/mcp` to confirm heartbeat, activity, and audit. + +Useful APIs for automation: + +- `GET /api/mcp/status` +- `GET /api/mcp/tools` +- `GET /api/mcp/audit` +- `GET /api/mcp/audit/stats` + +
+ +
+🤝 A2A Setup (Agent2Agent) + +Discover the agent: + +```bash +curl http://localhost:20128/.well-known/agent.json +``` + +Send a task: + +```bash +curl -X POST http://localhost:20128/a2a \ + -H 'content-type: application/json' \ + -d '{"jsonrpc":"2.0","id":"setup-a2a","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Summarize quota status."}]}}' +``` + +Manage lifecycle: + +- `GET /api/a2a/status` +- `GET /api/a2a/tasks` +- `GET /api/a2a/tasks/:id` +- `POST /api/a2a/tasks/:id/cancel` + +Operational UI: + +- `/dashboard/a2a` for task/state/stream observability and smoke actions + +
+ +
+🧪 End-to-end protocol validation + +Validate both protocols with real clients: + +```bash +npm run test:protocols:e2e +``` + +This verifies: + +- MCP SDK client connect/list/call +- A2A discovery/send/stream/get/cancel +- Cross-check data in MCP audit and A2A task management APIs + +
+
💳 Subscription Providers @@ -1158,29 +1424,6 @@ opencode --- -## 🧪 Evaluations (Evals) - -OmniRoute includes a built-in evaluation framework to test LLM response quality against a golden set. Access it via **Analytics → Evals** in the dashboard. - -### Built-in Golden Set - -The pre-loaded "OmniRoute Golden Set" contains 10 test cases covering: - -- Greetings, math, geography, code generation -- JSON format compliance, translation, markdown -- Safety refusal (harmful content), counting, boolean logic - -### Evaluation Strategies - -| Strategy | Description | Example | -| ---------- | ------------------------------------------------ | -------------------------------- | -| `exact` | Output must match exactly | `"4"` | -| `contains` | Output must contain substring (case-insensitive) | `"Paris"` | -| `regex` | Output must match regex pattern | `"1.*2.*3"` | -| `custom` | Custom JS function returns true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Troubleshooting
@@ -1332,6 +1575,9 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux ## 🛠️ Tech Stack +
+Click to expand tech stack details + - **Runtime**: Node.js 18–22 LTS (⚠️ Node.js 24+ is **not supported** — `better-sqlite3` native binaries are incompatible) - **Language**: TypeScript 5.9 — **100% TypeScript** across `src/` and `open-sse/` (zero `any` in core modules since v2.0) - **Framework**: Next.js 16 + React 19 + Tailwind CSS 4 @@ -1347,6 +1593,8 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux - **Docker**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute) - **Resilience**: Circuit breaker, exponential backoff, anti-thundering herd, TLS spoofing, auto-combo self-healing +
+ --- ## 📖 Documentation @@ -1367,25 +1615,6 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux | [Features Gallery](docs/FEATURES.md) | Visual dashboard tour with screenshots | | [Release Checklist](docs/RELEASE_CHECKLIST.md) | Pre-release validation steps | -### 📸 Dashboard Preview - -
-Click to see dashboard screenshots - -| Page | Screenshot | -| -------------- | ------------------------------------------------- | -| **Providers** | ![Providers](docs/screenshots/01-providers.png) | -| **Combos** | ![Combos](docs/screenshots/02-combos.png) | -| **Analytics** | ![Analytics](docs/screenshots/03-analytics.png) | -| **Health** | ![Health](docs/screenshots/04-health.png) | -| **Translator** | ![Translator](docs/screenshots/05-translator.png) | -| **Settings** | ![Settings](docs/screenshots/06-settings.png) | -| **CLI Tools** | ![CLI Tools](docs/screenshots/07-cli-tools.png) | -| **Usage Logs** | ![Usage](docs/screenshots/08-usage.png) | -| **Endpoint** | ![Endpoint](docs/screenshots/09-endpoint.png) | - -
- --- ## 🗺️ Roadmap diff --git a/README.ms.md b/README.ms.md index 38833912a4..e0b6fe1d05 100644 --- a/README.ms.md +++ b/README.ms.md @@ -110,6 +110,35 @@ _Sambungkan mana-mana alat IDE atau CLI berkuasa AI melalui OmniRoute — get la --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Mengapa OmniRoute? **Berhenti membazir wang dan mencapai had:** @@ -128,6 +157,18 @@ _Sambungkan mana-mana alat IDE atau CLI berkuasa AI melalui OmniRoute — get la --- +## 📧 Sokongan + +> 💬 **Sertai komuniti kami!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Dapatkan bantuan, kongsi petua dan kekal kemas kini. + +- **Laman web**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Isu**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Projek Asal**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Cara Ia Berfungsi ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Perkara yang Selesaikan OmniRoute — 30 Titik Sakit Nyata & Kes Penggunaan -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Setiap pembangun yang menggunakan alatan AI menghadapi masalah ini setiap hari.** OmniRoute dibina untuk menyelesaikan kesemuanya — daripada lebihan kos kepada blok serantau, daripada aliran OAuth yang rosak kepada operasi protokol dan kebolehmerhatian perusahaan.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Saya membayar untuk langganan yang mahal tetapi masih terganggu oleh had" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Pembangun membayar $20–200/bulan untuk Claude Pro, Codex Pro atau GitHub Copilot. Walaupun membayar, kuota mempunyai siling — 5j penggunaan, had mingguan atau had kadar seminit. Sesi pertengahan pengekodan, pembekal berhenti bertindak balas dan pembangun kehilangan aliran dan produktiviti. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-Tier Fallback** — Jika kuota langganan habis, diubah hala secara automatik ke API Key → Murah → Percuma tanpa campur tangan manual +- **Penjejakan Kuota Masa Nyata** — Menunjukkan penggunaan token dalam masa nyata dengan kira detik tetapan semula (5j, harian, mingguan) +- **Sokongan Berbilang Akaun** — Berbilang akaun bagi setiap pembekal dengan auto round-robin — apabila satu kehabisan, beralih kepada yang seterusnya +- **Kombo Tersuai** — Rantaian sandaran yang boleh disesuaikan dengan 6 strategi pengimbangan (isi dahulu, round-robin, P2C, rawak, paling kurang digunakan, dioptimumkan kos) +- **Kuota Perniagaan Codex** — Pemantauan kuota ruang kerja Perniagaan/Pasukan terus dalam papan pemuka
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Saya perlu menggunakan berbilang penyedia tetapi setiap satu mempunyai API yang berbeza" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI menggunakan satu format, Claude (Anthropic) menggunakan satu lagi, Gemini satu lagi. Jika pembangun ingin menguji model daripada pembekal yang berbeza atau sandaran antara mereka, mereka perlu mengkonfigurasi semula SDK, menukar titik akhir, menangani format yang tidak serasi. Pembekal tersuai (FriendLI, NIM) mempunyai titik akhir model bukan standard. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Titik Akhir Disatukan** — Satu `http://localhost:20128/v1` berfungsi sebagai proksi untuk kesemua 36+ pembekal +- **Format Terjemahan** — Automatik dan telus: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **Pembersihan Tindak Balas** — Mengosongkan medan bukan standard (`x_groq`, `usage_breakdown`, `service_tier`) yang memecahkan OpenAI SDK v1.83+ +- **Penormalan Peranan** — Menukar `developer` → `system` untuk penyedia bukan OpenAI; `system` → `user` untuk GLM/ERNIE +- **Think Tag Extraction** — Mengekstrak blok `` daripada model seperti DeepSeek R1 ke dalam `reasoning_content` standard +- **Output Berstruktur untuk Gemini** — `json_schema` → `responseMimeType`/`responseSchema` penukaran automatik +- **`stream` lalai kepada `false`** — Menjajarkan dengan spesifikasi OpenAI, mengelakkan SSE yang tidak dijangka dalam Python/Rust/Go SDK
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "Pembekal AI saya menyekat wilayah/negara saya" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Penyedia seperti OpenAI/Codex menyekat akses daripada kawasan geografi tertentu. Pengguna mendapat ralat seperti `unsupported_country_region_territory` semasa sambungan OAuth dan API. Ini amat mengecewakan bagi pemaju dari negara membangun. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **Konfigurasi Proksi 3 Tahap** — Proksi boleh dikonfigurasikan pada 3 peringkat: global (semua trafik), setiap pembekal (satu pembekal sahaja) dan setiap sambungan/kunci +- **Lencana Proksi Berkod Warna** — Penunjuk visual: 🟢 proksi global, 🟡 proksi pembekal, 🔵 proksi sambungan, sentiasa menunjukkan IP +- **Pertukaran Token OAuth Melalui Proksi** — Aliran OAuth juga melalui proksi, menyelesaikan `unsupported_country_region_territory` +- **Ujian Sambungan melalui Proksi** — Ujian sambungan menggunakan proksi yang dikonfigurasikan (tiada lagi pintasan langsung) +- **Sokongan SOCKS5** — Sokongan proksi SOCKS5 penuh untuk penghalaan keluar +- **TLS Fingerprint Spoofing** — Cap jari TLS seperti pelayar melalui `wreq-js` untuk memintas pengesanan bot
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "Saya mahu menggunakan AI untuk pengekodan tetapi saya tidak mempunyai wang" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Tidak semua orang boleh membayar $20–200/bulan untuk langganan AI. Pelajar, pembangun dari negara baru muncul, penggemar dan pekerja bebas memerlukan akses kepada model berkualiti pada kos sifar. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Pembekal Peringkat Percuma Terbina dalam** — Sokongan asli untuk 100% pembekal percuma: iFlow (8 model tanpa had), Qwen (3 model tanpa had), Kiro (Claude secara percuma), Gemini CLI (180K/bulan percuma) +- **Kombo Percuma Sahaja** — Rantaian `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/bulan dengan masa henti sifar +- **Kredit Percuma NVIDIA NIM** — 1000 kredit percuma disepadukan +- **Strategi Dioptimumkan Kos** — Strategi penghalaan yang secara automatik memilih pembekal yang tersedia paling murah
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Saya perlu melindungi gerbang AI saya daripada akses tanpa kebenaran" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Apabila mendedahkan get laluan AI kepada rangkaian (LAN, VPS, Docker), sesiapa sahaja yang mempunyai alamat boleh menggunakan token/kuota pembangun. Tanpa perlindungan, API terdedah kepada penyalahgunaan, suntikan segera dan penyalahgunaan. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Pengurusan Kunci API** — Penjanaan, penggiliran dan skop setiap pembekal dengan halaman `/dashboard/api-manager` khusus +- **Kebenaran Tahap Model** — Hadkan kunci API kepada model tertentu (`openai/*`, corak kad bebas), dengan Togol Benarkan Semua/Sekat +- **Perlindungan Titik Akhir API** — Memerlukan kunci untuk `/v1/models` dan menyekat penyedia tertentu daripada penyenaraian +- **Auth Guard + CSRF Protection** — Semua laluan papan pemuka dilindungi dengan `withAuth` middleware + token CSRF +- **Penghad Kadar** — Pengehadan kadar Per-IP dengan tetingkap boleh dikonfigurasikan +- **Penapisan IP** — Senarai Benar/senarai sekat untuk kawalan akses +- **Pengawal Suntikan Segera** — Pensanitasi terhadap corak segera yang berniat jahat +- **Penyulitan AES-256-GCM** — Bukti kelayakan disulitkan semasa rehat
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "Pembekal saya gagal dan saya kehilangan aliran pengekodan saya" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Pembekal AI boleh menjadi tidak stabil, mengembalikan ralat 5xx atau mencapai had kadar sementara. Jika pembangun bergantung pada penyedia tunggal, mereka akan terganggu. Tanpa pemutus litar, percubaan semula berulang boleh ranap aplikasi. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Pemutus Litar bagi setiap pembekal** — Auto buka/tutup dengan ambang boleh dikonfigurasikan dan cooldown (Ditutup/Buka/Separuh Terbuka) +- **Penyingkiran Eksponen** — Kelewatan percubaan semula progresif +- **Kawanan Anti Gemuruh** — Mutex + perlindungan semafor terhadap ribut percubaan semula serentak +- **Kombo Rantai Sandar** — Jika pembekal utama gagal, secara automatik jatuh melalui rantaian tanpa campur tangan +- **Pemutus Litar Kombo** — Lumpuhkan automatik pembekal yang gagal dalam rantaian kombo +- **Papan Pemuka Kesihatan** — Pemantauan masa aktif, keadaan pemutus litar, penguncian, statistik cache, kependaman p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "Mengkonfigurasi setiap alat AI adalah membosankan dan berulang" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Pembangun menggunakan Kursor, Kod Claude, Codex CLI, OpenClaw, Gemini CLI, Kod Kilo... Setiap alat memerlukan konfigurasi yang berbeza (titik akhir API, kunci, model). Mengkonfigurasi semula apabila menukar pembekal atau model adalah membuang masa. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **Papan Pemuka Alat CLI** — Halaman khusus dengan persediaan satu klik untuk Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — Menghasilkan `chatLanguageModels.json` untuk Kod VS dengan pemilihan model pukal +- **Onboarding Wizard** — Persediaan 4 langkah berpandu untuk pengguna kali pertama +- **Satu titik akhir, semua model** — Konfigurasikan `http://localhost:20128/v1` sekali, akses 36+ pembekal
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "Menguruskan token OAuth daripada berbilang penyedia adalah neraka" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Kod Claude, Codex, Gemini CLI, Copilot — semuanya menggunakan OAuth 2.0 dengan token tamat tempoh. Pembangun perlu sentiasa mengesahkan semula, menangani `client_secret is missing`, `redirect_uri_mismatch` dan kegagalan pada pelayan jauh. OAuth pada LAN/VPS amat bermasalah. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Muat Semula Token Auto** — Token OAuth dimuat semula di latar belakang sebelum tamat tempoh +- **OAuth 2.0 (PKCE) Terbina dalam** — Aliran automatik untuk Kod Claude, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **OAuth Berbilang Akaun** — Berbilang akaun bagi setiap pembekal melalui pengekstrakan token JWT/ID +- **OAuth LAN/Remote Fix** — Pengesanan IP peribadi untuk `redirect_uri` + mod URL manual untuk pelayan jauh +- **OAuth Behind Nginx** — Menggunakan `window.location.origin` untuk keserasian proksi terbalik +- **Panduan OAuth Jauh** — Panduan langkah demi langkah untuk kelayakan Google Cloud pada VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "Saya tidak tahu berapa banyak yang saya belanjakan atau di mana" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Pembangun menggunakan berbilang penyedia berbayar tetapi tidak mempunyai pandangan bersatu tentang perbelanjaan. Setiap pembekal mempunyai papan pemuka pengebilan sendiri, tetapi tiada paparan disatukan. Kos yang tidak dijangka boleh bertimbun. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Papan Pemuka Analitis Kos** — Penjejakan kos per-token dan pengurusan belanjawan bagi setiap pembekal +- **Had Belanjawan setiap Peringkat** — Siling perbelanjaan setiap peringkat yang mencetuskan sandaran automatik +- **Konfigurasi Harga Per-Model** — Harga boleh dikonfigurasikan bagi setiap model +- **Statistik Penggunaan Setiap Kunci API** — Kiraan permintaan dan cap masa yang terakhir digunakan setiap kunci +- **Papan Pemuka Analitik** — Kad statistik, carta penggunaan model, jadual pembekal dengan kadar kejayaan dan kependaman
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "Saya tidak dapat mendiagnosis ralat dan masalah dalam panggilan AI" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Apabila panggilan gagal, pembangun tidak tahu sama ada ia adalah had kadar, token tamat tempoh, format yang salah atau ralat pembekal. Log berpecah-belah merentasi terminal yang berbeza. Tanpa pemerhatian, penyahpepijatan adalah percubaan-dan-ralat. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Papan Pemuka Log Bersatu** — 4 tab: Log Permintaan, Log Proksi, Log Audit, Konsol +- **Pemapar Log Konsol** — Pemapar gaya terminal masa nyata dengan tahap berkod warna, tatal automatik, carian, penapis +- **Log Proksi SQLite** — Log berterusan yang bertahan dimulakan semula +- **Taman Permainan Penterjemah** — 4 mod nyahpepijat: Taman Permainan (terjemahan format), Penguji Sembang (perjalanan pergi balik), Bangku Ujian (batch), Monitor Langsung (masa nyata) +- **Permintaan Telemetri** — kependaman p50/p95/p99 + pengesanan X-Request-Id +- **Pengelogan Berasaskan Fail dengan Putaran** — Pemintas konsol menangkap segala-galanya ke log JSON dengan putaran berasaskan saiz
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "Menyedia dan menyelenggara gerbang adalah rumit" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Memasang, mengkonfigurasi dan menyelenggara proksi AI merentas persekitaran yang berbeza (tempatan, VPS, Docker, awan) adalah intensif buruh. Masalah seperti laluan berkod keras, `EACCES` pada direktori, konflik port dan binaan merentas platform menambah geseran. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **pemasangan global npm** — `npm install -g omniroute && omniroute` — selesai +- **Docker Multi-Platform** — AMD64 + ARM64 asli (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Profil Karang Docker** — `base` (tiada alat CLI) dan `cli` (dengan Kod Claude, Codex, OpenClaw) +- **Apl Desktop Elektron** — Apl asli untuk Windows/macOS/Linux dengan dulang sistem, auto mula, mod luar talian +- **Mod Split-Port** — API dan Papan Pemuka pada port berasingan untuk senario lanjutan (proksi terbalik, rangkaian kontena) +- **Cloud Sync** — Konfigurasikan penyegerakan merentas peranti melalui Cloudflare Workers +- **Sandaran DB** — Sandaran automatik, pulihkan, eksport dan import semua tetapan
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "Antara muka adalah bahasa Inggeris sahaja dan pasukan saya tidak berbahasa Inggeris" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Pasukan di negara bukan berbahasa Inggeris, terutamanya di Amerika Latin, Asia dan Eropah, bergelut dengan antara muka bahasa Inggeris sahaja. Halangan bahasa mengurangkan penggunaan dan meningkatkan ralat konfigurasi. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Papan pemuka i18n — 30 Bahasa** — Semua 500+ kunci diterjemahkan termasuk bahasa Arab, Bulgaria, Denmark, Jerman, Sepanyol, Finland, Perancis, Ibrani, Hindi, Hungary, Indonesia, Itali, Jepun, Korea, Melayu, Belanda, Norway, Poland, Portugis (PT/BR), Romania, Rusia, Slovak, Sweden, Thai, Ukraine, Vietnam, Cina +- **Sokongan RTL** — Sokongan kanan ke kiri untuk bahasa Arab dan Ibrani +- **README Berbilang Bahasa** — 30 terjemahan dokumentasi lengkap +- **Pemilih Bahasa** — Ikon Glob dalam pengepala untuk penukaran masa nyata
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "Saya perlukan lebih daripada sembang — saya perlukan benam, imej, audio" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +AI bukan sekadar penyelesaian sembang. Pembangun perlu menjana imej, menyalin audio, membuat pembenaman untuk RAG, menyusun semula dokumen dan kandungan sederhana. Setiap API mempunyai titik akhir dan format yang berbeza. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Pembenaman** — `/v1/embeddings` dengan 6 pembekal dan 9+ model +- **Penjanaan Imej** — `/v1/images/generations` dengan 10 pembekal dan 20+ model (OpenAI, xAI, Together, Bunga Api, Nebius, Hiperbolik, NanoBanana, Antigraviti, SD WebUI, ComfyUI) +- **Teks-ke-Video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) dan SD WebUI +- **Teks-ke-Muzik** — `/v1/music/generations` — ComfyUI (Audio Terbuka, MusicGen) +- **Transkripsi Audio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Teks-ke-Ucapan** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + pembekal sedia ada +- **Moderasi** — `/v1/moderations` — Pemeriksaan keselamatan kandungan +- **Penyusunan semula** — `/v1/rerank` — Penyusunan semula perkaitan dokumen +- **Respons API** — Sokongan penuh `/v1/responses` untuk Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "Saya tiada cara untuk menguji dan membandingkan kualiti merentas model" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Pembangun ingin mengetahui model mana yang terbaik untuk kes penggunaan mereka — kod, terjemahan, penaakulan — tetapi membandingkan secara manual adalah perlahan. Tiada alat eval bersepadu wujud. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **LLM Evaluations** — Ujian set emas dengan 10 kes pra-muat meliputi salam, matematik, geografi, penjanaan kod, pematuhan JSON, terjemahan, penurunan harga, penolakan keselamatan +- **4 Strategi Padanan** — `exact`, `contains`, `regex`, `custom` (fungsi JS) +- **Bangku Ujian Taman Permainan Penterjemah** — Ujian kelompok dengan berbilang input dan output yang dijangka, perbandingan merentas pembekal +- **Penguji Sembang** — Perjalanan pergi balik penuh dengan pemaparan respons visual +- **Pantau Langsung** — Strim masa nyata semua permintaan yang mengalir melalui proksi
-📈 15. "I need to scale without losing performance" +📈 15. "Saya perlu skala tanpa kehilangan prestasi" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +Apabila volum permintaan bertambah, tanpa menyimpan cache soalan yang sama menjana kos pendua. Tanpa idempotensi, pendua meminta pemprosesan sisa. Had kadar setiap pembekal mesti dipatuhi. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Cache Semantik** — Cache dua peringkat (tandatangan + semantik) mengurangkan kos dan kependaman +- **Request Idempotency** — tetingkap penyahduplikasi 5s untuk permintaan yang sama +- **Pengesanan Had Kadar** — RPM setiap pembekal, jurang min dan penjejakan serentak maks +- **Had Kadar Boleh Diedit** — Lalai boleh dikonfigurasikan dalam Tetapan → Ketahanan dengan kegigihan +- **Cache Pengesahan Kunci API** — Cache 3 peringkat untuk prestasi pengeluaran +- **Papan Pemuka Kesihatan dengan Telemetri** — kependaman p50/p95/p99, statistik cache, masa beroperasi
-🤖 16. "I want to control model behavior globally" +🤖 16. "Saya mahu mengawal tingkah laku model secara global" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Pembangun yang mahukan semua respons dalam bahasa tertentu, dengan nada tertentu atau ingin mengehadkan token penaakulan. Mengkonfigurasi ini dalam setiap alat/permintaan adalah tidak praktikal. -**How OmniRoute solves it:** +**Cara OmniRoute menyelesaikannya:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **System Prompt Injection** — Gesaan global digunakan untuk semua permintaan +- **Pengesahan Belanjawan Berfikir** — Kawalan peruntukan token penaakulan setiap permintaan (laluan, auto, tersuai, adaptif) +- **6 Strategi Penghalaan** — Strategi global yang menentukan cara permintaan diedarkan +- **Penghala Wildcard** — Corak `provider/*` halakan secara dinamik kepada mana-mana pembekal +- **Kombo Dayakan/Lumpuhkan Togol** — Togol kombo terus dari papan pemuka +- **Togol Pembekal** — Dayakan/lumpuhkan semua sambungan untuk pembekal dengan satu klik +- **Pembekal Disekat** — Kecualikan pembekal khusus daripada penyenaraian `/v1/models`
+
+🧰 17. "Saya memerlukan alatan MCP sebagai keupayaan produk kelas pertama" + +Banyak get laluan AI mendedahkan MCP hanya sebagai butiran pelaksanaan tersembunyi. Pasukan memerlukan lapisan operasi yang boleh dilihat dan boleh diurus. + +**Cara OmniRoute menyelesaikannya:** + +- MCP muncul dalam navigasi papan pemuka dan tab protokol titik akhir +- Halaman pengurusan MCP khusus dengan proses, alatan, skop dan audit +- Permulaan pantas terbina dalam untuk `omniroute --mcp` dan onboarding pelanggan + +
+ +
+🧠 18. "Saya memerlukan orkestrasi A2A dengan laluan tugas penyegerakan + aliran" + +Aliran kerja ejen memerlukan balasan langsung dan pelaksanaan strim jangka panjang dengan kawalan kitaran hayat. + +**Cara OmniRoute menyelesaikannya:** + +- Titik akhir A2A JSON-RPC (`POST /a2a`) dengan `message/send` dan `message/stream` +- Penstriman SSE dengan penyebaran keadaan terminal +- API kitaran hayat tugas untuk `tasks/get` dan `tasks/cancel` + +
+ +
+🛰️ 19. "Saya memerlukan kesihatan proses MCP sebenar, bukan status yang diduga" + +Pasukan operasi perlu mengetahui sama ada MCP sebenarnya masih hidup, bukan hanya sama ada API boleh dicapai. + +**Cara OmniRoute menyelesaikannya:** + +- Fail degupan jantung masa jalan dengan PID, cap masa, pengangkutan, kiraan alat dan mod skop +- API status MCP yang menggabungkan degupan jantung + aktiviti terkini +- Kad status UI untuk kesegaran proses/masa hidup/degupan jantung + +
+ +
+📋 20. "Saya memerlukan pelaksanaan alat MCP yang boleh diaudit" + +Apabila alat mengubah konfigurasi atau mencetuskan tindakan ops, pasukan memerlukan kebolehkesanan forensik. + +**Cara OmniRoute menyelesaikannya:** + +- Pengelogan audit yang disokong SQLite untuk panggilan alat MCP +- Tapis mengikut alat, kejayaan/kegagalan, kunci API dan penomboran +- Jadual audit papan pemuka + titik akhir statistik untuk automasi + +
+ +
+🔐 21. "Saya memerlukan keizinan MCP berskop bagi setiap penyepaduan" + +Pelanggan yang berbeza harus mempunyai akses paling tidak istimewa kepada kategori alat. + +**Cara OmniRoute menyelesaikannya:** + +- 9 skop MCP berbutir untuk akses alat terkawal +- Penguatkuasaan skop dan keterlihatan dalam UI pengurusan MCP +- Postur lalai yang selamat untuk perkakas operasi + +
+ +
+⚙️ 22. "Saya memerlukan kawalan operasi tanpa mengatur semula" + +Pasukan memerlukan perubahan masa jalan yang cepat semasa insiden atau peristiwa kos. + +**Cara OmniRoute menyelesaikannya:** + +- Tukar pengaktifan kombo terus dari papan pemuka MCP +- Gunakan profil daya tahan daripada pek dasar yang telah ditetapkan +- Tetapkan semula keadaan pemutus litar daripada panel operasi yang sama + +
+ +
+🔄 23. "Saya memerlukan keterlihatan dan pembatalan kitaran hayat tugas A2A secara langsung" + +Tanpa keterlihatan kitaran hayat, insiden tugasan menjadi sukar untuk dicuba. + +**Cara OmniRoute menyelesaikannya:** + +- Penyenaraian tugas/penapisan mengikut keadaan/kemahiran dengan penomboran +- Latih tubi tentang metadata tugas, peristiwa dan artifak +- Titik akhir pembatalan tugas dan tindakan UI dengan pengesahan + +
+ +
+🌊 24. "Saya memerlukan metrik strim aktif untuk beban A2A" + +Aliran kerja penstriman memerlukan cerapan operasi tentang konkurensi dan sambungan langsung. + +**Cara OmniRoute menyelesaikannya:** + +- Kaunter aliran aktif disepadukan ke dalam status A2A +- Cap masa tugas terakhir dan kiraan setiap negeri +- Kad papan pemuka A2A untuk pemantauan operasi masa nyata + +
+ +
+🪪 25. "Saya memerlukan penemuan ejen standard untuk pelanggan" + +Pelanggan dan orkestra luar memerlukan metadata yang boleh dibaca mesin untuk onboarding. + +**Cara OmniRoute menyelesaikannya:** + +- Kad Agen terdedah pada `/.well-known/agent.json` +- Keupayaan dan kemahiran ditunjukkan dalam UI pengurusan +- API status A2A termasuk metadata penemuan untuk automasi + +
+ +
+🧭 26. "Saya memerlukan kebolehtemuan protokol dalam produk UX" + +Jika pengguna tidak dapat menemui permukaan protokol, penggunaan dan kualiti sokongan akan menurun. + +**Cara OmniRoute menyelesaikannya:** + +- Entri bar sisi untuk MCP dan A2A +- Tab Protokol halaman titik akhir dengan permulaan pantas dan status +- Pautan dari gambaran keseluruhan ke papan pemuka pengurusan khusus + +
+ +
+🧪 27. "Saya memerlukan pengesahan protokol hujung ke hujung dengan pelanggan sebenar" + +Ujian olok-olok tidak mencukupi untuk mengesahkan keserasian protokol sebelum dikeluarkan. + +**Cara OmniRoute menyelesaikannya:** + +- Suite E2E yang but apl dan menggunakan pengangkutan pelanggan MCP SDK sebenar +- Ujian pelanggan A2A untuk penemuan, menghantar, menstrim, mendapatkan dan membatalkan aliran +- Periksa silang dakwaan terhadap audit MCP dan API tugasan A2A + +
+ +
+📡 28. "Saya memerlukan pemerhatian bersatu merentas semua antara muka" + +Memisahkan kebolehmerhatian mengikut protokol mewujudkan titik buta dan MTTR yang lebih panjang. + +**Cara OmniRoute menyelesaikannya:** + +- Papan pemuka/log/analisis bersatu dalam satu produk +- Kesihatan + audit + telemetri permintaan merentas lapisan OpenAI, MCP dan A2A +- API Operasi untuk status dan automasi + +
+ +
+💼 29. "Saya memerlukan satu masa jalan untuk proksi + alatan + orkestrasi ejen" + +Menjalankan banyak perkhidmatan berasingan meningkatkan kos operasi dan mod kegagalan. + +**Cara OmniRoute menyelesaikannya:** + +- Proksi serasi OpenAI, pelayan MCP dan pelayan A2A dalam satu tindanan +- Kebenaran dikongsi, daya tahan, stor data dan kebolehmerhatian +- Model dasar yang konsisten merentas semua permukaan interaksi + +
+ +
+🚀 30. "Saya perlu menghantar aliran kerja ejentik tanpa sebaran kod gam" + +Pasukan kehilangan halaju apabila mencantumkan berbilang perkhidmatan dan skrip ad-hoc. + +**Cara OmniRoute menyelesaikannya:** + +- Strategi titik akhir bersatu untuk pelanggan dan ejen +- UI pengurusan protokol terbina dalam dan laluan pengesahan asap +- Asas sedia pengeluaran (keselamatan, pembalakan, daya tahan, sandaran) + +
+ +### Contoh Buku Main (Kes Penggunaan Bersepadu) + +**Playbook A: Maksimumkan langganan berbayar + sandaran murah** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: Timbunan pengekodan kos sifar** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: 24/7 rantai sandaran sentiasa hidup** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: Operasi ejen dengan MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Mula Pantas **1. Pasang secara global:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +990,26 @@ OmniRoute termasuk Taman Permainan Penterjemah terbina dalam yang berkuasa denga
---- +## 🧪 Penilaian (Evals) -## 🎯 Kes Penggunaan +OmniRoute termasuk rangka kerja penilaian terbina dalam untuk menguji kualiti tindak balas LLM terhadap set emas. Aksesnya melalui **Analytics → Evals** dalam papan pemuka. -### Kes 1: "Saya mempunyai langganan Claude Pro" +### Set Emas Terbina dalam -**Masalah:** Kuota tamat tempoh tidak digunakan, had kadar semasa pengekodan berat +"Set Emas OmniRoute" pra-muat mengandungi 10 kes ujian yang meliputi: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Salam, matematik, geografi, penjanaan kod +- Pematuhan format JSON, terjemahan, penurunan harga +- Penolakan keselamatan (kandungan berbahaya), pengiraan, logik boolean -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Strategi Penilaian -### Kes 2: "Saya mahu kos sifar" - -**Masalah:** Tidak mampu membayar langganan, memerlukan pengekodan AI yang boleh dipercayai - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Kes 3: "Saya memerlukan pengekodan 24/7, tiada gangguan" - -**Masalah:** Tarikh akhir, tidak mampu membayar masa henti - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Kes 4: "Saya mahukan AI PERCUMA dalam OpenClaw" - -**Masalah:** Memerlukan pembantu AI dalam apl pemesejan, percuma sepenuhnya - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Strategi | Penerangan | Contoh | +| ---------- | --------------------------------------------------------------------- | -------------------------------- | +| `exact` | Output mesti sepadan dengan tepat | `"4"` | +| `contains` | Output mesti mengandungi subrentetan (tidak peka huruf besar-besaran) | `"Paris"` | +| `regex` | Output mesti sepadan dengan corak regex | `"1.*2.*3"` | +| `custom` | Fungsi JS tersuai mengembalikan benar/salah | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 Penilaian (Evals) - -OmniRoute termasuk rangka kerja penilaian terbina dalam untuk menguji kualiti tindak balas LLM terhadap set emas. Aksesnya melalui **Analytics → Evals** dalam papan pemuka. - -### Set Emas Terbina dalam - -"Set Emas OmniRoute" pra-muat mengandungi 10 kes ujian yang meliputi: - -- Salam, matematik, geografi, penjanaan kod -- Pematuhan format JSON, terjemahan, penurunan harga -- Penolakan keselamatan (kandungan berbahaya), pengiraan, logik boolean - -### Strategi Penilaian - -| Strategi | Penerangan | Contoh | -| ---------- | --------------------------------------------------------------------- | -------------------------------- | -| `exact` | Output mesti sepadan dengan tepat | `"4"` | -| `contains` | Output mesti mengandungi subrentetan (tidak peka huruf besar-besaran) | `"Paris"` | -| `regex` | Output mesti sepadan dengan corak regex | `"1.*2.*3"` | -| `custom` | Fungsi JS tersuai mengembalikan benar/salah | `(output) => output.length > 10` | - ---- - ## 🐛 Menyelesaikan masalah
@@ -1132,7 +1344,7 @@ OmniRoute termasuk rangka kerja penilaian terbina dalam untuk menguji kualiti ti - OmniRoute v1.0.6+ termasuk pengesahan sandaran melalui pelengkapan sembang - Pastikan URL asas mengandungi akhiran `/v1` -### 🔐 OAuth em Servidor Remoto (Persediaan OAuth Jauh) +### 🔐 OAuth @@ -1227,7 +1439,7 @@ Jika anda ingin mendapatkan credenciais próprias agora, ada kemungkinan penggun --- -## 🛠️ Timbunan Teknologi +## 🛠️ - **Waktu Jalan**: Node.js 18–22 LTS (⚠️ Node.js 24+ **tidak disokong** — `better-sqlite3` binari asli tidak serasi) - **Bahasa**: TypeScript 5.9 — **100% TypeScript** merentas `src/` dan `open-sse/` (v1.0.6) @@ -1279,7 +1491,7 @@ Jika anda ingin mendapatkan credenciais próprias agora, ada kemungkinan penggun --- -## 🗺️ Pelan Hala Tuju +## 🗺️ OmniRoute mempunyai **210+ ciri yang dirancang** merentas berbilang fasa pembangunan. Berikut adalah bidang utama: @@ -1304,18 +1516,6 @@ OmniRoute mempunyai **210+ ciri yang dirancang** merentas berbilang fasa pembang --- -## 📧 Sokongan - -> 💬 **Sertai komuniti kami!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Dapatkan bantuan, kongsi petua dan kekal kemas kini. - -- **Laman web**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Isu**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Projek Asal**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Penyumbang [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.nl.md b/README.nl.md index c90fa429b4..2ba9618477 100644 --- a/README.nl.md +++ b/README.nl.md @@ -110,6 +110,35 @@ _Verbind elke AI-aangedreven IDE- of CLI-tool via OmniRoute: gratis API-gateway --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Waarom OmniRoute? **Stop met het verspillen van geld en het bereiken van grenzen:** @@ -128,6 +157,18 @@ _Verbind elke AI-aangedreven IDE- of CLI-tool via OmniRoute: gratis API-gateway --- +## 📧 Ondersteuning + +> 💬 **Word lid van onze community!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Krijg hulp, deel tips en blijf op de hoogte. + +- **Website**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Problemen**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Origineel project**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Hoe het werkt ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Wat OmniRoute oplost — 30 echte pijnpunten en gebruiksscenario's -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Elke ontwikkelaar die AI-tools gebruikt, wordt dagelijks met deze problemen geconfronteerd.** OmniRoute is gebouwd om ze allemaal op te lossen: van kostenoverschrijdingen tot regionale blokkades, van kapotte OAuth-stromen tot protocolbewerkingen en bedrijfsobservatie.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Ik betaal voor een duur abonnement, maar word nog steeds onderbroken door limieten" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Ontwikkelaars betalen $20-200/maand voor Claude Pro, Codex Pro of GitHub Copilot. Zelfs als je betaalt, heeft het quotum een ​​plafond: 5 uur gebruik, wekelijkse limieten of tarieflimieten per minuut. Halverwege de codeersessie reageert de provider niet meer en verliest de ontwikkelaar flow en productiviteit. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-Tier Fallback** — Als het abonnementsquotum opraakt, wordt automatisch doorgestuurd naar API Key → Goedkoop → Gratis zonder handmatige tussenkomst +- **Realtime bijhouden van quota** — Toont het tokenverbruik in realtime met aftellen van de reset (5 uur, dagelijks, wekelijks) +- **Ondersteuning voor meerdere accounts** — Meerdere accounts per provider met automatische round-robin — als de ene op is, wordt er overgeschakeld naar de volgende +- **Aangepaste combo's** — Aanpasbare fallback-ketens met 6 balanceringsstrategieën (fill-first, round-robin, P2C, willekeurig, minst gebruikt, kostengeoptimaliseerd) +- **Codex Business Quota** — Quotabewaking van zakelijke/teamwerkruimte rechtstreeks in het dashboard
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Ik moet meerdere providers gebruiken, maar elk heeft een andere API" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI gebruikt het ene formaat, Claude (Anthropic) gebruikt een ander, Gemini nog een ander. Als een ontwikkelaar modellen van verschillende providers wil testen of terug wil vallen tussen deze providers, moet hij SDK's opnieuw configureren, eindpunten wijzigen en omgaan met incompatibele formaten. Aangepaste providers (FriendLI, NIM) hebben niet-standaard modeleindpunten. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Unified Endpoint** — Eén enkele `http://localhost:20128/v1` dient als proxy voor alle 36+ providers +- **Formatvertaling** — Automatisch en transparant: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **Response Sanitization** — Verwijdert niet-standaardvelden (`x_groq`, `usage_breakdown`, `service_tier`) die OpenAI SDK v1.83+ breken +- **Rolnormalisatie** — Converteert `developer` → `system` voor niet-OpenAI-providers; `system` → `user` voor GLM/ERNIE +- **Think Tag Extraction** — Extraheert ``-blokken uit modellen zoals DeepSeek R1 naar gestandaardiseerde `reasoning_content` +- **Gestructureerde uitvoer voor Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatische conversie +- **`stream` is standaard ingesteld op `false`** — Sluit aan bij de OpenAI-specificaties en vermijdt onverwachte SSE in Python/Rust/Go SDK's
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "Mijn AI-provider blokkeert mijn regio/land" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Providers zoals OpenAI/Codex blokkeren de toegang vanuit bepaalde geografische regio's. Gebruikers krijgen fouten zoals `unsupported_country_region_territory` tijdens OAuth- en API-verbindingen. Dit is vooral frustrerend voor ontwikkelaars uit ontwikkelingslanden. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **Proxyconfiguratie op 3 niveaus** — Configureerbare proxy op 3 niveaus: globaal (al het verkeer), per provider (slechts één provider) en per verbinding/sleutel +- **Kleurgecodeerde proxybadges** — Visuele indicatoren: 🟢 globale proxy, 🟡 providerproxy, 🔵verbindingsproxy, waarbij altijd het IP-adres wordt weergegeven +- **OAuth-tokenuitwisseling via proxy**: de OAuth-stroom verloopt ook via de proxy, waardoor `unsupported_country_region_territory` wordt opgelost +- **Verbindingstests via proxy** — Verbindingstests gebruiken de geconfigureerde proxy (geen directe bypass meer) +- **SOCKS5-ondersteuning** — Volledige SOCKS5-proxyondersteuning voor uitgaande routering +- **TLS Fingerprint Spoofing** — Browserachtige TLS-vingerafdruk via `wreq-js` om botdetectie te omzeilen
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "Ik wil AI gebruiken voor codering, maar ik heb geen geld" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Niet iedereen kan $ 20-200 per maand betalen voor AI-abonnementen. Studenten, ontwikkelaars uit opkomende landen, hobbyisten en freelancers hebben kosteloos toegang nodig tot kwaliteitsmodellen. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Free Tier Providers ingebouwd** — Native ondersteuning voor 100% gratis providers: iFlow (8 onbeperkte modellen), Qwen (3 onbeperkte modellen), Kiro (Claude gratis), Gemini CLI (180K/maand gratis) +- **Alleen gratis combo's** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $ 0/maand zonder downtime +- **NVIDIA NIM Free Credits** — 1000 gratis credits geïntegreerd +- **Kostengeoptimaliseerde strategie** — Routingstrategie die automatisch de goedkoopste beschikbare provider kiest
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Ik moet mijn AI-gateway beschermen tegen ongeoorloofde toegang" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Bij het blootstellen van een AI-gateway aan het netwerk (LAN, VPS, Docker) kan iedereen met het adres de tokens/quota van de ontwikkelaar gebruiken. Zonder bescherming zijn API's kwetsbaar voor misbruik, snelle injectie en misbruik. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **API Key Management** — Generatie, rotatie en bereik per provider met een speciale `/dashboard/api-manager`-pagina +- **Machtigingen op modelniveau** — Beperk API-sleutels tot specifieke modellen (`openai/*`, jokertekenpatronen), met de schakelaar Alles toestaan/Beperken +- **API Endpoint Protection** — Vereist een sleutel voor `/v1/models` en blokkeer specifieke providers uit de lijst +- **Auth Guard + CSRF-bescherming** — Alle dashboardroutes beschermd met `withAuth` middleware + CSRF-tokens +- **Rate Limiter** — Per-IP-snelheidslimiet met configureerbare vensters +- **IP-filtering** — Toelatingslijst/blokkeerlijst voor toegangscontrole +- **Prompt Injection Guard** — Sanering tegen kwaadaardige promptpatronen +- **AES-256-GCM-codering** — Inloggegevens gecodeerd in rust
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "Mijn provider is uitgevallen en ik ben mijn codeerstroom kwijt" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +AI-aanbieders kunnen instabiel worden, 5xx-fouten retourneren of tijdelijke tarieflimieten bereiken. Als een ontwikkelaar afhankelijk is van één enkele provider, worden deze onderbroken. Zonder stroomonderbrekers kunnen herhaalde pogingen de toepassing laten crashen. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Stroomonderbreker per provider** — Automatisch openen/sluiten met configureerbare drempels en cooldown (gesloten/open/halfopen) +- **Exponentiële uitstel** — Progressieve vertragingen bij nieuwe pogingen +- **Anti-Thundering Herd** — Mutex + semafoorbescherming tegen gelijktijdige nieuwe stormen +- **Combo Fallback Chains** — Als de primaire provider faalt, valt deze automatisch zonder tussenkomst door de keten +- **Combo-stroomonderbreker** — Schakelt falende providers binnen een combo-keten automatisch uit +- **Gezondheidsdashboard** — Uptime-monitoring, status van stroomonderbrekers, uitsluitingen, cachestatistieken, p50/p95/p99-latentie
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "Het configureren van elke AI-tool is vervelend en repetitief" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Ontwikkelaars gebruiken Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Elke tool heeft een andere configuratie nodig (API-eindpunt, sleutel, model). Opnieuw configureren bij het wisselen van provider of model is tijdverspilling. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **CLI Tools Dashboard** — Speciale pagina met installatie met één klik voor Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — Genereert `chatLanguageModels.json` voor VS-code met bulkmodelselectie +- **Onboarding Wizard** — Begeleide installatie in 4 stappen voor nieuwe gebruikers +- **Eén eindpunt, alle modellen** — Configureer `http://localhost:20128/v1` één keer, krijg toegang tot meer dan 36 providers
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "Het beheren van OAuth-tokens van meerdere providers is een hel" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot: ze gebruiken allemaal OAuth 2.0 met aflopende tokens. Ontwikkelaars moeten zich voortdurend opnieuw authenticeren en omgaan met `client_secret is missing`, `redirect_uri_mismatch` en storingen op externe servers. OAuth op LAN/VPS is bijzonder problematisch. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Automatische tokenvernieuwing**: OAuth-tokens worden op de achtergrond vernieuwd voordat ze verlopen +- **OAuth 2.0 (PKCE) ingebouwd** — Automatische stroom voor Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **Multi-Account OAuth** — Meerdere accounts per provider via JWT/ID-tokenextractie +- **OAuth LAN/Remote Fix** — Privé-IP-detectie voor `redirect_uri` + handmatige URL-modus voor externe servers +- **OAuth achter Nginx** — gebruikt `window.location.origin` voor reverse proxy-compatibiliteit +- **Remote OAuth-handleiding** — Stapsgewijze handleiding voor Google Cloud-inloggegevens op VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "Ik weet niet hoeveel ik uitgeef of waar" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Ontwikkelaars gebruiken meerdere betaalde providers, maar hebben geen uniform beeld van de uitgaven. Elke provider heeft zijn eigen factureringsdashboard, maar er is geen geconsolideerd overzicht. Onverwachte kosten kunnen zich opstapelen. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Cost Analytics Dashboard** — Kostenregistratie per token en budgetbeheer per provider +- **Budgetlimieten per niveau** — Uitgavenplafond per niveau dat automatische terugval activeert +- **Prijsconfiguratie per model** — Configureerbare prijzen per model +- **Gebruiksstatistieken per API-sleutel** — Verzoekaantal en laatst gebruikte tijdstempel per sleutel +- **Analytics Dashboard** — Statistiekkaarten, modelgebruiksgrafiek, providertabel met succespercentages en latentie
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "Ik kan geen fouten en problemen in AI-oproepen diagnosticeren" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Wanneer een oproep mislukt, weet de ontwikkelaar niet of het een snelheidslimiet, een verlopen token, een verkeerd formaat of een providerfout is. Gefragmenteerde logboeken over verschillende terminals. Zonder waarneembaarheid is debuggen een kwestie van vallen en opstaan. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Unified Logs Dashboard** — 4 tabbladen: aanvraaglogboeken, proxylogboeken, auditlogboeken, console +- **Consolelogviewer** — Realtime viewer in terminalstijl met kleurgecodeerde niveaus, automatisch scrollen, zoeken, filteren +- **SQLite Proxy Logs** — Persistente logs die het opnieuw opstarten van de server overleven +- **Translator Playground** — 4 foutopsporingsmodi: Playground (formaatvertaling), Chat Tester (retour), Testbank (batch), Live Monitor (realtime) +- **Request Telemetry** — p50/p95/p99 latentie + X-Request-Id-tracering +- **Op bestanden gebaseerde logboekregistratie met rotatie** — Console-interceptor legt alles vast in JSON-logboek met op grootte gebaseerde rotatie
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "Het implementeren en onderhouden van de gateway is complex" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Het installeren, configureren en onderhouden van een AI-proxy in verschillende omgevingen (lokaal, VPS, Docker, cloud) is arbeidsintensief. Problemen zoals hardgecodeerde paden, `EACCES` in mappen, poortconflicten en platformonafhankelijke builds zorgen voor wrijving. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **npm global install** — `npm install -g omniroute && omniroute` — done +- **npm globale installatie** — `npm install -g omniroute && omniroute` — klaar - **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **Docker Compose Profiles** — `base` (geen CLI-tools) en `cli` (met Claude Code, Codex, OpenClaw) +- **Electron Desktop App** — Native app voor Windows/macOS/Linux met systeemvak, automatisch starten, offlinemodus +- **Split-Port-modus** — API en Dashboard op afzonderlijke poorten voor geavanceerde scenario's (reverse proxy, containernetwerken) +- **Cloud Sync** — Configureer synchronisatie tussen apparaten via Cloudflare Workers +- **DB-back-ups** — Automatische back-up, herstel, export en import van alle instellingen
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "De interface is alleen in het Engels en mijn team spreekt geen Engels" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Teams in niet-Engelssprekende landen, vooral in Latijns-Amerika, Azië en Europa, worstelen met interfaces die alleen in het Engels beschikbaar zijn. Taalbarrières verminderen de adoptie en vergroten de configuratiefouten. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Dashboard i18n — 30 talen** — Alle 500+ toetsen vertaald, waaronder Arabisch, Bulgaars, Deens, Duits, Spaans, Fins, Frans, Hebreeuws, Hindi, Hongaars, Indonesisch, Italiaans, Japans, Koreaans, Maleis, Nederlands, Noors, Pools, Portugees (PT/BR), Roemeens, Russisch, Slowaaks, Zweeds, Thais, Oekraïens, Vietnamees, Chinees, Filipijns, Engels +- **RTL-ondersteuning** — Ondersteuning van rechts naar links voor Arabisch en Hebreeuws +- **Meertalige README's** — 30 volledige documentatievertalingen +- **Taalkiezer** — Wereldbolpictogram in de koptekst voor realtime schakelen
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "Ik heb meer nodig dan chatten - ik heb insluitingen, afbeeldingen en audio nodig" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +AI is niet alleen het voltooien van chats. Ontwikkelaars moeten afbeeldingen genereren, audio transcriberen, insluitingen voor RAG maken, documenten opnieuw rangschikken en inhoud modereren. Elke API heeft een ander eindpunt en formaat. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Inbedding** — `/v1/embeddings` met 6 providers en 9+ modellen +- **Beeldgeneratie** — `/v1/images/generations` met 10 providers en 20+ modellen (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Tekst-naar-video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) en SD WebUI +- **Tekst-naar-muziek** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Audiotranscriptie** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Tekst-naar-spraak** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + bestaande providers +- **Moderaties** — `/v1/moderations` — Veiligheidscontroles van inhoud +- **Herschikking** — `/v1/rerank` — Herschikking van de relevantie van documenten +- **Responses API** — Volledige `/v1/responses`-ondersteuning voor Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "Ik heb geen manier om de kwaliteit van verschillende modellen te testen en te vergelijken" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Ontwikkelaars willen weten welk model het beste is voor hun gebruiksscenario (code, vertaling, redenering), maar handmatig vergelijken gaat traag. Er bestaan ​​geen geïntegreerde evaluatietools. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **LLM-evaluaties** — Golden set-tests met 10 vooraf geladen cases over begroetingen, wiskunde, aardrijkskunde, codegeneratie, JSON-compliance, vertaling, prijsverlaging, veiligheidsweigering +- **4 Matchstrategieën** — `exact`, `contains`, `regex`, `custom` (JS-functie) +- **Translator Playground Test Bench** — Batchtests met meerdere inputs en verwachte outputs, vergelijking tussen providers +- **Chat Tester** — Volledige rondreis met visuele responsweergave +- **Live Monitor** — Realtime stream van alle verzoeken die door de proxy stromen
-📈 15. "I need to scale without losing performance" +📈 15. "Ik moet schalen zonder prestatieverlies" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +Naarmate het verzoekvolume groeit, genereren dezelfde vragen dubbele kosten als dezelfde vragen niet in de cache worden opgeslagen. Zonder idempotentie verspillen dubbele aanvragen de verwerking. Tarieflimieten per aanbieder moeten worden gerespecteerd. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Semantische cache** — Cache met twee lagen (handtekening + semantisch) verlaagt de kosten en de latentie +- **Request Idempotency** — 5s deduplicatievenster voor identieke verzoeken +- **Detectie van tarieflimiet** — RPM per provider, minimale tussenruimte en maximale gelijktijdige tracking +- **Bewerkbare snelheidslimieten** — Configureerbare standaardinstellingen in Instellingen → Veerkracht met doorzettingsvermogen +- **API Key Validation Cache** — 3-tier cache voor productieprestaties +- **Gezondheidsdashboard met telemetrie** — p50/p95/p99-latentie, cachestatistieken, uptime
-🤖 16. "I want to control model behavior globally" +🤖 16. "Ik wil het modelgedrag wereldwijd controleren" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Ontwikkelaars die alle antwoorden in een specifieke taal willen, met een specifieke toon, of redeneringstokens willen beperken. Het is onpraktisch om dit in elke tool/verzoek te configureren. -**How OmniRoute solves it:** +**Hoe OmniRoute het oplost:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **Systeempromptinjectie**: algemene prompt toegepast op alle verzoeken +- **Thinking Budget Validation** — Redenering van tokentoewijzingscontrole per verzoek (passthrough, automatisch, aangepast, adaptief) +- **6 Routingstrategieën** — Globale strategieën die bepalen hoe verzoeken worden gedistribueerd +- **Wildcard Router** — `provider/*`-patronen routeren dynamisch naar elke provider +- **Combo in-/uitschakelen schakelen** — Schakel combo's rechtstreeks vanuit het dashboard in +- **Provider wisselen** — Schakel alle verbindingen voor een provider met één klik in/uit +- **Geblokkeerde providers**: sluit specifieke providers uit van de `/v1/models`-lijst
+
+🧰 17. "Ik heb MCP-tools nodig als eersteklas productmogelijkheden" + +Veel AI-gateways stellen MCP alleen bloot als een verborgen implementatiedetail. Teams hebben een zichtbare, beheersbare operationele laag nodig. + +**Hoe OmniRoute het oplost:** + +- MCP verschijnt op het dashboardnavigatie- en eindpuntprotocoltabblad +- Speciale MCP-beheerpagina met proces, tools, scopes en audit +- Ingebouwde snelstart voor `omniroute --mcp` en onboarding van klanten + +
+ +
+🧠 18. "Ik heb A2A-orkestratie nodig met synchronisatie- en streamtaakpaden" + +Agentworkflows hebben zowel directe antwoorden nodig als langdurige gestreamde uitvoering met levenscycluscontrole. + +**Hoe OmniRoute het oplost:** + +- A2A JSON-RPC-eindpunt (`POST /a2a`) met `message/send` en `message/stream` +- SSE-streaming met voortplanting van de terminalstatus +- Taaklevenscyclus-API's voor `tasks/get` en `tasks/cancel` + +
+ +
+🛰️ 19. "Ik heb echte MCP-processtatus nodig, geen geraden status" + +Operationele teams moeten weten of MCP daadwerkelijk leeft, en niet alleen of een API bereikbaar is. + +**Hoe OmniRoute het oplost:** + +- Runtime-hartslagbestand met PID, tijdstempels, transport, aantal gereedschappen en scope-modus +- MCP-status-API die hartslag + recente activiteit combineert +- UI-statuskaarten voor proces/uptime/hartslagversheid + +
+ +
+📋 20. "Ik heb controleerbare MCP-tooluitvoering nodig" + +Wanneer tools de configuratie muteren of operationele acties activeren, hebben teams forensische traceerbaarheid nodig. + +**Hoe OmniRoute het oplost:** + +- SQLite-ondersteunde auditregistratie voor MCP-toolaanroepen +- Filters op tool, succes/mislukking, API-sleutel en paginering +- Dashboard-audittabel + statistiekeneindpunten voor automatisering + +
+ +
+🔐 21. "Ik heb MCP-rechten per integratie nodig" + +Verschillende clients moeten toegang tot de toolcategorieën met de minste bevoegdheden hebben. + +**Hoe OmniRoute het oplost:** + +- 9 gedetailleerde MCP-scopes voor gecontroleerde toegang tot tools +- Scopehandhaving en zichtbaarheid in de MCP-beheerinterface +- Veilige standaardhouding voor operationeel gereedschap + +
+ +
+⚙️ 22. "Ik heb operationele controles nodig zonder opnieuw te implementeren" + +Teams hebben snelle runtimewijzigingen nodig tijdens incidenten of kostengebeurtenissen. + +**Hoe OmniRoute het oplost:** + +- Schakel combo-activering rechtstreeks vanuit het MCP-dashboard +- Pas veerkrachtprofielen toe uit vooraf gedefinieerde beleidspakketten +- Reset de status van de stroomonderbreker vanaf hetzelfde bedieningspaneel + +
+ +
+🔄 23. "Ik heb live zichtbaarheid en annulering van de levenscyclus van A2A-taken nodig" + +Zonder inzicht in de levenscyclus worden taakincidenten moeilijk te beoordelen. + +**Hoe OmniRoute het oplost:** + +- Takenlijst/filteren op staat/vaardigheid met paginering +- Inzoomen op taakmetagegevens, gebeurtenissen en artefacten +- Eindpunt voor het annuleren van taken en UI-actie met bevestiging + +
+ +
+🌊 24. "Ik heb actieve streamstatistieken nodig voor A2A-belasting" + +Streamingworkflows vereisen operationeel inzicht in gelijktijdigheid en liveverbindingen. + +**Hoe OmniRoute het oplost:** + +- Actieve streamtellers geïntegreerd in de A2A-status +- Tijdstempel van de laatste taak en tellingen per staat +- A2A-dashboardkaarten voor real-time operationele monitoring + +
+ +
+🪪 25. "Ik heb standaard agentdetectie nodig voor klanten" + +Externe klanten en orkestrators hebben machinaal leesbare metagegevens nodig voor onboarding. + +**Hoe OmniRoute het oplost:** + +- Agentkaart zichtbaar op `/.well-known/agent.json` +- Mogelijkheden en vaardigheden weergegeven in de management-UI +- A2A-status-API bevat ontdekkingsmetagegevens voor automatisering + +
+ +
+🧭 26. "Ik heb protocolvindbaarheid nodig in de product-UX" + +Als gebruikers protocoloppervlakken niet kunnen ontdekken, neemt de acceptatie- en ondersteuningskwaliteit af. + +**Hoe OmniRoute het oplost:** + +- Zijbalkinvoer voor MCP en A2A +- Eindpuntpagina Tabblad Protocollen met snelstart en status +- Koppelingen van overzicht naar speciale managementdashboards + +
+ +
+🧪 27. "Ik heb end-to-end protocolvalidatie nodig met echte clients" + +Mock-tests zijn niet voldoende om de protocolcompatibiliteit vóór de release te valideren. + +**Hoe OmniRoute het oplost:** + +- E2E-suite die de app opstart en echt MCP SDK-clienttransport gebruikt +- A2A-clienttests voor het ontdekken, verzenden, streamen, ophalen en annuleren van stromen +- Controleer beweringen aan de hand van MCP-audit- en A2A-taken-API's + +
+ +
+📡 28. "Ik heb uniforme observatie nodig over alle interfaces heen" + +Het opsplitsen van de waarneembaarheid per protocol creëert blinde vlekken en een langere MTTR. + +**Hoe OmniRoute het oplost:** + +- Uniforme dashboards/logboeken/analyses in één product +- Gezondheid + audit + verzoektelemetrie over OpenAI-, MCP- en A2A-lagen +- Operationele API's voor status en automatisering + +
+ +
+💼 29. "Ik heb één runtime nodig voor proxy + tools + agentorkestratie" + +Het uitvoeren van veel afzonderlijke services verhoogt de operationele kosten en faalwijzen. + +**Hoe OmniRoute het oplost:** + +- OpenAI-compatibele proxy, MCP-server en A2A-server in één stapel +- Gedeelde authenticatie, veerkracht, gegevensopslag en waarneembaarheid +- Consistent beleidsmodel op alle interactieoppervlakken + +
+ +
+🚀 30. "Ik moet agentische workflows verzenden zonder wildgroei van lijmcodes" + +Teams verliezen snelheid bij het samenvoegen van meerdere ad-hocservices en scripts. + +**Hoe OmniRoute het oplost:** + +- Uniforme eindpuntstrategie voor klanten en agenten +- Ingebouwde gebruikersinterfaces voor protocolbeheer en rookvalidatiepaden +- Productieklare fundamenten (beveiliging, loggen, veerkracht, back-up) + +
+ +### Voorbeeld-playbooks (geïntegreerde gebruiksscenario's) + +**Playbook A: Maximaliseer betaald abonnement + goedkope back-up** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: Codeerstapel zonder kosten** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: 24/7, altijd actieve fallback-keten** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: Agentoperaties met MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Snelle start **1. Wereldwijd installeren:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +990,26 @@ OmniRoute bevat een krachtige ingebouwde Translator Playground met **4 modi** vo
---- +## 🧪 Evaluaties (Evals) -## 🎯 Gebruiksscenario's +OmniRoute bevat een ingebouwd evaluatieframework om de LLM-responskwaliteit te testen aan de hand van een gouden set. U kunt deze openen via **Analytics → Evaluaties** in het dashboard. -### Geval 1: "Ik heb een Claude Pro-abonnement" +### Ingebouwde gouden set -**Probleem:** Quotum verloopt ongebruikt, snelheidslimieten tijdens intensief coderen +De vooraf geladen "OmniRoute Golden Set" bevat 10 testcases die betrekking hebben op: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Groeten, wiskunde, aardrijkskunde, codegeneratie +- Naleving van JSON-formaat, vertaling, prijsverlaging +- Veiligheidsweigering (schadelijke inhoud), tellen, booleaanse logica -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Evaluatiestrategieën -### Geval 2: "Ik wil geen kosten" - -**Probleem:** Ik kan geen abonnementen betalen, heb betrouwbare AI-codering nodig - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Geval 3: "Ik heb 24/7 codering nodig, geen onderbrekingen" - -**Probleem:** Deadlines, downtime is niet mogelijk - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Case 4: "Ik wil GRATIS AI in OpenClaw" - -**Probleem:** AI-assistent nodig in berichtenapps, geheel gratis - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Strategie | Beschrijving | Voorbeeld | +| ---------- | --------------------------------------------------------------------- | -------------------------------- | +| `exact` | De uitvoer moet exact overeenkomen met | `"4"` | +| `contains` | De uitvoer moet een subtekenreeks bevatten (niet hoofdlettergevoelig) | `"Paris"` | +| `regex` | Uitvoer moet overeenkomen met regex-patroon | `"1.*2.*3"` | +| `custom` | Aangepaste JS-functie retourneert waar/onwaar | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 Evaluaties (Evals) - -OmniRoute bevat een ingebouwd evaluatieframework om de LLM-responskwaliteit te testen aan de hand van een gouden set. U kunt deze openen via **Analytics → Evaluaties** in het dashboard. - -### Ingebouwde gouden set - -De vooraf geladen "OmniRoute Golden Set" bevat 10 testcases die betrekking hebben op: - -- Groeten, wiskunde, aardrijkskunde, codegeneratie -- Naleving van JSON-formaat, vertaling, prijsverlaging -- Veiligheidsweigering (schadelijke inhoud), tellen, booleaanse logica - -### Evaluatiestrategieën - -| Strategie | Beschrijving | Voorbeeld | -| ---------- | --------------------------------------------------------------------- | -------------------------------- | -| `exact` | De uitvoer moet exact overeenkomen met | `"4"` | -| `contains` | De uitvoer moet een subtekenreeks bevatten (niet hoofdlettergevoelig) | `"Paris"` | -| `regex` | Uitvoer moet overeenkomen met regex-patroon | `"1.*2.*3"` | -| `custom` | Aangepaste JS-functie retourneert waar/onwaar | `(output) => output.length > 10` | - ---- - ## 🐛 Problemen oplossen
@@ -1132,13 +1344,13 @@ De vooraf geladen "OmniRoute Golden Set" bevat 10 testcases die betrekking hebbe - OmniRoute v1.0.6+ omvat fallback-validatie via chat-voltooiingen - Zorg ervoor dat de basis-URL het achtervoegsel `/v1` bevat -### 🔐 OAuth em Servidor Remoto (OAuth-installatie op afstand) +### 🔐 OAuth > **⚠️ BELANGRIJK voor gebruik met OmniRoute op VPS/Docker/server op afstand** -### Waarom werkt OAuth met Antigravity / Gemini CLI op externe servers? +### OAuth Deze bewijzen **Antigravity** en **Gemini CLI** gebruiken **Google OAuth 2.0** voor authenticatie. O Google vraagt ​​dat `redirect_uri` geen OAuth-stroom gebruikt **exatamente** een van de URI's vóór de kadaster zonder toepassing van Google Cloud Console. @@ -1279,7 +1491,7 @@ Als u geen geloofwaardige geloofwaardigheid meer heeft, is het mogelijk om de st --- -## 🗺️ Routekaart +## 🗺️ OmniRoute heeft **210+ functies gepland** over meerdere ontwikkelingsfasen. Dit zijn de belangrijkste gebieden: @@ -1304,18 +1516,6 @@ OmniRoute heeft **210+ functies gepland** over meerdere ontwikkelingsfasen. Dit --- -## 📧 Ondersteuning - -> 💬 **Word lid van onze community!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Krijg hulp, deel tips en blijf op de hoogte. - -- **Website**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Problemen**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Origineel project**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Bijdragers [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.no.md b/README.no.md index e08ebbb97a..2f50731d9e 100644 --- a/README.no.md +++ b/README.no.md @@ -110,6 +110,35 @@ _Koble til ethvert AI-drevet IDE- eller CLI-verktøy gjennom OmniRoute – grati --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Hvorfor OmniRoute? **Slutt å kaste bort penger og nå grensene:** @@ -128,6 +157,18 @@ _Koble til ethvert AI-drevet IDE- eller CLI-verktøy gjennom OmniRoute – grati --- +## 📧 Støtte + +> 💬 **Bli med i fellesskapet vårt!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Få hjelp, del tips og hold deg oppdatert. + +- **Nettsted**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Problemer**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Originalt prosjekt**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Hvordan det fungerer ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Hva OmniRoute løser — 30 ekte smertepoeng og brukstilfeller -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Hver utviklere som bruker AI-verktøy møter disse problemene daglig.** OmniRoute ble bygget for å løse dem alle – fra kostnadsoverskridelser til regionale blokker, fra ødelagte OAuth-flyter til protokolloperasjoner og observerbarhet i bedrifter.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Jeg betaler for et dyrt abonnement, men blir fortsatt avbrutt av grenser" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Utviklere betaler $20–200/måned for Claude Pro, Codex Pro eller GitHub Copilot. Selv om du betaler, har kvoten et tak – 5 timers bruk, ukentlige grenser eller rategrenser per minutt. Midtkodingsøkt, leverandøren slutter å svare og utvikleren mister flyt og produktivitet. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-lags fallback** — Hvis abonnementskvoten går tom, omdirigeres automatisk til API-nøkkel → Billig → Gratis med null manuell intervensjon +- **Sanntidskvotesporing** — Viser tokenforbruk i sanntid med tilbakestilt nedtelling (5 timer, daglig, ukentlig) +- **Støtte for flere kontoer** - Flere kontoer per leverandør med automatisk round-robin - når en går tom, bytter du til den neste +- **Egendefinerte kombinasjoner** — Tilpassbare reservekjeder med 6 balansestrategier (fyll først, round-robin, P2C, tilfeldig, minst brukt, kostnadsoptimalisert) +- **Codex Business Quotas** — Overvåking av bedrifts-/teamarbeidsområdekvoter direkte i dashbordet
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Jeg trenger å bruke flere leverandører, men hver av dem har en annen API" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI bruker ett format, Claude (Anthropic) bruker et annet, Gemini enda et annet. Hvis en utvikler ønsker å teste modeller fra forskjellige leverandører eller fallback mellom dem, må de rekonfigurere SDK-er, endre endepunkter, håndtere inkompatible formater. Tilpassede leverandører (FriendLI, NIM) har ikke-standardmodellende endepunkter. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Unified Endpoint** - En enkelt `http://localhost:20128/v1` fungerer som proxy for alle 36+ leverandører +- **Formatoversettelse** — Automatisk og gjennomsiktig: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **Responsrensing** — Fjerner ikke-standardfelter (`x_groq`, `usage_breakdown`, `service_tier`) som bryter OpenAI SDK v1.83+ +- **Rollenormalisering** — Konverterer `developer` → `system` for ikke-OpenAI-leverandører; `system` → `user` for GLM/ERNIE +- **Think Tag Extraction** — Trekker ut ``-blokker fra modeller som DeepSeek R1 til standardiserte `reasoning_content` +- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatisk konvertering +- **`stream` er standard til `false`** — Justerer med OpenAI-spesifikasjoner, og unngår uventet SSE i Python/Rust/Go SDK-er
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "Min AI-leverandør blokkerer min region/land" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Leverandører som OpenAI/Codex blokkerer tilgang fra visse geografiske områder. Brukere får feil som `unsupported_country_region_territory` under OAuth- og API-tilkoblinger. Dette er spesielt frustrerende for utviklere fra utviklingsland. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **3-Level Proxy Config** — Konfigurerbar proxy på 3 nivåer: global (all trafikk), per leverandør (kun én leverandør) og per tilkobling/nøkkel +- **Fargekodede proxy-merker** — Visuelle indikatorer: 🟢 global proxy, 🟡 leverandørproxy, 🔵 tilkoblings proxy, viser alltid IP +- **OAuth-tokenutveksling gjennom proxy** - OAuth-flyt går også gjennom proxyen, og løser `unsupported_country_region_territory` +- **Test av tilkobling via proxy** — Tilkoblingstester bruker den konfigurerte proxyen (ikke mer direkte forbikobling) +- **SOCKS5-støtte** — Full SOCKS5-proxystøtte for utgående ruting +- **TLS-fingeravtrykkspoofing** — Nettleserlignende TLS-fingeravtrykk via `wreq-js` for å omgå botdeteksjon
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "Jeg vil bruke AI for koding, men jeg har ingen penger" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Ikke alle kan betale $20–200 per måned for AI-abonnementer. Studenter, utviklere fra fremvoksende land, hobbyfolk og frilansere trenger tilgang til kvalitetsmodeller uten kostnad. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Gratis-tilbydere innebygd** — Innebygd støtte for 100 % gratisleverandører: iFlow (8 ubegrensede modeller), Qwen (3 ubegrensede modeller), Kiro (Claude gratis), Gemini CLI (180K/mnd gratis) +- **Kun gratis kombinasjoner** — Kjede `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/måned med null nedetid +- **NVIDIA NIM gratis kreditter** — 1000 gratis kreditter integrert +- **Kostnadsoptimalisert strategi** — Rutingstrategi som automatisk velger den billigste tilgjengelige leverandøren
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Jeg trenger å beskytte AI-gatewayen min mot uautorisert tilgang" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Når du eksponerer en AI-gateway til nettverket (LAN, VPS, Docker), kan alle med adressen konsumere utviklerens tokens/kvote. Uten beskyttelse er API-er sårbare for misbruk, umiddelbar injeksjon og misbruk. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **API Key Management** — Generering, rotasjon og scoping per leverandør med en dedikert `/dashboard/api-manager`-side +- **Tillatelser på modellnivå** — Begrens API-nøkler til spesifikke modeller (`openai/*`, jokertegnmønstre), med Tillat alt/begrens +- **API Endpoint Protection** — Krev en nøkkel for `/v1/models` og blokker spesifikke leverandører fra oppføringen +- **Auth Guard + CSRF Protection** — Alle dashbordruter beskyttet med `withAuth` mellomvare + CSRF-tokens +- **Rate Limiter** — Per-IP ratebegrensning med konfigurerbare vinduer +- **IP-filtrering** — Tillatelsesliste/blokkeringsliste for tilgangskontroll +- **Prompt Injection Guard** — Sanitisering mot ondsinnede spørsmålsmønstre +- **AES-256-GCM-kryptering** — Legitimasjon kryptert i hvile
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. «Tilbyderen min gikk ned og jeg mistet kodeflyten min» -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +AI-leverandører kan bli ustabile, returnere 5xx-feil eller nå midlertidige hastighetsgrenser. Hvis en utvikler er avhengig av en enkelt leverandør, blir de avbrutt. Uten strømbrytere kan gjentatte forsøk krasje applikasjonen. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Circuit Breaker per leverandør** — Automatisk åpning/lukking med konfigurerbare terskler og nedkjøling (Lukket/Åpen/HalvÅpen) +- **Eksponentiell backoff** — Progressive forsinkelser på nytt forsøk +- **Anti-tordenflokk** — Mutex + semaforbeskyttelse mot samtidige stormer på nytt forsøk +- **Combo Fallback Chains** — Hvis primærleverandøren mislykkes, faller den automatisk gjennom kjeden uten inngrep +- **Combo Circuit Breaker** - Deaktiverer sviktende leverandører automatisk i en kombinasjonskjede +- **Helsedashbord** — Oppetidsovervåking, strømbrytertilstander, sperringer, cachestatistikk, p50/p95/p99 latency
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "Å konfigurere hvert AI-verktøy er kjedelig og repeterende" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Utviklere bruker Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Hvert verktøy trenger en annen konfigurasjon (API-endepunkt, nøkkel, modell). Å konfigurere på nytt når du bytter leverandør eller modell er bortkastet tid. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **CLI Tools Dashboard** — Dedikert side med ett-klikksoppsett for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — Genererer `chatLanguageModels.json` for VS-kode med bulkmodellvalg +- **Onboarding Wizard** — Veiledet 4-trinns oppsett for førstegangsbrukere +- **Ett endepunkt, alle modeller** — Konfigurer `http://localhost:20128/v1` én gang, få tilgang til 36+ leverandører
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "Å administrere OAuth-tokens fra flere leverandører er et helvete" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot – alle bruker OAuth 2.0 med tokens som utløper. Utviklere må re-autentisere hele tiden, håndtere `client_secret is missing`, `redirect_uri_mismatch` og feil på eksterne servere. OAuth på LAN/VPS er spesielt problematisk. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Automatisk oppdatering av token** — OAuth-tokener oppdateres i bakgrunnen før utløp +- **OAuth 2.0 (PKCE) innebygd** — Automatisk flyt for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **Multi-Account OAuth** - Flere kontoer per leverandør via JWT/ID-tokenutvinning +- **OAuth LAN/Remote Fix** — Privat IP-deteksjon for `redirect_uri` + manuell URL-modus for eksterne servere +- **OAuth Behind Nginx** — Bruker `window.location.origin` for omvendt proxy-kompatibilitet +- **Remote OAuth Guide** — Trinn-for-trinn-veiledning for Google Cloud-legitimasjon på VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "Jeg vet ikke hvor mye jeg bruker eller hvor" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Utviklere bruker flere betalte leverandører, men har ikke noe enhetlig syn på utgifter. Hver leverandør har sitt eget faktureringsdashbord, men det er ingen konsolidert visning. Uventede kostnader kan hope seg opp. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Dashboard for kostnadsanalyse** — Kostnadssporing per token og budsjettadministrasjon per leverandør + – **Budsjettgrenser per nivå** – Utgiftstak per nivå som utløser automatisk fallback +- **Priskonfigurasjon per modell** — Konfigurerbare priser per modell +- **Bruksstatistikk per API-nøkkel** — Antall forespørsler og sist brukte tidsstempel per nøkkel +- **Analytics Dashboard** — Statistiske kort, modellbruksdiagram, leverandørtabell med suksessrater og latens
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "Jeg kan ikke diagnostisere feil og problemer i AI-anrop" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Når et anrop mislykkes, vet ikke utvikleren om det var en takstgrense, utløpt token, feil format eller leverandørfeil. Fragmenterte logger på tvers av forskjellige terminaler. Uten observerbarhet er feilsøking prøving og feiling. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Unified Logs Dashboard** — 4 faner: Forespørselslogger, proxy-logger, revisjonslogger, konsoll +- **Console Log Viewer** — Viser i sanntid i terminalstil med fargekodede nivåer, automatisk rulling, søk, filter +- **SQLite Proxy Logger** — Vedvarende logger som overlever serverstarter +- **Translator Playground** — 4 feilsøkingsmoduser: Playground (formatoversettelse), Chat Tester (tur-retur), Test Bench (batch), Live Monitor (sanntid) +- **Request Telemetri** — p50/p95/p99 latens + X-Request-Id-sporing +- **Filbasert logging med rotasjon** — Konsollinterceptor fanger opp alt til JSON-logg med størrelsesbasert rotasjon
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "Deployering og vedlikehold av gatewayen er kompleks" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Installering, konfigurering og vedlikehold av en AI-proxy på tvers av forskjellige miljøer (lokalt, VPS, Docker, sky) er arbeidskrevende. Problemer som hardkodede baner, `EACCES` på kataloger, portkonflikter og kryssplattformbygg gir friksjon. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **npm global install** — `npm install -g omniroute && omniroute` — done +- **npm global installasjon** — `npm install -g omniroute && omniroute` — ferdig - **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **Docker Compose-profiler** — `base` (ingen CLI-verktøy) og `cli` (med Claude Code, Codex, OpenClaw) +- **Electron Desktop App** — Innebygd app for Windows/macOS/Linux med systemstatusfelt, automatisk start, offline-modus +- **Split-Port Mode** — API og Dashboard på separate porter for avanserte scenarier (omvendt proxy, containernettverk) +- **Cloud Sync** — Konfigurer synkronisering på tvers av enheter via Cloudflare Workers +- **DB-sikkerhetskopier** — Automatisk sikkerhetskopiering, gjenoppretting, eksport og import av alle innstillinger
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "Grensesnittet er kun engelsk, og teamet mitt snakker ikke engelsk" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Lag i ikke-engelsktalende land, spesielt i Latin-Amerika, Asia og Europa, sliter med grensesnitt som kun er på engelsk. Språkbarrierer reduserer bruken og øker konfigurasjonsfeil. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Dashboard i18n — 30 språk** — Alle 500+ nøkler oversatt, inkludert arabisk, bulgarsk, dansk, tysk, spansk, finsk, fransk, hebraisk, hindi, ungarsk, indonesisk, italiensk, japansk, koreansk, malaysisk, nederlandsk, norsk, polsk, portugisisk (PT/BR), rumensk, russisk, ukrainsk, ukrainsk, kinesisk, engelsk, kinesisk, ukrainsk, kinesisk, ukrainsk, kinesisk, ukrainsk, kinesisk, ukrainsk, kinesisk +- **RTL-støtte** — Høyre-til-venstre-støtte for arabisk og hebraisk +- **Multi-Language READMEs** - 30 komplette dokumentasjonsoversettelser +- **Språkvelger** — Globusikon i overskriften for sanntidsbytte
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "Jeg trenger mer enn chat — jeg trenger innebygginger, bilder, lyd" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +AI er ikke bare fullføring av chat. Utviklere må generere bilder, transkribere lyd, lage innbygginger for RAG, omrangere dokumenter og moderere innhold. Hver API har et annet endepunkt og format. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Innbygging** — `/v1/embeddings` med 6 leverandører og 9+ modeller +- **Bildegenerering** — `/v1/images/generations` med 10 leverandører og 20+ modeller (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Tekst-til-video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) og SD WebUI +- **Tekst-til-musikk** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Lydtranskripsjon** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Tekst-til-tale** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + eksisterende leverandører +- **Moderasjoner** — `/v1/moderations` — Innholdssikkerhetssjekker +- **Rerangering** — `/v1/rerank` — Rerangering av dokumentrelevans +- **Responses API** — Full `/v1/responses`-støtte for Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "Jeg har ingen måte å teste og sammenligne kvalitet på tvers av modeller" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Utviklere ønsker å vite hvilken modell som er best for deres brukssituasjon – kode, oversettelse, resonnement – men det går tregt å sammenligne manuelt. Det finnes ingen integrerte evalueringsverktøy. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **LLM-evalueringer** — Gyldent sett-testing med 10 forhåndslastede tilfeller som dekker hilsener, matematikk, geografi, kodegenerering, JSON-overholdelse, oversettelse, nedskrivning, sikkerhetsavslag +- **4 matchstrategier** — `exact`, `contains`, `regex`, `custom` (JS-funksjon) +- **Translator Playground Test Bench** — Batchtesting med flere innganger og forventede utganger, sammenligning på tvers av leverandører +- **Chattetester** — Full rundtur med visuell responsgjengivelse +- **Live Monitor** — Sanntidsstrøm av alle forespørsler som strømmer gjennom proxyen
-📈 15. "I need to scale without losing performance" +📈 15. "Jeg trenger å skalere uten å miste ytelse" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +Når forespørselsvolumet vokser, genererer de samme spørsmålene dupliserte kostnader uten å bufre. Uten idempotens, dupliserte forespørsler om avfallsbehandling. Satsgrenser per leverandør må respekteres. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Semantisk hurtigbuffer** — To-lags cache (signatur + semantisk) reduserer kostnader og ventetid +- **Request Idempotency** — 5s dedupliseringsvindu for identiske forespørsler +- **Deteksjon av hastighetsgrense** - RPM per leverandør, minimum gap og maksimal samtidig sporing +- **Redigerbare frekvensgrenser** — Konfigurerbare standardinnstillinger i Innstillinger → Motstandsdyktighet med utholdenhet +- **API Key Validation Cache** — 3-lags cache for produksjonsytelse +- **Helsedashbord med telemetri** — p50/p95/p99-forsinkelse, hurtigbufferstatistikk, oppetid
-🤖 16. "I want to control model behavior globally" +🤖 16. "Jeg vil kontrollere modellatferd globalt" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Utviklere som vil ha alle svar på et spesifikt språk, med en bestemt tone, eller som ønsker å begrense resonnement-tokens. Å konfigurere dette i hvert verktøy/hver forespørsel er upraktisk. -**How OmniRoute solves it:** +**Hvordan OmniRoute løser det:** -- **System Prompt Injection** — Global prompt applied to all requests +- **System Prompt Injection** — Global forespørsel brukt på alle forespørsler - **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **6 rutingstrategier** — Globale strategier som bestemmer hvordan forespørsler distribueres +- **Wildcard-ruter** — `provider/*`-mønstre ruter dynamisk til enhver leverandør +- **Kombo aktiver/deaktiver veksle** — Veksle kombinasjoner direkte fra dashbordet +- **Tilkobling av leverandør** — Aktiver/deaktiver alle tilkoblinger for en leverandør med ett klikk +- **Blokkerte leverandører** — Ekskluder spesifikke leverandører fra `/v1/models`-oppføringen
+
+🧰 17. "Jeg trenger MCP-verktøy som førsteklasses produktegenskaper" + +Mange AI-gatewayer avslører MCP bare som en skjult implementeringsdetalj. Team trenger et synlig, håndterbart driftslag. + +**Hvordan OmniRoute løser det:** + +- MCP vises i dashbordnavigasjons- og endepunktprotokollfanen +- Dedikert MCP-administrasjonsside med prosess, verktøy, omfang og revisjon +- Innebygd hurtigstart for `omniroute --mcp` og klient onboarding + +
+ +
+🧠 18. "Jeg trenger A2A-orkestrering med synkronisering + strømoppgavestier" + +Agentarbeidsflyter trenger både direkte svar og langvarig strømmet utførelse med livssykluskontroll. + +**Hvordan OmniRoute løser det:** + +- A2A JSON-RPC-endepunkt (`POST /a2a`) med `message/send` og `message/stream` +- SSE-streaming med forplantning av terminaltilstand +- Oppgavelivssyklus-APIer for `tasks/get` og `tasks/cancel` + +
+ +
+🛰️ 19. "Jeg trenger ekte MCP-prosesshelse, ikke gjettet status" + +Operasjonelle team må vite om MCP faktisk er i live, ikke bare om en API er tilgjengelig. + +**Hvordan OmniRoute løser det:** + +- Runtime hjerteslag-fil med PID, tidsstempler, transport, verktøytelling og omfangsmodus +- MCP status API som kombinerer hjerteslag + nylig aktivitet +- UI-statuskort for prosess/oppetid/hjerteslag + +
+ +
+📋 20. "Jeg trenger reviderbar MCP-verktøykjøring" + +Når verktøy muterer konfigurasjon eller utløser operasjonshandlinger, trenger teamene rettsmedisinsk sporbarhet. + +**Hvordan OmniRoute løser det:** + +- SQLite-støttet revisjonslogging for MCP-verktøykall +- Filtrerer etter verktøy, suksess/fiasko, API-nøkkel og paginering +- Dashboard revisjonstabell + statistikkendepunkter for automatisering + +
+ +
+🔐 21. "Jeg trenger scoped MCP-tillatelser per integrasjon" + +Ulike klienter bør ha minst privilegert tilgang til verktøykategorier. + +**Hvordan OmniRoute løser det:** + +- 9 granulære MCP-skoper for kontrollert verktøytilgang +- Håndhevelse av omfang og synlighet i MCP-administrasjonsgrensesnittet +- Sikker standardstilling for operativt verktøy + +
+ +
+⚙️ 22. "Jeg trenger operasjonelle kontroller uten å omdistribuere" + +Lag trenger raske endringer i kjøretiden under hendelser eller kostnadshendelser. + +**Hvordan OmniRoute løser det:** + +- Bytt kombinasjonsaktivering direkte fra MCP-dashbordet +- Bruk robusthetsprofiler fra forhåndsdefinerte policypakker +- Tilbakestill strømbryterens tilstand fra samme driftspanel + +
+ +
+🔄 23. «I need live A2A task lifecycle synibility and cancellation» + +Uten livssyklussynlighet blir oppgavehendelser vanskelig å triage. + +**Hvordan OmniRoute løser det:** + +- Oppgaveliste/filtrering etter tilstand/ferdighet med paginering +- Drill-down på oppgavemetadata, hendelser og artefakter +- Sluttpunkt for kansellering av oppgave og UI-handling med bekreftelse + +
+ +
+🌊 24. «Jeg trenger aktive strømmålinger for A2A-last» + +Strømmearbeidsflyter krever operasjonell innsikt i samtidighet og direkteforbindelser. + +**Hvordan OmniRoute løser det:** + +- Aktive strømtellere integrert i A2A-status +- Tidsstempel for siste oppgave og antall per stat +- A2A dashbordkort for operasjonsovervåking i sanntid + +
+ +
+🪪 25. "Jeg trenger standard agentoppdagelse for klienter" + +Eksterne klienter og orkestratorer trenger maskinlesbare metadata for onboarding. + +**Hvordan OmniRoute løser det:** + +- Agentkort eksponert på `/.well-known/agent.json` +- Evner og ferdigheter vist i ledelsens brukergrensesnitt +- A2A status API inkluderer oppdagelsesmetadata for automatisering + +
+ +
+🧭 26. "Jeg trenger protokolloppdagbarhet i produktets UX" + +Hvis brukere ikke kan oppdage protokolloverflater, faller kvaliteten på adopsjon og støtte. + +**Hvordan OmniRoute løser det:** + +- Sidefeltoppføringer for MCP og A2A +- Endpoint-side Protokoller-fane med hurtigstart og status +- Lenker fra oversikt til dedikerte styringsdashboards + +
+ +
+🧪 27. "Jeg trenger ende-til-ende protokollvalidering med ekte klienter" + +Mock-tester er ikke nok til å validere protokollkompatibilitet før utgivelse. + +**Hvordan OmniRoute løser det:** + +- E2E-suite som starter opp app og bruker ekte MCP SDK-klienttransport +- A2A-klient tester for å oppdage, sende, streame, hente og kansellere flyter +- Krysssjekk påstander mot MCP-revisjon og A2A-oppgave-APIer + +
+ +
+📡 28. «Jeg trenger enhetlig observerbarhet på tvers av alle grensesnitt» + +Å dele observerbarhet etter protokoll skaper blinde flekker og lengre MTTR. + +**Hvordan OmniRoute løser det:** + +- Samlede dashboards/logger/analyse i ett produkt +- Helse + revisjon + forespørsel om telemetri på tvers av OpenAI-, MCP- og A2A-lag +- Operasjonelle APIer for status og automatisering + +
+ +
+💼 29. "Jeg trenger én kjøretid for proxy + verktøy + agentorkestrering" + +Å kjøre mange separate tjenester øker driftskostnadene og feilmodusene. + +**Hvordan OmniRoute løser det:** + +- OpenAI-kompatibel proxy, MCP-server og A2A-server i én stabel +- Delt autentisering, robusthet, datalagring og observerbarhet +- Konsekvent policymodell på tvers av alle interaksjonsflater + +
+ +
+🚀 30. "Jeg trenger å sende agentiske arbeidsflyter uten limkodespredning" + +Lag mister hastighet når de setter sammen flere ad-hoc-tjenester og skript. + +**Hvordan OmniRoute løser det:** + +- Enhetlig endepunktstrategi for kunder og agenter +- Innebygde brukergrensesnitt for protokolladministrasjon og røykvalideringsveier +- Produksjonsklare fundamenter (sikkerhet, logging, robusthet, backup) + +
+ +### Eksempel på Playbooks (integrerte brukstilfeller) + +**Playbook A: Maksimer betalt abonnement + billig backup** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: Nullkostnadskodestabel** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: 24/7 alltid aktiv reservekjede** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: Agentoperasjoner med MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Hurtigstart **1. Installer globalt:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +990,26 @@ OmniRoute inkluderer en kraftig innebygd oversetterlekeplass med **4 moduser** f
---- +## 🧪 Evalueringer (evalueringer) -## 🎯 Brukssaker +OmniRoute inkluderer et innebygd evalueringsrammeverk for å teste LLM-responskvaliteten mot et gyldent sett. Få tilgang til den via **Analytics → Evals** i dashbordet. -### Sak 1: "Jeg har Claude Pro-abonnement" +### Innebygd gyldent sett -**Problem:** Kvoten utløper ubrukt, satsgrenser under tung koding +Det forhåndsinstallerte "OmniRoute Golden Set" inneholder 10 testcases som dekker: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Hilsen, matematikk, geografi, kodegenerering +- JSON-formatoverholdelse, oversettelse, markdown +- Sikkerhetsavslag (skadelig innhold), telling, boolsk logikk -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Evalueringsstrategier -### Tilfelle 2: "Jeg vil ha null kostnad" - -**Problem:** Har ikke råd til abonnementer, trenger pålitelig AI-koding - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Tilfelle 3: "Jeg trenger 24/7 koding, ingen avbrudd" - -**Problem:** Tidsfrister, har ikke råd til nedetid - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Tilfelle 4: "Jeg vil ha GRATIS AI i OpenClaw" - -**Problem:** Trenger AI-assistent i meldingsapper, helt gratis - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Strategi | Beskrivelse | Eksempel | +| ---------- | --------------------------------------------------------------------- | -------------------------------- | +| `exact` | Utdata må samsvare nøyaktig med | `"4"` | +| `contains` | Utdata må inneholde understreng (uavhengig av store og små bokstaver) | `"Paris"` | +| `regex` | Utdata må samsvare med regulært uttrykksmønster | `"1.*2.*3"` | +| `custom` | Egendefinert JS-funksjon returnerer true/false | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 Evalueringer (evalueringer) - -OmniRoute inkluderer et innebygd evalueringsrammeverk for å teste LLM-responskvaliteten mot et gyldent sett. Få tilgang til den via **Analytics → Evals** i dashbordet. - -### Innebygd gyldent sett - -Det forhåndsinstallerte "OmniRoute Golden Set" inneholder 10 testcases som dekker: - -- Hilsen, matematikk, geografi, kodegenerering -- JSON-formatoverholdelse, oversettelse, markdown -- Sikkerhetsavslag (skadelig innhold), telling, boolsk logikk - -### Evalueringsstrategier - -| Strategi | Beskrivelse | Eksempel | -| ---------- | --------------------------------------------------------------------- | -------------------------------- | -| `exact` | Utdata må samsvare nøyaktig med | `"4"` | -| `contains` | Utdata må inneholde understreng (uavhengig av store og små bokstaver) | `"Paris"` | -| `regex` | Utdata må samsvare med regulært uttrykksmønster | `"1.*2.*3"` | -| `custom` | Egendefinert JS-funksjon returnerer true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Feilsøking
@@ -1132,13 +1344,13 @@ Det forhåndsinstallerte "OmniRoute Golden Set" inneholder 10 testcases som dekk - OmniRoute v1.0.6+ inkluderer reservevalidering via chatfullføringer - Sørg for at basis-URL inkluderer suffikset `/v1` -### 🔐 OAuth em Servidor Remoto (Ekstern OAuth-oppsett) +### 🔐 OAuth > **⚠️ VIKTIG for bruk av OmniRoute med VPS/Docker/server-fjernkontroll** -### Hva med OAuth gjør Antigravity / Gemini CLI falha em servidores remotos? +### OAuth Os testedores **Antigravity** og **Gemini CLI** usam **Google OAuth 2.0** for autenticação. O Google exige que a `redirect_uri` usada no fluxo OAuth seja **exatamente** uma das URIs pre-cadastradas no Google Cloud Console do aplicativo. @@ -1227,7 +1439,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🛠️ Tech Stack +## 🛠️ - **Kjøretid**: Node.js 18–22 LTS (⚠️ Node.js 24+ støttes **ikke** — `better-sqlite3` native binærfiler er inkompatible) - **Språk**: TypeScript 5.9 — **100 % TypeScript** på tvers av `src/` og `open-sse/` (v1.0.6) @@ -1279,7 +1491,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🗺️ Veikart +## 🗺️ OmniRoute har **210+ funksjoner planlagt** på tvers av flere utviklingsfaser. Her er nøkkelområdene: @@ -1304,18 +1516,6 @@ OmniRoute har **210+ funksjoner planlagt** på tvers av flere utviklingsfaser. H --- -## 📧 Støtte - -> 💬 **Bli med i fellesskapet vårt!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Få hjelp, del tips og hold deg oppdatert. - -- **Nettsted**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Problemer**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Originalt prosjekt**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Bidragsytere [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.phi.md b/README.phi.md index 3dadb93c5b..c672523a29 100644 --- a/README.phi.md +++ b/README.phi.md @@ -110,6 +110,35 @@ _Ikonekta ang anumang AI-powered IDE o CLI tool sa pamamagitan ng OmniRoute — --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Bakit OmniRoute? **Ihinto ang pag-aaksaya ng pera at pag-abot sa mga limitasyon:** @@ -128,6 +157,18 @@ _Ikonekta ang anumang AI-powered IDE o CLI tool sa pamamagitan ng OmniRoute — --- +## 📧 Suporta + +> 💬 **Sumali sa aming komunidad!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Humingi ng tulong, magbahagi ng mga tip, at manatiling updated. + +- **Website**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Mga Isyu**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Orihinal na Proyekto**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Paano Ito Gumagana ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Ano ang Lutasin ng OmniRoute — 30 Tunay na Pain Points at Mga Kaso ng Paggamit -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Ang bawat developer na gumagamit ng mga tool ng AI ay nahaharap sa mga problemang ito araw-araw.** Binuo ang OmniRoute para lutasin ang lahat ng ito — mula sa mga pag-overrun sa gastos hanggang sa mga panrehiyong bloke, mula sa mga sirang daloy ng OAuth hanggang sa mga pagpapatakbo ng protocol at pagmamasid sa enterprise.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Nagbabayad ako para sa isang mamahaling subscription ngunit naaantala pa rin ng mga limitasyon" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Nagbabayad ang mga developer ng $20–200/buwan para sa Claude Pro, Codex Pro, o GitHub Copilot. Kahit na nagbabayad, may kisame ang quota — 5h ng paggamit, lingguhang limitasyon, o bawat minutong limitasyon sa rate. Sesyon sa kalagitnaan ng coding, hihinto sa pagtugon ang provider at nawawalan ng daloy at pagiging produktibo ang developer. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-Tier Fallback** — Kung maubusan ang quota ng subscription, awtomatikong magre-redirect sa API Key → Murang → Libre nang walang manu-manong interbensyon +- **Real-Time Quota Tracking** — Ipinapakita ang pagkonsumo ng token sa real-time na may reset countdown (5h, araw-araw, lingguhan) +- **Multi-Account Support** — Maramihang account sa bawat provider na may auto round-robin — kapag naubos ang isa, lilipat sa susunod +- **Custom Combos** — Nako-customize na fallback chain na may 6 na diskarte sa pagbabalanse (fill-first, round-robin, P2C, random, hindi gaanong ginagamit, cost-optimized) +- **Codex Business Quotas** — Direktang pagsubaybay sa quota ng workspace ng Negosyo/Team sa dashboard
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Kailangan kong gumamit ng maraming provider ngunit bawat isa ay may iba't ibang API" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +Gumagamit ang OpenAI ng isang format, gumagamit si Claude (Anthropic) ng isa pa, isa pa ang Gemini. Kung gusto ng isang dev na subukan ang mga modelo mula sa iba't ibang provider o fallback sa pagitan nila, kailangan nilang i-configure muli ang mga SDK, baguhin ang mga endpoint, harapin ang mga hindi tugmang format. Ang mga custom na provider (FriendLI, NIM) ay may hindi karaniwang mga endpoint ng modelo. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Pinag-isang Endpoint** — Isang `http://localhost:20128/v1` ang nagsisilbing proxy para sa lahat ng 36+ provider +- **Format Translation** — Awtomatiko at transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **Response Sanitization** — Tinatanggal ang mga hindi karaniwang field (`x_groq`, `usage_breakdown`, `service_tier`) na sumisira sa OpenAI SDK v1.83+ +- **Role Normalization** — Kino-convert ang `developer` → `system` para sa mga provider na hindi OpenAI; `system` → `user` para sa GLM/ERNIE +- **Think Tag Extraction** — Kinukuha ang `` block mula sa mga modelo tulad ng DeepSeek R1 sa standardized `reasoning_content` +- **Structured Output para sa Gemini** — `json_schema` → `responseMimeType`/`responseSchema` awtomatikong conversion +- **`stream` ang mga default sa `false`** — Naka-align sa OpenAI spec, iniiwasan ang hindi inaasahang SSE sa Python/Rust/Go SDK
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "Bina-block ng aking AI provider ang aking rehiyon/bansa" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Hinaharang ng mga provider tulad ng OpenAI/Codex ang pag-access mula sa ilang partikular na heyograpikong rehiyon. Nakakakuha ang mga user ng mga error tulad ng `unsupported_country_region_territory` sa panahon ng mga koneksyon sa OAuth at API. Ito ay lalo na nakakabigo para sa mga developer mula sa pagbuo ng mga bansa. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **3-Level Proxy Config** — Nako-configure na proxy sa 3 antas: global (lahat ng trapiko), bawat provider (isang provider lang), at bawat koneksyon/key +- **Color-Coded Proxy Badges** — Visual indicator: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, palaging ipinapakita ang IP +- **OAuth Token Exchange Through Proxy** — Ang daloy ng OAuth ay dumadaan din sa proxy, na nilulutas ang `unsupported_country_region_territory` +- **Mga Pagsusuri sa Koneksyon sa pamamagitan ng Proxy** — Ginagamit ng mga pagsubok sa koneksyon ang naka-configure na proxy (wala nang direktang bypass) +- **SOCKS5 Support** — Buong SOCKS5 proxy support para sa papalabas na pagruruta +- **TLS Fingerprint Spoofing** — tulad ng browser na TLS fingerprint sa pamamagitan ng `wreq-js` para i-bypass ang pag-detect ng bot
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "Gusto kong gumamit ng AI para sa coding ngunit wala akong pera" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Hindi lahat ay maaaring magbayad ng $20–200/buwan para sa mga subscription sa AI. Ang mga mag-aaral, mga dev mula sa mga umuusbong na bansa, mga hobbyist, at mga freelancer ay nangangailangan ng access sa mga de-kalidad na modelo sa zero cost. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Libreng Tier Provider Built-in** — Native na suporta para sa 100% libreng provider: iFlow (8 unlimited na modelo), Qwen (3 unlimited na modelo), Kiro (Claude nang libre), Gemini CLI (180K/buwan libre) +- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/buwan na walang downtime +- **NVIDIA NIM Free Credits** — 1000 libreng credits na isinama +- **Cost Optimized Strategy** — Istratehiya sa pagruruta na awtomatikong pinipili ang pinakamurang available na provider
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Kailangan kong protektahan ang aking AI gateway mula sa hindi awtorisadong pag-access" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Kapag inilantad ang isang gateway ng AI sa network (LAN, VPS, Docker), maaaring kumonsumo ng mga token/quota ng developer ang sinumang may address. Kung walang proteksyon, ang mga API ay mahina sa maling paggamit, agarang pag-iniksyon, at pang-aabuso. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **API Key Management** — Pagbuo, pag-ikot, at saklaw ng bawat provider na may nakalaang `/dashboard/api-manager` na pahina +- **Mga Pahintulot sa Antas ng Modelo** — Limitahan ang mga API key sa mga partikular na modelo (`openai/*`, mga wildcard pattern), na may Allow All/Restrict toggle +- **API Endpoint Protection** — Mangangailangan ng key para sa `/v1/models` at i-block ang mga partikular na provider mula sa listahan +- **Auth Guard + CSRF Protection** — Lahat ng mga ruta ng dashboard ay protektado ng `withAuth` middleware + CSRF token +- **Rate Limiter** — Per-IP rate na naglilimita sa mga na-configure na window +- **IP Filtering** — Allowlist/blocklist para sa access control +- **Prompt Injection Guard** — Sanitization laban sa malisyosong prompt pattern +- **AES-256-GCM Encryption** — Ang mga kredensyal ay naka-encrypt sa pahinga
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "Bumaba ang provider ko at nawala ang coding flow ko" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Ang mga tagapagbigay ng AI ay maaaring maging hindi matatag, magbalik ng 5xx na mga error, o maabot ang mga pansamantalang limitasyon sa rate. Kung ang isang dev ay nakadepende sa isang provider, maaantala sila. Kung walang mga circuit breaker, ang mga paulit-ulit na pagsubok ay maaaring mag-crash sa application. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) +- **Circuit Breaker per-provider** — Awtomatikong buksan/sarado na may mga na-configure na threshold at cooldown (Sarado/Bukas/Kalahating Bukas) - **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain +- **Anti-Thundering Herd** — Mutex + semaphore na proteksyon laban sa kasabay na muling pagsubok na mga bagyo +- **Combo Fallback Chains** — Kung nabigo ang pangunahing provider, awtomatikong mahuhulog sa chain nang walang interbensyon +- **Combo Circuit Breaker** — Awtomatikong idi-disable ang mga nabigong provider sa loob ng combo chain - **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "Ang pag-configure ng bawat AI tool ay nakakapagod at paulit-ulit" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Gumagamit ang mga developer ng Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Ang bawat tool ay nangangailangan ng ibang config (API endpoint, key, model). Ang muling pag-configure kapag lumipat ng mga provider o modelo ay isang pag-aaksaya ng oras. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **CLI Tools Dashboard** — Nakatuon na page na may isang-click na setup para sa Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — Bumubuo ng `chatLanguageModels.json` para sa VS Code na may maramihang pagpili ng modelo +- **Onboarding Wizard** — May gabay na 4-step na pag-setup para sa mga unang beses na user +- **Isang endpoint, lahat ng modelo** — I-configure ang `http://localhost:20128/v1` nang isang beses, i-access ang 36+ provider
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "Impiyerno ang pamamahala sa mga token ng OAuth mula sa maraming provider" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot — lahat ay gumagamit ng OAuth 2.0 na may mga mag-e-expire na token. Kailangang muling mag-authenticate ang mga developer, harapin ang `client_secret is missing`, `redirect_uri_mismatch`, at mga pagkabigo sa mga malalayong server. Ang OAuth sa LAN/VPS ay partikular na may problema. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Auto Token Refresh** — Ang mga token ng OAuth ay nagre-refresh sa background bago mag-expire +- **OAuth 2.0 (PKCE) Built-in** — Awtomatikong daloy para sa Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **Multi-Account OAuth** — Maramihang account bawat provider sa pamamagitan ng pagkuha ng token ng JWT/ID +- **OAuth LAN/Remote Fix** — Pribadong IP detection para sa `redirect_uri` + manual URL mode para sa mga malalayong server +- **OAuth Behind Nginx** — Gumagamit ng `window.location.origin` para sa reverse proxy compatibility +- **Remote OAuth Guide** — Step-by-step na gabay para sa mga kredensyal ng Google Cloud sa VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "Hindi ko alam kung magkano ang ginagastos ko o kung saan" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Gumagamit ang mga developer ng maraming bayad na provider ngunit walang pinag-isang pagtingin sa paggastos. Ang bawat provider ay may sariling dashboard ng pagsingil, ngunit walang pinagsama-samang view. Maaaring tumambak ang mga hindi inaasahang gastos. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Cost Analytics Dashboard** — Per-token cost tracking at pamamahala ng badyet bawat provider +- **Mga Limitasyon sa Badyet bawat Tier** — Paggastos ng kisame sa bawat tier na nagti-trigger ng awtomatikong fallback +- **Per-Model Pricing Configuration** — Nako-configure na mga presyo bawat modelo +- **Mga Istatistika ng Paggamit Bawat API Key** — Bilang ng kahilingan at timestamp na huling ginamit bawat key +- **Analytics Dashboard** — Mga stat card, chart ng paggamit ng modelo, talahanayan ng provider na may mga rate ng tagumpay at latency
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "Hindi ko matukoy ang mga error at problema sa mga tawag sa AI" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Kapag nabigo ang isang tawag, hindi alam ng dev kung ito ay isang limitasyon sa rate, nag-expire na token, maling format, o error sa provider. Mga fragment na log sa iba't ibang terminal. Kung walang pagmamasid, ang pag-debug ay trial-and-error. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) +- **Unified Logs Dashboard** — 4 na tab: Request Logs, Proxy Logs, Audit Logs, Console +- **Console Log Viewer** — Real-time na terminal-style viewer na may color-coded level, auto-scroll, paghahanap, filter +- **SQLite Proxy Logs** — Mga paulit-ulit na log na nakaligtas sa pag-restart ng server +- **Translator Playground** — 4 na mode ng pag-debug: Playground (pagsasalin ng format), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) - **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Pag-log na Nakabatay sa File na may Pag-ikot** — Kinukuha ng Console interceptor ang lahat sa log ng JSON na may pag-ikot batay sa laki
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "Ang pag-deploy at pagpapanatili ng gateway ay kumplikado" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Ang pag-install, pag-configure, at pagpapanatili ng AI proxy sa iba't ibang kapaligiran (lokal, VPS, Docker, cloud) ay labor-intensive. Ang mga problema tulad ng mga hardcoded na path, `EACCES` sa mga direktoryo, port conflict, at cross-platform build ay nagdaragdag ng friction. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **npm global install** — `npm install -g omniroute && omniroute` — done +- **npm global install** — `npm install -g omniroute && omniroute` — tapos na - **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **Docker Compose Profiles** — `base` (walang CLI tool) at `cli` (na may Claude Code, Codex, OpenClaw) +- **Electron Desktop App** — Native app para sa Windows/macOS/Linux na may system tray, auto-start, offline mode +- **Split-Port Mode** — API at Dashboard sa magkahiwalay na port para sa mga advanced na sitwasyon (reverse proxy, container networking) +- **Cloud Sync** — I-configure ang pag-synchronize sa mga device sa pamamagitan ng Cloudflare Workers +- **DB Backup** — Awtomatikong pag-backup, pagpapanumbalik, pag-export at pag-import ng lahat ng mga setting
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "Ang interface ay English-only at ang aking team ay hindi nagsasalita ng English" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Ang mga koponan sa mga bansang hindi nagsasalita ng Ingles, lalo na sa Latin America, Asia, at Europe, ay nakikipagpunyagi sa mga interface na Ingles lamang. Binabawasan ng mga hadlang sa wika ang pag-aampon at pinapataas ang mga error sa pagsasaayos. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Dashboard i18n — 30 Wika** — Lahat ng 500+ key na isinalin kasama ang Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Vietnamese +- **RTL Support** — Kanan-pakaliwa na suporta para sa Arabic at Hebrew +- **Multi-Language READMEs** — 30 kumpletong pagsasalin ng dokumentasyon +- **Language Selector** — Globe icon sa header para sa real-time na paglipat
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "Kailangan ko ng higit pa sa chat — kailangan ko ng mga embed, larawan, audio" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +Ang AI ay hindi lamang pagkumpleto ng chat. Kailangan ng mga dev na bumuo ng mga larawan, mag-transcribe ng audio, gumawa ng mga pag-embed para sa RAG, mag-rerank ng mga dokumento, at katamtamang nilalaman. Ang bawat API ay may iba't ibang endpoint at format. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Mga Pag-embed** — `/v1/embeddings` na may 6 na provider at 9+ na modelo +- **Pagbuo ng Larawan** — `/v1/images/generations` na may 10 provider at 20+ modelo (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Text-to-Video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) at SD WebUI +- **Text-to-Music** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Text-to-Speech** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + mga kasalukuyang provider +- **Moderations** — `/v1/moderations` — Mga pagsusuri sa kaligtasan ng content +- **Muling pagraranggo** — `/v1/rerank` — Muling pagraranggo ng kaugnayan ng dokumento +- **Responses API** — Buong `/v1/responses` na suporta para sa Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "Wala akong paraan para subukan at paghambingin ang kalidad sa mga modelo" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Gustong malaman ng mga developer kung aling modelo ang pinakamainam para sa kanilang kaso ng paggamit — code, pagsasalin, pangangatwiran — ngunit mabagal ang paghahambing nang manu-mano. Walang pinagsamang mga tool sa eval ang umiiral. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **LLM Evaluations** — Golden set testing na may 10 pre-loaded na case na sumasaklaw sa mga pagbati, matematika, heograpiya, pagbuo ng code, pagsunod sa JSON, pagsasalin, markdown, pagtanggi sa kaligtasan +- **4 na Istratehiya sa Pagtutugma** — `exact`, `contains`, `regex`, `custom` (JS function) +- **Translator Playground Test Bench** — Batch testing na may maraming input at inaasahang output, cross-provider na paghahambing +- **Chat Tester** — Buong round-trip na may visual response rendering +- **Live Monitor** — Real-time na stream ng lahat ng kahilingang dumadaloy sa proxy
-📈 15. "I need to scale without losing performance" +📈 15. "Kailangan kong mag-scale nang hindi nawawala ang performance" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +Habang lumalaki ang dami ng kahilingan, nang walang pag-cache sa parehong mga tanong ay bumubuo ng mga dobleng gastos. Nang walang idempotency, humihiling ang duplicate sa pagpoproseso ng basura. Dapat igalang ang mga limitasyon sa rate ng bawat provider. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking +- **Semantic Cache** — Ang two-tier na cache (pirma + semantiko) ay binabawasan ang gastos at latency +- **Request Idempotency** — 5s deduplication window para sa magkaparehong mga kahilingan +- **Pagtukoy sa Limitasyon ng Rate** — RPM ng bawat provider, min na gap, at max na kasabay na pagsubaybay - **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **API Key Validation Cache** — 3-tier na cache para sa performance ng produksyon +- **Health Dashboard na may Telemetry** — p50/p95/p99 latency, cache stats, uptime
-🤖 16. "I want to control model behavior globally" +🤖 16. "Gusto kong kontrolin ang gawi ng modelo sa buong mundo" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Mga developer na gusto ang lahat ng tugon sa isang partikular na wika, na may partikular na tono, o gustong limitahan ang mga token ng pangangatwiran. Ang pag-configure nito sa bawat tool/kahilingan ay hindi praktikal. -**How OmniRoute solves it:** +**Paano ito niresolba ng OmniRoute:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **System Prompt Injection** — Inilapat ang pandaigdigang prompt sa lahat ng kahilingan +- **Thinking Budget Validation** — Reasoning token allocation control bawat kahilingan (passthrough, auto, custom, adaptive) +- **6 Mga Istratehiya sa Pagruruta** — Mga pandaigdigang diskarte na tumutukoy kung paano ipinamamahagi ang mga kahilingan +- **Wildcard Router** — Ang mga pattern ng `provider/*` ay dynamic na ruta sa anumang provider +- **Combo Enable/Disable Toggle** — I-toggle ang mga combo nang direkta mula sa dashboard +- **Toggle ng Provider** — I-enable/i-disable ang lahat ng koneksyon para sa isang provider sa isang click +- **Mga Naka-block na Provider** — Ibukod ang mga partikular na provider mula sa listahan ng `/v1/models`
+
+🧰 17. "Kailangan ko ng mga tool sa MCP bilang mga first-class na kakayahan ng produkto" + +Maraming AI gateway ang naglalantad sa MCP bilang isang nakatagong detalye ng pagpapatupad. Ang mga koponan ay nangangailangan ng isang nakikita, napapamahalaang layer ng operasyon. + +**Paano ito niresolba ng OmniRoute:** + +- Lumilitaw ang MCP sa dashboard navigation at tab ng endpoint protocol +- Nakatuon na pahina ng pamamahala ng MCP na may proseso, mga tool, saklaw, at pag-audit +- Built-in na quick-start para sa `omniroute --mcp` at onboarding ng kliyente + +
+ +
+🧠 18. "Kailangan ko ng A2A orchestration na may sync + stream task path" + +Ang mga daloy ng trabaho ng ahente ay nangangailangan ng parehong direktang tugon at matagal na naka-stream na pagpapatupad na may kontrol sa lifecycle. + +**Paano ito niresolba ng OmniRoute:** + +- A2A JSON-RPC endpoint (`POST /a2a`) na may `message/send` at `message/stream` +- SSE streaming na may terminal state propagation +- Mga task lifecycle API para sa `tasks/get` at `tasks/cancel` + +
+ +
+🛰️ 19. "Kailangan ko ng totoong kalusugan ng proseso ng MCP, hindi nahulaan ang status" + +Kailangang malaman ng mga operational team kung talagang buhay ang MCP, hindi lang kung maaabot ang isang API. + +**Paano ito niresolba ng OmniRoute:** + +- Runtime heartbeat file na may PID, timestamp, transport, bilang ng tool, at mode ng saklaw +- MCP status API na pinagsasama ang tibok ng puso + kamakailang aktibidad +- Mga UI status card para sa pagiging bago ng proseso/uptime/heartbeat + +
+ +
+📋 20. "Kailangan ko ng auditable MCP tool execution" + +Kapag ang mga tool ay nag-mutate ng config o nag-trigger ng mga pagkilos ng ops, ang mga team ay nangangailangan ng forensic traceability. + +**Paano ito niresolba ng OmniRoute:** + +- SQLite-backed audit logging para sa mga tawag sa tool ng MCP +- Mga filter ayon sa tool, tagumpay/kabiguan, API key, at pagination +- Dashboard audit table + stats endpoints para sa automation + +
+ +
+🔐 21. "Kailangan ko ng mga saklaw na pahintulot ng MCP sa bawat pagsasama" + +Ang iba't ibang mga kliyente ay dapat magkaroon ng hindi gaanong pribilehiyong pag-access sa mga kategorya ng tool. + +**Paano ito niresolba ng OmniRoute:** + +- 9 na butil na saklaw ng MCP para sa kontroladong pag-access ng tool +- Pagpapatupad ng saklaw at kakayahang makita sa UI ng pamamahala ng MCP +- Ligtas na default na postura para sa operational tooling + +
+ +
+⚙️ 22. "Kailangan ko ng mga kontrol sa pagpapatakbo nang hindi nagre-redeploy" + +Ang mga koponan ay nangangailangan ng mabilis na mga pagbabago sa runtime sa panahon ng mga insidente o mga kaganapan sa gastos. + +**Paano ito niresolba ng OmniRoute:** + +- Lumipat ng combo activation nang direkta mula sa MCP dashboard +- Ilapat ang mga profile ng katatagan mula sa paunang natukoy na mga pack ng patakaran +- I-reset ang estado ng circuit breaker mula sa parehong panel ng mga operasyon + +
+ +
+🔄 23. "Kailangan ko ng live A2A task lifecycle visibility at pagkansela" + +Kung walang lifecycle visibility, ang mga insidente ng gawain ay nagiging mahirap subukan. + +**Paano ito niresolba ng OmniRoute:** + +- Listahan ng gawain/pag-filter ayon sa estado/kasanayan sa pagination +- Mag-drill-down sa metadata ng gawain, mga kaganapan, at mga artifact +- Endpoint ng pagkansela ng gawain at pagkilos ng UI na may kumpirmasyon + +
+ +
+🌊 24. "Kailangan ko ng mga aktibong sukatan ng stream para sa A2A load" + +Ang mga stream ng workflow ay nangangailangan ng operational insight sa concurrency at live na koneksyon. + +**Paano ito niresolba ng OmniRoute:** + +- Mga aktibong stream counter na isinama sa A2A status +- Mga bilang ng huling timestamp ng gawain at bawat estado +- A2A dashboard card para sa real-time na pagsubaybay sa ops + +
+ +
+🪪 25. "Kailangan ko ng karaniwang pagtuklas ng ahente para sa mga kliyente" + +Ang mga panlabas na kliyente at orkestra ay nangangailangan ng metadata na nababasa ng makina para sa onboarding. + +**Paano ito niresolba ng OmniRoute:** + +- Nalantad ang Agent Card sa `/.well-known/agent.json` +- Mga kakayahan at kasanayan na ipinapakita sa management UI +- Kasama sa A2A status API ang metadata ng pagtuklas para sa automation + +
+ +
+🧭 26. "Kailangan ko ang pagtuklas ng protocol sa UX ng produkto" + +Kung hindi matuklasan ng mga user ang mga surface ng protocol, bumababa ang kalidad ng pag-aampon at suporta. + +**Paano ito niresolba ng OmniRoute:** + +- Mga entry sa sidebar para sa MCP at A2A +- Tab na Mga Protokol ng pahina ng Endpoint na may mabilis na pagsisimula at katayuan +- Mga link mula sa pangkalahatang-ideya hanggang sa nakalaang mga dashboard ng pamamahala + +
+ +
+🧪 27. "Kailangan ko ng end-to-end protocol validation sa mga totoong kliyente" + +Ang mga kunwaring pagsubok ay hindi sapat upang patunayan ang pagiging tugma ng protocol bago ilabas. + +**Paano ito niresolba ng OmniRoute:** + +- E2E suite na nagbo-boot ng app at gumagamit ng totoong MCP SDK client transport +- Mga pagsubok sa A2A client para sa pagtuklas, pagpapadala, pag-stream, pagkuha, at pagkansela ng mga daloy +- Cross-check assertion laban sa MCP audit at A2A tasks API + +
+ +
+📡 28. "Kailangan ko ng pinag-isang observability sa lahat ng interface" + +Ang paghahati ng observability sa pamamagitan ng protocol ay lumilikha ng mga blind spot at mas mahabang MTTR. + +**Paano ito niresolba ng OmniRoute:** + +- Pinag-isang mga dashboard/log/analytics sa isang produkto +- Health + audit + humiling ng telemetry sa mga layer ng OpenAI, MCP, at A2A +- Mga Operational API para sa status at automation + +
+ +
+💼 29. "Kailangan ko ng isang runtime para sa proxy + tool + orkestrasyon ng ahente" + +Ang pagpapatakbo ng maraming magkakahiwalay na serbisyo ay nagpapataas ng gastos sa pagpapatakbo at mga mode ng pagkabigo. + +**Paano ito niresolba ng OmniRoute:** + +- OpenAI-compatible na proxy, MCP server, at A2A server sa isang stack +- Nakabahaging auth, resilience, data store, at observability +- Pare-parehong modelo ng patakaran sa lahat ng surface ng pakikipag-ugnayan + +
+ +
+🚀 30. "Kailangan kong magpadala ng mga ahenteng daloy ng trabaho nang walang glue-code sprawl" + +Nawawalan ng bilis ang mga koponan kapag nagtatahi ng maraming ad-hoc na serbisyo at script. + +**Paano ito niresolba ng OmniRoute:** + +- Pinag-isang endpoint na diskarte para sa mga kliyente at ahente +- Mga built-in na UI sa pamamahala ng protocol at mga daanan sa pagpapatunay ng usok +- Mga pundasyong handa sa produksyon (seguridad, pag-log, katatagan, backup) + +
+ +### Mga Halimbawang Playbook + +**Playbook A: I-maximize ang bayad na subscription + murang backup** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: Zero-cost coding stack** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: 24/7 always-on fallback chain** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: Ahente ops sa MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Mabilis na Pagsisimula **1. I-install sa buong mundo:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +990,26 @@ Kasama sa OmniRoute ang isang malakas na built-in na Playground ng Translator na
---- +## 🧪 Mga Pagsusuri (Evals) -## 🎯 Use Cases +Ang OmniRoute ay may kasamang built-in na balangkas ng pagsusuri upang subukan ang kalidad ng pagtugon ng LLM laban sa isang ginintuang hanay. I-access ito sa pamamagitan ng **Analytics → Evals** sa dashboard. -### Case 1: "May subscription ako sa Claude Pro" +### na Set -**Problema:** Nag-e-expire ang quota nang hindi nagamit, mga limitasyon sa rate sa panahon ng mabigat na coding +Ang pre-loaded na "OmniRoute Golden Set" ay naglalaman ng 10 test case na sumasaklaw sa: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Pagbati, matematika, heograpiya, pagbuo ng code +- Pagsunod sa format ng JSON, pagsasalin, markdown +- Pagtanggi sa kaligtasan (nakapipinsalang nilalaman), pagbibilang, lohika ng boolean -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Estratehiya sa Pagsusuri -### Case 2: "Gusto ko ng zero cost" - -**Problema:** Hindi kayang bayaran ang mga subscription, kailangan ng maaasahang AI coding - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Case 3: "Kailangan ko ng 24/7 coding, walang mga pagkaantala" - -**Problema:** Mga deadline, hindi kayang bayaran ang downtime - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Kaso 4: "Gusto ko ng LIBRENG AI sa OpenClaw" - -**Problema:** Kailangan ng AI assistant sa mga app sa pagmemensahe, ganap na libre - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Diskarte | Paglalarawan | Halimbawa | +| ---------- | ------------------------------------------------------------ | -------------------------------- | +| `exact` | Dapat na eksaktong tumugma ang output | `"4"` | +| `contains` | Ang output ay dapat maglaman ng substring (case-insensitive) | `"Paris"` | +| `regex` | Ang output ay dapat tumugma sa regex pattern | `"1.*2.*3"` | +| `custom` | Ang custom na JS function ay nagbabalik ng true/false | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 Mga Pagsusuri (Evals) - -Ang OmniRoute ay may kasamang built-in na balangkas ng pagsusuri upang subukan ang kalidad ng pagtugon ng LLM laban sa isang ginintuang hanay. I-access ito sa pamamagitan ng **Analytics → Evals** sa dashboard. - -### Built-in na Golden Set - -Ang pre-loaded na "OmniRoute Golden Set" ay naglalaman ng 10 test case na sumasaklaw sa: - -- Pagbati, matematika, heograpiya, pagbuo ng code -- Pagsunod sa format ng JSON, pagsasalin, markdown -- Pagtanggi sa kaligtasan (nakapipinsalang nilalaman), pagbibilang, lohika ng boolean - -### Estratehiya sa Pagsusuri - -| Diskarte | Paglalarawan | Halimbawa | -| ---------- | ------------------------------------------------------------ | -------------------------------- | -| `exact` | Dapat na eksaktong tumugma ang output | `"4"` | -| `contains` | Ang output ay dapat maglaman ng substring (case-insensitive) | `"Paris"` | -| `regex` | Ang output ay dapat tumugma sa regex pattern | `"1.*2.*3"` | -| `custom` | Ang custom na JS function ay nagbabalik ng true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Pag-troubleshoot
@@ -1132,13 +1344,13 @@ Ang pre-loaded na "OmniRoute Golden Set" ay naglalaman ng 10 test case na sumasa - Kasama sa OmniRoute v1.0.6+ ang fallback validation sa pamamagitan ng mga pagkumpleto ng chat - Tiyaking may kasamang `/v1` suffix ang base URL -### 🔐 OAuth em Servidor Remoto (Remote OAuth Setup) +### 🔐 OAuth > **⚠️ MAHALAGA para sa usuários com OmniRoute sa VPS/Docker/servidor remoto** -### Para sa que o OAuth do Antigravity / Gemini CLI falha em servidores remotos? +### OAuth Os provedores **Antigravity** at **Gemini CLI** gamit ang **Google OAuth 2.0** para sa autenticação. O Google exige que a `redirect_uri` usada no fluxo OAuth seja **exatamente** uma das URIs pré-cadastradas no Google Cloud Console do aplicativo. @@ -1227,7 +1439,7 @@ Se não quiser criar credenciais próprias agora, may posibilidad na magamit o f --- -## 🛠️ Tech Stack +## 🛠️ - **Runtime**: Node.js 18–22 LTS (⚠️ Node.js 24+ ay **hindi suportado** — `better-sqlite3` native binary ay hindi tugma) - **Wika**: TypeScript 5.9 — **100% TypeScript** sa `src/` at `open-sse/` (v1.0.6) @@ -1279,7 +1491,7 @@ Se não quiser criar credenciais próprias agora, may posibilidad na magamit o f --- -## 🗺️ Roadmap +## 🗺️ Ang OmniRoute ay may **210+ feature na binalak** sa maraming yugto ng pag-unlad. Narito ang mga pangunahing lugar: @@ -1304,18 +1516,6 @@ Ang OmniRoute ay may **210+ feature na binalak** sa maraming yugto ng pag-unlad. --- -## 📧 Suporta - -> 💬 **Sumali sa aming komunidad!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Humingi ng tulong, magbahagi ng mga tip, at manatiling updated. - -- **Website**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Mga Isyu**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Orihinal na Proyekto**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Mga nag-aambag [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.pl.md b/README.pl.md index 8f0064d126..29fa1f1ab1 100644 --- a/README.pl.md +++ b/README.pl.md @@ -110,6 +110,35 @@ _Połącz dowolne narzędzie IDE lub CLI oparte na sztucznej inteligencji poprze --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Dlaczego OmniRoute? **Przestań marnować pieniądze i przekraczać limity:** @@ -128,6 +157,18 @@ _Połącz dowolne narzędzie IDE lub CLI oparte na sztucznej inteligencji poprze --- +## 📧 Wsparcie + +> 💬 **Dołącz do naszej społeczności!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Uzyskaj pomoc, dziel się wskazówkami i bądź na bieżąco. + +- **Strona internetowa**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Problemy**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Oryginalny projekt**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Jak to działa ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Co rozwiązuje OmniRoute — 30 rzeczywistych problemów i przypadków użycia -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Każdy programista korzystający z narzędzi AI codziennie spotyka się z tymi problemami.** OmniRoute został stworzony, aby rozwiązać je wszystkie — od przekroczeń kosztów po blokady regionalne, od zepsutych przepływów OAuth po operacje protokołów i obserwowalność przedsiębiorstwa.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. „Płacę za kosztowną subskrypcję, ale nadal przeszkadzają mi limity” -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Programiści płacą 20–200 USD miesięcznie za Claude Pro, Codex Pro lub GitHub Copilot. Nawet płacąc, limit ma pułap – 5 godzin użytkowania, limity tygodniowe lub limity stawek za minutę. W połowie sesji kodowania dostawca przestaje odpowiadać, a programista traci płynność i produktywność. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Inteligentny 4-poziomowy powrót** — Jeśli limit subskrypcji się wyczerpie, automatycznie przekierowuje do klucza API → Tani → Bezpłatny bez ręcznej interwencji +- **Śledzenie limitów w czasie rzeczywistym** — Pokazuje zużycie tokenów w czasie rzeczywistym z resetowanym odliczaniem (5 godzin, codziennie, co tydzień) +- **Obsługa wielu kont** — Wiele kont na dostawcę z funkcją automatycznego przełączania między kontami — gdy skończy się jedno, następuje przejście do następnego +- **Niestandardowe kombinacje** — Konfigurowalne łańcuchy rezerwowe z 6 strategiami równoważenia (pierwsze wypełnienie, działanie okrężne, P2C, losowe, najrzadziej używane, zoptymalizowane pod względem kosztów) +- **Przydziały biznesowe Kodeksu** — monitorowanie przydziałów przestrzeni roboczej firmy/zespołu bezpośrednio na pulpicie nawigacyjnym
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. „Muszę korzystać z wielu dostawców, ale każdy ma inny interfejs API” -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI używa jednego formatu, Claude (Anthropic) używa innego, Gemini jeszcze innego. Jeśli programista chce przetestować modele od różnych dostawców lub korzystać z nich w trybie awaryjnym, musi ponownie skonfigurować pakiety SDK, zmienić punkty końcowe i poradzić sobie z niekompatybilnymi formatami. Dostawcy niestandardowi (FriendLI, NIM) mają niestandardowe punkty końcowe modelu. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Ujednolicony punkt końcowy** — pojedynczy `http://localhost:20128/v1` służy jako serwer proxy dla wszystkich ponad 36 dostawców +- **Tłumaczenie formatu** — Automatyczne i przejrzyste: OpenAI ↔ Claude ↔ Gemini ↔ API odpowiedzi +- **Odkażanie odpowiedzi** — usuwa niestandardowe pola (`x_groq`, `usage_breakdown`, `service_tier`), które psują OpenAI SDK v1.83+ +- **Normalizacja ról** — Konwertuje `developer` → `system` dla dostawców innych niż OpenAI; `system` → `user` dla GLM/ERNIE +- **Pomyśl o ekstrakcji tagów** — wyodrębnia bloki `` z modeli takich jak DeepSeek R1 do standardowego `reasoning_content` +- **Wyjście strukturalne dla Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatyczna konwersja +- **`stream` domyślnie to `false`** — Zgodność ze specyfikacją OpenAI, unikanie nieoczekiwanego SSE w pakietach SDK Python/Rust/Go
-🌐 3. "My AI provider blocks my region/country" +🌐 3. „Mój dostawca AI blokuje mój region/kraj” -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Dostawcy tacy jak OpenAI/Codex blokują dostęp z określonych regionów geograficznych. Podczas połączeń OAuth i API użytkownicy otrzymują błędy takie jak `unsupported_country_region_territory`. Jest to szczególnie frustrujące dla programistów z krajów rozwijających się. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **3-poziomowa konfiguracja serwera proxy** — Konfigurowalny serwer proxy na 3 poziomach: globalny (cały ruch), na dostawcę (tylko jeden dostawca) i na połączenie/klucz +- **Oznaczone kolorami identyfikatory proxy** — Wskaźniki wizualne: 🟢 globalny serwer proxy, 🟡 serwer proxy dostawcy, 🔵 serwer proxy połączenia, zawsze pokazujący adres IP +- **Wymiana tokenów OAuth przez serwer proxy** — Przepływ OAuth przechodzi również przez serwer proxy, co rozwiązuje problem `unsupported_country_region_territory` +- **Test połączenia przez serwer proxy** — Testy połączenia wykorzystują skonfigurowany serwer proxy (koniec z bezpośrednim obejściem) +- **Obsługa SOCKS5** — Pełna obsługa proxy SOCKS5 dla routingu wychodzącego +- **Podrabianie odcisków palców TLS** — Odcisk palca TLS podobny do przeglądarki za pośrednictwem `wreq-js` w celu ominięcia wykrywania botów
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. „Chcę używać AI do kodowania, ale nie mam pieniędzy” -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Nie każdy może zapłacić 20–200 USD miesięcznie za subskrypcje AI. Studenci, programiści z krajów wschodzących, hobbyści i freelancerzy potrzebują dostępu do wysokiej jakości modeli po zerowych kosztach. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Wbudowani dostawcy bezpłatnych poziomów** — Natywne wsparcie dla w 100% darmowych dostawców: iFlow (8 nielimitowanych modeli), Qwen (3 nieograniczone modele), Kiro (Claude za darmo), Gemini CLI (180 tys./miesiąc za darmo) +- **Kombinacje dostępne wyłącznie bezpłatnie** — Łańcuch `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = 0 USD/miesiąc z zerowymi przestojami +- **Darmowe kredyty NVIDIA NIM** — zintegrowane 1000 darmowych kredytów +- **Strategia zoptymalizowana pod względem kosztów** — Strategia routingu, która automatycznie wybiera najtańszego dostępnego dostawcę
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. „Muszę chronić moją bramę AI przed nieautoryzowanym dostępem” -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Podczas udostępniania bramy AI w sieci (LAN, VPS, Docker) każda osoba posiadająca adres może wykorzystać tokeny/przydział programisty. Bez ochrony interfejsy API są podatne na niewłaściwe użycie, natychmiastowe wstrzyknięcie i nadużycia. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Zarządzanie kluczami API** — generowanie, rotacja i ustalanie zakresu dla każdego dostawcy za pomocą dedykowanej strony `/dashboard/api-manager` +- **Uprawnienia na poziomie modelu** — Ogranicz klucze API do określonych modeli (`openai/*`, wzorce symboli wieloznacznych), za pomocą przełącznika Zezwalaj na wszystko/Ogranicz +- **API Endpoint Protection** — Wymagaj klucza dla `/v1/models` i blokuj określonych dostawców na liście +- **Auth Guard + ochrona CSRF** — Wszystkie trasy panelu kontrolnego chronione oprogramowaniem pośredniczącym `withAuth` + tokenami CSRF +- **Rate Limiter** — Ograniczanie szybkości na IP z konfigurowalnymi oknami +- **Filtrowanie IP** — Lista dozwolonych/blokowanych do kontroli dostępu +- **Szybka ochrona przed wstrzyknięciem** — Oczyszczanie przed złośliwymi wzorcami podpowiedzi +- **Szyfrowanie AES-256-GCM** — Poświadczenia szyfrowane w stanie spoczynku
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. „Mój dostawca przestał działać i straciłem płynność kodowania” -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Dostawcy sztucznej inteligencji mogą stać się niestabilni, zwracać błędy 5xx lub przekraczać tymczasowe limity szybkości. Jeśli programista jest zależny od jednego dostawcy, jego praca jest przerywana. Bez wyłączników automatycznych wielokrotne próby mogą spowodować awarię aplikacji. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Wyłącznik automatyczny na dostawcę** — Automatyczne otwieranie/zamykanie z konfigurowalnymi progami i czasem schładzania (zamknięty/otwarty/półotwarty) +- **Wykładniczy wycofywanie** — Stopniowe opóźnienia ponownych prób +- **Anti-Thundering Herd** — Mutex + ochrona semaforów przed równoczesnymi burzami ponownych prób +- **Łańcuchy awaryjne typu Combo** — jeśli główny dostawca zawiedzie, automatycznie przejdzie przez łańcuch bez interwencji +- **Wyłącznik automatyczny** — automatycznie wyłącza niesprawnych dostawców w łańcuchu combo +- **Panel stanu** — Monitorowanie czasu pracy, stany wyłączników, blokady, statystyki pamięci podręcznej, opóźnienia p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. „Konfigurowanie każdego narzędzia AI jest żmudne i powtarzalne” -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Programiści używają Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Każde narzędzie wymaga innej konfiguracji (punkt końcowy API, klucz, model). Ponowna konfiguracja w przypadku zmiany dostawcy lub modelu jest stratą czasu. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- ** Panel narzędzi CLI** — Dedykowana strona z konfiguracją jednym kliknięciem dla Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **Generator konfiguracji GitHub Copilot** — Generuje `chatLanguageModels.json` dla kodu VS z zbiorczym wyborem modelu +- **Kreator wprowadzenia** — konfiguracja w 4 krokach dla początkujących użytkowników +- **Jeden punkt końcowy, wszystkie modele** — Skonfiguruj `http://localhost:20128/v1` raz, uzyskaj dostęp do ponad 36 dostawców
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. „Zarządzanie tokenami OAuth od wielu dostawców to piekło” -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot — wszystkie korzystają z OAuth 2.0 z wygasającymi tokenami. Programiści muszą stale przeprowadzać ponowne uwierzytelnianie, radzić sobie z `client_secret is missing`, `redirect_uri_mismatch` i awariami na zdalnych serwerach. Szczególnie problematyczny jest protokół OAuth w sieci LAN/VPS. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Automatyczne odświeżanie tokenu** — tokeny OAuth odświeżają się w tle przed wygaśnięciem +- **Wbudowany OAuth 2.0 (PKCE)** — Automatyczny przepływ dla Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **Wielokontowy OAuth** — wiele kont na dostawcę poprzez ekstrakcję tokenów JWT/ID +- **OAuth LAN/remote fix** — wykrywanie prywatnego adresu IP dla `redirect_uri` + ręczny tryb adresu URL dla serwerów zdalnych +- **OAuth Behind Nginx** — wykorzystuje `window.location.origin` w celu zapewnienia zgodności z odwrotnym proxy +- **Przewodnik po zdalnym OAuth** — szczegółowy przewodnik dotyczący danych uwierzytelniających Google Cloud na platformie VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. „Nie wiem, ile i gdzie wydaję” -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Programiści korzystają z wielu płatnych dostawców, ale nie mają jednolitego widoku wydatków. Każdy dostawca ma własny pulpit rozliczeniowy, ale nie ma widoku skonsolidowanego. Nieoczekiwane koszty mogą się kumulować. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Panel analizy kosztów** — śledzenie kosztów według tokenu i zarządzanie budżetem dla każdego dostawcy +- **Limity budżetowe na poziom** — Pułap wydatków na poziom, który uruchamia automatyczne wycofanie +- **Konfiguracja cen dla poszczególnych modeli** — Ceny dla poszczególnych modeli można konfigurować +- **Statystyki użytkowania na klucz API** — Liczba żądań i znacznik czasu ostatniego użycia na klucz +- **Panel analityczny** — karty statystyk, wykres wykorzystania modelu, tabela dostawców ze wskaźnikami powodzenia i opóźnieniami
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. „Nie mogę diagnozować błędów i problemów w wywołaniach AI” -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Gdy połączenie nie powiedzie się, programista nie wie, czy był to limit szybkości, wygasły token, nieprawidłowy format czy błąd dostawcy. Fragmentowane dzienniki na różnych terminalach. Bez obserwowalności debugowanie odbywa się metodą prób i błędów. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Ujednolicony pulpit nawigacyjny** — 4 karty: Dzienniki żądań, Dzienniki proxy, Dzienniki audytu, Konsola +- **Przeglądarka logów w konsoli** — Przeglądarka działająca w stylu terminala w czasie rzeczywistym z poziomami oznaczonymi kolorami, automatycznym przewijaniem, wyszukiwaniem i filtrowaniem +- **Dzienniki proxy SQLite** — trwałe dzienniki, które przetrwają ponowne uruchomienie serwera +- **Plac zabaw dla tłumaczy** — 4 tryby debugowania: Plac zabaw (tłumaczenie formatu), Tester czatu (w obie strony), Stanowisko testowe (wsadowe), Monitor na żywo (w czasie rzeczywistym) +- **Żądanie telemetrii** — opóźnienie p50/p95/p99 + śledzenie identyfikatora X-Request-Id +- **Logowanie oparte na plikach z rotacją** — Przechwytywacz konsoli przechwytuje wszystko do dziennika JSON z rotacją na podstawie rozmiaru
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. „Wdrażanie i konserwacja bramy jest skomplikowane” -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Instalacja, konfiguracja i utrzymanie serwera proxy AI w różnych środowiskach (lokalnym, VPS, Docker, chmura) jest pracochłonne. Problemy takie jak zakodowane na stałe ścieżki, `EACCES` w katalogach, konflikty portów i kompilacje międzyplatformowe zwiększają tarcia. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **npm globalna instalacja** — `npm install -g omniroute && omniroute` — gotowe +- **Docker Multi-platform** — natywny AMD64 + ARM64 (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Profile Docker Compose** — `base` (bez narzędzi CLI) i `cli` (z Claude Code, Codex, OpenClaw) +- **Electron Desktop App** — Natywna aplikacja dla systemów Windows/macOS/Linux z zasobnikiem systemowym, automatycznym uruchamianiem i trybem offline +- **Tryb Split-Port** — API i pulpit nawigacyjny na oddzielnych portach dla zaawansowanych scenariuszy (odwrotne proxy, sieć kontenerowa) +- **Cloud Sync** — skonfiguruj synchronizację między urządzeniami za pośrednictwem Cloudflare Workers +- **Kopie zapasowe DB** — Automatyczne tworzenie kopii zapasowych, przywracanie, eksportowanie i importowanie wszystkich ustawień
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. „Interfejs jest wyłącznie w języku angielskim, a mój zespół nie mówi po angielsku” -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Zespoły w krajach nieanglojęzycznych, szczególnie w Ameryce Łacińskiej, Azji i Europie, mają trudności z interfejsami dostępnymi wyłącznie w języku angielskim. Bariery językowe ograniczają wdrażanie i zwiększają liczbę błędów konfiguracyjnych. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- ** Panel i18n — 30 języków** — Przetłumaczono ponad 500 klawiszy, w tym arabski, bułgarski, duński, niemiecki, hiszpański, fiński, francuski, hebrajski, hindi, węgierski, indonezyjski, włoski, japoński, koreański, malajski, holenderski, norweski, polski, portugalski (PT/BR), rumuński, rosyjski, słowacki, szwedzki, tajski, ukraiński, wietnamski, chiński, filipiński, angielski +- **Obsługa RTL** — obsługa tekstu od prawej do lewej w języku arabskim i hebrajskim +- **Wielojęzyczne pliki README** — 30 kompletnych tłumaczeń dokumentacji +- **Wybór języka** — Ikona kuli ziemskiej w nagłówku umożliwiająca przełączanie w czasie rzeczywistym
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. „Potrzebuję czegoś więcej niż czatu — potrzebuję osadzania, obrazów i dźwięku” -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +Sztuczna inteligencja to nie tylko ukończenie czatu. Twórcy muszą generować obrazy, transkrybować dźwięk, tworzyć osadzania dla RAG, zmieniać rangę dokumentów i moderować treści. Każdy interfejs API ma inny punkt końcowy i format. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Osadzania** — `/v1/embeddings` z 6 dostawcami i ponad 9 modelami +- **Generowanie obrazu** — `/v1/images/generations` z 10 dostawcami i ponad 20 modelami (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Tekst na wideo** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) i SD WebUI +- **Tekst na muzykę** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Transkrypcja audio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Zamiana tekstu na mowę** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + obecni dostawcy +- **Moderacje** — `/v1/moderations` — Sprawdzanie bezpieczeństwa treści +- **Reranking** — `/v1/rerank` — Zmiana rankingu trafności dokumentu +- **Responses API** — Pełna obsługa `/v1/responses` dla Codexu
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. „Nie mam możliwości przetestowania i porównania jakości pomiędzy modelami” -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Programiści chcą wiedzieć, który model jest najlepszy dla ich przypadku użycia — kodu, tłumaczenia, rozumowania — ale ręczne porównywanie jest powolne. Nie istnieją żadne zintegrowane narzędzia eval. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Oceny LLM** — Testowanie złotego zestawu z 10 fabrycznie załadowanymi skrzynkami obejmującymi pozdrowienia, matematykę, geografię, generowanie kodu, zgodność z JSON, tłumaczenie, przeceny, odmowy ze względów bezpieczeństwa +- **4 strategie dopasowania** — `exact`, `contains`, `regex`, `custom` (funkcja JS) +- **Stolik testowy dla tłumaczy** — Testowanie wsadowe z wieloma danymi wejściowymi i oczekiwanymi wynikami, porównanie różnych dostawców +- **Tester czatu** — Pełna podróż w obie strony z renderowaniem odpowiedzi wizualnych +- **Live Monitor** — Strumień w czasie rzeczywistym wszystkich żądań przepływających przez serwer proxy
-📈 15. "I need to scale without losing performance" +📈 15. „Muszę skalować bez utraty wydajności” -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +W miarę wzrostu liczby żądań bez buforowania tych samych pytań generowane są podwójne koszty. Bez idempotencji zduplikowane żądania przetwarzania odpadów. Należy przestrzegać limitów stawek dla poszczególnych dostawców. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Semantyczna pamięć podręczna** — Dwuwarstwowa pamięć podręczna (podpis + semantyka) zmniejsza koszty i opóźnienia +- **Request Idempotency** — okno deduplikacji 5 s dla identycznych żądań +- **Wykrywanie limitów szybkości** — RPM na dostawcę, minimalna przerwa i maksymalne jednoczesne śledzenie +- **Edytowalne limity szybkości** — Konfigurowalne ustawienia domyślne w Ustawieniach → Odporność z trwałością +- **API Key Validation Cache** — 3-warstwowa pamięć podręczna zapewniająca wydajność produkcyjną +- **Panel kontrolny stanu z telemetrią** — opóźnienia p50/p95/p99, statystyki pamięci podręcznej, czas pracy
-🤖 16. "I want to control model behavior globally" +🤖 16. „Chcę kontrolować zachowanie modelu globalnie” -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Deweloperzy, którzy chcą wszystkich odpowiedzi w określonym języku, w określonym tonie lub chcą ograniczyć tokeny rozumowania. Konfigurowanie tego w każdym narzędziu/żądaniu jest niepraktyczne. -**How OmniRoute solves it:** +**Jak rozwiązuje to OmniRoute:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **Wstrzykiwanie monitu systemowego** — monit globalny stosowany do wszystkich żądań +- **Przemyślana walidacja budżetu** — Kontrola alokacji tokenów rozumowania na każde żądanie (przejściowe, automatyczne, niestandardowe, adaptacyjne) +- **6 Strategii routingu** — Globalne strategie określające sposób dystrybucji żądań +- **Wildcard Router** — wzorce `provider/*` są przesyłane dynamicznie do dowolnego dostawcy +- **Przełączanie kombinacji włącz/wyłącz** — przełączaj kombinacje bezpośrednio z pulpitu nawigacyjnego +- **Przełączanie dostawcy** — Włącz/wyłącz wszystkie połączenia dla dostawcy jednym kliknięciem +- **Zablokowani dostawcy** — Wyklucz określonych dostawców z listy `/v1/models`
+
+🧰 17. „Potrzebuję narzędzi MCP jako produktów najwyższej klasy” + +Wiele bram AI ujawnia MCP jedynie jako ukryty szczegół implementacji. Zespoły potrzebują widocznej, zarządzalnej warstwy operacyjnej. + +**Jak rozwiązuje to OmniRoute:** + +- MCP pojawia się w panelu nawigacji na desce rozdzielczej i w zakładce protokołu punktu końcowego +- Dedykowana strona zarządzania MCP z procesem, narzędziami, zakresami i audytem +- Wbudowany szybki start dla `omniroute --mcp` i dołączania klientów + +
+ +
+🧠 18. „Potrzebuję orkiestracji A2A ze ścieżkami zadań synchronizacji i strumieniowania” + +Przepływy pracy agentów wymagają zarówno bezpośrednich odpowiedzi, jak i długotrwałego wykonywania strumieniowego z kontrolą cyklu życia. + +**Jak rozwiązuje to OmniRoute:** + +- Punkt końcowy A2A JSON-RPC (`POST /a2a`) z `message/send` i `message/stream` +- Przesyłanie strumieniowe SSE z propagacją stanu terminala + — Interfejsy API cyklu życia zadań dla `tasks/get` i `tasks/cancel` + +
+ +
+🛰️ 19. „Potrzebuję prawdziwego stanu procesu MCP, a nie zgadniętego statusu” + +Zespoły operacyjne muszą wiedzieć, czy MCP rzeczywiście żyje, a nie tylko, czy można uzyskać dostęp do interfejsu API. + +**Jak rozwiązuje to OmniRoute:** + +- Plik pulsu środowiska wykonawczego z PID, znacznikami czasu, transportem, liczbą narzędzi i trybem zakresu +- API statusu MCP łączące puls + ostatnią aktywność +- Karty stanu interfejsu użytkownika dotyczące świeżości procesów/czasu pracy/bicia serca + +
+ +
+📋 20. „Potrzebuję wykonania narzędzia MCP z możliwością audytu” + +Gdy narzędzia modyfikują konfigurację lub uruchamiają działania operacyjne, zespoły potrzebują identyfikowalności kryminalistycznej. + +**Jak rozwiązuje to OmniRoute:** + +- Wspierane przez SQLite rejestrowanie audytu dla wywołań narzędzi MCP +- Filtruje według narzędzia, sukcesu/porażki, klucza API i paginacji +- Tabela audytu pulpitu nawigacyjnego + punkty końcowe statystyk dla automatyzacji + +
+ +
+🔐 21. „Potrzebuję uprawnień MCP o określonym zakresie na integrację” + +Różni klienci powinni mieć najniższy dostęp do kategorii narzędzi. + +**Jak rozwiązuje to OmniRoute:** + +- 9 szczegółowych zakresów MCP zapewniających kontrolowany dostęp do narzędzi +- Egzekwowanie zakresu i widoczność w interfejsie zarządzania MCP +- Bezpieczna domyślna pozycja dla narzędzi operacyjnych + +
+ +
+⚙️ 22. „Potrzebuję kontroli operacyjnej bez ponownego wdrażania” + +Zespoły potrzebują szybkich zmian w czasie działania podczas incydentów lub zdarzeń kosztowych. + +**Jak rozwiązuje to OmniRoute:** + +- Aktywacja kombinacji przełączników bezpośrednio z pulpitu nawigacyjnego MCP +- Zastosuj profile odporności ze wstępnie zdefiniowanych pakietów zasad +- Zresetuj stan wyłącznika automatycznego z tego samego panelu operacyjnego + +
+ +
+🔄 23. „Potrzebuję widoczności i anulowania cyklu życia zadania A2A na żywo” + +Bez widoczności cyklu życia zdarzenia związane z zadaniami stają się trudne do segregacji. + +**Jak rozwiązuje to OmniRoute:** + +- Lista zadań/filtrowanie według stanu/umiejętności z paginacją +- Szczegółowa analiza metadanych zadań, zdarzeń i artefaktów +- Punkt końcowy anulowania zadania i akcja interfejsu użytkownika z potwierdzeniem + +
+ +
+🌊 24. „Potrzebuję metryk aktywnego strumienia dla obciążenia A2A” + +Przepływy pracy związane z przesyłaniem strumieniowym wymagają operacyjnego wglądu w współbieżność i połączenia na żywo. + +**Jak rozwiązuje to OmniRoute:** + +- Aktywne liczniki strumieni zintegrowane ze statusem A2A +- Znacznik czasu ostatniego zadania i liczba stanów +- Karty pulpitu A2A do monitorowania operacji w czasie rzeczywistym + +
+ +
+🪪 25. „Potrzebuję standardowego wyszukiwania agentów dla klientów” + +Zewnętrzni klienci i koordynatorzy potrzebują metadanych do odczytu maszynowego na potrzeby wdrożenia. + +**Jak rozwiązuje to OmniRoute:** + +- Karta agenta ujawniona pod adresem `/.well-known/agent.json` +- Możliwości i umiejętności pokazane w interfejsie zarządzania +- Interfejs API stanu A2A zawiera metadane wykrywania do automatyzacji + +
+ +
+🧭 26. „Potrzebuję możliwości wykrycia protokołu w UX produktu” + +Jeśli użytkownicy nie mogą odkryć powierzchni protokołu, spada jakość przyjęcia i wsparcia. + +**Jak rozwiązuje to OmniRoute:** + +- Wpisy na pasku bocznym dla MCP i A2A +- Strona punktu końcowego, zakładka Protokoły z szybkim startem i statusem +- Linki z przeglądu do dedykowanych pulpitów zarządzania + +
+ +
+🧪 27. „Potrzebuję kompleksowej weryfikacji protokołu z prawdziwymi klientami” + +Testy próbne nie wystarczą do sprawdzenia zgodności protokołu przed wydaniem. + +**Jak rozwiązuje to OmniRoute:** + +- Pakiet E2E, który uruchamia aplikację i wykorzystuje prawdziwy transport klienta MCP SDK +- Testy klienta A2A pod kątem wykrywania, wysyłania, przesyłania strumieniowego, pobierania i anulowania przepływów +- Sprawdzaj twierdzenia względem interfejsów API audytu MCP i zadań A2A + +
+ +
+📡 28. „Potrzebuję ujednoliconej obserwowalności na wszystkich interfejsach” + +Podział obserwowalności według protokołu tworzy martwe punkty i wydłuża MTTR. + +**Jak rozwiązuje to OmniRoute:** + +- Ujednolicone dashboardy/dzienniki/analizy w jednym produkcie +- Stan + audyt + telemetria żądań w warstwach OpenAI, MCP i A2A +- Operacyjne interfejsy API dla statusu i automatyzacji + +
+ +
+💼 29. „Potrzebuję jednego środowiska wykonawczego dla serwera proxy + narzędzi + orkiestracji agenta” + +Uruchamianie wielu oddzielnych usług zwiększa koszty operacyjne i tryby awarii. + +**Jak rozwiązuje to OmniRoute:** + +- Serwer proxy zgodny z OpenAI, serwer MCP i serwer A2A w jednym stosie +- Wspólne uwierzytelnianie, odporność, magazyn danych i obserwowalność +- Spójny model polityki na wszystkich płaszczyznach interakcji + +
+ +
+🚀 30. „Muszę dostarczać agentowe przepływy pracy bez konieczności rozrzucania kodu kleju” + +Zespoły tracą prędkość podczas łączenia wielu usług i skryptów ad hoc. + +**Jak rozwiązuje to OmniRoute:** + +- Ujednolicona strategia dotycząca punktów końcowych dla klientów i agentów +- Wbudowane interfejsy zarządzania protokołami i ścieżki sprawdzania dymu +- Podstawy gotowe do produkcji (bezpieczeństwo, logowanie, odporność, kopie zapasowe) + +
+ +### Przykładowe podręczniki (zintegrowane przypadki użycia) + +**Poradnik A: maksymalizuj płatną subskrypcję + tanią kopię zapasową** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Poradnik B: stos kodowania o zerowym koszcie** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Poradnik C: łańcuch awaryjny działający 24 godziny na dobę, 7 dni w tygodniu** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Poradnik D: Operacje agenta z MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Szybki start **1. Zainstaluj globalnie:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +990,26 @@ OmniRoute zawiera potężny, wbudowany plac zabaw dla tłumaczy z **4 trybami**
---- +## 🧪 Oceny (Ewaluacje) -## 🎯 Przypadki użycia +OmniRoute zawiera wbudowaną platformę ewaluacyjną do testowania jakości odpowiedzi LLM na podstawie złotego zestawu. Uzyskaj do niego dostęp poprzez **Analytics → Evals** na pulpicie nawigacyjnym. -### Przypadek 1: „Mam subskrypcję Claude Pro” +### Wbudowany złoty zestaw -**Problem:** Limit wygasa niewykorzystany, limity szybkości podczas intensywnego kodowania +Fabrycznie załadowany „Złoty zestaw OmniRoute” zawiera 10 przypadków testowych obejmujących: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Pozdrowienia, matematyka, geografia, generowanie kodu +- Zgodność z formatem JSON, tłumaczenie, przecena +- Odmowa bezpieczeństwa (szkodliwa treść), liczenie, logika boolowska -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Strategie oceny -### Przypadek 2: „Chcę zerowych kosztów” - -**Problem:** Nie stać Cię na subskrypcje, potrzebujesz niezawodnego kodowania AI - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Przypadek 3: „Potrzebuję kodowania 24 godziny na dobę, 7 dni w tygodniu, bez przerw” - -**Problem:** Terminy, nie mogę sobie pozwolić na przestoje - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Przypadek 4: „Chcę DARMOWEJ sztucznej inteligencji w OpenClaw” - -**Problem:** Potrzebujesz asystenta AI w aplikacjach do przesyłania wiadomości, całkowicie za darmo - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Strategia | Opis | Przykład | +| ---------- | ----------------------------------------------------------------------- | -------------------------------- | +| `exact` | Dane wyjściowe muszą dokładnie odpowiadać | `"4"` | +| `contains` | Dane wyjściowe muszą zawierać podciąg (wielkość liter nie ma znaczenia) | `"Paris"` | +| `regex` | Dane wyjściowe muszą pasować do wzorca wyrażenia regularnego | `"1.*2.*3"` | +| `custom` | Niestandardowa funkcja JS zwraca wartość prawda/fałsz | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 Oceny (Ewaluacje) - -OmniRoute zawiera wbudowaną platformę ewaluacyjną do testowania jakości odpowiedzi LLM na podstawie złotego zestawu. Uzyskaj do niego dostęp poprzez **Analytics → Evals** na pulpicie nawigacyjnym. - -### Wbudowany złoty zestaw - -Fabrycznie załadowany „Złoty zestaw OmniRoute” zawiera 10 przypadków testowych obejmujących: - -- Pozdrowienia, matematyka, geografia, generowanie kodu -- Zgodność z formatem JSON, tłumaczenie, przecena -- Odmowa bezpieczeństwa (szkodliwa treść), liczenie, logika boolowska - -### Strategie oceny - -| Strategia | Opis | Przykład | -| ---------- | ----------------------------------------------------------------------- | -------------------------------- | -| `exact` | Dane wyjściowe muszą dokładnie odpowiadać | `"4"` | -| `contains` | Dane wyjściowe muszą zawierać podciąg (wielkość liter nie ma znaczenia) | `"Paris"` | -| `regex` | Dane wyjściowe muszą pasować do wzorca wyrażenia regularnego | `"1.*2.*3"` | -| `custom` | Niestandardowa funkcja JS zwraca wartość prawda/fałsz | `(output) => output.length > 10` | - ---- - ## 🐛 Rozwiązywanie problemów
@@ -1138,7 +1350,7 @@ Fabrycznie załadowany „Złoty zestaw OmniRoute” zawiera 10 przypadków test > **⚠️ WAŻNE dla zwykłych usług OmniRoute w VPS/Docker/serwidor zdalny** -#### Por que o OAuth do Antigravity / Gemini CLI falha na zdalnych serwerach? +#### OAuth Sprawdzone **Antigravity** i **Gemini CLI** używane **Google OAuth 2.0** dla autentyczności. O Google, jeśli potrzebujesz `redirect_uri`, aby nie zmieniać protokołu OAuth seja **exatamente** uma das URI pre-cadastradas no Google Cloud Console to aplicativo. @@ -1227,7 +1439,7 @@ Jeśli chcesz uzyskać dostęp do **podręcznika URL**: --- -## 🛠️ Stos technologii +## 🛠️ - **Środowisko wykonawcze**: Node.js 18–22 LTS (⚠️ Node.js 24+ jest **nieobsługiwany** — `better-sqlite3` natywne pliki binarne są niekompatybilne) - **Język**: TypeScript 5.9 — **100% TypeScript** w `src/` i `open-sse/` (v1.0.6) @@ -1279,7 +1491,7 @@ Jeśli chcesz uzyskać dostęp do **podręcznika URL**: --- -## 🗺️ Plan działania +## 🗺️ OmniRoute ma **ponad 210 funkcji zaplanowanych** w wielu fazach rozwoju. Oto kluczowe obszary: @@ -1304,18 +1516,6 @@ OmniRoute ma **ponad 210 funkcji zaplanowanych** w wielu fazach rozwoju. Oto klu --- -## 📧 Wsparcie - -> 💬 **Dołącz do naszej społeczności!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Uzyskaj pomoc, dziel się wskazówkami i bądź na bieżąco. - -- **Strona internetowa**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Problemy**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Oryginalny projekt**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Współtwórcy [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.pt-BR.md b/README.pt-BR.md index 469ee97f87..b9c4973a98 100644 --- a/README.pt-BR.md +++ b/README.pt-BR.md @@ -110,6 +110,35 @@ _Conecte qualquer IDE ou ferramenta CLI com IA através do OmniRoute — gateway --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Por que OmniRoute? **Pare de desperdiçar dinheiro e bater em limites:** @@ -128,6 +157,18 @@ _Conecte qualquer IDE ou ferramenta CLI com IA através do OmniRoute — gateway --- +## 📧 Suporte + +> 💬 **Participe da comunidade!** [Grupo WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Tire dúvidas, compartilhe dicas e fique atualizado. + +- **Website**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Grupo da Comunidade](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Projeto Original**: [9router por decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Como Funciona ``` @@ -157,265 +198,473 @@ Resultado: Nunca pare de programar, custo mínimo --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 O que o OmniRoute resolve — 30 dores reais e casos de uso -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Todo desenvolvedor que usa ferramentas de IA enfrenta esses problemas diariamente.** O OmniRoute foi criado para resolver todos eles, desde estouro de custos e bloqueios regionais até operações de protocolo e observabilidade de nível produção.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Pago uma assinatura cara e ainda sou interrompido por limites" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Desenvolvedores pagam de $20 a $200/mês por Claude Pro, Codex Pro ou GitHub Copilot. Mesmo pagando, há teto de cota, limite de 5h, limites semanais ou por minuto. No meio da sessão de coding, o provedor para de responder e o desenvolvedor perde fluxo e produtividade. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Fallback Inteligente em 4 Tiers** — Se a cota de assinatura acabar, redireciona automaticamente para API Key → Barato → Gratuito sem intervenção manual +- **Rastreamento de Cota em Tempo Real** — Exibe consumo de tokens ao vivo com contagem regressiva de reset (5h, diário, semanal) +- **Suporte Multi-Conta** — Várias contas por provedor com round-robin automático; quando uma esgota, passa para a próxima +- **Combos Personalizados** — Cadeias de fallback customizáveis com 6 estratégias (fill-first, round-robin, P2C, aleatório, least-used, cost-optimized) +- **Cotas Business do Codex** — Monitoramento de cota de workspace Business/Team direto no dashboard
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Preciso usar múltiplos provedores, mas cada um tem uma API diferente" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI usa um formato, Claude (Anthropic) usa outro, Gemini usa outro. Se o dev quer testar modelos de provedores diferentes ou fazer fallback entre eles, precisa reconfigurar SDKs, trocar endpoints e lidar com formatos incompatíveis. Provedores customizados (FriendLI, NIM) também têm endpoints não padronizados. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Endpoint Unificado** — Um único `http://localhost:20128/v1` serve como proxy para 36+ provedores +- **Tradução de Formato** — Conversão automática e transparente: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **Sanitização de Resposta** — Remove campos fora do padrão (`x_groq`, `usage_breakdown`, `service_tier`) que quebram OpenAI SDK v1.83+ +- **Normalização de Roles** — Converte `developer` → `system` para provedores não-OpenAI; `system` → `user` para GLM/ERNIE +- **Extração de Tags Think** — Extrai blocos `` de modelos como DeepSeek R1 para `reasoning_content` padronizado +- **Saída Estruturada no Gemini** — Conversão automática de `json_schema` → `responseMimeType`/`responseSchema` +- **`stream` padrão `false`** — Alinha com a especificação OpenAI e evita SSE inesperado em SDKs Python/Rust/Go
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "Meu provedor de IA bloqueia minha região/país" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Provedores como OpenAI/Codex bloqueiam acesso em determinadas regiões. Usuários recebem erros como `unsupported_country_region_territory` durante OAuth e conexões de API. Isso é especialmente frustrante para desenvolvedores de países emergentes. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **Config de Proxy em 3 Níveis** — Proxy configurável em nível global (todo tráfego), por provedor e por conexão/chave +- **Badges de Proxy por Cor** — Indicadores visuais: 🟢 proxy global, 🟡 proxy do provedor, 🔵 proxy da conexão, sempre mostrando o IP +- **Troca de Token OAuth via Proxy** — O fluxo OAuth também passa pelo proxy, resolvendo `unsupported_country_region_territory` +- **Teste de Conexão via Proxy** — Testes usam o proxy configurado (sem bypass direto) +- **Suporte SOCKS5** — Suporte completo a proxy SOCKS5 para roteamento de saída +- **Spoofing de Impressão TLS** — Fingerprint TLS estilo navegador via `wreq-js` para contornar detecção de bot
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "Quero usar IA para programar, mas não tenho dinheiro" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Nem todo mundo pode pagar $20–200/mês em assinaturas de IA. Estudantes, devs de países emergentes, hobistas e freelancers precisam de acesso a modelos de qualidade com custo zero. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Provedores Gratuitos nativos** — Suporte nativo a provedores 100% free: iFlow (8 modelos ilimitados), Qwen (3 ilimitados), Kiro (Claude grátis), Gemini CLI (180K/mês grátis) +- **Combos Apenas Gratuitos** — Cadeia `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/mês com zero downtime +- **Créditos Gratuitos NVIDIA NIM** — 1000 créditos free integrados +- **Estratégia Cost Optimized** — Estratégia que escolhe automaticamente o provedor mais barato disponível
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Preciso proteger meu gateway de IA contra acesso não autorizado" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Ao expor um gateway de IA na rede (LAN, VPS, Docker), qualquer pessoa com o endereço pode consumir tokens/cota do desenvolvedor. Sem proteção, as APIs ficam vulneráveis a uso indevido, prompt injection e abuso. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Gestão de API Keys** — Geração, rotação e escopo por provedor com página dedicada em `/dashboard/api-manager` +- **Permissões por Modelo** — Restringe chaves a modelos específicos (`openai/*`, padrões wildcard), com toggle Allow All/Restrict +- **Proteção de Endpoint de API** — Exige chave para `/v1/models` e bloqueia provedores específicos da listagem +- **Auth Guard + CSRF Protection** — Todas as rotas do dashboard protegidas com middleware `withAuth` + tokens CSRF +- **Rate Limiter** — Limite por IP com janelas configuráveis +- **Filtragem por IP** — Allowlist/blocklist para controle de acesso +- **Proteção contra Prompt Injection** — Sanitização contra padrões maliciosos +- **Criptografia AES-256-GCM** — Credenciais criptografadas em repouso
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "Meu provedor caiu e eu perdi meu fluxo de programação" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Provedores de IA podem ficar instáveis, retornar erro 5xx ou atingir limites temporários de taxa. Se o dev depende de um único provedor, ele é interrompido. Sem circuit breaker, retries repetidos podem derrubar a aplicação. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Circuit Breaker por provedor** — Abre/fecha automaticamente com limiares e cooldown configuráveis (Closed/Open/Half-Open) +- **Exponential Backoff** — Atrasos progressivos de retry +- **Anti-Thundering Herd** — Proteção com mutex + semáforo contra tempestade de retries concorrentes +- **Cadeias de Fallback em Combo** — Se o primário falhar, avança automaticamente na cadeia sem intervenção +- **Circuit Breaker de Combo** — Desativa automaticamente provedores com falha dentro da cadeia +- **Health Dashboard** — Monitoramento de uptime, estados de breaker, lockouts, estatísticas de cache e latência p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "Configurar cada ferramenta de IA é tedioso e repetitivo" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Desenvolvedores usam Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Cada ferramenta pede configuração diferente (endpoint, chave, modelo). Reconfigurar ao trocar de provedor ou modelo é perda de tempo. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **Dashboard de Ferramentas CLI** — Página dedicada com setup em 1 clique para Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity e Cline +- **Gerador de Config do GitHub Copilot** — Gera `chatLanguageModels.json` para VS Code com seleção em lote de modelos +- **Onboarding Wizard** — Fluxo guiado de 4 etapas para novos usuários +- **Um endpoint para todos os modelos** — Configure `http://localhost:20128/v1` uma vez e acesse 36+ provedores
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "Gerenciar tokens OAuth de múltiplos provedores é um caos" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI e Copilot usam OAuth 2.0 com tokens que expiram. Devs precisam reautenticar o tempo todo e lidar com erros como `client_secret is missing`, `redirect_uri_mismatch` e falhas em servidores remotos. OAuth em LAN/VPS é especialmente problemático. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Auto Token Refresh** — Tokens OAuth renovados em background antes da expiração +- **OAuth 2.0 (PKCE) nativo** — Fluxo automático para Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen e iFlow +- **OAuth Multi-Conta** — Múltiplas contas por provedor via extração de JWT/ID token +- **Correções OAuth LAN/Remoto** — Detecção de IP privado para `redirect_uri` + modo manual de URL para servidores remotos +- **OAuth atrás de Nginx** — Usa `window.location.origin` para compatibilidade com reverse proxy +- **Guia de OAuth Remoto** — Passo a passo para credenciais Google Cloud em VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "Não sei quanto estou gastando nem onde" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Desenvolvedores usam vários provedores pagos, mas não têm visão unificada de gastos. Cada provedor tem seu dashboard de billing, sem consolidação. Custos inesperados podem se acumular. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Dashboard de Analytics de Custo** — Rastreamento de custo por token e gestão de orçamento por provedor +- **Limites de Orçamento por Tier** — Teto de gasto por tier que aciona fallback automático +- **Configuração de Preço por Modelo** — Preços configuráveis por modelo +- **Estatísticas de Uso por API Key** — Contagem de requests e timestamp de último uso por chave +- **Analytics Dashboard** — Cards, gráfico de uso por modelo e tabela de provedores com taxa de sucesso e latência
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "Não consigo diagnosticar erros e problemas nas chamadas de IA" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Quando uma chamada falha, o dev não sabe se foi rate limit, token expirado, formato incorreto ou erro do provedor. Logs ficam fragmentados em terminais diferentes. Sem observabilidade, debug vira tentativa e erro. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Dashboard de Logs Unificado** — 4 abas: Request Logs, Proxy Logs, Audit Logs e Console +- **Visualizador de Console** — Viewer em tempo real estilo terminal com níveis por cor, auto-scroll, busca e filtros +- **Proxy Logs em SQLite** — Logs persistentes que sobrevivem a reinícios do servidor +- **Playground do Tradutor** — 4 modos de debug: Playground (tradução), Chat Tester (round-trip), Test Bench (lote), Live Monitor (tempo real) +- **Telemetria de Request** — Latência p50/p95/p99 + rastreamento por X-Request-Id +- **Logging em Arquivo com Rotação** — Interceptador de console grava tudo em JSON com rotação por tamanho
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "Implantar e manter o gateway é complexo" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Instalar, configurar e manter um proxy de IA em ambientes diferentes (local, VPS, Docker, cloud) exige muito trabalho. Problemas como caminhos hardcoded, `EACCES` em diretórios, conflito de portas e build cross-platform aumentam a fricção. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **Instalação global via npm** — `npm install -g omniroute && omniroute` e pronto +- **Docker Multi-Platform** — AMD64 + ARM64 nativo (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Perfis Docker Compose** — `base` (sem ferramentas CLI) e `cli` (com Claude Code, Codex, OpenClaw) +- **App Desktop Electron** — App nativo para Windows/macOS/Linux com bandeja, auto-start e modo offline +- **Modo de Porta Separada** — API e Dashboard em portas distintas para cenários avançados (reverse proxy, rede de containers) +- **Cloud Sync** — Sincronização de configuração entre dispositivos via Cloudflare Workers +- **Backups de DB** — Backup automático, restauração, export e import de todas as configurações
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "A interface é só em inglês e meu time não fala inglês" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Times em países não anglófonos, especialmente na América Latina, Ásia e Europa, sofrem com interfaces só em inglês. A barreira de idioma reduz adoção e aumenta erros de configuração. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **i18n do Dashboard — 30 idiomas** — Mais de 500 chaves traduzidas, incluindo árabe, búlgaro, dinamarquês, alemão, espanhol, finlandês, francês, hebraico, hindi, húngaro, indonésio, italiano, japonês, coreano, malaio, holandês, norueguês, polonês, português (PT/BR), romeno, russo, eslovaco, sueco, tailandês, ucraniano, vietnamita, chinês, filipino e inglês +- **Suporte RTL** — Suporte right-to-left para árabe e hebraico +- **READMEs multilíngues** — 30 traduções completas de documentação +- **Seletor de Idioma** — Ícone de globo no header para troca em tempo real
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "Preciso de mais do que chat: embeddings, imagens, áudio" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +IA não é só chat completion. Devs precisam gerar imagens, transcrever áudio, criar embeddings para RAG, reranquear documentos e moderar conteúdo. Cada API tem endpoint e formato diferentes. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 10 providers and 20+ models (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) -- **Text-to-Video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) and SD WebUI -- **Text-to-Music** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 -- **Text-to-Speech** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3 -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Embeddings** — `/v1/embeddings` com 6 provedores e 9+ modelos +- **Geração de Imagem** — `/v1/images/generations` com 10 provedores e 20+ modelos (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Texto para Vídeo** — `/v1/videos/generations` com ComfyUI (AnimateDiff, SVD) e SD WebUI +- **Texto para Música** — `/v1/music/generations` com ComfyUI (Stable Audio Open, MusicGen) +- **Transcrição de Áudio** — `/v1/audio/transcriptions` com Whisper + Nvidia NIM, HuggingFace e Qwen3 +- **Texto para Fala (TTS)** — `/v1/audio/speech` com ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise e Qwen3 +- **Moderações** — `/v1/moderations` para checagens de segurança de conteúdo +- **Reranking** — `/v1/rerank` para relevância de documentos +- **Responses API** — Suporte completo a `/v1/responses` para Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "Não tenho como testar e comparar qualidade entre modelos" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Desenvolvedores querem saber qual modelo é melhor para cada caso de uso (código, tradução, raciocínio), mas comparar manualmente é lento. Não existem ferramentas integradas de avaliação na maioria das stacks. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Avaliações de LLM** — Golden set com 10 casos pré-carregados cobrindo saudação, matemática, geografia, geração de código, conformidade JSON, tradução, markdown e recusa de conteúdo inseguro +- **4 Estratégias de Match** — `exact`, `contains`, `regex`, `custom` (função JS) +- **Test Bench do Playground do Tradutor** — Testes em lote com múltiplas entradas/saídas esperadas e comparação entre provedores +- **Chat Tester** — Round-trip completo com renderização visual da resposta +- **Live Monitor** — Stream em tempo real de todas as requisições que passam pelo proxy
-📈 15. "I need to scale without losing performance" +📈 15. "Preciso escalar sem perder performance" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +À medida que o volume cresce, sem cache as mesmas perguntas geram custos duplicados. Sem idempotência, requisições duplicadas desperdiçam processamento. Também é necessário respeitar rate limits por provedor. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Cache Semântico** — Cache em duas camadas (assinatura + semântico) para reduzir custo e latência +- **Idempotência de Request** — Janela de deduplicação de 5s para requisições idênticas +- **Detecção de Rate Limit** — Rastreamento por provedor de RPM, intervalo mínimo e concorrência máxima +- **Rate Limits Editáveis** — Padrões configuráveis em Settings → Resilience com persistência +- **Cache de Validação de API Key** — Cache em 3 camadas para performance em produção +- **Health Dashboard com Telemetria** — Latência p50/p95/p99, estatísticas de cache e uptime
-🤖 16. "I want to control model behavior globally" +🤖 16. "Quero controlar o comportamento dos modelos globalmente" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Desenvolvedores podem querer todas as respostas em um idioma específico, com tom específico ou com limite de tokens de raciocínio. Configurar isso em cada ferramenta/requisição é impraticável. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **Injeção de System Prompt** — Prompt global aplicado a todas as requisições +- **Validação de Thinking Budget** — Controle de alocação de tokens de raciocínio por requisição (passthrough, auto, custom, adaptive) +- **6 Estratégias de Roteamento** — Estratégias globais que definem como as requisições são distribuídas +- **Wildcard Router** — Padrões `provider/*` roteiam dinamicamente para qualquer provedor +- **Toggle de Combo** — Ativa/desativa combos diretamente no dashboard +- **Toggle de Provedor** — Ativa/desativa todas as conexões de um provedor com um clique +- **Provedores Bloqueados** — Exclui provedores específicos da listagem de `/v1/models`
+
+🧰 17. "Preciso de ferramentas MCP como capacidades de primeira classe do produto" + +Muitos gateways de IA expõem MCP apenas como detalhe de implementação oculto. Times precisam de uma camada operacional visível e gerenciável. + +**Como o OmniRoute resolve isso:** + +- MCP aparece no menu do dashboard e na aba de protocolos em Endpoint +- Página dedicada de gestão MCP com processo, ferramentas, escopos e auditoria +- Quick-start embutido para `omniroute --mcp` e onboarding de clientes + +
+ +
+🧠 18. "Preciso de orquestração A2A com caminhos síncronos + streaming" + +Fluxos de agentes precisam de respostas diretas e também de execuções longas com streaming e controle de ciclo de vida. + +**Como o OmniRoute resolve isso:** + +- Endpoint A2A JSON-RPC (`POST /a2a`) com `message/send` e `message/stream` +- Streaming SSE com propagação de estado terminal +- APIs de ciclo de vida de tarefas para `tasks/get` e `tasks/cancel` + +
+ +
+🛰️ 19. "Preciso de saúde real do processo MCP, não status estimado" + +Times operacionais precisam saber se o MCP está realmente ativo, não apenas se uma API está respondendo. + +**Como o OmniRoute resolve isso:** + +- Arquivo de heartbeat em runtime com PID, timestamps, transporte, quantidade de ferramentas e modo de escopo +- API de status MCP combinando heartbeat + atividade recente +- Cards de status na UI para processo/uptime/frescor do heartbeat + +
+ +
+📋 20. "Preciso de execução auditável das ferramentas MCP" + +Quando ferramentas alteram configuração ou disparam ações operacionais, os times precisam de rastreabilidade forense. + +**Como o OmniRoute resolve isso:** + +- Auditoria de chamadas MCP baseada em SQLite +- Filtros por ferramenta, sucesso/falha, chave de API e paginação +- Tabela de auditoria no dashboard + endpoints de métricas para automação + +
+ +
+🔐 21. "Preciso de permissões MCP por escopo para cada integração" + +Clientes diferentes devem operar com privilégio mínimo por categoria de ferramenta. + +**Como o OmniRoute resolve isso:** + +- 9 escopos MCP granulares para controle de acesso às ferramentas +- Aplicação de escopo e visibilidade na UI de gestão MCP +- Postura segura por padrão para operações sensíveis + +
+ +
+⚙️ 22. "Preciso de controles operacionais sem redeploy" + +Times precisam de mudanças rápidas em runtime durante incidentes e picos de custo. + +**Como o OmniRoute resolve isso:** + +- Troca de ativação de combo direto no dashboard de MCP +- Aplicação de perfis de resiliência via pacotes de política prontos +- Reset de circuit breaker no mesmo painel operacional + +
+ +
+🔄 23. "Preciso de visibilidade ao vivo do ciclo de vida A2A e cancelamento" + +Sem visibilidade de lifecycle, incidentes de tarefas ficam difíceis de investigar e corrigir. + +**Como o OmniRoute resolve isso:** + +- Listagem/filtragem de tarefas por estado/skill com paginação +- Drill-down de metadados, eventos e artefatos da tarefa +- Endpoint de cancelamento + ação de UI com confirmação + +
+ +
+🌊 24. "Preciso de métricas de streams ativos para carga A2A" + +Fluxos em streaming exigem visão operacional de concorrência e conexões ativas. + +**Como o OmniRoute resolve isso:** + +- Contadores de streams ativos integrados ao status A2A +- Timestamp da última tarefa e contagens por estado +- Cards no dashboard A2A para monitoramento operacional em tempo real + +
+ +
+🪪 25. "Preciso de descoberta padrão de agente para clientes" + +Clientes externos e orquestradores precisam de metadados legíveis por máquina para onboarding automático. + +**Como o OmniRoute resolve isso:** + +- Agent Card exposto em `/.well-known/agent.json` +- Capacidades e skills exibidas na UI de gestão +- API de status A2A inclui metadados de descoberta para automação + +
+ +
+🧭 26. "Preciso de descobribilidade de protocolos na experiência do produto" + +Se os usuários não encontram superfícies de protocolo, adoção e qualidade de suporte caem. + +**Como o OmniRoute resolve isso:** + +- Entradas MCP e A2A na sidebar +- Aba Protocolos em Endpoint com quick-start e status +- Links do overview para dashboards dedicados de gestão + +
+ +
+🧪 27. "Preciso de validação end-to-end de protocolo com clientes reais" + +Testes mockados não bastam para validar compatibilidade de protocolo antes do release. + +**Como o OmniRoute resolve isso:** + +- Suíte E2E que sobe a aplicação e usa transporte real do SDK MCP +- Testes de cliente A2A para discovery, send, stream, get e cancel +- Cross-check das validações com APIs de auditoria MCP e tarefas A2A + +
+ +
+📡 28. "Preciso de observabilidade unificada em todas as interfaces" + +Separar observabilidade por protocolo cria pontos cegos e aumenta o MTTR. + +**Como o OmniRoute resolve isso:** + +- Dashboards/logs/analytics unificados no mesmo produto +- Saúde + auditoria + telemetria de requisição em OpenAI, MCP e A2A +- APIs operacionais de status para automação + +
+ +
+💼 29. "Preciso de um runtime único para proxy + tools + orquestração de agentes" + +Manter vários serviços separados aumenta custo operacional e modos de falha. + +**Como o OmniRoute resolve isso:** + +- Proxy OpenAI-compatible, servidor MCP e servidor A2A na mesma stack +- Autenticação, resiliência, armazenamento e observabilidade compartilhados +- Modelo de políticas consistente em todas as superfícies de interação + +
+ +
+🚀 30. "Preciso entregar workflows agênticos sem sprawl de glue code" + +Times perdem velocidade quando precisam costurar múltiplos serviços e scripts ad hoc. + +**Como o OmniRoute resolve isso:** + +- Estratégia de endpoint unificada para clientes e agentes +- UIs de gestão de protocolo e fluxos de validação/smoke embutidos +- Base pronta para produção (segurança, logging, resiliência e backup) + +
+ +### Exemplos de Playbooks (Casos de Uso Integrados) + +**Playbook A: Maximizar assinatura paga + backup barato** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Custo mensal: $20 + pequeno gasto de backup +Resultado: qualidade maior, interrupção quase zero +``` + +**Playbook B: Stack de programação com custo zero** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Custo mensal: $0 +Resultado: fluxo de coding gratuito e estável +``` + ## ⚡ Início Rápido **1. Instale globalmente:** @@ -508,7 +757,7 @@ docker compose --profile cli up -d --- -## 🖥️ Aplicativo Desktop — Offline e Sempre Ativo +## 🖥️ > 🆕 **NOVO!** O OmniRoute agora está disponível como **aplicativo desktop nativo** para Windows, macOS e Linux. @@ -572,6 +821,21 @@ Quando minimizado, o OmniRoute fica na bandeja do sistema com ações rápidas: ## 💡 Funcionalidades Principais +### 🧭 Gestão MCP + A2A (Camada Operacional) + +A maioria dos gateways de IA expõe MCP/A2A apenas como endpoints “escondidos”. O OmniRoute traz operação de primeira classe para os dois protocolos: + +- **Descoberta na interface** — Entradas `MCP` e `A2A` na sidebar e aba `Protocolos` na página de Endpoint com quick-start e cartões de status. +- **Painel operacional MCP** (`/dashboard/mcp`) — Status real do processo por heartbeat, inventário de ferramentas/scopes, auditoria com filtros e controles operacionais (trocar combo, aplicar perfil de resiliência, resetar breakers). +- **Painel operacional A2A** (`/dashboard/a2a`) — Visão do agent card, ciclo de vida de tarefas por estado, contagem de streams ativos, drill-down/cancelamento de tasks e smoke tests de `message/send` e `message/stream`. +- **APIs de monitoramento** — Endpoints `/api/mcp/*` e `/api/a2a/*` para status, tasks, auditoria e automações externas. + +Por que isso é relevante: + +- **Um runtime, três papéis**: router/proxy OpenAI-compatible + servidor de ferramentas MCP + servidor agente A2A. +- **Governança unificada**: autenticação, auditoria e controles de resiliência compartilhados. +- **Operação confiável**: times conseguem validar, monitorar e depurar comportamento dos protocolos sem sair do produto. + ### 🧠 Roteamento e Inteligência | Funcionalidade | O que Faz | @@ -730,64 +994,26 @@ O OmniRoute inclui um poderoso Playground de Tradução integrado com **4 modos* --- -## 🎯 Casos de Uso +## 🧪 Avaliações (Evals) -### Caso 1: "Tenho assinatura Claude Pro" +OmniRoute inclui um framework de avaliação integrado para testar a qualidade de respostas de LLM contra um conjunto golden. Acesse via **Analytics → Evals** no dashboard. -**Problema:** Cota expira sem uso, limites de taxa durante programação intensa +### Conjunto Golden Integrado -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (usar assinatura ao máximo) - 2. glm/glm-4.7 (backup barato quando a cota acabar) - 3. if/kimi-k2-thinking (fallback de emergência gratuito) +O "OmniRoute Golden Set" pré-carregado contém 10 casos de teste cobrindo: -Custo mensal: $20 (assinatura) + ~$5 (backup) = $25 total -vs. $20 + bater em limites = frustração -``` +- Saudações, matemática, geografia, geração de código +- Conformidade de formato JSON, tradução, markdown +- Recusa de segurança (conteúdo prejudicial), contagem, lógica booleana -### Caso 2: "Quero custo zero" +### Estratégias de Avaliação -**Problema:** Não pode pagar assinaturas, precisa de IA confiável para programar - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K grátis/mês) - 2. if/kimi-k2-thinking (ilimitado grátis) - 3. qw/qwen3-coder-plus (ilimitado grátis) - -Custo mensal: $0 -Qualidade: Modelos prontos para produção -``` - -### Caso 3: "Preciso programar 24/7, sem interrupções" - -**Problema:** Prazos apertados, não pode ter tempo de inatividade - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (melhor qualidade) - 2. cx/gpt-5.2-codex (segunda assinatura) - 3. glm/glm-4.7 (barato, reset diário) - 4. minimax/MiniMax-M2.1 (mais barato, reset 5h) - 5. if/kimi-k2-thinking (gratuito ilimitado) - -Resultado: 5 camadas de fallback = zero tempo de inatividade -``` - -### Caso 4: "Quero IA GRATUITA no OpenClaw" - -**Problema:** Precisa de assistente de IA em aplicativos de mensagens, completamente gratuito - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (ilimitado grátis) - 2. if/minimax-m2.1 (ilimitado grátis) - 3. if/kimi-k2-thinking (ilimitado grátis) - -Custo mensal: $0 -Acesso via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Estratégia | Descrição | Exemplo | +| ---------- | ---------------------------------------------- | -------------------------------- | +| `exact` | Saída deve corresponder exatamente | `"4"` | +| `contains` | Saída deve conter substring (case-insensitive) | `"Paris"` | +| `regex` | Saída deve corresponder ao padrão regex | `"1.*2.*3"` | +| `custom` | Função JS customizada retorna true/false | `(output) => output.length > 10` | --- @@ -1071,29 +1297,6 @@ Configurações → Configuração de API: --- -## 🧪 Avaliações (Evals) - -OmniRoute inclui um framework de avaliação integrado para testar a qualidade de respostas de LLM contra um conjunto golden. Acesse via **Analytics → Evals** no dashboard. - -### Conjunto Golden Integrado - -O "OmniRoute Golden Set" pré-carregado contém 10 casos de teste cobrindo: - -- Saudações, matemática, geografia, geração de código -- Conformidade de formato JSON, tradução, markdown -- Recusa de segurança (conteúdo prejudicial), contagem, lógica booleana - -### Estratégias de Avaliação - -| Estratégia | Descrição | Exemplo | -| ---------- | ---------------------------------------------- | -------------------------------- | -| `exact` | Saída deve corresponder exatamente | `"4"` | -| `contains` | Saída deve conter substring (case-insensitive) | `"Paris"` | -| `regex` | Saída deve corresponder ao padrão regex | `"1.*2.*3"` | -| `custom` | Função JS customizada retorna true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Solução de Problemas
@@ -1149,7 +1352,7 @@ O "OmniRoute Golden Set" pré-carregado contém 10 casos de teste cobrindo: --- -## 🛠️ Stack Tecnológico +## 🛠️ - **Runtime**: Node.js 20+ - **Linguagem**: TypeScript 5.9 — **100% TypeScript** em `src/` e `open-sse/` (v1.0.6) @@ -1201,7 +1404,7 @@ O "OmniRoute Golden Set" pré-carregado contém 10 casos de teste cobrindo: --- -## 🗺️ Roadmap +## 🗺️ O OmniRoute tem **210+ funcionalidades planejadas** em múltiplas fases de desenvolvimento. Áreas principais: @@ -1226,18 +1429,6 @@ O OmniRoute tem **210+ funcionalidades planejadas** em múltiplas fases de desen --- -## 📧 Suporte - -> 💬 **Participe da comunidade!** [Grupo WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Tire dúvidas, compartilhe dicas e fique atualizado. - -- **Website**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Grupo da Comunidade](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Projeto Original**: [9router por decolua](https://github.com/decolua/9router) - ---- - ## 👥 Contribuidores [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.pt.md b/README.pt.md index 3b96a32873..12f34a6cd8 100644 --- a/README.pt.md +++ b/README.pt.md @@ -110,6 +110,35 @@ _Conecte qualquer ferramenta IDE ou CLI com tecnologia de IA por meio do OmniRou --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Por que OmniRoute? **Pare de desperdiçar dinheiro e atingir limites:** @@ -128,6 +157,18 @@ _Conecte qualquer ferramenta IDE ou CLI com tecnologia de IA por meio do OmniRou --- +## 📧 Suporte + +> 💬 **Junte-se à nossa comunidade!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Obtenha ajuda, compartilhe dicas e fique atualizado. + +- **Site**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Problemas**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Projeto Original**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Como funciona ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 O que o OmniRoute resolve — 30 pontos reais de dor e casos de uso -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Todo desenvolvedor que usa ferramentas de IA enfrenta esses problemas diariamente.** O OmniRoute foi criado para resolver todos eles, desde custos excessivos até bloqueios regionais, desde fluxos quebrados de OAuth até operações de protocolo e observabilidade empresarial.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Eu pago por uma assinatura cara, mas ainda sou interrompido pelos limites" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Os desenvolvedores pagam US$ 20–200/mês pelo Claude Pro, Codex Pro ou GitHub Copilot. Mesmo pagando, a cota tem um limite máximo – 5h de uso, limites semanais ou limites de taxa por minuto. No meio da sessão de codificação, o provedor para de responder e o desenvolvedor perde fluxo e produtividade. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-Tier Fallback** — Se a cota de assinatura acabar, redireciona automaticamente para API Key → Barato → Gratuito sem intervenção manual +- **Rastreamento de cota em tempo real** — Mostra o consumo de tokens em tempo real com contagem regressiva redefinida (5h, diariamente, semanalmente) +- **Suporte para múltiplas contas** — Várias contas por provedor com round-robin automático — quando uma acabar, muda para a próxima +- **Combos personalizados** — Cadeias alternativas personalizáveis com 6 estratégias de balanceamento (preencher primeiro, round-robin, P2C, aleatório, menos usado, com custo otimizado) +- **Codex Business Quotas** — Monitoramento de cotas de espaço de trabalho de negócios/equipe diretamente no painel
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Preciso usar vários provedores, mas cada um tem uma API diferente" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI usa um formato, Claude (Anthropic) usa outro, Gemini ainda outro. Se um desenvolvedor quiser testar modelos de diferentes provedores ou fazer fallback entre eles, ele precisará reconfigurar SDKs, alterar endpoints e lidar com formatos incompatíveis. Provedores personalizados (FriendLI, NIM) possuem endpoints de modelo não padrão. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Endpoint unificado** — Um único `http://localhost:20128/v1` serve como proxy para todos os mais de 36 provedores +- **Tradução de formato** — Automática e transparente: OpenAI ↔ Claude ↔ Gemini ↔ API de respostas +- **Response Sanitization** — Remove campos não padrão (`x_groq`, `usage_breakdown`, `service_tier`) que quebram o OpenAI SDK v1.83+ +- **Normalização de função** — Converte `developer` → `system` para provedores não-OpenAI; `system` → `user` para GLM/ERNIE +- **Think Tag Extraction** — Extrai blocos `` de modelos como DeepSeek R1 em `reasoning_content` padronizado +- **Saída estruturada para Gemini** — `json_schema` → conversão automática `responseMimeType`/`responseSchema` +- **`stream` é padronizado como `false`** — Alinha-se com as especificações OpenAI, evitando SSE inesperado em SDKs Python/Rust/Go
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "Meu provedor de IA bloqueia minha região/país" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Provedores como OpenAI/Codex bloqueiam o acesso de determinadas regiões geográficas. Os usuários recebem erros como `unsupported_country_region_territory` durante conexões OAuth e API. Isto é especialmente frustrante para desenvolvedores de países em desenvolvimento. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **Configuração de proxy de 3 níveis** — Proxy configurável em 3 níveis: global (todo o tráfego), por provedor (apenas um provedor) e por conexão/chave +- **Selos de proxy codificados por cores** — Indicadores visuais: 🟢 proxy global, 🟡 proxy do provedor, 🔵 proxy de conexão, sempre mostrando o IP +- **Troca de token OAuth por meio de proxy** — O fluxo OAuth também passa pelo proxy, resolvendo `unsupported_country_region_territory` +- **Testes de conexão via proxy** — Os testes de conexão usam o proxy configurado (não há mais bypass direto) +- **Suporte SOCKS5** — Suporte completo ao proxy SOCKS5 para roteamento de saída +- **TLS Fingerprint Spoofing** — Impressão digital TLS semelhante a um navegador via `wreq-js` para ignorar a detecção de bot
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "Quero usar IA para codificação, mas não tenho dinheiro" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Nem todos podem pagar US$ 20–200/mês por assinaturas de IA. Estudantes, desenvolvedores de países emergentes, amadores e freelancers precisam de acesso a modelos de qualidade a custo zero. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Provedores de nível gratuito integrados** — Suporte nativo para provedores 100% gratuitos: iFlow (8 modelos ilimitados), Qwen (3 modelos ilimitados), Kiro (Claude grátis), Gemini CLI (180 mil/mês grátis) +- **Combos somente gratuitos** — Cadeia `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = US$ 0/mês com tempo de inatividade zero +- **Créditos gratuitos NVIDIA NIM** — 1.000 créditos gratuitos integrados +- **Estratégia de Custo Otimizado** — Estratégia de roteamento que escolhe automaticamente o provedor mais barato disponível
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Preciso proteger meu gateway de IA contra acesso não autorizado" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Ao expor um gateway de IA à rede (LAN, VPS, Docker), qualquer pessoa com o endereço pode consumir os tokens/cota do desenvolvedor. Sem proteção, as APIs ficam vulneráveis ​​ao uso indevido, injeção imediata e abuso. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Gerenciamento de chaves de API** — Geração, rotação e escopo por provedor com uma página `/dashboard/api-manager` dedicada +- **Permissões em nível de modelo** — Restringir chaves de API a modelos específicos (`openai/*`, padrões curinga), com alternância Permitir tudo/Restringir +- **API Endpoint Protection** — Exija uma chave para `/v1/models` e bloqueie provedores específicos da listagem +- **Auth Guard + Proteção CSRF** — Todas as rotas do painel protegidas com middleware `withAuth` + tokens CSRF +- **Rate Limiter** — Limitação de taxa por IP com janelas configuráveis +- **Filtragem de IP** — Lista de permissões/lista de bloqueio para controle de acesso +- **Prompt Injection Guard** — Sanitização contra padrões de prompt maliciosos +- **Criptografia AES-256-GCM** — Credenciais criptografadas em repouso
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "Meu provedor caiu e perdi meu fluxo de codificação" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Os provedores de IA podem ficar instáveis, retornar erros 5xx ou atingir limites de taxa temporários. Se um desenvolvedor depender de um único provedor, ele será interrompido. Sem disjuntores, tentativas repetidas podem travar o aplicativo. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Disjuntor por provedor** — Abertura/fechamento automático com limites e resfriamento configuráveis (Fechado/Aberto/Meio-aberto) +- **Retirada exponencial** — Atrasos progressivos em novas tentativas +- **Rebanho Anti-Trovão** — Proteção Mutex + semáforo contra tempestades de novas tentativas simultâneas +- **Combo Fallback Chains** — Se o provedor primário falhar, ele cairá automaticamente na cadeia sem intervenção +- **Combo Circuit Breaker** — Desativa automaticamente provedores com falha em uma cadeia de combinação +- **Health Dashboard** — Monitoramento de tempo de atividade, estados de disjuntores, bloqueios, estatísticas de cache, latência p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "Configurar cada ferramenta de IA é tedioso e repetitivo" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Os desenvolvedores usam Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Cada ferramenta precisa de uma configuração diferente (endpoint da API, chave, modelo). Reconfigurar ao trocar de provedor ou modelo é uma perda de tempo. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **CLI Tools Dashboard** — Página dedicada com configuração de um clique para Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — Gera `chatLanguageModels.json` para VS Code com seleção de modelo em massa +- **Assistente de integração** — Configuração guiada em 4 etapas para usuários iniciantes +- **Um endpoint, todos os modelos** — Configure `http://localhost:20128/v1` uma vez, acesse mais de 36 provedores
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "Gerenciar tokens OAuth de vários provedores é um inferno" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot — todos usam OAuth 2.0 com tokens expirados. Os desenvolvedores precisam se autenticar novamente constantemente, lidar com `client_secret is missing`, `redirect_uri_mismatch` e falhas em servidores remotos. OAuth em LAN/VPS é particularmente problemático. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Atualização automática de token** — Os tokens OAuth são atualizados em segundo plano antes da expiração +- **OAuth 2.0 (PKCE) integrado ** — Fluxo automático para Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **OAuth de várias contas** — Várias contas por provedor por meio de extração de token JWT/ID +- **OAuth LAN/Remote Fix** — Detecção de IP privado para `redirect_uri` + modo URL manual para servidores remotos +- **OAuth Behind Nginx** — Usa `window.location.origin` para compatibilidade de proxy reverso +- **Guia OAuth remoto** — Guia passo a passo para credenciais do Google Cloud em VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "Não sei quanto estou gastando ou onde" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Os desenvolvedores usam vários provedores pagos, mas não têm uma visão unificada dos gastos. Cada provedor possui seu próprio painel de faturamento, mas não há visão consolidada. Custos inesperados podem se acumular. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Painel de análise de custos** — Acompanhamento de custos por token e gerenciamento de orçamento por provedor +- **Limites de orçamento por nível** — Teto de gastos por nível que aciona substituto automático +- **Configuração de preços por modelo** — Preços configuráveis por modelo +- **Estatísticas de uso por chave de API** — Contagem de solicitações e carimbo de data/hora do último uso por chave +- **Painel de análise** — Cartões de estatísticas, gráfico de uso do modelo, tabela de provedores com taxas de sucesso e latência
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "Não consigo diagnosticar erros e problemas em chamadas de IA" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Quando uma chamada falha, o desenvolvedor não sabe se foi um limite de taxa, um token expirado, um formato errado ou um erro do provedor. Logs fragmentados em diferentes terminais. Sem observabilidade, a depuração é uma tentativa e erro. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Painel de registros unificados** — 4 guias: registros de solicitação, registros de proxy, registros de auditoria, console +- **Console Log Viewer** — Visualizador em estilo terminal em tempo real com níveis codificados por cores, rolagem automática, pesquisa, filtro +- **SQLite Proxy Logs** — Logs persistentes que sobrevivem às reinicializações do servidor +- **Translator Playground** — 4 modos de depuração: Playground (tradução de formato), Chat Tester (ida e volta), Test Bench (lote), Live Monitor (tempo real) +- **Solicitar telemetria** — latência p50/p95/p99 + rastreamento X-Request-Id +- **Registro baseado em arquivo com rotação** — O interceptador do console captura tudo no log JSON com rotação baseada em tamanho
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "Implantar e manter o gateway é complexo" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Instalar, configurar e manter um proxy de IA em diferentes ambientes (local, VPS, Docker, nuvem) exige muito trabalho. Problemas como caminhos codificados, `EACCES` em diretórios, conflitos de porta e compilações entre plataformas aumentam o atrito. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **instalação global npm** — `npm install -g omniroute && omniroute` — concluído +- **Docker Multiplataforma** — AMD64 + ARM64 nativo (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Perfis Docker Compose** — `base` (sem ferramentas CLI) e `cli` (com Claude Code, Codex, OpenClaw) +- **Aplicativo Electron Desktop** — Aplicativo nativo para Windows/macOS/Linux com bandeja do sistema, inicialização automática e modo offline +- **Modo Split-Port** — API e Dashboard em portas separadas para cenários avançados (proxy reverso, rede de contêineres) +- **Cloud Sync** — Sincronização de configuração entre dispositivos via Cloudflare Workers +- **Backups de banco de dados** — Backup, restauração, exportação e importação automática de todas as configurações
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "A interface é somente em inglês e minha equipe não fala inglês" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Equipes em países que não falam inglês, especialmente na América Latina, Ásia e Europa, enfrentam dificuldades com interfaces somente em inglês. As barreiras linguísticas reduzem a adoção e aumentam os erros de configuração. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Painel i18n — 30 idiomas** — Todas as mais de 500 teclas traduzidas, incluindo árabe, búlgaro, dinamarquês, alemão, espanhol, finlandês, francês, hebraico, hindi, húngaro, indonésio, italiano, japonês, coreano, malaio, holandês, norueguês, polonês, português (PT/BR), romeno, russo, eslovaco, sueco, tailandês, ucraniano, vietnamita, chinês, filipino, inglês +- **Suporte RTL** — Suporte da direita para a esquerda para árabe e hebraico +- **READMEs multilíngues** — 30 traduções completas de documentação +- **Seletor de idioma** — Ícone de globo no cabeçalho para troca em tempo real
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "Preciso de mais do que bate-papo - preciso de incorporações, imagens, áudio" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +IA não é apenas conclusão de bate-papo. Os desenvolvedores precisam gerar imagens, transcrever áudio, criar embeddings para RAG, reclassificar documentos e moderar conteúdo. Cada API possui um endpoint e formato diferente. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Embeddings** — `/v1/embeddings` com 6 provedores e mais de 9 modelos +- **Geração de imagem** — `/v1/images/generations` com 10 provedores e mais de 20 modelos (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Texto para vídeo** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) e SD WebUI +- **Texto para música** — `/v1/music/generations` — ComfyUI (áudio estável aberto, MusicGen) +- **Transcrição de áudio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Conversão de texto em fala** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + provedores existentes +- **Moderações** — `/v1/moderations` — Verificações de segurança de conteúdo +- **Reclassificação** — `/v1/rerank` — Reclassificação da relevância do documento +- **API de respostas ** — Suporte completo a `/v1/responses` para Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "Não tenho como testar e comparar a qualidade entre modelos" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Os desenvolvedores querem saber qual modelo é melhor para seu caso de uso – código, tradução, raciocínio – mas comparar manualmente é lento. Não existem ferramentas de avaliação integradas. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Avaliações LLM** — Teste Golden Set com 10 casos pré-carregados cobrindo saudações, matemática, geografia, geração de código, conformidade com JSON, tradução, remarcação, recusa de segurança +- **4 estratégias de correspondência** — `exact`, `contains`, `regex`, `custom` (função JS) +- **Translator Playground Test Bench** — Teste em lote com múltiplas entradas e saídas esperadas, comparação entre fornecedores +- **Testador de bate-papo** — Ida e volta completa com renderização de resposta visual +- **Monitoramento ao vivo** — Transmissão em tempo real de todas as solicitações que passam pelo proxy
-📈 15. "I need to scale without losing performance" +📈 15. "Preciso escalar sem perder desempenho" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +À medida que o volume de solicitações aumenta, sem armazenar em cache as mesmas perguntas geram custos duplicados. Sem idempotência, solicitações duplicadas desperdiçam processamento. Os limites de tarifas por provedor devem ser respeitados. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Cache Semântico** — Cache de duas camadas (assinatura + semântica) reduz custo e latência +- **Idempotência de solicitação** — janela de desduplicação de 5s para solicitações idênticas +- **Detecção de limite de taxa** — RPM por provedor, intervalo mínimo e rastreamento simultâneo máximo +- **Limites de taxa editáveis** — Padrões configuráveis em Configurações → Resiliência com persistência +- **Cache de validação de chave de API** — cache de três camadas para desempenho de produção +- **Health Dashboard com telemetria** — latência p50/p95/p99, estatísticas de cache, tempo de atividade
-🤖 16. "I want to control model behavior globally" +🤖 16. "Quero controlar o comportamento do modelo globalmente" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Desenvolvedores que desejam todas as respostas em um idioma específico, com um tom específico ou que desejam limitar os tokens de raciocínio. Configurar isso em cada ferramenta/solicitação é impraticável. -**How OmniRoute solves it:** +**Como o OmniRoute resolve isso:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **Injeção de Prompt do Sistema** — Prompt global aplicado a todas as solicitações +- **Thinking Budget Validation** — Controle de alocação de token de raciocínio por solicitação (passthrough, automático, personalizado, adaptativo) +- **6 Estratégias de Roteamento** — Estratégias globais que determinam como as solicitações são distribuídas +- **Wildcard Router** — Os padrões `provider/*` roteiam dinamicamente para qualquer provedor +- **Combo Habilitar/Desabilitar Alternar** — Alternar combos diretamente do painel +- **Alternância de provedor** — Habilite/desabilite todas as conexões de um provedor com um clique +- **Provedores bloqueados** — Excluir provedores específicos da listagem `/v1/models`
+
+🧰 17. "Preciso de ferramentas MCP como recursos de produto de primeira classe" + +Muitos gateways de IA expõem o MCP apenas como um detalhe de implementação oculto. As equipes precisam de uma camada operacional visível e gerenciável. + +**Como o OmniRoute resolve isso:** + +- MCP aparece na navegação do painel e na guia protocolo de endpoint +- Página dedicada de gerenciamento de MCP com processos, ferramentas, escopos e auditoria +- Início rápido integrado para `omniroute --mcp` e integração de cliente + +
+ +
+🧠 18. "Preciso de orquestração A2A com caminhos de tarefa de sincronização + fluxo" + +Os fluxos de trabalho do agente precisam de respostas diretas e execução em streaming de longa duração com controle do ciclo de vida. + +**Como o OmniRoute resolve isso:** + +- Endpoint A2A JSON-RPC (`POST /a2a`) com `message/send` e `message/stream` +- Streaming SSE com propagação de estado terminal +- APIs de ciclo de vida de tarefas para `tasks/get` e `tasks/cancel` + +
+ +
+🛰️ 19. "Preciso de integridade real do processo MCP, não de status adivinhado" + +As equipes operacionais precisam saber se o MCP está realmente ativo, e não apenas se uma API está acessível. + +**Como o OmniRoute resolve isso:** + +- Arquivo de pulsação em tempo de execução com PID, carimbos de data/hora, transporte, contagem de ferramentas e modo de escopo +- API de status MCP combinando pulsação + atividade recente +- Cartões de status da interface do usuário para atualização de processo/tempo de atividade/pulsação + +
+ +
+📋 20. "Preciso de execução auditável da ferramenta MCP" + +Quando as ferramentas alteram a configuração ou acionam ações operacionais, as equipes precisam de rastreabilidade forense. + +**Como o OmniRoute resolve isso:** + +- Registro de auditoria apoiado por SQLite para chamadas de ferramentas MCP +- Filtros por ferramenta, sucesso/falha, chave de API e paginação +- Tabela de auditoria do painel + endpoints de estatísticas para automação + +
+ +
+🔐 21. "Preciso de permissões MCP com escopo definido por integração" + +Clientes diferentes devem ter acesso com privilégios mínimos às categorias de ferramentas. + +**Como o OmniRoute resolve isso:** + +- 9 escopos MCP granulares para acesso controlado à ferramenta +- Aplicação do escopo e visibilidade na UI de gerenciamento do MCP +- Postura padrão segura para ferramentas operacionais + +
+ +
+⚙️ 22. "Preciso de controles operacionais sem reimplantar" + +As equipes precisam de mudanças rápidas no tempo de execução durante incidentes ou eventos de custo. + +**Como o OmniRoute resolve isso:** + +- Alternar ativação combinada diretamente do painel MCP +- Aplicar perfis de resiliência de pacotes de políticas predefinidos +- Redefinir o estado do disjuntor no mesmo painel de operações + +
+ +
+🔄 23. "Preciso de visibilidade e cancelamento do ciclo de vida da tarefa A2A ao vivo" + +Sem visibilidade do ciclo de vida, os incidentes de tarefas tornam-se difíceis de triagem. + +**Como o OmniRoute resolve isso:** + +- Listagem/filtragem de tarefas por estado/habilidade com paginação +- Detalhamento de metadados de tarefas, eventos e artefatos +- Terminal de cancelamento de tarefa e ação de UI com confirmação + +
+ +
+🌊 24. "Preciso de métricas de fluxo ativo para carga A2A" + +Os fluxos de trabalho de streaming exigem insights operacionais sobre simultaneidade e conexões em tempo real. + +**Como o OmniRoute resolve isso:** + +- Contadores de fluxo ativos integrados ao status A2A +- Carimbo de data/hora da última tarefa e contagens por estado +- Cartões de painel A2A para monitoramento de operações em tempo real + +
+ +
+🪪 25. "Preciso de descoberta de agente padrão para clientes" + +Clientes e orquestradores externos precisam de metadados legíveis por máquina para integração. + +**Como o OmniRoute resolve isso:** + +- Cartão de agente exposto em `/.well-known/agent.json` +- Capacidades e habilidades mostradas na UI de gerenciamento +- A API de status A2A inclui metadados de descoberta para automação + +
+ +
+🧭 26. "Preciso de descoberta de protocolo na UX do produto" + +Se os usuários não conseguirem descobrir superfícies de protocolo, a adoção e a qualidade do suporte cairão. + +**Como o OmniRoute resolve isso:** + +- Entradas da barra lateral para MCP e A2A +- Guia Protocolos da página Endpoint com início rápido e status +- Links da visão geral para painéis de gerenciamento dedicados + +
+ +
+🧪 27. "Preciso de validação de protocolo ponta a ponta com clientes reais" + +Os testes simulados não são suficientes para validar a compatibilidade do protocolo antes do lançamento. + +**Como o OmniRoute resolve isso:** + +- Suíte E2E que inicializa o aplicativo e usa transporte de cliente SDK MCP real +- Testes de cliente A2A para fluxos de descoberta, envio, streaming, obtenção e cancelamento +- Verificação cruzada de afirmações com APIs de auditoria MCP e tarefas A2A + +
+ +
+📡 28. "Preciso de observabilidade unificada em todas as interfaces" + +A divisão da observabilidade por protocolo cria pontos cegos e MTTR mais longo. + +**Como o OmniRoute resolve isso:** + +- Painéis/logs/análises unificados em um produto +- Saúde + auditoria + solicitação de telemetria nas camadas OpenAI, MCP e A2A +- APIs operacionais para status e automação + +
+ +
+💼 29. "Preciso de um tempo de execução para proxy + ferramentas + orquestração de agente" + +A execução de muitos serviços separados aumenta o custo operacional e os modos de falha. + +**Como o OmniRoute resolve isso:** + +- Proxy compatível com OpenAI, servidor MCP e servidor A2A em uma pilha +- Autenticação compartilhada, resiliência, armazenamento de dados e observabilidade +- Modelo de política consistente em todas as superfícies de interação + +
+ +
+🚀 30. "Preciso enviar fluxos de trabalho de agente sem expansão de códigos colados" + +As equipes perdem velocidade ao unir vários serviços e scripts ad hoc. + +**Como o OmniRoute resolve isso:** + +- Estratégia unificada de endpoint para clientes e agentes +- UIs de gerenciamento de protocolo integradas e caminhos de validação de fumaça +- Fundações prontas para produção (segurança, registro, resiliência, backup) + +
+ +### Exemplos de manuais (casos de uso integrados) + +**Manual A: Maximize a assinatura paga + backup barato** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Manual B: Pilha de codificação de custo zero** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Manual C: cadeia de fallback sempre ativa 24 horas por dia, 7 dias por semana** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Manual D: Operações de agente com MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Início rápido **1. Instale globalmente:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +990,26 @@ OmniRoute inclui um poderoso Translator Playground integrado com **4 modos** par
---- +## 🧪 Avaliações (Evals) -## 🎯 Casos de uso +OmniRoute inclui uma estrutura de avaliação integrada para testar a qualidade da resposta do LLM em relação a um conjunto dourado. Acesse-o em **Analytics → Evals** no painel. -### Caso 1: "Tenho assinatura do Claude Pro" +### Conjunto Dourado Integrado -**Problema:** A cota expira sem ser utilizada, limites de taxa durante codificação pesada +O "OmniRoute Golden Set" pré-carregado contém 10 casos de teste cobrindo: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Saudações, matemática, geografia, geração de código +- Conformidade com o formato JSON, tradução, remarcação +- Recusa de segurança (conteúdo prejudicial), contagem, lógica booleana -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Estratégias de Avaliação -### Caso 2: "Quero custo zero" - -**Problema:** Não posso pagar assinaturas, preciso de codificação de IA confiável - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Caso 3: "Preciso de codificação 24 horas por dia, 7 dias por semana, sem interrupções" - -**Problema:** Prazos, não podemos arcar com o tempo de inatividade - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Caso 4: "Quero IA GRATUITA no OpenClaw" - -**Problema:** Precisa de assistente de IA em aplicativos de mensagens, totalmente gratuito - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Estratégia | Descrição | Exemplo | +| ---------- | --------------------------------------------------------------------------- | -------------------------------- | +| `exact` | A saída deve corresponder exatamente | `"4"` | +| `contains` | A saída deve conter substring (sem distinção entre maiúsculas e minúsculas) | `"Paris"` | +| `regex` | A saída deve corresponder ao padrão regex | `"1.*2.*3"` | +| `custom` | Função JS personalizada retorna verdadeiro/falso | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 Avaliações (Evals) - -OmniRoute inclui uma estrutura de avaliação integrada para testar a qualidade da resposta do LLM em relação a um conjunto dourado. Acesse-o em **Analytics → Evals** no painel. - -### Conjunto Dourado Integrado - -O "OmniRoute Golden Set" pré-carregado contém 10 casos de teste cobrindo: - -- Saudações, matemática, geografia, geração de código -- Conformidade com o formato JSON, tradução, remarcação -- Recusa de segurança (conteúdo prejudicial), contagem, lógica booleana - -### Estratégias de Avaliação - -| Estratégia | Descrição | Exemplo | -| ---------- | --------------------------------------------------------------------------- | -------------------------------- | -| `exact` | A saída deve corresponder exatamente | `"4"` | -| `contains` | A saída deve conter substring (sem distinção entre maiúsculas e minúsculas) | `"Paris"` | -| `regex` | A saída deve corresponder ao padrão regex | `"1.*2.*3"` | -| `custom` | Função JS personalizada retorna verdadeiro/falso | `(output) => output.length > 10` | - ---- - ## 🐛 Solução de problemas
@@ -1132,13 +1344,13 @@ O "OmniRoute Golden Set" pré-carregado contém 10 casos de teste cobrindo: - OmniRoute v1.0.6+ inclui validação de fallback por meio de conclusões de chat - Certifique-se de que o URL base inclua o sufixo `/v1` -### 🔐 OAuth em Servidor Remoto (Remote OAuth Setup) +### 🔐 OAuth > **⚠️ IMPORTANTE para usuários com OmniRoute em VPS/Docker/servidor remoto** -#### Por que o OAuth do Antigravity / Gemini CLI falha em servidores remotos? +#### OAuth Os provedores **Antigravity** e **Gemini CLI** usam **Google OAuth 2.0** para autenticação. O Google exige que um `redirect_uri` usado no fluxo OAuth seja **exatamente** uma das URIs pré-cadastradas no Google Cloud Console do aplicativo. @@ -1227,7 +1439,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🛠️ Pilha de tecnologia +## 🛠️ - **Tempo de execução**: Node.js 18–22 LTS (⚠️ Node.js 24+ **não é compatível** — `better-sqlite3` binários nativos são incompatíveis) - **Idioma**: TypeScript 5.9 — **100% TypeScript** em `src/` e `open-sse/` (v1.0.6) @@ -1279,7 +1491,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🗺️ Roteiro +## 🗺️ OmniRoute tem **210+ recursos planejados** em diversas fases de desenvolvimento. Aqui estão as principais áreas: @@ -1304,18 +1516,6 @@ OmniRoute tem **210+ recursos planejados** em diversas fases de desenvolvimento. --- -## 📧 Suporte - -> 💬 **Junte-se à nossa comunidade!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Obtenha ajuda, compartilhe dicas e fique atualizado. - -- **Site**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Problemas**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Projeto Original**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Colaboradores [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.ro.md b/README.ro.md index 8e32c753f1..98501387ca 100644 --- a/README.ro.md +++ b/README.ro.md @@ -110,6 +110,35 @@ _Conectați orice instrument IDE sau CLI alimentat de AI prin OmniRoute — gate --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 De ce OmniRoute? **Nu mai risipi banii și nu mai atingeți limitele:** @@ -128,6 +157,18 @@ _Conectați orice instrument IDE sau CLI alimentat de AI prin OmniRoute — gate --- +## 📧 Suport + +> 💬 **Alăturați-vă comunității noastre!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Obțineți ajutor, împărtășiți sfaturi și fiți la curent. + +- **Site web**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Probleme**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Proiect original**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Cum funcționează ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Ce rezolvă OmniRoute — 30 de puncte reale de durere și cazuri de utilizare -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Fiecare dezvoltator care folosește instrumente AI se confruntă zilnic cu aceste probleme.** OmniRoute a fost creat pentru a le rezolva pe toate - de la depășiri de costuri la blocaje regionale, de la fluxuri OAuth întrerupte la operațiuni de protocol și observabilitate a întreprinderii.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. „Plătesc pentru un abonament scump, dar tot sunt întrerupt de limite” -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Dezvoltatorii plătesc 20–200 USD/lună pentru Claude Pro, Codex Pro sau GitHub Copilot. Chiar și plătind, cota are un plafon - 5 ore de utilizare, limite săptămânale sau limite de tarif pe minut. La mijlocul sesiunii de codare, furnizorul nu mai răspunde și dezvoltatorul își pierde fluxul și productivitatea. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-Tier Fallback** — Dacă cota de abonament se epuizează, redirecționează automat la cheia API → Ieftin → Gratuit fără intervenție manuală +- **Urmărirea cotelor în timp real** — Afișează consumul de simboluri în timp real cu numărătoarea inversă de resetare (5 ore, zilnic, săptămânal) +- **Asistență pentru mai multe conturi** — Conturi multiple per furnizor cu turneu automat automat — când unul se epuizează, trece la următorul +- **Combinații personalizate** — Lanțuri de rezervă personalizabile cu 6 strategii de echilibrare (fill-first, round-robin, P2C, aleatoriu, cel mai puțin utilizat, optimizat din punct de vedere al costurilor) +- **Cote de afaceri Codex** — Monitorizarea cotelor de spațiu de lucru pentru afaceri/echipe direct în tabloul de bord
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. „Trebuie să folosesc mai mulți furnizori, dar fiecare are un API diferit” -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI folosește un format, Claude (Anthropic) folosește altul, Gemini încă altul. Dacă un dezvoltator dorește să testeze modele de la diferiți furnizori sau să se retragă între aceștia, trebuie să reconfigureze SDK-urile, să schimbe punctele finale, să se ocupe de formate incompatibile. Furnizorii personalizați (FriendLI, NIM) au puncte finale de model non-standard. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Unified Endpoint** — Un singur `http://localhost:20128/v1` servește drept proxy pentru toți cei 36 de furnizori și mai sus +- **Traducerea formatului** — Automată și transparentă: OpenAI ↔ Claude ↔ Gemeni ↔ Responses API +- **Response Sanitization** — Elimina câmpurile nestandard (`x_groq`, `usage_breakdown`, `service_tier`) care încalcă OpenAI SDK v1.83+ +- **Normalizarea rolurilor** — Convertește `developer` → `system` pentru furnizorii non-OpenAI; `system` → `user` pentru GLM/ERNIE +- **Think Tag Extraction** — Extrage blocurile `` de la modele precum DeepSeek R1 în `reasoning_content` standardizat +- **Ieșire structurată pentru Gemeni** — `json_schema` → `responseMimeType`/`responseSchema` conversie automată +- **`stream` este implicit `false`** — Se aliniază cu specificațiile OpenAI, evitând SSE neașteptat în SDK-urile Python/Rust/Go
-🌐 3. "My AI provider blocks my region/country" +🌐 3. „Furnizorul meu AI îmi blochează regiunea/țara” -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Furnizori precum OpenAI/Codex blochează accesul din anumite regiuni geografice. Utilizatorii primesc erori precum `unsupported_country_region_territory` în timpul conexiunilor OAuth și API. Acest lucru este frustrant în special pentru dezvoltatorii din țările în curs de dezvoltare. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **3-Level Proxy Config** — Proxy configurabil la 3 niveluri: global (tot traficul), per furnizor (doar un singur furnizor) și per conexiune/cheie +- **Insigne de proxy cu coduri de culoare** — Indicatori vizuali: 🟢 proxy global, 🟡 proxy furnizor, 🔵 proxy de conexiune, indicând întotdeauna IP-ul +- **Schimb de jetoane OAuth prin proxy** — fluxul OAuth trece și prin proxy, rezolvând `unsupported_country_region_territory` +- **Teste de conexiune prin proxy** — Testele de conexiune folosesc proxy-ul configurat (nu mai este ocolire directă) +- **Support SOCKS5** — Suport complet SOCKS5 proxy pentru rutarea de ieșire +- **TLS Fingerprint Spoofing** — Amprenta TLS asemănătoare unui browser prin `wreq-js` pentru a ocoli detectarea botului
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. „Vreau să folosesc AI pentru codare, dar nu am bani” -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Nu toată lumea poate plăti 20–200 USD/lună pentru abonamentele AI. Studenții, dezvoltatorii din țările emergente, pasionații și freelancerii au nevoie de acces la modele de calitate la cost zero. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Free Tier Providers Built-in** — Suport nativ pentru furnizori 100% gratuiti: iFlow (8 modele nelimitate), Qwen (3 modele nelimitate), Kiro (Claude gratuit), Gemini CLI (180K/lună gratuit) +- **Combinații numai gratuite** — Lanțul `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = 0 USD/lună fără timp de nefuncționare +- **Credite gratuite NVIDIA NIM** — 1000 de credite gratuite integrate +- **Cost Optimized Strategy** — Strategie de rutare care alege automat cel mai ieftin furnizor disponibil
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. „Trebuie să-mi protejez poarta AI de accesul neautorizat” -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Când expuneți un gateway AI în rețea (LAN, VPS, Docker), oricine are adresa poate consuma jetoanele/cota dezvoltatorului. Fără protecție, API-urile sunt vulnerabile la utilizare greșită, injectare promptă și abuz. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Gestionarea cheilor API** — Generare, rotație și definire pentru fiecare furnizor cu o pagină dedicată `/dashboard/api-manager` +- **Permisiuni la nivel de model** — Restricționați cheile API la anumite modele (`openai/*`, modele cu caractere metalice), cu comutatorul Permite toate/Restricționați +- **API Endpoint Protection** — Solicitați o cheie pentru `/v1/models` și blocați anumiți furnizori din listă +- **Auth Guard + CSRF Protection** — Toate rutele tabloului de bord sunt protejate cu middleware `withAuth` + jetoane CSRF +- **Rate Limiter** — Limitarea ratei per-IP cu ferestre configurabile +- **Filtrare IP** — Lista permisă/lista blocată pentru controlul accesului +- **Prompt Injection Guard** — Igienizare împotriva tiparelor de prompte rău intenționate +- **Criptare AES-256-GCM** — Acreditări criptate în repaus
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. „Furnizorul meu a căzut și mi-am pierdut fluxul de codare” -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Furnizorii de AI pot deveni instabili, pot returna erori 5xx sau pot atinge limitele temporare ale ratei. Dacă un dezvoltator depinde de un singur furnizor, acesta este întrerupt. Fără întreruptoare, reîncercări repetate pot bloca aplicația. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Circuit Breaker per furnizor** - Deschidere/închidere automată cu praguri configurabile și răcire (Închis/Deschis/Pe jumătate deschis) +- **Backoff exponențial** — Întârzieri progresive ale reîncercării +- **Anti-Thundering Herd** — Mutex + protecție semafor împotriva furtunilor concurente de reîncercare +- **Combo Fallback Chains** — Dacă furnizorul principal eșuează, trece automat prin lanț fără nicio intervenție +- **Combo Circuit Breaker** — Dezactivează automat furnizorii care eșuează dintr-un lanț combinat +- **Tabloul de bord pentru sănătate** — Monitorizare timp de funcționare, stări întrerupătoare de circuit, blocări, statistici cache, latență p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. „Configurarea fiecărui instrument AI este plictisitoare și repetitivă” -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Dezvoltatorii folosesc Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Fiecare instrument are nevoie de o configurație diferită (punct final API, cheie, model). Reconfigurarea la schimbarea de furnizor sau de model este o pierdere de timp. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **CLI Tools Dashboard** — pagină dedicată cu setare cu un singur clic pentru Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — generează `chatLanguageModels.json` pentru VS Code cu selecția în bloc a modelului +- **Onboarding Wizard** — Configurare ghidată în 4 pași pentru utilizatorii debutanți +- **Un punct final, toate modelele** — Configurați `http://localhost:20128/v1` o dată, accesați peste 36 de furnizori
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. „Gestionarea jetoanelor OAuth de la mai mulți furnizori este un iad” -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot - toate folosesc OAuth 2.0 cu token-uri care expiră. Dezvoltatorii trebuie să se reautentifice în mod constant, să se ocupe de `client_secret is missing`, `redirect_uri_mismatch` și defecțiunile de pe serverele de la distanță. OAuth pe LAN/VPS este deosebit de problematică. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Reîmprospătare automată a simbolurilor** — jetoanele OAuth se reîmprospătează în fundal înainte de expirare +- **OAuth 2.0 (PKCE) încorporat** — Flux automat pentru Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **OAuth cu mai multe conturi** — Conturi multiple per furnizor prin extragerea jetonului JWT/ID +- **OAuth LAN/Remediere la distanță** — Detectare IP privată pentru `redirect_uri` + modul URL manual pentru servere la distanță +- **OAuth în spatele Nginx** — Utilizează `window.location.origin` pentru compatibilitatea cu proxy invers +- **Ghid OAuth la distanță** — Ghid pas cu pas pentru acreditările Google Cloud pe VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. „Nu știu cât cheltuiesc sau unde” -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Dezvoltatorii folosesc mai mulți furnizori plătiți, dar nu au o viziune unificată asupra cheltuielilor. Fiecare furnizor are propriul tablou de bord de facturare, dar nu există o vizualizare consolidată. Costurile neașteptate se pot acumula. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Tabloul de bord pentru analiza costurilor** — Urmărirea costurilor pe token și gestionarea bugetului per furnizor +- **Limite bugetare pe nivel** — Plafonul de cheltuieli pe nivel care declanșează o rezervă automată +- **Configurație de preț pe model** — Prețuri configurabile pe model +- **Statistici de utilizare per cheie API** — Numărul de solicitări și marcajul temporal al ultimei utilizări per cheie +- **Tabloul de bord de analiză** — Carduri cu statistici, diagramă de utilizare a modelului, tabel cu furnizori cu rate de succes și latență
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. „Nu pot diagnostica erorile și problemele în apelurile AI” -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Când un apel eșuează, dezvoltatorul nu știe dacă a fost o limită de rată, un simbol expirat, un format greșit sau o eroare a furnizorului. Jurnalele fragmentate pe diferite terminale. Fără observabilitate, depanarea este o încercare și eroare. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Tabloul de bord pentru jurnalele unificate** — 4 file: jurnalele de solicitare, jurnalele proxy, jurnalele de audit, consolă +- **Console Log Viewer** — Vizualizator în timp real în stil terminal cu niveluri codificate în culori, defilare automată, căutare, filtru +- **SQLite Proxy Logs** — Jurnale persistente care supraviețuiesc repornirilor serverului +- **Translator Playground** — 4 moduri de depanare: Playground (traducere format), Chat Tester (dus-întors), Test Bench (lot), Live Monitor (în timp real) +- **Solicitare telemetrie** — latență p50/p95/p99 + urmărire X-Request-Id +- **Înregistrare bazată pe fișiere cu rotație** — Interceptor de consolă captează totul în jurnalul JSON cu rotație bazată pe dimensiune
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. „Implementarea și întreținerea gateway-ului este complexă” -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Instalarea, configurarea și menținerea unui proxy AI în diferite medii (local, VPS, Docker, cloud) necesită multă muncă. Probleme precum căile codificate hard, `EACCES` pe directoare, conflictele de porturi și versiunile pe mai multe platforme adaugă fricțiuni. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **npm global install** — `npm install -g omniroute && omniroute` — finalizat +- **Docker Multi-Platform** - AMD64 + ARM64 nativ (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Docker Compose Profiles** — `base` (fără instrumente CLI) și `cli` (cu Claude Code, Codex, OpenClaw) +- **Electron Desktop App** — aplicație nativă pentru Windows/macOS/Linux cu bară de sistem, pornire automată, mod offline +- **Split-Port Mode** — API și tablou de bord pe porturi separate pentru scenarii avansate (reverse proxy, rețea container) +- **Cloud Sync** — Configurați sincronizarea între dispozitive prin Cloudflare Workers +- **Backups DB** — Backup automat, restaurare, export și import al tuturor setărilor
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. „Interfața este doar în limba engleză și echipa mea nu vorbește engleză” -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Echipele din țările care nu vorbesc engleza, în special din America Latină, Asia și Europa, se luptă cu interfețele doar în limba engleză. Barierele lingvistice reduc adoptarea și cresc erorile de configurare. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Tabloul de bord i18n — 30 de limbi** — Toate cele peste 500 de taste traduse, inclusiv arabă, bulgară, daneză, germană, spaniolă, finlandeză, franceză, ebraică, hindi, maghiară, indoneziană, italiană, japoneză, coreeană, malay, olandeză, norvegiană, poloneză, portugheză (PT/BR), română, rusă, slovacă, suedeză, thailandeză, ucraineană, filipineză, engleză, chineză, vietnameză, +- ** Suport RTL** — Suport de la dreapta la stânga pentru arabă și ebraică +- **ReadME-uri în mai multe limbi** — 30 de traduceri complete de documentație +- **Selector de limbă** — Pictograma glob în antet pentru comutare în timp real
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. „Am nevoie de mai mult decât de chat — am nevoie de încorporare, imagini, audio” -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +AI nu este doar finalizarea chatului. Dezvoltatorii trebuie să genereze imagini, să transcrie sunetul, să creeze înglobări pentru RAG, să reclasifice documentele și să modereze conținutul. Fiecare API are un punct final și un format diferit. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Embeddings** — `/v1/embeddings` cu 6 furnizori și peste 9 modele +- **Generarea imaginii** — `/v1/images/generations` cu 10 furnizori și peste 20 de modele (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Text-to-Video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) și SD WebUI +- **Text-to-Music** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Transcriere audio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Text-to-Speech** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + furnizori existenți +- **Moderări** — `/v1/moderations` — Verificări de siguranță a conținutului +- **Reclasificare** — `/v1/rerank` — Reclasificarea relevanței documentului +- **Responses API** — Suport complet `/v1/responses` pentru Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. „Nu am cum să testez și să compar calitatea între modele” -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Dezvoltatorii vor să știe care model este cel mai bun pentru cazul lor de utilizare - cod, traducere, raționament - dar compararea manuală este lentă. Nu există instrumente de evaluare integrate. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Evaluări LLM** — Testarea setului de aur cu 10 cazuri preîncărcate care acoperă salutări, matematică, geografie, generare de cod, conformitate cu JSON, traducere, reducere, refuz de siguranță +- **4 strategii de potrivire** — `exact`, `contains`, `regex`, `custom` (funcția JS) +- **Translator Playground Test Bench** — Testare în loturi cu mai multe intrări și rezultate așteptate, comparație între furnizori +- **Tester de chat** — Tur complet dus-întors cu randare vizuală a răspunsului +- **Live Monitor** — Flux în timp real al tuturor solicitărilor care circulă prin proxy
-📈 15. "I need to scale without losing performance" +📈 15. „Trebuie să mă scalez fără a pierde performanța” -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +Pe măsură ce volumul cererilor crește, fără memorarea în cache aceleași întrebări generează costuri duplicate. Fara idempotenta, cererile duplicate procesarea deseurilor. Limitele de tarife pentru fiecare furnizor trebuie respectate. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Cache semantic** — Cache-ul pe două niveluri (semnătură + semantică) reduce costurile și latența +- **Request Idempotency** — fereastră de deduplicare 5s pentru cereri identice +- **Rate Limit Detection** — RPM per furnizor, interval minim și urmărire simultană maximă +- **Limite de rată editabile** — Valori implicite configurabile în Setări → Reziliență cu persistență +- **API Key Validation Cache** — cache pe 3 niveluri pentru performanța producției +- **Tabloul de bord pentru sănătate cu telemetrie** — latență p50/p95/p99, statistici cache, timp de funcționare
-🤖 16. "I want to control model behavior globally" +🤖 16. „Vreau să controlez comportamentul modelului la nivel global” -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Dezvoltatori care doresc toate răspunsurile într-o anumită limbă, cu un anumit ton sau care doresc să limiteze simbolurile de raționament. Configurarea acestui lucru în fiecare instrument/cerere nu este practică. -**How OmniRoute solves it:** +**Cum o rezolvă OmniRoute:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **System Prompt Injection** — Prompt global aplicat tuturor solicitărilor +- **Thinking Budget Validation** — Controlul raționării alocării token-ului per cerere (transmis, automat, personalizat, adaptiv) +- **6 Strategii de rutare** — Strategii globale care determină modul în care sunt distribuite cererile +- **Wildcard Router** — modelele `provider/*` sunt direcționate dinamic către orice furnizor +- **Combo Activare/Dezactivare Comutare** — Comută combo direct din tabloul de bord +- **Comutare furnizor** — Activați/dezactivați toate conexiunile pentru un furnizor cu un singur clic +- **Furnizori blocați** — Excludeți anumiți furnizori din lista `/v1/models`
+
+🧰 17. „Am nevoie de instrumente MCP ca capabilități de produs de primă clasă” + +Multe gateway-uri AI expun MCP doar ca un detaliu ascuns de implementare. Echipele au nevoie de un nivel de operare vizibil și ușor de gestionat. + +**Cum o rezolvă OmniRoute:** + +- MCP apare în panoul de bord de navigare și fila de protocol final +- Pagina de management MCP dedicată cu proces, instrumente, domenii și audit +- Pornire rapidă încorporată pentru `omniroute --mcp` și integrarea clientului + +
+ +
+🧠 18. „Am nevoie de orchestrare A2A cu sincronizare + căi de activități de flux” + +Fluxurile de lucru ale agenților necesită atât răspunsuri directe, cât și execuție în flux de lungă durată, cu control ciclului de viață. + +**Cum o rezolvă OmniRoute:** + +- Punct final A2A JSON-RPC (`POST /a2a`) cu `message/send` și `message/stream` +- Streaming SSE cu propagare a stării terminale +- API-uri pentru ciclul de viață al sarcinilor pentru `tasks/get` și `tasks/cancel` + +
+ +
+🛰️ 19. „Am nevoie de sănătate reală a procesului MCP, nu de stare ghicită” + +Echipele operaționale trebuie să știe dacă MCP este de fapt în viață, nu doar dacă un API este accesibil. + +**Cum o rezolvă OmniRoute:** + +- Fișier runtime heartbeat cu PID, marcaje de timp, transport, număr de instrumente și modul de aplicare +- API de stare MCP care combină bătăile inimii + activitatea recentă +- Carduri de stare a interfeței de utilizare pentru prospețimea procesului/uptime/inima + +
+ +
+📋 20. „Am nevoie de o execuție auditabilă a instrumentului MCP” + +Când instrumentele modifică configurația sau declanșează acțiuni operaționale, echipele au nevoie de trasabilitate criminalistică. + +**Cum o rezolvă OmniRoute:** + +- Înregistrare de audit susținută de SQLite pentru apelurile instrumentelor MCP +- Filtrează după instrument, succes/eșec, cheie API și paginare +- Tabelul de audit al tabloului de bord + punctele finale de statistici pentru automatizare + +
+ +
+🔐 21. „Am nevoie de permisiuni MCP pentru fiecare integrare” + +Clienții diferiți ar trebui să aibă cel mai mic privilegiu de acces la categoriile de instrumente. + +**Cum o rezolvă OmniRoute:** + +- 9 lunete MCP granulare pentru acces controlat la instrumente +- Aplicarea domeniului de aplicare și vizibilitatea în interfața de utilizare a managementului MCP +- Poziție implicită sigură pentru instrumentele operaționale + +
+ +
+⚙️ 22. „Am nevoie de controale operaționale fără redistribuire” + +Echipele au nevoie de modificări rapide ale timpului de rulare în timpul incidentelor sau evenimentelor de cost. + +**Cum o rezolvă OmniRoute:** + +- Comutați activarea comboi direct din tabloul de bord MCP +- Aplicați profiluri de rezistență din pachetele de politici predefinite +- Resetați starea întreruptorului de la același panou de operare + +
+ +
+🔄 23. „Am nevoie de vizibilitate și anulare a ciclului de viață a sarcinii A2A live” + +Fără vizibilitatea ciclului de viață, incidentele sarcinilor devin greu de triat. + +**Cum o rezolvă OmniRoute:** + +- Listarea sarcinilor/filtrarea după stare/abilitate cu paginare +- Detaliați metadatele sarcinii, evenimentele și artefactele +- Punct final de anulare a sarcinii și acțiune UI cu confirmare + +
+ +
+🌊 24. „Am nevoie de valori de flux active pentru încărcarea A2A” + +Fluxurile de lucru în flux necesită o perspectivă operațională privind concurența și conexiunile live. + +**Cum o rezolvă OmniRoute:** + +- Contoare active de flux integrate în starea A2A +- Marcaj de timp pentru ultima sarcină și numărătoare pentru fiecare stat +- Carduri de bord A2A pentru monitorizarea operațiunilor în timp real + +
+ +
+🪪 25. „Am nevoie de descoperire de agenți standard pentru clienți” + +Clienții externi și orchestratorii au nevoie de metadate care pot fi citite de mașină pentru integrare. + +**Cum o rezolvă OmniRoute:** + +- Card de agent expus la `/.well-known/agent.json` +- Capacități și abilități afișate în UI de management +- API-ul de stare A2A include metadate de descoperire pentru automatizare + +
+ +
+🧭 26. „Am nevoie de descoperirea protocolului în produsul UX” + +Dacă utilizatorii nu pot descoperi suprafețele de protocol, calitatea adoptării și a suportului scade. + +**Cum o rezolvă OmniRoute:** + +- Intrări din bara laterală pentru MCP și A2A +- Pagina Endpoint Fila Protocoale cu pornire rapidă și stare +- Link-uri de la prezentare generală la tablouri de bord dedicate de management + +
+ +
+🧪 27. „Am nevoie de validarea protocolului end-to-end cu clienți reali” + +Testele simulate nu sunt suficiente pentru a valida compatibilitatea protocolului înainte de lansare. + +**Cum o rezolvă OmniRoute:** + +- Suita E2E care pornește aplicația și utilizează transportul clientului MCP SDK real +- Testele client A2A pentru descoperirea, trimiterea, transmiterea în flux, obținerea și anularea fluxurilor +- Verificați încrucișați afirmațiile cu auditul MCP și API-urile pentru sarcini A2A + +
+ +
+📡 28. „Am nevoie de observabilitate unificată pe toate interfețele” + +Împărțirea observabilității în funcție de protocol creează puncte oarbe și MTTR mai lung. + +**Cum o rezolvă OmniRoute:** + +- Tablouri de bord/jurnale/analitice unificate într-un singur produs +- Sănătate + audit + solicitare de telemetrie în straturi OpenAI, MCP și A2A +- API-uri operaționale pentru stare și automatizare + +
+ +
+💼 29. „Am nevoie de un timp de rulare pentru proxy + instrumente + orchestrare agent” + +Rularea multor servicii separate crește costurile operaționale și modurile de eșec. + +**Cum o rezolvă OmniRoute:** + +- Proxy compatibil OpenAI, server MCP și server A2A într-o singură stivă +- Autentificare partajată, rezistență, stocare de date și observabilitate +- Model de politică consistent pe toate suprafețele de interacțiune + +
+ +
+🚀 30. „Trebuie să trimit fluxuri de lucru agentice fără extinderea codului lipici” + +Echipele își pierd din viteza atunci când realizează mai multe servicii și scripturi ad-hoc. + +**Cum o rezolvă OmniRoute:** + +- Strategie unificată pentru clienți și agenți +- Interfețe de utilizare a protocolului încorporate și căi de validare a fumului +- Baze pregătite pentru producție (securitate, logare, rezistență, backup) + +
+ +### Exemple de manuale (cazuri de utilizare integrate) + +**Playbook A: Maximizați abonamentul plătit + backup ieftin** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: teanc de codare cu costuri zero** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: lanț alternativ permanent activ 24/7** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: Agentul operează cu MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Pornire rapidă **1. Instalați la nivel global:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +990,26 @@ OmniRoute include un puternic Translator Playground încorporat cu **4 moduri**
---- +## 🧪 Evaluări (Evaluări) -## 🎯 Cazuri de utilizare +OmniRoute include un cadru de evaluare încorporat pentru a testa calitatea răspunsului LLM față de un set de aur. Accesați-l prin **Analitice → Evaluări** în tabloul de bord. -### Cazul 1: „Am abonament Claude Pro” +### Set de aur încorporat -**Problemă:** Cota expiră neutilizată, limitele ratei în timpul codării grele +„Setul de Aur OmniRoute” preîncărcat conține 10 cazuri de testare care acoperă: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Salutări, matematică, geografie, generare de cod +- Conformitatea formatului JSON, traducere, reducere +- Refuz de siguranță (conținut dăunător), numărare, logică booleană -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Strategii de evaluare -### Cazul 2: „Vreau cost zero” - -**Problemă:** Nu-mi permit abonamente, au nevoie de codare AI de încredere - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Cazul 3: „Am nevoie de codare 24/7, fără întreruperi” - -**Problemă:** Termenele limită, nu-mi permit timpi de nefuncționare - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Cazul 4: „Vreau AI GRATUIT în OpenClaw” - -**Problemă:** Aveți nevoie de asistent AI în aplicațiile de mesagerie, complet gratuit - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Strategie | Descriere | Exemplu | +| ---------- | ------------------------------------------------------------------------- | -------------------------------- | +| `exact` | Ieșirea trebuie să se potrivească exact cu | `"4"` | +| `contains` | Ieșirea trebuie să conțină subșir (indiferență de majuscule și minuscule) | `"Paris"` | +| `regex` | Ieșirea trebuie să se potrivească cu modelul regex | `"1.*2.*3"` | +| `custom` | Funcția JS personalizată returnează adevărat/fals | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 Evaluări (Evaluări) - -OmniRoute include un cadru de evaluare încorporat pentru a testa calitatea răspunsului LLM față de un set de aur. Accesați-l prin **Analitice → Evaluări** în tabloul de bord. - -### Set de aur încorporat - -„Setul de Aur OmniRoute” preîncărcat conține 10 cazuri de testare care acoperă: - -- Salutări, matematică, geografie, generare de cod -- Conformitatea formatului JSON, traducere, reducere -- Refuz de siguranță (conținut dăunător), numărare, logică booleană - -### Strategii de evaluare - -| Strategie | Descriere | Exemplu | -| ---------- | ------------------------------------------------------------------------- | -------------------------------- | -| `exact` | Ieșirea trebuie să se potrivească exact cu | `"4"` | -| `contains` | Ieșirea trebuie să conțină subșir (indiferență de majuscule și minuscule) | `"Paris"` | -| `regex` | Ieșirea trebuie să se potrivească cu modelul regex | `"1.*2.*3"` | -| `custom` | Funcția JS personalizată returnează adevărat/fals | `(output) => output.length > 10` | - ---- - ## 🐛 Depanare
@@ -1132,13 +1344,13 @@ OmniRoute include un cadru de evaluare încorporat pentru a testa calitatea răs - OmniRoute v1.0.6+ include validarea de rezervă prin finalizarea chatului - Asigurați-vă că adresa URL de bază include sufixul `/v1` -### 🔐 OAuth em Servidor Remoto (Configurare OAuth la distanță) +### 🔐 OAuth > **⚠️ IMPORTANT pentru utilizatorii cu OmniRoute în VPS/Docker/servidor remoto** -#### Por que o OAuth do Antigravity / Gemini CLI falha em serveres remotes? +#### OAuth Pentru autentificare, **Antigravity** și **Gemini CLI** folosesc **Google OAuth 2.0**. O Google exige que a `redirect_uri` utilizat nu fluxo OAuth seja **exatamente** uma das URIs pre-cadastradas no Google Cloud Console do aplicative. @@ -1227,7 +1439,7 @@ Nu vă rugăm să vă convingeți acum, dar este posibil să utilizați sau să --- -## 🛠️ Tech Stack +## 🛠️ - **Runtime**: Node.js 18–22 LTS (⚠️ Node.js 24+ este **nu este acceptat** - `better-sqlite3` binarele native sunt incompatibile) - **Limba**: TypeScript 5.9 — **100% TypeScript** în `src/` și `open-sse/` (v1.0.6) @@ -1279,7 +1491,7 @@ Nu vă rugăm să vă convingeți acum, dar este posibil să utilizați sau să --- -## 🗺️ Foaia de parcurs +## 🗺️ OmniRoute are **210+ funcții planificate** în mai multe faze de dezvoltare. Iată domeniile cheie: @@ -1304,18 +1516,6 @@ OmniRoute are **210+ funcții planificate** în mai multe faze de dezvoltare. Ia --- -## 📧 Suport - -> 💬 **Alăturați-vă comunității noastre!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Obțineți ajutor, împărtășiți sfaturi și fiți la curent. - -- **Site web**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Probleme**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Proiect original**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Colaboratori [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.ru.md b/README.ru.md index 600ce6252a..5cc92eb8cc 100644 --- a/README.ru.md +++ b/README.ru.md @@ -110,6 +110,35 @@ _Подключайте любую IDE или CLI-инструмент с AI ч --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Почему OmniRoute? **Перестаньте тратить деньги и упираться в лимиты:** @@ -128,6 +157,18 @@ _Подключайте любую IDE или CLI-инструмент с AI ч --- +## 📧 Поддержка + +> 💬 **Присоединяйтесь к сообществу!** [Группа WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Получайте помощь, делитесь советами и оставайтесь в курсе. + +- **Сайт**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Группа сообщества](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Оригинальный проект**: [9router от decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Как это работает ``` @@ -157,263 +198,497 @@ _Подключайте любую IDE или CLI-инструмент с AI ч --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Что решает OmniRoute — 30 реальных проблем и вариантов использования -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Каждый разработчик, использующий инструменты искусственного интеллекта, ежедневно сталкивается с этими проблемами.** OmniRoute был создан для решения всех этих проблем — от перерасхода средств до региональных блоков, от нарушенных потоков OAuth до операций протокола и наблюдения за предприятием.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. «Я плачу за дорогую подписку, но меня все равно прерывают лимиты» -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Разработчики платят 20–200 долларов в месяц за Claude Pro, Codex Pro или GitHub Copilot. Даже при оплате квота имеет потолок — 5 часов использования, еженедельные лимиты или поминутные ограничения. В середине сеанса кодирования провайдер перестает отвечать, и разработчик теряет поток и производительность. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Умный 4-уровневый резерв** — если квота подписки исчерпана, происходит автоматическое перенаправление на API-ключ → Дешево → Бесплатно без вмешательства вручную. +- **Отслеживание квот в реальном времени** — показывает потребление токенов в режиме реального времени с обратным отсчетом сброса (5 часов, ежедневно, еженедельно). +- **Поддержка нескольких учетных записей** — Несколько учетных записей у каждого провайдера с автоматическим циклическим перебором — когда один из них заканчивается, переключается на следующий +- **Пользовательские комбинации** — Настраиваемые резервные цепочки с 6 стратегиями балансировки (сначала заполняемые, циклический, P2C, случайные, наименее используемые, с оптимизацией затрат) +- **Бизнес-квоты Кодекса** — мониторинг квот рабочего пространства для бизнеса/команды непосредственно на панели управления.
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. «Мне нужно использовать несколько поставщиков, но у каждого свой API» -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI использует один формат, Claude (Anthropic) — другой, Gemini — третий. Если разработчик хочет протестировать модели от разных поставщиков или использовать резервный вариант между ними, ему необходимо перенастроить SDK, изменить конечные точки, разобраться с несовместимыми форматами. Пользовательские поставщики (FriendLI, NIM) имеют нестандартные конечные точки модели. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Единая конечная точка** — один `http://localhost:20128/v1` служит прокси для всех 36+ провайдеров. +- **Перевод формата** — Автоматический и прозрачный: OpenAI ↔ Claude ↔ Gemini ↔ API ответов +- **Очистка ответов** — удаляются нестандартные поля (`x_groq`, `usage_breakdown`, `service_tier`), которые нарушают OpenAI SDK v1.83+. +- **Нормализация ролей** — преобразует `developer` в `system` для поставщиков, не поддерживающих OpenAI; `system` → `user` для GLM/ERNIE +- **Think Tag Extraction** — извлекает блоки `` из таких моделей, как DeepSeek R1, в стандартизированный `reasoning_content`. +- **Структурированный вывод для Gemini** — автоматическое преобразование `json_schema` → `responseMimeType`/`responseSchema`. +- **`stream` по умолчанию — `false`** — соответствует спецификации OpenAI, что позволяет избежать неожиданного SSE в SDK Python/Rust/Go.
-🌐 3. "My AI provider blocks my region/country" +🌐 3. «Мой провайдер ИИ блокирует мой регион/страну» -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Такие провайдеры, как OpenAI/Codex, блокируют доступ из определенных географических регионов. Пользователи получают ошибки типа `unsupported_country_region_territory` во время подключений OAuth и API. Особенно это расстраивает разработчиков из развивающихся стран. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **3-уровневая конфигурация прокси** — настраиваемый прокси-сервер на трех уровнях: глобальный (весь трафик), для каждого провайдера (только один провайдер) и для каждого соединения/ключа. +- **Значки прокси с цветной кодировкой** — Визуальные индикаторы: 🟢 глобальный прокси, 🟡 прокси-сервер провайдера, 🔵 прокси-сервер подключения, всегда показывающий IP-адрес. +- **Обмен токенов OAuth через прокси** — поток OAuth также проходит через прокси, решая проблему `unsupported_country_region_territory`. +- **Тесты подключения через прокси** — тесты подключения используют настроенный прокси-сервер (прямого обхода больше нет) +- **Поддержка SOCKS5** — Полная поддержка прокси-сервера SOCKS5 для исходящей маршрутизации. +- **Подмена отпечатка пальца TLS** — отпечаток TLS, подобный браузеру, через `wreq-js` для обхода обнаружения ботов.
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. «Я хочу использовать ИИ для кодирования, но у меня нет денег» -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Не каждый может платить 20–200 долларов в месяц за подписку на ИИ. Студентам, разработчикам из развивающихся стран, любителям и фрилансерам нужен доступ к качественным моделям по нулевой цене. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Встроенные провайдеры уровня бесплатного пользования** — Встроенная поддержка 100% бесплатных провайдеров: iFlow (8 моделей с неограниченным количеством пользователей), Qwen (3 модели с неограниченным количеством пользователей), Kiro (Claude бесплатно), Gemini CLI (180 тысяч в месяц бесплатно). +- **Комбинации только бесплатно** — цепочка `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = 0 долларов США в месяц без простоев. +- **Бесплатные кредиты NVIDIA NIM** — интегрировано 1000 бесплатных кредитов. +- **Стратегия оптимизации затрат** — стратегия маршрутизации, которая автоматически выбирает самого дешевого доступного провайдера.
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. «Мне нужно защитить мой AI-шлюз от несанкционированного доступа» -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +При предоставлении доступа к сети AI-шлюза (LAN, VPS, Docker) любой, у кого есть адрес, может использовать токены/квоту разработчика. Без защиты API уязвимы для неправильного использования, быстрого внедрения и злоупотреблений. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Управление ключами API** — генерация, ротация и определение области действия для каждого поставщика с помощью специальной страницы `/dashboard/api-manager`. +- **Разрешения на уровне модели** — Ограничьте использование ключей API определенными моделями (`openai/*`, шаблоны подстановочных знаков) с помощью переключателя Разрешить все/Ограничить. +- **API Endpoint Protection** — требует ключ для `/v1/models` и блокирует определенных поставщиков из списка. +- **Auth Guard + защита CSRF** — все маршруты информационной панели защищены промежуточным программным обеспечением `withAuth` + токенами CSRF. +- **Ограничитель скорости** — ограничение скорости для каждого IP с помощью настраиваемых окон. +- **IP-фильтрация** — список разрешенных/блокированных для контроля доступа. +- **Prompt Injection Guard** — очистка от вредоносных шаблонов подсказок. +- **Шифрование AES-256-GCM** — неактивные учетные данные зашифрованы.
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. «Мой провайдер вышел из строя, и я потерял процесс кодирования» -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Поставщики ИИ могут работать нестабильно, возвращать ошибки 5xx или достигать временных ограничений скорости. Если разработчик зависит от одного провайдера, его работу прерывают. Без автоматических выключателей повторные попытки могут привести к сбою приложения. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Выключатель для каждого поставщика** — автоматическое открытие/закрытие с настраиваемыми пороговыми значениями и временем восстановления (закрыто/открыто/полуоткрыто). +- **Экспоненциальная задержка** – прогрессивная задержка повторных попыток. +- **Anti-Thundering Herd** — Мьютекс + защита семафора от одновременных штормов повторных попыток. +- **Комбо-резервные цепочки** — в случае сбоя основного поставщика автоматически проходит через цепочку без вмешательства. +- **Комбо-выключатель** — автоматически отключает неисправных поставщиков в комбинированной цепочке. +- **Панель работоспособности** — мониторинг работоспособности, состояния автоматических выключателей, блокировки, статистика кэша, задержка p50/p95/p99.
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. «Настройка каждого инструмента искусственного интеллекта утомительна и повторяется» -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Разработчики используют Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Для каждого инструмента требуется своя конфигурация (конечная точка API, ключ, модель). Перенастройка при смене провайдера или модели — пустая трата времени. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **Панель инструментов CLI** — выделенная страница с настройкой в один клик Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline. +- **Генератор конфигураций GitHub Copilot** — генерирует `chatLanguageModels.json` для кода VS с массовым выбором модели. +- **Мастер адаптации** — пошаговая пошаговая настройка для начинающих пользователей. +- **Одна конечная точка, все модели** — настройте `http://localhost:20128/v1` один раз и получите доступ к более чем 36 поставщикам услуг.
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. «Управление токенами OAuth от нескольких провайдеров — это ад» -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot — все используют OAuth 2.0 с токенами с истекающим сроком действия. Разработчикам необходимо постоянно проходить повторную аутентификацию, иметь дело с `client_secret is missing`, `redirect_uri_mismatch` и сбоями на удаленных серверах. OAuth в LAN/VPS особенно проблематичен. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Автоматическое обновление токенов** — токены OAuth обновляются в фоновом режиме до истечения срока их действия. +- **Встроенный OAuth 2.0 (PKCE)** — автоматический поток для Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow. +- **OAuth с несколькими учетными записями** – несколько учетных записей для каждого провайдера посредством извлечения токена JWT/ID. +- **OAuth LAN/Remote Fix** — обнаружение частного IP-адреса для `redirect_uri` + ручной режим URL-адреса для удаленных серверов. +- **OAuth за Nginx** — использует `window.location.origin` для совместимости с обратным прокси-сервером. +- **Руководство по удаленному OAuth** — пошаговое руководство по учетным данным Google Cloud на VPS/Docker.
-📊 9. "I don't know how much I'm spending or where" +📊 9. «Я не знаю, сколько и куда я трачу» -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Разработчики используют нескольких платных поставщиков, но не имеют единого представления о расходах. У каждого провайдера есть своя панель выставления счетов, но единого представления нет. Неожиданные расходы могут накопиться. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Панель анализа затрат** — отслеживание затрат на каждый токен и управление бюджетом для каждого поставщика. +- **Ограничения бюджета на уровень** — потолок расходов на уровень, который запускает автоматический возврат к резервному варианту. +- **Конфигурация цен на модель** — настраиваемые цены на модель. +- **Статистика использования каждого ключа API** — количество запросов и временная метка последнего использования для каждого ключа. +- **Панель аналитики** — карточки статистики, диаграмма использования модели, таблица поставщиков с показателями успеха и задержкой.
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. «Я не могу диагностировать ошибки и проблемы в вызовах ИИ» -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Когда вызов завершается неудачей, разработчик не знает, было ли это ограничением скорости, сроком действия токена, неправильным форматом или ошибкой провайдера. Фрагментированные журналы на разных терминалах. Без наблюдаемости отладка осуществляется методом проб и ошибок. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Панель управления унифицированными журналами** — 4 вкладки: журналы запросов, журналы прокси, журналы аудита, консоль. +- **Консольный просмотр журнала** — просмотрщик в режиме терминала в режиме реального времени с уровнями с цветовой кодировкой, автоматической прокруткой, поиском и фильтрацией. +- **Журналы прокси-сервера SQLite** — постоянные журналы, сохраняющиеся после перезапуска сервера. +- **Площадка переводчика** — 4 режима отладки: Площадка (перевод формата), Тестер чата (туда и обратно), Тестовый стенд (пакетный), Мониторинг в реальном времени (в режиме реального времени). +- **Запрос телеметрии** — задержка p50/p95/p99 + отслеживание X-Request-Id +- **Журналирование на основе файлов с ротацией** — перехватчик консоли записывает все в журнал JSON с ротацией на основе размера.
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. «Развертывание и обслуживание шлюза сложны» -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Установка, настройка и обслуживание прокси-сервера AI в различных средах (локальных, VPS, Docker, облаке) — трудоемкий процесс. Такие проблемы, как жестко запрограммированные пути, `EACCES` в каталогах, конфликты портов и кроссплатформенные сборки, добавляют проблем. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **глобальная установка npm** — `npm install -g omniroute && omniroute` — выполнено +- **Мультиплатформенность Docker** — встроенная версия AMD64 + ARM64 (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Профили Docker Compose** — `base` (без инструментов CLI) и `cli` (с Claude Code, Codex, OpenClaw) +- **Electron Desktop App** — собственное приложение для Windows/macOS/Linux с панелью задач, автозапуском и автономным режимом. +- **Режим разделения портов** — API и панель мониторинга на отдельных портах для расширенных сценариев (обратный прокси-сервер, сеть контейнеров). +- **Cloud Sync** — синхронизация конфигурации между устройствами через Cloudflare Workers. +- **Резервные копии БД** — автоматическое резервное копирование, восстановление, экспорт и импорт всех настроек.
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. «Интерфейс только на английском языке, и моя команда не говорит по-английски» -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Команды в неанглоязычных странах, особенно в Латинской Америке, Азии и Европе, испытывают трудности с интерфейсами только на английском языке. Языковые барьеры сокращают внедрение и увеличивают количество ошибок в конфигурации. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Панель управления i18n — 30 языков** — Все более 500 клавиш переведены, включая арабский, болгарский, датский, немецкий, испанский, финский, французский, иврит, хинди, венгерский, индонезийский, итальянский, японский, корейский, малайский, голландский, норвежский, польский, португальский (PT/BR), румынский, русский, словацкий, шведский, тайский, украинский, вьетнамский, китайский, филиппинский, английский +- **Поддержка RTL** — поддержка написания справа налево для арабского языка и иврита. +- **Многоязычные файлы README** — 30 полных переводов документации. +- **Выбор языка** — значок глобуса в заголовке для переключения в реальном времени.
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. «Мне нужно больше, чем просто чат — мне нужны вложения, изображения, аудио» -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +ИИ — это не просто завершение чата. Разработчикам необходимо генерировать изображения, расшифровывать аудио, создавать вложения для RAG, изменять ранжирование документов и модерировать контент. Каждый API имеет свою конечную точку и формат. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Встраивания** — `/v1/embeddings` с 6 поставщиками и более чем 9 моделями. +- **Генерация изображений** — `/v1/images/generations` с 10 поставщиками и более чем 20 моделями (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigradity, SD WebUI, ComfyUI) +- **Преобразование текста в видео** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) и SD WebUI. +- **Преобразование текста в музыку** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Аудиотранскрипция** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Преобразование текста в речь** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3 и + существующие поставщики +- **Модерация** — `/v1/moderations` — Проверка безопасности контента. +- **Реранжирование** — `/v1/rerank` — Изменение ранжирования релевантности документа. +- **API ответов** — полная поддержка `/v1/responses` для Кодекса.
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. «У меня нет возможности тестировать и сравнивать качество разных моделей» -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Разработчики хотят знать, какая модель лучше всего подходит для их варианта использования (код, перевод, рассуждения), но сравнивать вручную — это медленно. Интегрированных инструментов оценки не существует. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Оценки LLM** — тестирование золотого набора с 10 предварительно загруженными вариантами, охватывающими приветствия, математику, географию, генерацию кода, соответствие JSON, перевод, уценку, отказ от безопасности. +- **4 стратегии сопоставления** — `exact`, `contains`, `regex`, `custom` (функция JS) +- **Тестовый стенд Translator Playground** — пакетное тестирование с несколькими входными данными и ожидаемыми результатами, сравнение между поставщиками. +- **Тестер чата** — полный цикл с визуальным отображением ответов. +- **Живой монитор** — поток всех запросов, проходящих через прокси, в реальном времени.
-📈 15. "I need to scale without losing performance" +📈 15. «Мне нужно масштабироваться без потери производительности» -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +По мере роста объема запросов без кэширования одних и тех же вопросов возникают дублирующие затраты. Без идемпотентности дублирование запросов приводит к отходам обработки. Необходимо соблюдать ограничения по тарифам для каждого поставщика. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Семантический кеш** — двухуровневый кеш (сигнатура + семантика) снижает стоимость и задержку. +- **Request Idempotency** — окно дедупликации 5 с для идентичных запросов. +- **Обнаружение ограничения скорости** — число оборотов в минуту для каждого провайдера, минимальный разрыв и максимальное одновременное отслеживание. +- **Редактируемые ограничения скорости** — настраиваемые значения по умолчанию в меню «Настройки» → «Устойчивость с постоянством». +- **Кэш проверки ключей API** — трехуровневый кеш для повышения производительности. +- **Панель состояния с телеметрией** — задержка p50/p95/p99, статистика кэша, время безотказной работы.
-🤖 16. "I want to control model behavior globally" +🤖 16. «Я хочу глобально контролировать поведение модели» -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Разработчики, которым нужны все ответы на определенном языке, с определенным тоном или которые хотят ограничить количество токенов рассуждения. Настраивать это в каждом инструменте/запросе непрактично. -**How OmniRoute solves it:** +**Как OmniRoute решает эту проблему:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **Внедрение системных подсказок** — глобальное приглашение применяется ко всем запросам. +- **Продуманная проверка бюджета** — контроль распределения токенов для каждого запроса (сквозной, автоматический, пользовательский, адаптивный) +- **6 стратегий маршрутизации** — глобальные стратегии, определяющие распределение запросов. +- **Маршрутизатор с подстановочными знаками** — шаблоны `provider/*` динамически маршрутизируются к любому поставщику. +- **Переключение/включение комбо** — переключение комбо непосредственно с панели управления. +- **Переключение поставщика** — включение/отключение всех подключений к провайдеру одним щелчком мыши. +- **Заблокированные поставщики** — исключить определенных поставщиков из списка `/v1/models`.
+
+🧰 17. «Мне нужны инструменты MCP как первоклассные возможности продукта» + +Многие шлюзы AI предоставляют MCP только как скрытую деталь реализации. Командам нужен видимый и управляемый операционный уровень. + +**Как OmniRoute решает эту проблему:** + +- MCP отображается на панели навигации панели управления и на вкладке протокола конечной точки. +- Отдельная страница управления MCP с процессами, инструментами, объемами работ и аудитом. +- Встроенное краткое руководство по `omniroute --mcp` и адаптации клиентов. + +
+ +
+🧠 18. «Мне нужна оркестровка A2A с путями задач синхронизации и потоковой передачи» + +Рабочие процессы агента требуют как прямых ответов, так и длительного потокового выполнения с контролем жизненного цикла. + +**Как OmniRoute решает эту проблему:** + +- Конечная точка A2A JSON-RPC (`POST /a2a`) с `message/send` и `message/stream`. +- Потоковая передача SSE с распространением состояния терминала +- API жизненного цикла задач для `tasks/get` и `tasks/cancel`. + +
+ +
+🛰️ 19. «Мне нужно реальное состояние процесса MCP, а не угаданный статус» + +Оперативным группам необходимо знать, действительно ли MCP работает, а не только доступен ли API. + +**Как OmniRoute решает эту проблему:** + +- Файл контрольного сигнала времени выполнения с PID, временными метками, транспортом, количеством инструментов и режимом области действия. +- API статуса MCP, объединяющий пульс + недавнюю активность +- Карты состояния пользовательского интерфейса для актуальности процессов, времени безотказной работы и пульса. + +
+ +
+📋 20. «Мне нужно проверяемое выполнение инструмента MCP» + +Когда инструменты изменяют конфигурацию или запускают действия операционной системы, командам необходима судебно-медицинская отслеживаемость. + +**Как OmniRoute решает эту проблему:** + +- Ведение журнала аудита на основе SQLite для вызовов инструментов MCP. +- Фильтры по инструменту, успеху/неуспеху, ключу API и нумерации страниц. +- Таблица аудита панели мониторинга + конечные точки статистики для автоматизации + +
+ +
+🔐 21. «Мне нужны ограниченные разрешения MCP для каждой интеграции» + +Разные клиенты должны иметь минимальный доступ к категориям инструментов. + +**Как OmniRoute решает эту проблему:** + +- 9 детальных областей MCP для контролируемого доступа к инструментам +- Обеспечение соблюдения границ и видимость в пользовательском интерфейсе управления MCP. +- Безопасное положение по умолчанию для рабочих инструментов. + +
+ +
+⚙️ 22. «Мне нужен оперативный контроль без передислокации» + +Командам необходимы быстрые изменения во время выполнения во время инцидентов или событий, связанных с затратами. + +**Как OmniRoute решает эту проблему:** + +- Переключение комбо-активации прямо с панели управления MCP. +- Применение профилей устойчивости из предварительно определенных пакетов политик. +- Сброс состояния автоматического выключателя с той же панели управления. + +
+ +
+🔄 23. «Мне нужна оперативная видимость и отмена жизненного цикла задачи A2A» + +Без прозрачности жизненного цикла инциденты с задачами становится трудно сортировать. + +**Как OmniRoute решает эту проблему:** + +- Список задач/фильтрация по состоянию/навыку с нумерацией страниц +- Детализация метаданных задачи, событий и артефактов. +- Конечная точка отмены задачи и действие пользовательского интерфейса с подтверждением. + +
+ +
+🌊 24. «Мне нужны метрики активного потока для загрузки A2A» + +Рабочие процессы потоковой передачи требуют оперативного понимания параллелизма и живых соединений. + +**Как OmniRoute решает эту проблему:** + +- Счетчики активных потоков интегрированы в статус A2A +- Временная метка последней задачи и количество состояний +- Карты информационной панели A2A для мониторинга операций в реальном времени. + +
+ +
+🪪 25. «Мне нужно стандартное обнаружение агента для клиентов» + +Внешним клиентам и оркестраторам для адаптации необходимы машиночитаемые метаданные. + +**Как OmniRoute решает эту проблему:** + +- Карта агента открыта по адресу `/.well-known/agent.json`. +- Возможности и навыки, отображаемые в пользовательском интерфейсе управления. +- API статуса A2A включает метаданные обнаружения для автоматизации. + +
+ +
+🧭 26. «Мне нужна возможность обнаружения протокола в UX продукта» + +Если пользователи не могут обнаружить поверхности протокола, качество внедрения и поддержки снижается. + +**Как OmniRoute решает эту проблему:** + +- Записи на боковой панели для MCP и A2A. +- Вкладка «Протоколы» на странице конечной точки с быстрым запуском и статусом. +- Ссылки из обзора на специальные панели управления. + +
+ +
+🧪 27. «Мне нужна сквозная проверка протокола с реальными клиентами» + +Пробных тестов недостаточно для проверки совместимости протокола перед выпуском. + +**Как OmniRoute решает эту проблему:** + +- Пакет E2E, который загружает приложение и использует настоящий клиентский транспорт MCP SDK. +- Клиент A2A тестирует потоки обнаружения, отправки, потоковой передачи, получения и отмены. +- Перекрестная проверка утверждений с помощью API-интерфейсов аудита MCP и задач A2A. + +
+ +
+📡 28. «Мне нужна унифицированная наблюдаемость на всех интерфейсах» + +Разделение наблюдаемости по протоколам создает «слепые зоны» и увеличивает MTTR. + +**Как OmniRoute решает эту проблему:** + +- Унифицированные дашборды/логи/аналитика в одном продукте +- Здоровье + аудит + телеметрия запросов на уровнях OpenAI, MCP и A2A. +- Операционные API для статуса и автоматизации + +
+ +
+💼 29. «Мне нужна одна среда выполнения для прокси + инструментов + оркестровки агентов» + +Запуск множества отдельных служб увеличивает эксплуатационные расходы и количество видов сбоев. + +**Как OmniRoute решает эту проблему:** + +- OpenAI-совместимый прокси, сервер MCP и сервер A2A в одном стеке +- Общая аутентификация, устойчивость, хранилище данных и наблюдаемость. +- Согласованная модель политики на всех поверхностях взаимодействия. + +
+ +
+🚀 30. «Мне нужно реализовать агентские рабочие процессы без разрастания связующего кода» + +Команды теряют скорость при объединении нескольких специальных сервисов и сценариев. + +**Как OmniRoute решает эту проблему:** + +- Единая стратегия конечных точек для клиентов и агентов +- Встроенные пользовательские интерфейсы управления протоколами и пути проверки дыма. +- Готовые к работе основы (безопасность, ведение журналов, отказоустойчивость, резервное копирование) + +
+ +### Примеры сборников сценариев (интегрированные варианты использования) + +**Пособие А: максимальное использование платной подписки + дешевое резервное копирование** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Пособие Б: стек кодирования с нулевой стоимостью** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Пособие C: Всегда работающая резервная цепочка 24 часа в сутки, 7 дней в неделю** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Сборник D: Операции агента с помощью MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Быстрый старт **1. Установите глобально:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Настольное Приложение — Оффлайн и Всегда Активно +## 🖥️ > 🆕 **НОВИНКА!** OmniRoute теперь доступен как **нативное настольное приложение** для Windows, macOS и Linux. @@ -696,66 +971,26 @@ Combo: "my-coding-stack"
---- +## 🧪 Оценки (Evals) -## 🎯 Сценарии использования +OmniRoute включает встроенный фреймворк оценки для тестирования качества ответов LLM по golden set. Доступ через **Analytics → Evals** в dashboard. -### Сценарий 1: «У меня подписка Claude Pro» +### Встроенный Set -**Проблема:** Квота истекает неиспользованной, лимиты скорости во время интенсивного программирования +Предзагруженный «OmniRoute Golden Set» содержит 10 тестов: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (используйте подписку полностью) - 2. glm/glm-4.7 (дешёвый бэкап при исчерпании квоты) - 3. if/kimi-k2-thinking (бесплатный аварийный fallback) +- Приветствия, математика, география, генерация кода +- Соответствие формату JSON, перевод, markdown +- Отказ от небезопасного контента, подсчёт, булева логика -Месячная стоимость: $20 (подписка) + ~$5 (бэкап) = $25 итого -vs. $20 + упирание в лимиты = разочарование -``` +### Стратегии оценки -### Сценарий 2: «Хочу нулевую стоимость» - -**Проблема:** Не может позволить подписки, нужен надёжный AI для программирования - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K бесплатно/мес) - 2. if/kimi-k2-thinking (неограниченно бесплатно) - 3. qw/qwen3-coder-plus (неограниченно бесплатно) - -Месячная стоимость: $0 -Качество: Модели готовые к продакшену -``` - -### Сценарий 3: «Мне нужно программировать 24/7, без перерывов» - -**Проблема:** Дедлайны, не может позволить простой - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (лучшее качество) - 2. cx/gpt-5.2-codex (вторая подписка) - 3. glm/glm-4.7 (дешёвый, ежедневный сброс) - 4. minimax/MiniMax-M2.1 (самый дешёвый, сброс 5ч) - 5. if/kimi-k2-thinking (бесплатно неограниченно) - -Результат: 5 уровней fallback = нулевой простой -``` - -### Сценарий 4: «Хочу БЕСПЛАТНЫЙ AI в OpenClaw» - -**Проблема:** Нужен AI-ассистент в мессенджерах, полностью бесплатно - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (неограниченно бесплатно) - 2. if/minimax-m2.1 (неограниченно бесплатно) - 3. if/kimi-k2-thinking (неограниченно бесплатно) - -Месячная стоимость: $0 -Доступ через: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Стратегия | Описание | Пример | +| ---------- | ----------------------------------------------------- | -------------------------------- | +| `exact` | Вывод должен совпадать точно | `"4"` | +| `contains` | Вывод должен содержать подстроку (без учёта регистра) | `"Paris"` | +| `regex` | Вывод должен соответствовать regex-паттерну | `"1.*2.*3"` | +| `custom` | Пользовательская JS-функция возвращает true/false | `(output) => output.length > 10` | --- @@ -1039,29 +1274,6 @@ Dashboard → CLI Tools → OpenClaw → Выбрать модель → При --- -## 🧪 Оценки (Evals) - -OmniRoute включает встроенный фреймворк оценки для тестирования качества ответов LLM по golden set. Доступ через **Analytics → Evals** в dashboard. - -### Встроенный Golden Set - -Предзагруженный «OmniRoute Golden Set» содержит 10 тестов: - -- Приветствия, математика, география, генерация кода -- Соответствие формату JSON, перевод, markdown -- Отказ от небезопасного контента, подсчёт, булева логика - -### Стратегии оценки - -| Стратегия | Описание | Пример | -| ---------- | ----------------------------------------------------- | -------------------------------- | -| `exact` | Вывод должен совпадать точно | `"4"` | -| `contains` | Вывод должен содержать подстроку (без учёта регистра) | `"Paris"` | -| `regex` | Вывод должен соответствовать regex-паттерну | `"1.*2.*3"` | -| `custom` | Пользовательская JS-функция возвращает true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Устранение неполадок
@@ -1117,7 +1329,7 @@ OmniRoute включает встроенный фреймворк оценки --- -## 🛠️ Технологический стек +## 🛠️ - **Runtime**: Node.js 20+ - **Язык**: TypeScript 5.9 — **100% TypeScript** в `src/` и `open-sse/` (v1.0.6) @@ -1148,17 +1360,7 @@ OmniRoute включает встроенный фреймворк оценки --- -## 📧 Поддержка - -> 💬 **Присоединяйтесь к сообществу!** [Группа WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Получайте помощь, делитесь советами и оставайтесь в курсе. - -- **Сайт**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Группа сообщества](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Оригинальный проект**: [9router от decolua](https://github.com/decolua/9router) - ---- +## 🗺️ ## 👥 Участники diff --git a/README.sk.md b/README.sk.md index dee388513e..c1a620c1ce 100644 --- a/README.sk.md +++ b/README.sk.md @@ -110,6 +110,35 @@ _Pripojte akýkoľvek nástroj IDE alebo CLI poháňaný AI cez OmniRoute – be --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Prečo OmniRoute? **Prestaňte plytvať peniazmi a dosahovať limity:** @@ -128,6 +157,18 @@ _Pripojte akýkoľvek nástroj IDE alebo CLI poháňaný AI cez OmniRoute – be --- +## 📧 Podpora + +> 💬 **Pripojte sa k našej komunite!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Získajte pomoc, zdieľajte tipy a buďte informovaní. + +- **Web**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Problémy**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Pôvodný projekt**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Ako to funguje ``` @@ -157,263 +198,500 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Čo OmniRoute rieši — 30 bodov skutočnej bolesti a prípadov použitia -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Každý vývojár, ktorý používa nástroje AI, čelí týmto problémom denne.** OmniRoute bol vytvorený tak, aby ich všetky vyriešil – od prekročenia nákladov po regionálne bloky, od prerušených tokov OAuth po operácie protokolov a pozorovateľnosť podniku.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. „Platím za drahé predplatné, ale stále ma prerušujú limity“ -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Vývojári platia za Claude Pro, Codex Pro alebo GitHub Copilot 20 – 200 dolárov mesačne. Aj pri platení má kvóta strop – 5 hodín používania, týždenné limity alebo limity za minútu. Počas relácie kódovania poskytovateľ prestane reagovať a vývojár stráca tok a produktivitu. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Inteligentný 4-úrovňový záložný systém** – Ak sa vyčerpá kvóta predplatného, automaticky sa presmeruje na kľúč API → Lacné → Zadarmo s nulovým manuálnym zásahom +- **Sledovanie kvóty v reálnom čase** – Zobrazuje spotrebu tokenov v reálnom čase s resetovaným odpočítavaním (5 hodín, denne, týždenne) + – **Podpora viacerých účtov** – Viacero účtov na poskytovateľa s automatickým opakovaním – keď sa jeden minie, prepne sa na ďalší + – **Vlastné kombá** – Prispôsobiteľné záložné reťazce so 6 stratégiami vyvažovania (najskôr vyplniť, opakovane, P2C, náhodné, najmenej používané, nákladovo optimalizované) +- **Codex Business Quotas** — Monitorovanie kvót pracovného priestoru pre firmy/tím priamo na paneli
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. „Potrebujem použiť viacerých poskytovateľov, ale každý má iné API“ -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI používa jeden formát, Claude (Anthropic) iný a Gemini ďalší. Ak chce vývojár testovať modely od rôznych poskytovateľov alebo medzi nimi záložné riešenie, musí prekonfigurovať súpravy SDK, zmeniť koncové body, vysporiadať sa s nekompatibilnými formátmi. Vlastní poskytovatelia (FriendLI, NIM) majú neštandardné modelové koncové body. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Unified Endpoint** – Jediný `http://localhost:20128/v1` slúži ako proxy pre všetkých 36+ poskytovateľov +- **Formátový preklad** — Automatický a transparentný: OpenAI ↔ Claude ↔ Gemini ↔ Responses API + – **Dezinfekcia odozvy** – Odstráni neštandardné polia (`x_groq`, `usage_breakdown`, `service_tier`), ktoré porušujú OpenAI SDK v1.83+ +- **Normalizácia rolí** – Konvertuje `developer` → `system` pre poskytovateľov, ktorí nie sú OpenAI; `system` → `user` pre GLM/ERNIE + – **Think Tag Extraction** – Extrahuje bloky `` z modelov ako DeepSeek R1 do štandardizovaných `reasoning_content` +- **Štruktúrovaný výstup pre Gemini** — `json_schema` → automatická konverzia `responseMimeType`/`responseSchema` +- **`stream` predvolene je `false`** — Zosúladí sa so špecifikáciou OpenAI, čím sa zabráni neočakávanému SSE v súpravách Python/Rust/Go SDK
-🌐 3. "My AI provider blocks my region/country" +🌐 3. „Môj poskytovateľ AI blokuje môj región/krajinu“ -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Poskytovatelia ako OpenAI/Codex blokujú prístup z určitých geografických oblastí. Používatelia dostanú chyby ako `unsupported_country_region_territory` počas pripojení OAuth a API. To je frustrujúce najmä pre vývojárov z rozvojových krajín. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **Konfigurácia proxy servera na troch úrovniach** – Konfigurovateľný server proxy na 3 úrovniach: globálny (celá prevádzka), podľa jednotlivých poskytovateľov (iba jeden poskytovateľ) a podľa pripojenia/kľúča +- **Farebné odznaky proxy** — Vizuálne indikátory: 🢢 globálny proxy, 🟡 proxy poskytovateľa, 🔵 proxy pripojenia, vždy zobrazuje IP + – **Výmena tokenov OAuth cez proxy** – tok OAuth prechádza aj cez proxy, čím sa rieši `unsupported_country_region_territory` +- **Testy pripojenia cez proxy** – Testy pripojenia používajú nakonfigurovaný proxy (už žiadne priame obchádzanie) +- **Podpora SOCKS5** — Úplná podpora proxy SOCKS5 pre odchádzajúce smerovanie +- **TLS Fingerprint Spoofing** – Odtlačok prsta TLS podobný prehliadaču cez `wreq-js` na obídenie detekcie robotov
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. „Chcem použiť AI na kódovanie, ale nemám peniaze“ -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Nie každý môže platiť 20 – 200 $ mesačne za predplatné AI. Študenti, vývojári z rozvíjajúcich sa krajín, fanúšikovia a nezávislí pracovníci potrebujú prístup ku kvalitným modelom za nulové náklady. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Zabudovaní poskytovatelia bezplatnej úrovne** — Natívna podpora pre 100 % bezplatných poskytovateľov: iFlow (8 neobmedzených modelov), Qwen (3 neobmedzené modely), Kiro (Claude zdarma), Gemini CLI (180 000/mesiac zdarma) +- **Len bezplatné kombá** — Reťaz `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = 0 USD/mesiac s nulovými prestojmi +- **Bezplatné kredity NVIDIA NIM** – integrovaných 1 000 bezplatných kreditov +- **Cost Optimized Strategy** – Stratégia smerovania, ktorá automaticky vyberie najlacnejšieho dostupného poskytovateľa
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. „Potrebujem chrániť svoju bránu AI pred neoprávneným prístupom“ -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Pri vystavení brány AI do siete (LAN, VPS, Docker) môže ktokoľvek s adresou spotrebovať tokeny/kvótu vývojára. Bez ochrany sú rozhrania API náchylné na nesprávne použitie, rýchle vloženie a zneužitie. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +– **Správa kľúčov API** – Generovanie, rotácia a rozsah podľa poskytovateľa s vyhradenou stránkou `/dashboard/api-manager` +– **Povolenia na úrovni modelu** – Obmedzenie kľúčov API na konkrétne modely (`openai/*`, vzory zástupných znakov) s prepínačom Povoliť všetko/Obmedziť +– **API Endpoint Protection** – Vyžadovať kľúč pre `/v1/models` a blokovať konkrétnych poskytovateľov zo zoznamu + +- **Auth Guard + ochrana CSRF** - Všetky trasy na dashboarde sú chránené middlevérom `withAuth` + tokenmi CSRF +- **Rate Limiter** — Obmedzenie rýchlosti na IP pomocou konfigurovateľných okien +- **IP Filtering** — Zoznam povolených/blokovaných pre riadenie prístupu +- **Prompt Injection Guard** – Dezinfekcia proti škodlivým vzorom výzvy +- **Šifrovanie AES-256-GCM** — Prihlasovacie údaje sú v pokoji zašifrované
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. „Môj poskytovateľ zlyhal a stratil som tok kódovania“ -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Poskytovatelia AI sa môžu stať nestabilnými, vrátiť chyby 5xx alebo dosiahnuť dočasné limity sadzieb. Ak vývojár závisí od jedného poskytovateľa, bude prerušený. Bez ističov môžu opakované pokusy zlyhať aplikáciu. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Istič pre každého poskytovateľa** — Automatické otváranie/zatváranie s konfigurovateľnými prahmi a chladením (zatvorené/otvorené/polootvorené) +- **Exponenciálne stiahnutie** — Postupné oneskorenie opakovania +- **Anti-Thundering Herd** - ochrana Mutex + semafor proti súbežným opakovaným búrkam +- **Combo Fallback Chains** – Ak primárny poskytovateľ zlyhá, automaticky prepadne reťazcom bez akéhokoľvek zásahu +- **Combo Circuit Breaker** – Automaticky deaktivuje zlyhávajúcich poskytovateľov v rámci kombinovaného reťazca + – **Health Dashboard** – Monitorovanie dostupnosti, stavy ističov, blokovania, štatistiky vyrovnávacej pamäte, latencia p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. „Konfigurácia každého nástroja AI je únavná a opakovaná“ -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Vývojári používajú Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Každý nástroj potrebuje inú konfiguráciu (API endpoint, kľúč, model). Prekonfigurovanie pri zmene poskytovateľa alebo modelu je strata času. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **CLI Tools Dashboard** – Vyhradená stránka s nastavením jedným kliknutím pre Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline + – **GitHub Copilot Config Generator** – Generuje `chatLanguageModels.json` pre kód VS s hromadným výberom modelu +- **Sprievodca registráciou** – Sprievodca nastavením v 4 krokoch pre začínajúcich používateľov + – **Jeden koncový bod, všetky modely** – Nakonfigurujte `http://localhost:20128/v1` raz a získajte prístup k viac ako 36 poskytovateľom
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. „Správa tokenov OAuth od viacerých poskytovateľov je peklo“ -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot – všetky používajú OAuth 2.0 s tokenmi, ktorých platnosť sa končí. Vývojári sa musia neustále znovu overovať, riešiť `client_secret is missing`, `redirect_uri_mismatch` a zlyhania na vzdialených serveroch. Obzvlášť problematické je OAuth na LAN/VPS. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Automatická obnova tokenov** – Tokeny OAuth sa pred vypršaním platnosti obnovujú na pozadí +- **Vstavaný OAuth 2.0 (PKCE)** – Automatický tok pre Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow + – **Multi-Auth OAuth** – Viaceré účty na poskytovateľa prostredníctvom extrakcie tokenov JWT/ID +- **Oprava OAuth LAN/Remote** — Detekcia súkromnej adresy IP pre `redirect_uri` + manuálny režim adresy URL pre vzdialené servery +- **OAuth Behind Nginx** - Používa `window.location.origin` na reverznú kompatibilitu proxy + – **Príručka vzdialeného OAuth** – Podrobný sprievodca povereniami Google Cloud na VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "Neviem, koľko míňam alebo kde" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Vývojári využívajú viacerých platených poskytovateľov, ale nemajú jednotný pohľad na výdavky. Každý poskytovateľ má svoj vlastný informačný panel fakturácie, ale neexistuje žiadne konsolidované zobrazenie. Neočakávané náklady sa môžu nahromadiť. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +– **Informačný panel analýzy nákladov** – sledovanie nákladov na token a správa rozpočtu podľa poskytovateľa + +- **Obmedzenia rozpočtu na úroveň** – Strop výdavkov na úroveň, ktorý spúšťa automatické záložné právo +- **Konfigurácia cien za model** – Konfigurovateľné ceny za model +- **Štatistiky používania na kľúč API** – Počet žiadostí a časová pečiatka posledného použitia na kľúč + – **Panel Analytics** – štatistické karty, graf používania modelu, tabuľka poskytovateľov s mierami úspešnosti a latenciou
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. „Nedokážem diagnostikovať chyby a problémy vo volaniach AI“ -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Keď hovor zlyhá, vývojár nevie, či to bol limit sadzby, vypršaný token, nesprávny formát alebo chyba poskytovateľa. Fragmentované protokoly cez rôzne terminály. Bez pozorovateľnosti je ladenie metódou pokus-omyl. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +– **Panel jednotných protokolov** – 4 karty: Protokoly žiadostí, Protokoly proxy, Protokoly auditu, Konzola + +- **Console Log Viewer** — Prehliadač v štýle terminálu v reálnom čase s farebne odlíšenými úrovňami, automatickým posúvaním, vyhľadávaním a filtrovaním +- **Proxy protokoly SQLite** — Trvalé protokoly, ktoré prežijú reštart servera +- **Translator Playground** – 4 režimy ladenia: Playground (preklad formátu), Chat Tester (spiatočný), Test Bench (dávka), Live Monitor (v reálnom čase) + – **Požiadať o telemetriu** – latencia p50/p95/p99 + sledovanie X-request-Id + – **Protokolovanie založené na súboroch s rotáciou** – Konzolový zachytávač zachytáva všetko do protokolu JSON s rotáciou na základe veľkosti
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. „Nasadenie a údržba brány je zložitá“ -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Inštalácia, konfigurácia a údržba AI proxy v rôznych prostrediach (lokálne, VPS, Docker, cloud) je náročná na prácu. Problémy ako pevne zakódované cesty, `EACCES` v adresároch, konflikty portov a zostavy naprieč platformami zvyšujú trenie. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **Globálna inštalácia npm** — `npm install -g omniroute && omniroute` — hotovo +- **Docker Multi-Platform** – natívne AMD64 + ARM64 (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Profily Docker Compose** — `base` (bez nástrojov CLI) a `cli` (s Claude Code, Codex, OpenClaw) +- **Electron Desktop App** – natívna aplikácia pre Windows/macOS/Linux so systémovou lištou, automatickým spustením, offline režimom +- **Split-Port Mode** – API a Dashboard na samostatných portoch pre pokročilé scenáre (reverzný proxy, kontajnerová sieť) +- **Cloud Sync** — Synchronizácia konfigurácie medzi zariadeniami cez Cloudflare Workers +- **DB Backups** — Automatické zálohovanie, obnovenie, export a import všetkých nastavení
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. „Rozhranie je len v angličtine a môj tím nehovorí po anglicky“ -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Tímy v neanglicky hovoriacich krajinách, najmä v Latinskej Amerike, Ázii a Európe, zápasia s rozhraním iba v angličtine. Jazykové bariéry znižujú prijatie a zvyšujú chyby v konfigurácii. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Dashboard i18n — 30 jazykov** — Všetkých 500+ kláves preložených vrátane arabčiny, bulharčiny, dánčiny, nemčiny, španielčiny, fínčiny, francúzštiny, hebrejčiny, hindčiny, maďarčiny, indonézštiny, taliančiny, japončiny, kórejčiny, malajčiny, holandčiny, nórčiny, poľštiny, portugalčiny (PT/BR), rumunčiny, ruštiny, slovenčiny, švédčiny, thajčiny, ukrajinčiny, vietnamčiny, angličtiny +- **Podpora RTL** — Podpora sprava doľava pre arabčinu a hebrejčinu +- **Viacjazyčné README** — 30 kompletných prekladov dokumentácie +- **Language Selector** – ikona zemegule v hlavičke pre prepínanie v reálnom čase
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. „Potrebujem viac ako chat – potrebujem vloženie, obrázky, zvuk“ -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +AI nie je len dokončenie chatu. Vývojári potrebujú generovať obrázky, prepisovať zvuk, vytvárať vloženia pre RAG, meniť hodnotenie dokumentov a moderovať obsah. Každé API má iný koncový bod a formát. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Vloženie** — `/v1/embeddings` so 6 poskytovateľmi a 9+ modelmi +- **Generácia obrazu** — `/v1/images/generations` s 10 poskytovateľmi a 20+ modelmi (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Text-to-Video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) a SD WebUI +- **Text-to-Music** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Prepis zvuku** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Text-to-Speech** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3 a + existujúci poskytovatelia +- **Moderácie** — `/v1/moderations` — Kontroly bezpečnosti obsahu +- **Zmena poradia** — `/v1/rerank` — Zmena poradia relevantnosti dokumentu +- **Responses API** – plná podpora `/v1/responses` pre kódex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. „Nemám možnosť testovať a porovnávať kvalitu medzi modelmi“ -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Vývojári chcú vedieť, ktorý model je pre ich prípad použitia najlepší – kód, preklad, zdôvodnenie – ale manuálne porovnávanie je pomalé. Neexistujú žiadne integrované nástroje hodnotenia. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Hodnotenia LLM** – testovanie zlatej sady s 10 predinštalovanými prípadmi zahŕňajúcimi pozdravy, matematiku, geografiu, generovanie kódu, súlad s JSON, preklad, označenie, odmietnutie bezpečnosti +- **4 stratégie zhody** — `exact`, `contains`, `regex`, `custom` (funkcia JS) +- **Testovacia lavica pre prekladateľské ihrisko** – dávkové testovanie s viacerými vstupmi a očakávanými výstupmi, porovnanie medzi poskytovateľmi +- **Chat Tester** – celý spiatočný výlet s vykresľovaním vizuálnej odozvy +- **Live Monitor** – tok všetkých požiadaviek prechádzajúcich cez server proxy v reálnom čase
-📈 15. "I need to scale without losing performance" +📈 15. „Potrebujem škálovať bez straty výkonu“ -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +Keďže objem žiadostí rastie, bez ukladania rovnakých otázok do vyrovnávacej pamäte vznikajú duplicitné náklady. Bez idempotencie duplikát požaduje spracovanie odpadu. Musia sa dodržiavať limity sadzieb na poskytovateľa. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Sémantická vyrovnávacia pamäť** – Dvojvrstvová vyrovnávacia pamäť (podpis + sémantická) znižuje náklady a latenciu +- **Idempotencia požiadavky** – 5-sekundové deduplikačné okno pre identické požiadavky + – **Detekcia limitu rýchlosti** – RPM, minimálna medzera a maximálne súbežné sledovanie jednotlivých poskytovateľov +- **Upraviteľné limity frekvencie** – Konfigurovateľné predvolené hodnoty v Nastaveniach → Odolnosť s perzistenciou +- **Cache na overenie kľúča API** — 3-vrstvová vyrovnávacia pamäť pre produkčný výkon + – **Panel zdravia s telemetriou** – latencia p50/p95/p99, štatistiky vyrovnávacej pamäte, doba prevádzky
-🤖 16. "I want to control model behavior globally" +🤖 16. „Chcem globálne ovládať správanie modelu“ -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Vývojári, ktorí chcú všetky odpovede v konkrétnom jazyku, so špecifickým tónom alebo chcú obmedziť tokeny uvažovania. Konfigurovať to v každom nástroji/požiadavke je nepraktické. -**How OmniRoute solves it:** +**Ako to rieši OmniRoute:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **System Prompt Injection** – Globálna výzva aplikovaná na všetky požiadavky + – **Thinking Budget Validation** – Zdôvodnenie riadenia prideľovania tokenov na žiadosť (priechodné, automatické, vlastné, adaptívne) +- **6 stratégií smerovania** — Globálne stratégie, ktoré určujú spôsob distribúcie požiadaviek +- **Wildcard Router** — Vzory `provider/*` smerujú dynamicky k akémukoľvek poskytovateľovi +- **Prepínač povoliť/zakázať kombo** — Prepínajte kombinácie priamo z ovládacieho panela +- **Provider Toggle** — Povolenie/zakázanie všetkých pripojení pre poskytovateľa jedným kliknutím + – **Blokovaní poskytovatelia** – vylúčte konkrétnych poskytovateľov zo zoznamu `/v1/models`
+
+🧰 17. "Potrebujem nástroje MCP ako prvotriedne možnosti produktu" + +Mnohé brány AI odhaľujú MCP iba ako skrytý detail implementácie. Tímy potrebujú viditeľnú a spravovateľnú operačnú vrstvu. + +**Ako to rieši OmniRoute:** + +- MCP sa zobrazí na navigačnom paneli a na karte protokolu koncového bodu +- Vyhradená stránka správy MCP s procesmi, nástrojmi, rozsahmi a auditom +- Vstavaný rýchly štart pre `omniroute --mcp` a registráciu klienta + +
+ +
+🧠 18. "Potrebujem orchestráciu A2A s cestami synchronizácie + streamovania" + +Pracovné postupy agentov vyžadujú priame odpovede a dlhotrvajúce streamované vykonávanie s kontrolou životného cyklu. + +**Ako to rieši OmniRoute:** + +- Koncový bod A2A JSON-RPC (`POST /a2a`) s `message/send` a `message/stream` +- SSE streaming so šírením koncového stavu +- Rozhrania API životného cyklu úloh pre `tasks/get` a `tasks/cancel` + +
+ +
+🛰️ 19. „Potrebujem skutočné zdravie procesu MCP, nie uhádnutý stav“ + +Operačné tímy potrebujú vedieť, či je MCP skutočne nažive, nielen to, či je dostupné API. + +**Ako to rieši OmniRoute:** + +- Súbor srdcového tepu za behu s PID, časovými pečiatkami, transportom, počtom nástrojov a režimom rozsahu +- Stavové rozhranie MCP API, ktoré kombinuje srdcový tep + nedávnu aktivitu +- Stavové karty používateľského rozhrania pre sviežosť procesu / dostupnosti / tepu + +
+ +
+📋 20. "Potrebujem auditovateľné spustenie nástroja MCP" + +Keď nástroje mutujú konfiguráciu alebo spúšťajú akcie operácií, tímy potrebujú forenznú sledovateľnosť. + +**Ako to rieši OmniRoute:** + +- Záznamy auditu podporované SQLite pre volania nástrojov MCP +- Filtre podľa nástroja, úspechu/neúspechu, kľúča API a stránkovania +- Tabuľka auditu palubnej dosky + štatistické koncové body pre automatizáciu + +
+ +
+🔐 21. "Potrebujem povolenia MCP v rozsahu na jednu integráciu" + +Rôzni klienti by mali mať najmenej privilegovaný prístup ku kategóriám nástrojov. + +**Ako to rieši OmniRoute:** + +- 9 zrnitých rozsahov MCP pre kontrolovaný prístup k nástrojom +- Presadzovanie rozsahu a viditeľnosť v používateľskom rozhraní správy MCP +- Bezpečná východisková poloha pre prevádzkové nástroje + +
+ +
+⚙️ 22. „Potrebujem prevádzkové ovládacie prvky bez premiestňovania“ + +Tímy potrebujú rýchle zmeny runtime počas incidentov alebo nákladových udalostí. + +**Ako to rieši OmniRoute:** + +- Aktivácia komba prepínača priamo z ovládacieho panela MCP +- Použite profily odolnosti z preddefinovaných balíkov politík +- Resetujte stav ističa z rovnakého ovládacieho panela + +
+ +
+🔄 23. „Potrebujem viditeľnosť a zrušenie životného cyklu úlohy A2A“ + +Bez viditeľnosti životného cyklu sa incidenty úloh ťažko triedia. + +**Ako to rieši OmniRoute:** + +- Zoznam úloh / filtrovanie podľa stavu / zručnosti so stránkovaním +- Rozbalenie metadát úloh, udalostí a artefaktov +- Koncový bod zrušenia úlohy a akcia používateľského rozhrania s potvrdením + +
+ +
+🌊 24. „Potrebujem aktívne metriky streamu pre načítanie A2A“ + +Streamovanie pracovných tokov vyžaduje operačný prehľad o súbežnosti a živých pripojeniach. + +**Ako to rieši OmniRoute:** + +- Aktívne počítadlá toku integrované do stavu A2A +- Časová pečiatka poslednej úlohy a počet jednotlivých štátov +- Karty palubnej dosky A2A na monitorovanie operácií v reálnom čase + +
+ +
+🪪 25. "Potrebujem štandardné vyhľadávanie agentov pre klientov" + +Externí klienti a orchestrátori potrebujú strojovo čitateľné metadáta na integráciu. + +**Ako to rieši OmniRoute:** + +- Karta agenta vystavená na `/.well-known/agent.json` +- Schopnosti a zručnosti zobrazené v používateľskom rozhraní správy +- API stavu A2A obsahuje metaúdaje zisťovania pre automatizáciu + +
+ +
+🧭 26. "Potrebujem zistiteľnosť protokolu v UX produktu" + +Ak používatelia nemôžu objaviť povrchy protokolov, kvalita prijatia a podpory klesá. + +**Ako to rieši OmniRoute:** + +- Položky na bočnom paneli pre MCP a A2A +- Koncový bod Karta Protokoly s rýchlym spustením a stavom +- Odkazy z prehľadu na špecializované riadiace panely + +
+ +
+🧪 27. "Potrebujem komplexné overenie protokolu so skutočnými klientmi" + +Falošné testy nestačia na overenie kompatibility protokolu pred vydaním. + +**Ako to rieši OmniRoute:** + +- E2E balík, ktorý spúšťa aplikáciu a využíva skutočný prenos klienta MCP SDK +- Klient A2A testuje toky zisťovania, odosielania, streamovania, získavania a rušenia +- Krížová kontrola tvrdení proti auditu MCP a API úloh A2A + +
+ +
+📡 28. „Potrebujem jednotnú pozorovateľnosť naprieč všetkými rozhraniami“ + +Rozdelenie pozorovateľnosti podľa protokolu vytvára slepé miesta a dlhšie MTTR. + +**Ako to rieši OmniRoute:** + +- Zjednotené informačné panely / protokoly / analýzy v jednom produkte +- Zdravie + audit + telemetria požiadaviek cez vrstvy OpenAI, MCP a A2A +- Operačné API pre stav a automatizáciu + +
+ +
+💼 29. "Potrebujem jeden runtime pre proxy + nástroje + orchestráciu agentov" + +Prevádzka mnohých samostatných služieb zvyšuje prevádzkové náklady a spôsoby zlyhania. + +**Ako to rieši OmniRoute:** + +- Proxy, server MCP a server A2A kompatibilný s OpenAI v jednom zásobníku +- Zdieľaná autentifikácia, odolnosť, ukladanie údajov a pozorovateľnosť +- Konzistentný model politiky na všetkých interakčných plochách + +
+ +
+🚀 30. „Potrebujem odoslať agentské pracovné postupy bez roztiahnutia kódu lepidla“ + +Tímy strácajú rýchlosť pri spájaní viacerých ad-hoc služieb a skriptov. + +**Ako to rieši OmniRoute:** + +- Jednotná stratégia koncových bodov pre klientov a agentov +- Vstavané používateľské rozhrania na správu protokolov a cesty overovania dymu +- Základy pripravené na výrobu (zabezpečenie, protokolovanie, odolnosť, zálohovanie) + +
+ +### Príklady príručiek (integrované prípady použitia) + +**Príručka A: Maximalizujte platené predplatné + lacné zálohovanie** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Príručka B: Balík kódovania s nulovými nákladmi** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Príručka C: 24/7 vždy zapnutý záložný reťazec** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Príručka D: Operačný program agenta s MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Rýchly štart **1. Inštalovať globálne:** @@ -506,7 +784,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -716,66 +994,26 @@ OmniRoute obsahuje výkonné vstavané ihrisko pre prekladateľov so **4 režima
---- +## 🧪 Hodnotenia (Evals) -## 🎯 Prípady použitia +OmniRoute obsahuje vstavaný hodnotiaci rámec na testovanie kvality odozvy LLM oproti zlatému súboru. Prístup k nej získate cez **Analytics → Evals** na hlavnom paneli. -### Prípad 1: „Mám predplatné Claude Pro“ +### Vstavaná zlatá súprava -**Problém:** Platnosť kvóty vyprší nevyužitá, obmedzenia sadzieb počas náročného kódovania +Predinštalovaná sada „OmniRoute Golden Set“ obsahuje 10 testovacích prípadov, ktoré zahŕňajú: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Pozdravy, matematika, geografia, generovanie kódu +- Súlad s formátom JSON, preklad, zníženie +- Bezpečnostné odmietnutie (škodlivý obsah), počítanie, booleovská logika -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Stratégie hodnotenia -### Prípad 2: „Chcem nulové náklady“ - -**Problém:** Nemôžem si dovoliť predplatné, potrebujem spoľahlivé kódovanie AI - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Prípad 3: „Potrebujem kódovanie 24/7, žiadne prerušenia“ - -**Problém:** Termíny, nemôžem si dovoliť prestoje - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Prípad 4: „Chcem AI ZDARMA v OpenClaw“ - -**Problém:** Potrebujete asistenta AI v aplikáciách na odosielanie správ, úplne zadarmo - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Stratégia | Popis | Príklad | +| ---------- | ---------------------------------------------------------------------- | -------------------------------- | +| `exact` | Výstup sa musí presne zhodovať | `"4"` | +| `contains` | Výstup musí obsahovať podreťazec (nerozlišujú sa malé a veľké písmená) | `"Paris"` | +| `regex` | Výstup musí zodpovedať vzoru regulárneho výrazu | `"1.*2.*3"` | +| `custom` | Vlastná funkcia JS vracia true/false | `(output) => output.length > 10` | --- @@ -1059,29 +1297,6 @@ Settings → API Configuration: --- -## 🧪 Hodnotenia (Evals) - -OmniRoute obsahuje vstavaný hodnotiaci rámec na testovanie kvality odozvy LLM oproti zlatému súboru. Prístup k nej získate cez **Analytics → Evals** na hlavnom paneli. - -### Vstavaná zlatá súprava - -Predinštalovaná sada „OmniRoute Golden Set“ obsahuje 10 testovacích prípadov, ktoré zahŕňajú: - -- Pozdravy, matematika, geografia, generovanie kódu -- Súlad s formátom JSON, preklad, zníženie -- Bezpečnostné odmietnutie (škodlivý obsah), počítanie, booleovská logika - -### Stratégie hodnotenia - -| Stratégia | Popis | Príklad | -| ---------- | ---------------------------------------------------------------------- | -------------------------------- | -| `exact` | Výstup sa musí presne zhodovať | `"4"` | -| `contains` | Výstup musí obsahovať podreťazec (nerozlišujú sa malé a veľké písmená) | `"Paris"` | -| `regex` | Výstup musí zodpovedať vzoru regulárneho výrazu | `"1.*2.*3"` | -| `custom` | Vlastná funkcia JS vracia true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Riešenie problémov
@@ -1133,13 +1348,13 @@ Predinštalovaná sada „OmniRoute Golden Set“ obsahuje 10 testovacích príp - OmniRoute v1.0.6+ zahŕňa záložné overenie prostredníctvom dokončenia chatu - Uistite sa, že základná adresa URL obsahuje príponu `/v1` -### 🔐 OAuth em Servidor Remoto (Vzdialené nastavenie OAuth) +### 🔐 OAuth > **⚠️ DÔLEŽITÉ pre používateľov s OmniRoute a diaľkovým ovládaním VPS/Docker/servidor** -### Od OAuth do Antigravity / Gemini CLI falha em servidores remotos? +### OAuth Osvedčuje **Antigravity** a **Gemini CLI** používame **Google OAuth 2.0** ako autentifikáciu. O Google exige que a `redirect_uri` usada no fluxo OAuth saja **exatamente** uma das URI pre-kadastradas no Google Cloud Console to use. @@ -1228,7 +1443,7 @@ Ak chcete získať prístup k dôvere, môžete použiť **príručku URL**: --- -## 🛠️ Tech Stack +## 🛠️ - **Runtime**: Node.js 18–22 LTS (⚠️ Node.js 24+ nie je **podporovaný** — `better-sqlite3` natívne binárne súbory sú nekompatibilné) – **Jazyk**: TypeScript 5.9 — **100 % TypeScript** v `src/` a `open-sse/` (v1.0.6) @@ -1280,7 +1495,7 @@ Ak chcete získať prístup k dôvere, môžete použiť **príručku URL**: --- -## 🗺️ Cestovná mapa +## 🗺️ OmniRoute má naplánovaných **210+ funkcií** vo viacerých fázach vývoja. Tu sú kľúčové oblasti: @@ -1305,18 +1520,6 @@ OmniRoute má naplánovaných **210+ funkcií** vo viacerých fázach vývoja. T --- -## 📧 Podpora - -> 💬 **Pripojte sa k našej komunite!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Získajte pomoc, zdieľajte tipy a buďte informovaní. - -- **Web**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Problémy**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Pôvodný projekt**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Prispievatelia [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.sv.md b/README.sv.md index ed286bbfa0..b831e714ba 100644 --- a/README.sv.md +++ b/README.sv.md @@ -110,6 +110,35 @@ _Anslut alla AI-drivna IDE- eller CLI-verktyg via OmniRoute — gratis API-gatew --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Varför OmniRoute? **Sluta slösa pengar och nå gränser:** @@ -128,6 +157,18 @@ _Anslut alla AI-drivna IDE- eller CLI-verktyg via OmniRoute — gratis API-gatew --- +## 📧 Support + +> 💬 **Gå med i vår community!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Få hjälp, dela tips och håll dig uppdaterad. + +- **Webbplats**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Frågor**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Originalprojekt**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Hur det fungerar ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Vad OmniRoute löser — 30 verkliga smärtpunkter och användningsfall -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Varje utvecklare som använder AI-verktyg möter dessa problem dagligen.** OmniRoute byggdes för att lösa dem alla — från kostnadsöverskridanden till regionala block, från trasiga OAuth-flöden till protokolloperationer och observerbarhet i företag.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Jag betalar för ett dyrt abonnemang men blir ändå avbruten av limits" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Utvecklare betalar $20–200/månad för Claude Pro, Codex Pro eller GitHub Copilot. Även om du betalar har kvoten ett tak - 5 timmars användning, veckogränser eller gränser per minut. Mid-coding session, leverantören slutar svara och utvecklaren tappar flöde och produktivitet. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-lagers fallback** — Om prenumerationskvoten tar slut, omdirigeras automatiskt till API-nyckel → Billigt → Gratis med noll manuellt ingrepp +- **Kvotspårning i realtid** — Visar tokenförbrukning i realtid med återställningsnedräkning (5 timmar, dagligen, veckovis) +- **Multi-Account Support** — Flera konton per leverantör med automatisk round-robin — när ett tar slut, byter du till nästa +- **Anpassade kombinationer** — Anpassningsbara reservkedjor med 6 balanseringsstrategier (fill-first, round-robin, P2C, slumpmässig, minst använda, kostnadsoptimerad) +- **Codex Business Quotas** — Övervakning av företags-/teamarbetsutrymmeskvoter direkt i instrumentpanelen
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Jag måste använda flera leverantörer men alla har olika API" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI använder ett format, Claude (Anthropic) använder ett annat, Gemini ännu ett annat. Om en utvecklare vill testa modeller från olika leverantörer eller fallback mellan dem måste de konfigurera om SDK:er, ändra slutpunkter, hantera inkompatibla format. Anpassade leverantörer (FriendLI, NIM) har icke-standardiserade modellslutpunkter. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Unified Endpoint** — En enda `http://localhost:20128/v1` fungerar som proxy för alla 36+ leverantörer +- **Formatöversättning** — Automatisk och transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **Responssanering** — Tar bort icke-standardiserade fält (`x_groq`, `usage_breakdown`, `service_tier`) som bryter OpenAI SDK v1.83+ +- **Rollnormalisering** — Konverterar `developer` → `system` för icke-OpenAI-leverantörer; `system` → `user` för GLM/ERNIE +- **Think Tag Extraction** — Extraherar ``-block från modeller som DeepSeek R1 till standardiserade `reasoning_content` +- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatisk konvertering +- **`stream` är standard till `false`** — Justerar med OpenAI-specifikationen, undviker oväntad SSE i Python/Rust/Go SDK:er
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "Min AI-leverantör blockerar min region/land" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Leverantörer som OpenAI/Codex blockerar åtkomst från vissa geografiska regioner. Användare får fel som `unsupported_country_region_territory` under OAuth- och API-anslutningar. Detta är särskilt frustrerande för utvecklare från utvecklingsländer. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **3-Level Proxy Config** — Konfigurerbar proxy på 3 nivåer: global (all trafik), per leverantör (endast en leverantör) och per anslutning/nyckel +- **Färgkodade proxymärken** — Visuella indikatorer: 🟢 global proxy, 🟡 leverantörsproxy, 🔵 anslutningsproxy, visar alltid IP:n +- **OAuth Token Exchange Through Proxy** — OAuth-flödet går också genom proxyn, vilket löser `unsupported_country_region_territory` +- **Anslutningstester via proxy** — Anslutningstester använder den konfigurerade proxyn (ingen mer direkt förbikoppling) +- **SOCKS5-stöd** — Fullständigt SOCKS5-proxystöd för utgående routing +- **TLS Fingerprint Spoofing** — Webbläsarliknande TLS-fingeravtryck via `wreq-js` för att kringgå botdetektering
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "Jag vill använda AI för kodning men jag har inga pengar" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Alla kan inte betala $20–200/månad för AI-prenumerationer. Studenter, utvecklare från tillväxtländer, hobbyister och frilansare behöver tillgång till kvalitetsmodeller utan kostnad. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Gratis leverantörer inbyggda** — Inbyggt stöd för 100 % gratis leverantörer: iFlow (8 obegränsade modeller), Qwen (3 obegränsade modeller), Kiro (Claude gratis), Gemini CLI (180K/månad gratis) +- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/månad utan stilleståndstid +- **NVIDIA NIM gratis krediter** — 1000 gratis krediter integrerade +- **Kostnadsoptimerad strategi** — Routingstrategi som automatiskt väljer den billigaste tillgängliga leverantören
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Jag behöver skydda min AI-gateway från obehörig åtkomst" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +När du exponerar en AI-gateway för nätverket (LAN, VPS, Docker) kan vem som helst med adressen konsumera utvecklarens tokens/kvot. Utan skydd är API:er sårbara för missbruk, snabb injektion och missbruk. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **API Key Management** — Generering, rotation och omfattning per leverantör med en dedikerad `/dashboard/api-manager`-sida +- **Behörigheter på modellnivå** — Begränsa API-nycklar till specifika modeller (`openai/*`, jokerteckenmönster), med växlaren Tillåt allt/Begränsa +- **API Endpoint Protection** — Kräv en nyckel för `/v1/models` och blockera specifika leverantörer från listan +- **Auth Guard + CSRF Protection** — Alla instrumentpanelsrutter skyddade med `withAuth` middleware + CSRF-tokens +- **Rate Limiter** — Per-IP-hastighetsbegränsning med konfigurerbara fönster +- **IP-filtrering** — Tillåtelselista/blockeringslista för åtkomstkontroll +- **Prompt Injection Guard** — Sanering mot skadliga promptmönster +- **AES-256-GCM-kryptering** — Autentiseringsuppgifter krypterade i vila
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "Min leverantör gick ner och jag tappade mitt kodningsflöde" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +AI-leverantörer kan bli instabila, returnera 5xx-fel eller nå tillfälliga hastighetsgränser. Om en utvecklare är beroende av en enskild leverantör avbryts de. Utan strömbrytare kan upprepade försök krascha programmet. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Circuit Breaker per leverantör** — Autoöppning/stängning med konfigurerbara trösklar och nedkylning (stängd/öppen/halvöppen) +- **Exponentiell backoff** — Progressiva fördröjningar igen +- **Anti-Thundering Herd** — Mutex + semaforskydd mot samtidiga stormar igen +- **Combo reservkedjor** — Om den primära leverantören misslyckas, faller den automatiskt genom kedjan utan ingrepp +- **Combo Circuit Breaker** - Inaktiverar automatiskt felande leverantörer inom en kombinationskedja +- **Health Dashboard** — Drifttidsövervakning, strömbrytartillstånd, låsningar, cachestatistik, p50/p95/p99 latens
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "Att konfigurera varje AI-verktyg är tråkigt och repetitivt" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Utvecklare använder Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Varje verktyg behöver en annan konfiguration (API-slutpunkt, nyckel, modell). Att konfigurera om när man byter leverantör eller modell är ett slöseri med tid. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **CLI Tools Dashboard** — Dedikerad sida med ett-klicksinställningar för Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — Genererar `chatLanguageModels.json` för VS-kod med bulkmodellval +- **Onboarding Wizard** — Guidad 4-stegs installation för förstagångsanvändare +- **En slutpunkt, alla modeller** — Konfigurera `http://localhost:20128/v1` en gång, få tillgång till 36+ leverantörer
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "Hantera OAuth-tokens från flera leverantörer är ett helvete" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot — alla använder OAuth 2.0 med utgående tokens. Utvecklare måste autentisera på nytt hela tiden, hantera `client_secret is missing`, `redirect_uri_mismatch` och fel på fjärrservrar. OAuth på LAN/VPS är särskilt problematiskt. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Automatisk uppdatering av token** — OAuth-tokens uppdateras i bakgrunden innan de löper ut +- **OAuth 2.0 (PKCE) Inbyggd** — Automatiskt flöde för Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **Multi-Account OAuth** — Flera konton per leverantör via JWT/ID-tokenextraktion +- **OAuth LAN/Remote Fix** — Privat IP-detektering för `redirect_uri` + manuellt URL-läge för fjärrservrar +- **OAuth Behind Nginx** — Använder `window.location.origin` för omvänd proxykompatibilitet +- **Remote OAuth Guide** — Steg-för-steg-guide för Google Cloud-uppgifter på VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "Jag vet inte hur mycket jag spenderar eller var" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Utvecklare använder flera betalleverantörer men har ingen enhetlig syn på utgifter. Varje leverantör har sin egen faktureringspanel, men det finns ingen konsoliderad vy. Oväntade kostnader kan hopa sig. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Kostnadsanalysinstrumentpanel** — Kostnadsspårning per token och budgethantering per leverantör +- **Budgetgränser per nivå** — Utgiftstak per nivå som utlöser automatisk reserv +- **Priskonfiguration per modell** — Konfigurerbara priser per modell +- **Användningsstatistik per API-nyckel** — Antal förfrågningar och senast använda tidsstämpel per nyckel +- **Analytics Dashboard** — Statistikkort, modellanvändningsdiagram, leverantörstabell med framgångsfrekvens och latens
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "Jag kan inte diagnostisera fel och problem i AI-samtal" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +När ett samtal misslyckas vet inte utvecklaren om det var en hastighetsgräns, utgången token, fel format eller leverantörsfel. Fragmenterade loggar över olika terminaler. Utan observerbarhet är felsökning att trial-and-error. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Unified Logs Dashboard** — 4 flikar: Request Logs, Proxy Logs, Audit Logs, Console +- **Console Log Viewer** — Viewer i realtid i terminalstil med färgkodade nivåer, automatisk rullning, sökning, filtrering +- **SQLite Proxy-loggar** — Beständiga loggar som överlever serverstarter +- **Translator Playground** — 4 felsökningslägen: Playground (formatöversättning), Chat Tester (tur och retur), Testbänk (batch), Live Monitor (realtid) +- **Request Telemetri** — p50/p95/p99 latens + X-Request-Id-spårning +- **Filbaserad loggning med rotation** — Konsolinterceptor fångar allt till JSON-logg med storleksbaserad rotation
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "Det är komplext att distribuera och underhålla gatewayen" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Att installera, konfigurera och underhålla en AI-proxy i olika miljöer (lokalt, VPS, Docker, moln) är arbetskrävande. Problem som hårdkodade sökvägar, `EACCES` på kataloger, portkonflikter och plattformsoberoende konstruktioner ger friktion. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **npm global installation** — `npm install -g omniroute && omniroute` — klar +- **Docker Multi-Platform** — AMD64 + ARM64 inbyggt (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Docker Compose Profiles** — `base` (inga CLI-verktyg) och `cli` (med Claude Code, Codex, OpenClaw) +- **Electron Desktop App** — Inbyggd app för Windows/macOS/Linux med systemfältet, autostart, offlineläge +- **Split-Port Mode** — API och Dashboard på separata portar för avancerade scenarier (omvänd proxy, containernätverk) +- **Cloud Sync** — Konfigurera synkronisering mellan enheter via Cloudflare Workers +- **DB-säkerhetskopior** — Automatisk säkerhetskopiering, återställning, export och import av alla inställningar
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "Gränssnittet är endast engelska och mitt team talar inte engelska" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Lag i icke-engelsktalande länder, särskilt i Latinamerika, Asien och Europa, kämpar med enbart engelska gränssnitt. Språkbarriärer minskar användningen och ökar konfigurationsfelen. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Dashboard i18n — 30 språk** — Alla 500+ nycklar översatta, inklusive arabiska, bulgariska, danska, tyska, spanska, finska, franska, hebreiska, hindi, ungerska, indonesiska, italienska, japanska, koreanska, malaysiska, holländska, norska, polska, portugisiska (PT/BR), rumänska, ryska, thailändska, ukrainska, ukrainska, kinesiska, engelska, ukrainska, vietnamesiska, ukrainska, svenska, ukrainska +- **RTL-stöd** — Höger-till-vänster-stöd för arabiska och hebreiska +- **Multi-Language READMEs** — 30 fullständiga dokumentationsöversättningar +- **Språkväljare** — Globikon i rubriken för växling i realtid
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "Jag behöver mer än chatt — jag behöver inbäddningar, bilder, ljud" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +AI är inte bara att slutföra chatt. Utvecklare måste generera bilder, transkribera ljud, skapa inbäddningar för RAG, ranka om dokument och moderera innehåll. Varje API har olika slutpunkt och format. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Inbäddningar** — `/v1/embeddings` med 6 leverantörer och 9+ modeller +- **Bildgenerering** — `/v1/images/generations` med 10 leverantörer och 20+ modeller (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Text-till-video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) och SD WebUI +- **Text-to-Music** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Ljudtranskription** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Text-till-tal** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + befintliga leverantörer +- **Moderationer** — `/v1/moderations` — Innehållssäkerhetskontroller +- **Omrankning** — `/v1/rerank` — Omrankning av dokumentrelevans +- **Responses API** — Fullständigt `/v1/responses`-stöd för Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "Jag har inget sätt att testa och jämföra kvalitet mellan olika modeller" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Utvecklare vill veta vilken modell som är bäst för deras användningsfall - kod, översättning, resonemang - men det går långsamt att jämföra manuellt. Det finns inga integrerade utvärderingsverktyg. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **LLM-utvärderingar** — Golden set-testning med 10 förinstallerade fall som täcker hälsningar, matematik, geografi, kodgenerering, JSON-efterlevnad, översättning, markdown, säkerhetsvägran +- **4 matchningsstrategier** — `exact`, `contains`, `regex`, `custom` (JS-funktion) +- **Translator Playground Test Bench** — Batchtestning med flera ingångar och förväntade utgångar, jämförelse mellan olika leverantörer +- **Chatttestare** — Fullständig tur och retur med visuell responsåtergivning +- **Live Monitor** — Realtidsström av alla förfrågningar som flödar genom proxyn
-📈 15. "I need to scale without losing performance" +📈 15. "Jag behöver skala utan att förlora prestanda" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +När förfrågningsvolymen ökar, utan att cachelagra genererar samma frågor dubbla kostnader. Utan idempotens, dubbletter begär avfallshantering. Prisgränser per leverantör måste respekteras. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Semantisk cache** — Tvåskiktscache (signatur + semantisk) minskar kostnaden och fördröjningen +- **Request Idempotency** — 5s dedupliceringsfönster för identiska förfrågningar +- **Rate Limit Detection** — RPM per leverantör, min gap och max samtidig spårning +- **Redigerbara hastighetsgränser** — Konfigurerbara standardinställningar i Inställningar → Motståndskraft med uthållighet +- **API Key Validation Cache** — 3-lagers cache för produktionsprestanda +- **Hälsoinstrumentpanel med telemetri** — p50/p95/p99 latens, cachestatistik, drifttid
-🤖 16. "I want to control model behavior globally" +🤖 16. "Jag vill kontrollera modellens beteende globalt" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Utvecklare som vill ha alla svar på ett specifikt språk, med en specifik ton, eller som vill begränsa resonemangstokens. Att konfigurera detta i varje verktyg/förfrågan är opraktiskt. -**How OmniRoute solves it:** +**Hur OmniRoute löser det:** -- **System Prompt Injection** — Global prompt applied to all requests +- **System Prompt Injection** — Global prompt tillämpas på alla förfrågningar - **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **6 routingstrategier** — Globala strategier som avgör hur förfrågningar distribueras +- **Wildcard Router** — `provider/*`-mönster dirigerar dynamiskt till vilken leverantör som helst +- **Kombo Aktivera/Inaktivera Växla** — Växla kombinationer direkt från instrumentpanelen +- **Visa leverantör** — Aktivera/inaktivera alla anslutningar för en leverantör med ett klick +- **Blockerade leverantörer** — Uteslut specifika leverantörer från `/v1/models`-listan
+
+🧰 17. "Jag behöver MCP-verktyg som förstklassiga produktegenskaper" + +Många AI-gateways exponerar MCP endast som en dold implementeringsdetalj. Team behöver ett synligt, hanterbart driftlager. + +**Hur OmniRoute löser det:** + +- MCP visas på navigeringspanelen och fliken för slutpunktsprotokoll +- Dedikerad MCP-hanteringssida med process, verktyg, omfattningar och revision +- Inbyggd snabbstart för `omniroute --mcp` och klientintroduktion + +
+ +
+🧠 18. "Jag behöver A2A-orkestrering med synkronisering + strömningsuppgiftsvägar" + +Agentarbetsflöden kräver både direkta svar och långvarig streamad exekvering med livscykelkontroll. + +**Hur OmniRoute löser det:** + +- A2A JSON-RPC-ändpunkt (`POST /a2a`) med `message/send` och `message/stream` +- SSE-strömning med terminaltillståndspridning +- Task lifecycle API:er för `tasks/get` och `tasks/cancel` + +
+ +
+🛰️ 19. "Jag behöver riktig MCP-processhälsa, inte gissad status" + +Operativa team måste veta om MCP faktiskt lever, inte bara om ett API är tillgängligt. + +**Hur OmniRoute löser det:** + +- Runtime heartbeat-fil med PID, tidsstämplar, transport, verktygsräkning och scope-läge +- MCP status API som kombinerar hjärtslag + senaste aktivitet +- UI-statuskort för process/upptid/hjärtslagsnyhet + +
+ +
+📋 20. "Jag behöver revisionsbart MCP-verktygsexekvering" + +När verktyg muterar konfiguration eller utlöser operationsåtgärder behöver team rättsmedicinsk spårbarhet. + +**Hur OmniRoute löser det:** + +- SQLite-stödd revisionsloggning för MCP-verktygsanrop +- Filtrerar efter verktyg, framgång/misslyckande, API-nyckel och paginering +- Dashboard revisionstabell + statistikslutpunkter för automatisering + +
+ +
+🔐 21. "Jag behöver scoped MCP-behörigheter per integration" + +Olika klienter bör ha minst privilegierad åtkomst till verktygskategorier. + +**Hur OmniRoute löser det:** + +- 9 granulära MCP-scopes för kontrollerad verktygsåtkomst +- Tillämpning av omfattning och synlighet i MCP-hanteringsgränssnitt +- Säker standardställning för operativa verktyg + +
+ +
+⚙️ 22. "Jag behöver driftskontroller utan att omdistribuera" + +Team behöver snabba körtidsförändringar under incidenter eller kostnadshändelser. + +**Hur OmniRoute löser det:** + +- Växla kombinationsaktivering direkt från MCP-instrumentpanelen +- Tillämpa motståndskraftsprofiler från fördefinierade policypaket +- Återställ strömbrytarens tillstånd från samma manöverpanel + +
+ +
+🔄 23. "I need live A2A task lifecycle synibility and cancellation" + +Utan livscykelsynlighet blir uppgiftsincidenter svåra att triage. + +**Hur OmniRoute löser det:** + +- Uppgiftslista/filtrering efter stat/färdighet med sidnumrering +- Drill down på uppgiftens metadata, händelser och artefakter +- Slutpunkt för annullering av uppgifter och gränssnittsåtgärd med bekräftelse + +
+ +
+🌊 24. "Jag behöver mätvärden för aktiv strömning för A2A-laddning" + +Strömmande arbetsflöden kräver operativ insikt i samtidighet och direktanslutningar. + +**Hur OmniRoute löser det:** + +- Aktiva strömräknare integrerade i A2A-status +- Tidsstämpel för senaste uppgift och antal per stat +- A2A instrumentpanelskort för operationsövervakning i realtid + +
+ +
+🪪 25. "Jag behöver standardagentupptäckt för klienter" + +Externa klienter och orkestratorer behöver maskinläsbar metadata för onboarding. + +**Hur OmniRoute löser det:** + +- Agentkort exponerat på `/.well-known/agent.json` +- Förmåga och färdigheter som visas i ledningsgränssnittet +- A2A status API inkluderar upptäcktsmetadata för automatisering + +
+ +
+🧭 26. "Jag behöver protokollupptäckbarhet i produktens UX" + +Om användare inte kan upptäcka protokollytor, sjunker kvaliteten på adoption och support. + +**Hur OmniRoute löser det:** + +- Sidofältsposter för MCP och A2A +- Slutpunktssida Protokoll-fliken med snabbstart och status +- Länkar från översikt till dedikerade hanteringspaneler + +
+ +
+🧪 27. "Jag behöver end-to-end protokollvalidering med riktiga klienter" + +Mock-tester räcker inte för att validera protokollkompatibilitet före release. + +**Hur OmniRoute löser det:** + +- E2E-svit som startar appen och använder riktig MCP SDK-klienttransport +- A2A-klient testar för upptäckt, skicka, streama, hämta och avbryta flöden +- Korskontrollera påståenden mot MCP-revision och A2A-uppgifter API:er + +
+ +
+📡 28. "Jag behöver enhetlig observerbarhet över alla gränssnitt" + +Att dela upp observerbarheten enligt protokoll skapar blinda fläckar och längre MTTR. + +**Hur OmniRoute löser det:** + +- Enhetliga instrumentpaneler/loggar/analyser i en produkt +- Hälsa + revision + begäran om telemetri över OpenAI-, MCP- och A2A-lager +- Operativa API:er för status och automatisering + +
+ +
+💼 29. "Jag behöver en körtid för proxy + verktyg + agentorkestrering" + +Att köra många separata tjänster ökar driftskostnaderna och fellägen. + +**Hur OmniRoute löser det:** + +- OpenAI-kompatibel proxy, MCP-server och A2A-server i en stack +- Delad autentisering, resiliens, datalagring och observerbarhet +- Konsekvent policymodell över alla interaktionsytor + +
+ +
+🚀 30. "Jag behöver skicka agentiska arbetsflöden utan limkodsprawl" + +Lag tappar hastighet när de sammanfogar flera ad-hoc-tjänster och skript. + +**Hur OmniRoute löser det:** + +- Enhetlig slutpunktsstrategi för kunder och agenter +- Inbyggda gränssnitt för protokollhantering och rökvalideringsvägar +- Produktionsfärdiga grunder (säkerhet, loggning, resiliens, backup) + +
+ +### Exempel på Playbooks (integrerade användningsfall) + +**Playbook A: Maximera betald prenumeration + billig backup** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: Noll-kostnad kodningsstack** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: 24/7 alltid-på reservkedja** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: Agent ops med MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Snabbstart **1. Installera globalt:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +990,26 @@ OmniRoute inkluderar en kraftfull inbyggd översättarlekplats med **4 lägen**
---- +## 🧪 Utvärderingar (Evals) -## 🎯 Användningsfall +OmniRoute inkluderar ett inbyggt utvärderingsramverk för att testa LLM-svarskvalitet mot en gyllene uppsättning. Få åtkomst till det via **Analytics → Evals** i instrumentpanelen. -### Fall 1: "Jag har Claude Pro-abonnemang" +### Inbyggt gyllene set -**Problem:** Kvoten går ut oanvänd, hastighetsgränser under tung kodning +Det förinstallerade "OmniRoute Golden Set" innehåller 10 testfall som täcker: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Hälsningar, matematik, geografi, kodgenerering +- JSON-formatöverensstämmelse, översättning, markdown +- Säkerhetsvägran (skadligt innehåll), räkning, boolesk logik -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Utvärderingsstrategier -### Fall 2: "Jag vill ha noll kostnad" - -**Problem:** Har inte råd med prenumerationer, behöver pålitlig AI-kodning - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Fall 3: "Jag behöver kodning dygnet runt, inga avbrott" - -**Problem:** Deadlines, har inte råd med driftstopp - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Fall 4: "Jag vill ha GRATIS AI i OpenClaw" - -**Problem:** Behöver AI-assistent i meddelandeappar, helt gratis - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Strategi | Beskrivning | Exempel | +| ---------- | ---------------------------------------------------- | -------------------------------- | +| `exact` | Utdata måste matcha exakt | `"4"` | +| `contains` | Utdata måste innehålla delsträng (skiftlägeskänslig) | `"Paris"` | +| `regex` | Utdata måste matcha regexmönster | `"1.*2.*3"` | +| `custom` | Anpassad JS-funktion returnerar true/false | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 Utvärderingar (Evals) - -OmniRoute inkluderar ett inbyggt utvärderingsramverk för att testa LLM-svarskvalitet mot en gyllene uppsättning. Få åtkomst till det via **Analytics → Evals** i instrumentpanelen. - -### Inbyggt gyllene set - -Det förinstallerade "OmniRoute Golden Set" innehåller 10 testfall som täcker: - -- Hälsningar, matematik, geografi, kodgenerering -- JSON-formatöverensstämmelse, översättning, markdown -- Säkerhetsvägran (skadligt innehåll), räkning, boolesk logik - -### Utvärderingsstrategier - -| Strategi | Beskrivning | Exempel | -| ---------- | ---------------------------------------------------- | -------------------------------- | -| `exact` | Utdata måste matcha exakt | `"4"` | -| `contains` | Utdata måste innehålla delsträng (skiftlägeskänslig) | `"Paris"` | -| `regex` | Utdata måste matcha regexmönster | `"1.*2.*3"` | -| `custom` | Anpassad JS-funktion returnerar true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Felsökning
@@ -1132,7 +1344,7 @@ Det förinstallerade "OmniRoute Golden Set" innehåller 10 testfall som täcker: - OmniRoute v1.0.6+ inkluderar reservvalidering via chattslutföranden - Se till att baswebbadressen innehåller suffixet `/v1` -### 🔐 OAuth em Servidor Remoto (Remote OAuth Setup) +### 🔐 OAuth @@ -1227,7 +1439,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🛠️ Tech Stack +## 🛠️ - **Körtid**: Node.js 18–22 LTS (⚠️ Node.js 24+ stöds **inte** — `better-sqlite3` inbyggda binärer är inkompatibla) - **Språk**: TypeScript 5.9 — **100 % TypeScript** över `src/` och `open-sse/` (v1.0.6) @@ -1279,7 +1491,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🗺️ Färdkarta +## 🗺️ OmniRoute har **210+ funktioner planerade** över flera utvecklingsfaser. Här är nyckelområdena: @@ -1304,18 +1516,6 @@ OmniRoute har **210+ funktioner planerade** över flera utvecklingsfaser. Här --- -## 📧 Support - -> 💬 **Gå med i vår community!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Få hjälp, dela tips och håll dig uppdaterad. - -- **Webbplats**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Frågor**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Originalprojekt**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Bidragsgivare [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.th.md b/README.th.md index 698ba5d427..6a98249287 100644 --- a/README.th.md +++ b/README.th.md @@ -110,6 +110,35 @@ _เชื่อมต่อเครื่องมือ IDE หรือ CLI --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 ทำไมต้อง OmniRoute? **หยุดเสียเงินและจำกัดขีดจำกัด:** @@ -128,6 +157,18 @@ _เชื่อมต่อเครื่องมือ IDE หรือ CLI --- +## 📧 สนับสนุน + +> 💌 **เข้าร่วมชุมชนของเรา!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — รับความช่วยเหลือ แบ่งปันเคล็ดลับ และติดตามข่าวสารล่าสุด + +- **เว็บไซต์**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **ปัญหา**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **โปรเจ็กต์ดั้งเดิม**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 มันทำงานอย่างไร ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 สิ่งที่ OmniRoute แก้ปัญหาได้ — 30 คะแนนปัญหาและกรณีการใช้งานจริง -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **นักพัฒนาทุกคนที่ใช้เครื่องมือ AI ต้องเผชิญกับปัญหาเหล่านี้ทุกวัน** OmniRoute ถูกสร้างขึ้นเพื่อแก้ไขปัญหาทั้งหมด ตั้งแต่ค่าใช้จ่ายที่มากเกินไปไปจนถึงการบล็อกระดับภูมิภาค จากโฟลว์ OAuth ที่เสียหาย ไปจนถึงการทำงานของโปรโตคอลและความสามารถในการสังเกตระดับองค์กร
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "ฉันจ่ายค่าสมัครสมาชิกราคาแพงแต่ยังคงถูกขัดจังหวะด้วยขีดจำกัด" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +นักพัฒนาจ่ายเงิน $20–200/เดือนสำหรับ Claude Pro, Codex Pro หรือ GitHub Copilot แม้จะจ่ายเงิน โควต้าก็มีเพดาน — การใช้งาน 5 ชม. ขีดจำกัดรายสัปดาห์ หรือขีดจำกัดอัตราต่อนาที เซสชันการเข้ารหัสกลาง ผู้ให้บริการหยุดการตอบสนอง และนักพัฒนาสูญเสียความลื่นไหลและประสิทธิภาพการทำงาน -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **ทางเลือกสำรองอัจฉริยะ 4 ระดับ** — หากโควต้าการสมัครสมาชิกหมด จะเปลี่ยนเส้นทางไปยังคีย์ API → ราคาถูก → ฟรีโดยไม่มีการแทรกแซงด้วยตนเอง +- **การติดตามโควต้าแบบเรียลไทม์** — แสดงการใช้โทเค็นแบบเรียลไทม์พร้อมการนับถอยหลังการรีเซ็ต (5 ชม. รายวัน รายสัปดาห์) +- **การสนับสนุนหลายบัญชี** — หลายบัญชีต่อผู้ให้บริการพร้อมการหมุนเวียนอัตโนมัติ — เมื่อบัญชีหนึ่งหมด ให้สลับไปยังบัญชีถัดไป +- **คอมโบแบบกำหนดเอง** — ห่วงโซ่ทางเลือกที่ปรับแต่งได้พร้อมกลยุทธ์การปรับสมดุล 6 แบบ (เติมก่อน, ปัดเศษ, P2C, สุ่ม, ใช้น้อยที่สุด, ปรับต้นทุนให้เหมาะสม) +- **โควต้าธุรกิจ Codex** — การตรวจสอบโควต้าพื้นที่ทำงานของธุรกิจ/ทีมโดยตรงในแดชบอร์ด
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "ฉันจำเป็นต้องใช้ผู้ให้บริการหลายราย แต่แต่ละรายมี API ที่แตกต่างกัน" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI ใช้รูปแบบหนึ่ง Claude (Anthropic) ใช้อีกรูปแบบหนึ่ง Gemini ยังใช้อีกรูปแบบหนึ่ง หากผู้พัฒนาต้องการทดสอบโมเดลจากผู้ให้บริการหลายรายหรือทางเลือกระหว่างผู้ให้บริการ พวกเขาจำเป็นต้องกำหนดค่า SDK ใหม่ เปลี่ยนตำแหน่งข้อมูล และจัดการกับรูปแบบที่เข้ากันไม่ได้ ผู้ให้บริการแบบกำหนดเอง (FriendLI, NIM) มีจุดสิ้นสุดโมเดลที่ไม่ได้มาตรฐาน -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Unified Endpoint** — `http://localhost:20128/v1` เดียวทำหน้าที่เป็นพร็อกซีสำหรับผู้ให้บริการมากกว่า 36 ราย +- **การแปลรูปแบบ** — อัตโนมัติและโปร่งใส: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **การฆ่าเชื้อการตอบสนอง** — ตัดช่องที่ไม่ได้มาตรฐาน (`x_groq`, `usage_breakdown`, `service_tier`) ที่ทำลาย OpenAI SDK v1.83+ +- **การปรับบทบาทให้เป็นมาตรฐาน** — แปลง `developer` → `system` สำหรับผู้ให้บริการที่ไม่ใช่ OpenAI `system` → `user` สำหรับ GLM/ERNIE +- **คิดการแยกแท็ก** — แยกบล็อก `` จากรุ่นอย่าง DeepSeek R1 ให้เป็น `reasoning_content` ที่ได้มาตรฐาน +- **เอาต์พุตที่มีโครงสร้างสำหรับราศีเมถุน** — `json_schema` → `responseMimeType`/`responseSchema` การแปลงอัตโนมัติ +- **`stream` มีค่าเริ่มต้นเป็น `false`** — สอดคล้องกับข้อกำหนด OpenAI หลีกเลี่ยง SSE ที่ไม่คาดคิดใน Python/Rust/Go SDK
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "ผู้ให้บริการ AI ของฉันบล็อกภูมิภาค/ประเทศของฉัน" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +ผู้ให้บริการเช่น OpenAI/Codex บล็อกการเข้าถึงจากภูมิภาคทางภูมิศาสตร์บางแห่ง ผู้ใช้ได้รับข้อผิดพลาดเช่น `unsupported_country_region_territory` ในระหว่างการเชื่อมต่อ OAuth และ API สิ่งนี้น่าหงุดหงิดเป็นพิเศษสำหรับนักพัฒนาจากประเทศกำลังพัฒนา -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **การกำหนดค่าพร็อกซี 3 ระดับ** — พร็อกซีที่กำหนดค่าได้ 3 ระดับ: ทั่วโลก (การรับส่งข้อมูลทั้งหมด) ต่อผู้ให้บริการ (ผู้ให้บริการรายเดียวเท่านั้น) และต่อการเชื่อมต่อ/คีย์ +- **ป้ายพร็อกซีที่ใช้รหัสสี** — ตัวบ่งชี้ภาพ: 🟢 พร็อกซีส่วนกลาง, 🟡 พร็อกซีผู้ให้บริการ, 🔵 พร็อกซีการเชื่อมต่อ แสดง IP เสมอ +- **การแลกเปลี่ยนโทเค็น OAuth ผ่านพร็อกซี** — โฟลว์ OAuth ยังต้องผ่านพร็อกซีด้วย การแก้ปัญหา `unsupported_country_region_territory` +- **การทดสอบการเชื่อมต่อผ่านพร็อกซี** — การทดสอบการเชื่อมต่อใช้พร็อกซีที่กำหนดค่าไว้ (ไม่มีการบายพาสโดยตรงอีกต่อไป) +- **รองรับ SOCKS5** — รองรับพร็อกซี SOCKS5 เต็มรูปแบบสำหรับการกำหนดเส้นทางขาออก +- **การปลอมแปลงลายนิ้วมือ TLS** — ลายนิ้วมือ TLS เหมือนเบราว์เซอร์ผ่าน `wreq-js` เพื่อเลี่ยงการตรวจจับบอท
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "ฉันต้องการใช้ AI ในการเขียนโค้ด แต่ไม่มีเงิน" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +ไม่ใช่ทุกคนที่สามารถจ่าย $20–200/เดือน สำหรับการสมัครสมาชิก AI นักศึกษา นักพัฒนาจากประเทศเกิดใหม่ ผู้ที่สมัครเล่น และฟรีแลนซ์ต้องการเข้าถึงโมเดลคุณภาพโดยไม่มีค่าใช้จ่าย -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **ผู้ให้บริการ Tier ฟรีในตัว** — รองรับเนทิฟสำหรับผู้ให้บริการฟรี 100%: iFlow (8 รุ่นไม่จำกัด), Qwen (3 รุ่นไม่จำกัด), Kiro (Claude ฟรี), Gemini CLI (ฟรี 180K/เดือน) +- **คอมโบฟรีเท่านั้น** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/เดือน โดยไม่มีการหยุดทำงาน +- **เครดิตฟรี NVIDIA NIM** — รวมเครดิตฟรี 1,000 รายการ +- **กลยุทธ์การปรับต้นทุนให้เหมาะสม** — กลยุทธ์การกำหนดเส้นทางที่จะเลือกผู้ให้บริการที่ถูกที่สุดที่มีอยู่โดยอัตโนมัติ
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "ฉันต้องปกป้องเกตเวย์ AI ของฉันจากการเข้าถึงที่ไม่ได้รับอนุญาต" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +เมื่อเปิดเผยเกตเวย์ AI ไปยังเครือข่าย (LAN, VPS, Docker) ใครก็ตามที่มีที่อยู่จะสามารถใช้โทเค็น/โควต้าของนักพัฒนาได้ หากไม่มีการป้องกัน API ก็เสี่ยงต่อการถูกนำไปใช้ในทางที่ผิด การแทรกทันที และการละเมิด -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **การจัดการคีย์ API** — การสร้าง การหมุนเวียน และการกำหนดขอบเขตต่อผู้ให้บริการด้วยเพจ `/dashboard/api-manager` เฉพาะ +- **การอนุญาตระดับโมเดล** — จำกัดคีย์ API ให้กับโมเดลเฉพาะ (`openai/*` รูปแบบไวด์การ์ด) พร้อมสลับอนุญาตทั้งหมด/จำกัด +- **การป้องกันปลายทาง API** — ต้องใช้รหัสสำหรับ `/v1/models` และบล็อกผู้ให้บริการบางรายจากรายการ +- **Auth Guard + การป้องกัน CSRF** — เส้นทางแดชบอร์ดทั้งหมดที่ได้รับการป้องกันด้วยมิดเดิลแวร์ `withAuth` + โทเค็น CSRF +- **ตัวจำกัดอัตรา** — การจำกัดอัตราต่อ IP ด้วยหน้าต่างที่กำหนดค่าได้ +- **การกรอง IP** — รายการที่อนุญาต/รายการบล็อกสำหรับการควบคุมการเข้าถึง +- **Prompt Injection Guard** — การฆ่าเชื้อจากรูปแบบการแจ้งเตือนที่เป็นอันตราย +- **การเข้ารหัส AES-256-GCM** — ข้อมูลประจำตัวได้รับการเข้ารหัสเมื่อไม่ได้ใช้งาน
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "ผู้ให้บริการของฉันหยุดทำงานและฉันสูญเสียขั้นตอนการเขียนโค้ด" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +ผู้ให้บริการ AI อาจไม่เสถียร ส่งกลับข้อผิดพลาด 5xx หรือถึงขีดจำกัดอัตราชั่วคราว หากผู้พัฒนาขึ้นอยู่กับผู้ให้บริการรายเดียว ผู้ให้บริการเหล่านั้นจะถูกขัดจังหวะ หากไม่มีเซอร์กิตเบรกเกอร์ การลองซ้ำหลายครั้งอาจทำให้แอปพลิเคชันเสียหายได้ -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **เซอร์กิตเบรกเกอร์ต่อผู้ให้บริการ** — เปิด/ปิดอัตโนมัติด้วยเกณฑ์และคูลดาวน์ที่กำหนดค่าได้ (ปิด/เปิด/เปิดครึ่งหนึ่ง) +- **Exponential Backoff** — ความล่าช้าในการลองใหม่อย่างต่อเนื่อง +- **Anti-Thundering Herd** — Mutex + การป้องกันเซมาฟอร์จากพายุที่ลองใหม่พร้อมกัน +- **Combo Fallback Chains** — หากผู้ให้บริการหลักล้มเหลว จะตกผ่านห่วงโซ่โดยอัตโนมัติโดยไม่มีการแทรกแซง +- **Combo Circuit Breaker** — ปิดการใช้งานผู้ให้บริการที่ล้มเหลวภายในคอมโบเชนโดยอัตโนมัติ +- **แดชบอร์ดสุขภาพ** — การตรวจสอบสถานะการออนไลน์ สถานะของเซอร์กิตเบรกเกอร์ การล็อก สถิติแคช เวลาแฝง p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🏽 7. "การกำหนดค่าเครื่องมือ AI แต่ละรายการนั้นน่าเบื่อและซ้ำซาก" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +นักพัฒนาใช้ Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... เครื่องมือแต่ละอันจำเป็นต้องมีการกำหนดค่าที่แตกต่างกัน (จุดสิ้นสุด API, คีย์, โมเดล) การกำหนดค่าใหม่เมื่อเปลี่ยนผู้ให้บริการหรือรุ่นเป็นการเสียเวลา -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **แดชบอร์ดเครื่องมือ CLI** — หน้าเฉพาะพร้อมการตั้งค่าเพียงคลิกเดียวสำหรับ Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — สร้าง `chatLanguageModels.json` สำหรับโค้ด VS พร้อมการเลือกรุ่นจำนวนมาก +- **ตัวช่วยสร้างการเริ่มต้นใช้งาน** — คำแนะนำการตั้งค่า 4 ขั้นตอนสำหรับผู้ใช้ครั้งแรก +- **จุดสิ้นสุดเดียว ทุกรุ่น** — กำหนดค่า `http://localhost:20128/v1` ครั้งเดียว เข้าถึงผู้ให้บริการมากกว่า 36 ราย
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "การจัดการโทเค็น OAuth จากผู้ให้บริการหลายรายนั้นช่างเลวร้าย" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot — ทั้งหมดใช้ OAuth 2.0 โดยมีโทเค็นที่กำลังจะหมดอายุ นักพัฒนาจำเป็นต้องตรวจสอบความถูกต้องอีกครั้งอย่างต่อเนื่อง จัดการกับ `client_secret is missing`, `redirect_uri_mismatch` และความล้มเหลวบนเซิร์ฟเวอร์ระยะไกล OAuth บน LAN/VPS เป็นปัญหาอย่างยิ่ง -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **รีเฟรชโทเค็นอัตโนมัติ** — โทเค็น OAuth รีเฟรชในพื้นหลังก่อนหมดอายุ +- **OAuth 2.0 (PKCE) ในตัว** — โฟลว์อัตโนมัติสำหรับ Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **OAuth หลายบัญชี** — หลายบัญชีต่อผู้ให้บริการผ่านการดึงโทเค็น JWT/ID +- **OAuth LAN/Remote Fix** — การตรวจจับ IP ส่วนตัวสำหรับ `redirect_uri` + โหมด URL แบบแมนนวลสำหรับเซิร์ฟเวอร์ระยะไกล +- **OAuth ที่อยู่เบื้องหลัง Nginx** — ใช้ `window.location.origin` สำหรับความเข้ากันได้ของ Reverse Proxy +- **คู่มือ OAuth ระยะไกล** — คำแนะนำทีละขั้นตอนสำหรับข้อมูลรับรอง Google Cloud บน VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "ฉันไม่รู้ว่าใช้เงินไปเท่าไหร่หรือที่ไหน" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +นักพัฒนาซอฟต์แวร์ใช้ผู้ให้บริการแบบชำระเงินหลายราย แต่ไม่มีมุมมองการใช้จ่ายแบบรวมศูนย์ ผู้ให้บริการแต่ละรายมีแดชบอร์ดการเรียกเก็บเงินของตัวเอง แต่ไม่มีข้อมูลรวม ค่าใช้จ่ายที่ไม่คาดคิดอาจกองพะเนิน -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **แดชบอร์ดการวิเคราะห์ต้นทุน** — การติดตามต้นทุนต่อโทเค็นและการจัดการงบประมาณต่อผู้ให้บริการ +- **ขีดจำกัดงบประมาณต่อระดับ** — เพดานการใช้จ่ายต่อระดับที่ทำให้เกิดทางเลือกสำรองอัตโนมัติ +- **การกำหนดค่าราคาต่อรุ่น** — ราคาที่กำหนดค่าได้ต่อรุ่น +- **สถิติการใช้งานต่อคีย์ API** — จำนวนคำขอและการประทับเวลาที่ใช้ล่าสุดต่อคีย์ +- **แดชบอร์ดการวิเคราะห์** — การ์ดสถิติ แผนภูมิการใช้งานโมเดล ตารางผู้ให้บริการพร้อมอัตราความสำเร็จและเวลาแฝง
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "ฉันไม่สามารถวินิจฉัยข้อผิดพลาดและปัญหาในการเรียก AI ได้" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +เมื่อการโทรล้มเหลว ผู้พัฒนาจะไม่ทราบว่าเป็นการจำกัดอัตรา โทเค็นหมดอายุ รูปแบบไม่ถูกต้อง หรือข้อผิดพลาดของผู้ให้บริการ บันทึกที่แยกส่วนในเทอร์มินัลต่างๆ หากไม่สามารถสังเกตได้ การดีบักถือเป็นการลองผิดลองถูก -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Unified Logs Dashboard** — 4 แท็บ: บันทึกคำขอ, บันทึกพร็อกซี, บันทึกการตรวจสอบ, คอนโซล +- **โปรแกรมดูบันทึกคอนโซล** — โปรแกรมดูสไตล์เทอร์มินัลแบบเรียลไทม์พร้อมระดับรหัสสี เลื่อนอัตโนมัติ ค้นหา ตัวกรอง +- **SQLite Proxy Logs** — บันทึกถาวรที่รอดจากการรีสตาร์ทเซิร์ฟเวอร์ +- **Translator Playground** — โหมดแก้ไขข้อบกพร่อง 4 โหมด: Playground (การแปลรูปแบบ), Chat Tester (ไป-กลับ), ม้านั่งทดสอบ (เป็นกลุ่ม), Live Monitor (เรียลไทม์) +- **ร้องขอการตรวจวัดทางไกล** — p50/p95/p99 latency + การติดตาม X-Request-Id +- **การบันทึกตามไฟล์พร้อมการหมุน** — ตัวสกัดกั้นคอนโซลจะบันทึกทุกอย่างไปยังบันทึก JSON ด้วยการหมุนตามขนาด
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "การปรับใช้และการบำรุงรักษาเกตเวย์นั้นซับซ้อน" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +การติดตั้ง การกำหนดค่า และการบำรุงรักษาพร็อกซี AI ในสภาพแวดล้อมที่แตกต่างกัน (ภายในเครื่อง, VPS, Docker, คลาวด์) ต้องใช้แรงงานมาก ปัญหาเช่นเส้นทางฮาร์ดโค้ด `EACCES` บนไดเร็กทอรี ข้อขัดแย้งของพอร์ต และการสร้างข้ามแพลตฟอร์มจะเพิ่มแรงเสียดทาน -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **การติดตั้งทั่วโลก npm** — `npm install -g omniroute && omniroute` — เสร็จแล้ว +- **นักเทียบท่าหลายแพลตฟอร์ม** — AMD64 + ARM64 ดั้งเดิม (Apple Silicon, AWS Graviton, Raspberry Pi) +- **โปรไฟล์นักเทียบท่าเขียน** — `base` (ไม่มีเครื่องมือ CLI) และ `cli` (พร้อม Claude Code, Codex, OpenClaw) +- **แอป Electron Desktop** — แอปเนทีฟสำหรับ Windows/macOS/Linux พร้อมถาดระบบ เริ่มอัตโนมัติ โหมดออฟไลน์ +- **โหมดแยกพอร์ต** — API และแดชบอร์ดบนพอร์ตแยกกันสำหรับสถานการณ์ขั้นสูง (พร็อกซีย้อนกลับ เครือข่ายคอนเทนเนอร์) +- **Cloud Sync** — กำหนดค่าการซิงโครไนซ์ระหว่างอุปกรณ์ผ่าน Cloudflare Workers +- **การสำรองข้อมูล DB** — การสำรองข้อมูล กู้คืน ส่งออก และนำเข้าการตั้งค่าทั้งหมดโดยอัตโนมัติ
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "อินเทอร์เฟซเป็นภาษาอังกฤษเท่านั้น และทีมของฉันไม่พูดภาษาอังกฤษ" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +ทีมในประเทศที่ไม่ได้ใช้ภาษาอังกฤษ โดยเฉพาะในละตินอเมริกา เอเชีย และยุโรป ประสบปัญหากับอินเทอร์เฟซที่ใช้ภาษาอังกฤษเท่านั้น อุปสรรคทางภาษาลดการนำไปใช้และเพิ่มข้อผิดพลาดในการกำหนดค่า -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **แดชบอร์ด i18n — 30 ภาษา** — ทั้งหมด 500+ คีย์ที่แปล รวมถึงอารบิก บัลแกเรีย เดนมาร์ก เยอรมัน สเปน ฟินแลนด์ ฝรั่งเศส ฮิบรู ฮินดี ฮังการี อินโดนีเซีย อิตาลี ญี่ปุ่น เกาหลี มาเลย์ ดัตช์ นอร์เวย์ โปแลนด์ โปรตุเกส (PT/BR) โรมาเนีย รัสเซีย สโลวาเกีย สวีเดน ไทย ยูเครน เวียดนาม จีน ฟิลิปปินส์ อังกฤษ +- **รองรับ RTL** — รองรับภาษาอาหรับและฮีบรูจากขวาไปซ้าย +- **README หลายภาษา** — การแปลเอกสารฉบับสมบูรณ์ 30 รายการ +- **ตัวเลือกภาษา** — ไอคอนลูกโลกในส่วนหัวสำหรับการสลับแบบเรียลไทม์
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "ฉันต้องการมากกว่าการแชท — ฉันต้องการการฝัง รูปภาพ เสียง" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +AI ไม่ใช่แค่การแชทให้เสร็จสิ้นเท่านั้น นักพัฒนาจำเป็นต้องสร้างภาพ ถอดเสียง สร้างการฝังสำหรับ RAG จัดอันดับเอกสารใหม่ และกลั่นกรองเนื้อหา API แต่ละรายการมีจุดสิ้นสุดและรูปแบบที่แตกต่างกัน -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **การฝัง** — `/v1/embeddings` พร้อมผู้ให้บริการ 6 รายและรุ่น 9+ +- **การสร้างภาพ** — `/v1/images/generations` พร้อมผู้ให้บริการ 10 รายและโมเดลมากกว่า 20 รุ่น (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **ข้อความเป็นวิดีโอ** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) และ SD WebUI +- **ข้อความเป็นเพลง** — `/v1/music/generations` — ComfyUI (เปิดเสียงที่เสถียร, MusicGen) +- **การถอดเสียง** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **การอ่านออกเสียงข้อความ** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3 และผู้ให้บริการที่มีอยู่ +- **การกลั่นกรอง** — `/v1/moderations` — การตรวจสอบความปลอดภัยของเนื้อหา +- **การจัดอันดับใหม่** — `/v1/rerank` — การจัดอันดับความเกี่ยวข้องของเอกสารใหม่ +- **Responses API** — รองรับ `/v1/responses` เต็มรูปแบบสำหรับ Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "ฉันไม่มีวิธีทดสอบและเปรียบเทียบคุณภาพระหว่างรุ่นต่างๆ" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +นักพัฒนาต้องการทราบว่าโมเดลใดดีที่สุดสำหรับกรณีการใช้งานของพวกเขา เช่น โค้ด การแปล การใช้เหตุผล แต่การเปรียบเทียบด้วยตนเองนั้นช้า ไม่มีเครื่องมือประเมินแบบรวมอยู่ -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **การประเมิน LLM** — การทดสอบชุดทองพร้อมเคสที่โหลดไว้ล่วงหน้า 10 เคส ซึ่งครอบคลุมการทักทาย คณิตศาสตร์ ภูมิศาสตร์ การสร้างโค้ด การปฏิบัติตาม JSON การแปล การมาร์กดาวน์ การปฏิเสธด้านความปลอดภัย +- **4 กลยุทธ์การจับคู่** — `exact`, `contains`, `regex`, `custom` (ฟังก์ชัน JS) +- **ม้านั่งทดสอบสนามเด็กเล่นสำหรับนักแปล** — การทดสอบเป็นกลุ่มที่มีอินพุตหลายอินพุตและเอาต์พุตที่คาดหวัง การเปรียบเทียบข้ามผู้ให้บริการ +- **เครื่องมือทดสอบการแชท** — ไป-กลับเต็มรูปแบบพร้อมการเรนเดอร์การตอบสนองด้วยภาพ +- **Live Monitor** — สตรีมคำขอทั้งหมดที่ไหลผ่านพร็อกซีแบบเรียลไทม์
-📈 15. "I need to scale without losing performance" +📈 15. "ฉันต้องปรับขนาดโดยไม่สูญเสียประสิทธิภาพ" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +เมื่อปริมาณคำขอเพิ่มขึ้น หากไม่มีการแคช คำถามเดียวกันจะทำให้เกิดต้นทุนซ้ำซ้อน หากไม่มีการระบุตัวตน คำขอซ้ำจะสูญเปล่าในการประมวลผล ต้องเคารพขีดจำกัดอัตราต่อผู้ให้บริการ -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Semantic Cache** — แคชสองชั้น (ลายเซ็น + ความหมาย) ช่วยลดต้นทุนและเวลาแฝง +- **คำขอ Idempotency** — หน้าต่างการขจัดข้อมูลซ้ำซ้อน 5 วินาทีสำหรับคำขอที่เหมือนกัน +- **การตรวจจับขีดจำกัดอัตรา** — RPM ต่อผู้ให้บริการ ช่องว่างขั้นต่ำ และการติดตามพร้อมกันสูงสุด +- **ขีดจำกัดอัตราที่แก้ไขได้** — ค่าเริ่มต้นที่กำหนดค่าได้ในการตั้งค่า → ความยืดหยุ่นด้วยความคงอยู่ +- **แคชการตรวจสอบคีย์ API** — แคช 3 ระดับสำหรับประสิทธิภาพการผลิต +- **แดชบอร์ดสุขภาพพร้อมการวัดและส่งข้อมูลทางไกล** — เวลาแฝง p50/p95/p99 สถิติแคช เวลาทำงาน
-🤖 16. "I want to control model behavior globally" +🤖 16. "ฉันต้องการควบคุมพฤติกรรมของโมเดลทั่วโลก" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +นักพัฒนาที่ต้องการคำตอบทั้งหมดในภาษาใดภาษาหนึ่ง มีน้ำเสียงเฉพาะ หรือต้องการจำกัดโทเค็นการให้เหตุผล การกำหนดค่านี้ในทุกเครื่องมือ/คำขอไม่สามารถทำได้ -**How OmniRoute solves it:** +**OmniRoute แก้ปัญหาอย่างไร:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **การแจ้งพร้อมท์ของระบบ** — พร้อมท์ทั่วโลกนำไปใช้กับคำขอทั้งหมด +- **การตรวจสอบงบประมาณการคิด** — การควบคุมการจัดสรรโทเค็นการให้เหตุผลต่อคำขอ (การส่งผ่าน, อัตโนมัติ, กำหนดเอง, การปรับตัว) +- **6 กลยุทธ์การกำหนดเส้นทาง** — กลยุทธ์ระดับโลกที่กำหนดวิธีกระจายคำขอ +- **Wildcard Router** — รูปแบบ `provider/*` จะกำหนดเส้นทางแบบไดนามิกไปยังผู้ให้บริการใดๆ +- **Combo Enable/Disable Toggle** — สลับคอมโบได้โดยตรงจากแดชบอร์ด +- **สลับผู้ให้บริการ** — เปิด/ปิดการเชื่อมต่อทั้งหมดสำหรับผู้ให้บริการได้ด้วยคลิกเดียว +- **ผู้ให้บริการที่ถูกบล็อก** — ยกเว้นผู้ให้บริการบางรายจากรายการ `/v1/models`
+
+🧰 17. "ฉันต้องการเครื่องมือ MCP เนื่องจากความสามารถด้านผลิตภัณฑ์ระดับเฟิร์สคลาส" + +เกตเวย์ AI จำนวนมากเปิดเผย MCP เป็นเพียงรายละเอียดการใช้งานที่ซ่อนอยู่เท่านั้น ทีมจำเป็นต้องมีชั้นการปฏิบัติงานที่มองเห็นได้และจัดการได้ + +**OmniRoute แก้ปัญหาอย่างไร:** + +- MCP ปรากฏในการนำทางแดชบอร์ดและแท็บโปรโตคอลปลายทาง +- หน้าการจัดการ MCP เฉพาะพร้อมกระบวนการ เครื่องมือ ขอบเขต และการตรวจสอบ +- การเริ่มต้นอย่างรวดเร็วในตัวสำหรับ `omniroute --mcp` และการเริ่มต้นใช้งานไคลเอ็นต์ + +
+ +
+🧠 18. "ฉันต้องการการประสาน A2A พร้อมเส้นทางงานการซิงค์ + สตรีม" + +เวิร์กโฟลว์ของตัวแทนต้องการทั้งการตอบกลับโดยตรงและการดำเนินการสตรีมที่ใช้เวลานานพร้อมการควบคุมวงจรชีวิต + +**OmniRoute แก้ปัญหาอย่างไร:** + +- จุดสิ้นสุด A2A JSON-RPC (`POST /a2a`) พร้อม `message/send` และ `message/stream` +- การสตรีม SSE พร้อมการเผยแพร่สถานะเทอร์มินัล +- API วงจรชีวิตของงานสำหรับ `tasks/get` และ `tasks/cancel` + +
+ +
+🛰️ 19. "ฉันต้องการความสมบูรณ์ของกระบวนการ MCP ที่แท้จริง ไม่ใช่สถานะที่เดาได้" + +ทีมปฏิบัติการจำเป็นต้องทราบว่า MCP ยังคงอยู่จริงหรือไม่ ไม่ใช่แค่ว่า API สามารถเข้าถึงได้หรือไม่ + +**OmniRoute แก้ปัญหาอย่างไร:** + +- ไฟล์ฮาร์ทบีทรันไทม์พร้อม PID, การประทับเวลา, การขนส่ง, จำนวนเครื่องมือ และโหมดขอบเขต +- API สถานะ MCP รวมการเต้นของหัวใจ + กิจกรรมล่าสุด +- การ์ดสถานะ UI สำหรับความสดใหม่ของกระบวนการ/สถานะการออนไลน์/การเต้นของหัวใจ + +
+ +
+📋 20. "ฉันต้องการการทำงานของเครื่องมือ MCP ที่ตรวจสอบได้" + +เมื่อเครื่องมือเปลี่ยนแปลงการกำหนดค่าหรือทริกเกอร์การดำเนินการ ทีมจำเป็นต้องมีการตรวจสอบย้อนกลับทางนิติเวช + +**OmniRoute แก้ปัญหาอย่างไร:** + +- การบันทึกการตรวจสอบที่ได้รับการสนับสนุนจาก SQLite สำหรับการเรียกใช้เครื่องมือ MCP +- กรองตามเครื่องมือ ความสำเร็จ/ความล้มเหลว คีย์ API และการแบ่งหน้า +- ตารางการตรวจสอบแดชบอร์ด + จุดสิ้นสุดสถิติสำหรับระบบอัตโนมัติ + +
+ +
+🔐 21. "ฉันต้องการสิทธิ์ MCP ที่กำหนดขอบเขตต่อการบูรณาการ" + +ไคลเอนต์ที่แตกต่างกันควรมีสิทธิ์เข้าถึงหมวดหมู่เครื่องมือน้อยที่สุด + +**OmniRoute แก้ปัญหาอย่างไร:** + +- ขอบเขต MCP แบบละเอียด 9 แบบสำหรับการเข้าถึงเครื่องมือที่ควบคุม +- การบังคับใช้ขอบเขตและการมองเห็นใน UI การจัดการ MCP +- ท่าทางเริ่มต้นที่ปลอดภัยสำหรับเครื่องมือในการปฏิบัติงาน + +
+ +
+⚙️ 22. "ฉันต้องการการควบคุมการปฏิบัติงานโดยไม่ต้องปรับใช้ใหม่" + +ทีมต้องการการเปลี่ยนแปลงรันไทม์อย่างรวดเร็วระหว่างเหตุการณ์หรือเหตุการณ์ต้นทุน + +**OmniRoute แก้ปัญหาอย่างไร:** + +- สลับการเปิดใช้งานคอมโบโดยตรงจากแดชบอร์ด MCP +- ใช้โปรไฟล์ความยืดหยุ่นจากชุดนโยบายที่กำหนดไว้ล่วงหน้า +- รีเซ็ตสถานะเซอร์กิตเบรกเกอร์จากแผงการทำงานเดียวกัน + +
+ +
+🔄 23. "ฉันต้องการการมองเห็นและการยกเลิกวงจรการใช้งาน A2A แบบสด" + +หากไม่มีการมองเห็นวงจรการใช้งาน เหตุการณ์ของงานจะยากต่อการคัดแยก + +**OmniRoute แก้ปัญหาอย่างไร:** + +- รายการงาน/การกรองตามสถานะ/ทักษะพร้อมการแบ่งหน้า +- เจาะลึกข้อมูลเมตาของงาน เหตุการณ์ และสิ่งประดิษฐ์ +- จุดสิ้นสุดการยกเลิกงานและการดำเนินการ UI พร้อมการยืนยัน + +
+ +
+🌊 24. "ฉันต้องการตัววัดสตรีมที่ใช้งานอยู่สำหรับโหลด A2A" + +เวิร์กโฟลว์การสตรีมจำเป็นต้องมีข้อมูลเชิงลึกในการดำเนินงานเกี่ยวกับการทำงานพร้อมกันและการเชื่อมต่อแบบสด + +**OmniRoute แก้ปัญหาอย่างไร:** + +- ตัวนับสตรีมที่ใช้งานรวมอยู่ในสถานะ A2A +- การประทับเวลางานล่าสุดและการนับต่อรัฐ +- การ์ดแดชบอร์ด A2A สำหรับการตรวจสอบการปฏิบัติงานแบบเรียลไทม์ + +
+ +
+🪪 25. "ฉันต้องการการค้นพบเอเจนต์มาตรฐานสำหรับลูกค้า" + +ไคลเอนต์และผู้ควบคุมภายนอกต้องการเมตาดาต้าที่เครื่องอ่านได้เพื่อการเริ่มต้นใช้งาน + +**OmniRoute แก้ปัญหาอย่างไร:** + +- บัตรตัวแทนเปิดเผยที่ `/.well-known/agent.json` +- ความสามารถและทักษะที่แสดงใน UI การจัดการ +- API สถานะ A2A รวมถึงข้อมูลเมตาการค้นพบสำหรับระบบอัตโนมัติ + +
+ +
+🧭 26. "ฉันต้องการการค้นพบโปรโตคอลในผลิตภัณฑ์ UX" + +หากผู้ใช้ไม่พบพื้นผิวของโปรโตคอล การนำไปใช้และคุณภาพการสนับสนุนจะลดลง + +**OmniRoute แก้ปัญหาอย่างไร:** + +- รายการแถบด้านข้างสำหรับ MCP และ A2A +- แท็บโปรโตคอลหน้าปลายทางพร้อมการเริ่มต้นและสถานะอย่างรวดเร็ว +- ลิงก์จากภาพรวมไปยังแดชบอร์ดการจัดการเฉพาะ + +
+ +
+🧪 27. "ฉันต้องการการตรวจสอบโปรโตคอลแบบ end-to-end กับไคลเอนต์จริง" + +การทดสอบจำลองไม่เพียงพอที่จะตรวจสอบความเข้ากันได้ของโปรโตคอลก่อนเผยแพร่ + +**OmniRoute แก้ปัญหาอย่างไร:** + +- ชุด E2E ที่บูทแอปและใช้การขนส่งไคลเอนต์ MCP SDK จริง +- ไคลเอนต์ A2A ทดสอบการค้นหา ส่ง สตรีม รับ และยกเลิกโฟลว์ +- ยืนยันการตรวจสอบข้ามกับการตรวจสอบ MCP และ API งาน A2A + +
+ +
+📡 28. "ฉันต้องการความสามารถในการสังเกตแบบรวมศูนย์ในทุกอินเทอร์เฟซ" + +การแยกความสามารถในการสังเกตตามโปรโตคอลทำให้เกิดจุดบอดและ MTTR ที่ยาวขึ้น + +**OmniRoute แก้ปัญหาอย่างไร:** + +- แดชบอร์ด/บันทึก/การวิเคราะห์แบบรวมในผลิตภัณฑ์เดียว +- สุขภาพ + การตรวจสอบ + ขอการตรวจวัดทางไกลผ่านเลเยอร์ OpenAI, MCP และ A2A +- API การดำเนินงานสำหรับสถานะและระบบอัตโนมัติ + +
+ +
+💼 29. "ฉันต้องการหนึ่งรันไทม์สำหรับพร็อกซี + เครื่องมือ + การจัดการเอเจนต์" + +การใช้บริการแยกกันจำนวนมากจะเพิ่มต้นทุนการดำเนินงานและโหมดความล้มเหลว + +**OmniRoute แก้ปัญหาอย่างไร:** + +- พร็อกซีที่เข้ากันได้กับ OpenAI, เซิร์ฟเวอร์ MCP และเซิร์ฟเวอร์ A2A ในสแต็กเดียว +- การรับรองความถูกต้องที่ใช้ร่วมกัน ความยืดหยุ่น การจัดเก็บข้อมูล และความสามารถในการสังเกต +- รูปแบบนโยบายที่สอดคล้องกันในทุกรูปแบบการโต้ตอบ + +
+ +
+🚀 30. "ฉันต้องจัดส่งเวิร์กโฟลว์เอเจนต์โดยไม่มีการแผ่ขยายโค้ดกาว" + +ทีมจะสูญเสียความเร็วเมื่อรวมบริการและสคริปต์เฉพาะกิจหลายรายการเข้าด้วยกัน + +**OmniRoute แก้ปัญหาอย่างไร:** + +- กลยุทธ์อุปกรณ์ปลายทางแบบครบวงจรสำหรับลูกค้าและตัวแทน +- UIs การจัดการโปรโตคอลในตัวและเส้นทางการตรวจสอบควัน +- รากฐานที่พร้อมสำหรับการผลิต (ความปลอดภัย การบันทึก ความยืดหยุ่น การสำรองข้อมูล) + +
+ +### Playbook ตัวอย่าง (กรณีการใช้งานแบบรวม) + +**Playbook A: เพิ่มการสมัครสมาชิกแบบชำระเงินให้สูงสุด + การสำรองข้อมูลราคาถูก** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: สแต็คการเขียนโค้ดแบบไม่มีค่าใช้จ่าย** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: ห่วงโซ่ทางเลือกที่เปิดตลอด 24 ชั่วโมงทุกวัน** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: ตัวแทนดำเนินการด้วย MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ เริ่มต้นอย่างรวดเร็ว **1. ติดตั้งทั่วโลก:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -714,66 +989,26 @@ OmniRoute มี Translator Playground ในตัวอันทรงพล
---- +## 🧪 การประเมินผล (Evals) -## 🎯 กรณีการใช้งาน +OmniRoute มีกรอบการประเมินในตัวเพื่อทดสอบคุณภาพการตอบสนองของ LLM เทียบกับชุดทอง เข้าถึงได้ผ่านทาง **Analytics → Evals** ในแดชบอร์ด -### กรณีที่ 1: "ฉันสมัครสมาชิก Claude Pro" +### ชุดทองในตัว -**ปัญหา:** โควต้าหมดอายุโดยไม่ได้ใช้ อัตราจำกัดระหว่างการเขียนโค้ดจำนวนมาก +"OmniRoute Golden Set" ที่โหลดไว้ล่วงหน้าประกอบด้วยกรณีทดสอบ 10 กรณีที่ครอบคลุม: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- คำทักทาย คณิตศาสตร์ ภูมิศาสตร์ การสร้างโค้ด +- การปฏิบัติตามรูปแบบ JSON, การแปล, มาร์กดาวน์ +- การปฏิเสธอย่างปลอดภัย (เนื้อหาที่เป็นอันตราย) การนับ ตรรกะบูลีน -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### กลยุทธ์การประเมินผล -### กรณีที่ 2: "ฉันต้องการต้นทุนเป็นศูนย์" - -**ปัญหา:** ไม่สามารถสมัครสมาชิกได้ ต้องการการเข้ารหัส AI ที่เชื่อถือได้ - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### กรณีที่ 3: "ฉันต้องการการเข้ารหัสตลอด 24 ชั่วโมงทุกวัน ไม่มีการหยุดชะงัก" - -**ปัญหา:** กำหนดเวลา ไม่สามารถหยุดการทำงานได้ - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### กรณีที่ 4: "ฉันต้องการ AI ฟรีใน OpenClaw" - -**ปัญหา:** ต้องการผู้ช่วย AI ในแอปส่งข้อความ ไม่มีค่าใช้จ่ายใดๆ ทั้งสิ้น - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| กลยุทธ์ | คำอธิบาย | ตัวอย่าง | +| ---------- | ------------------------------------------------------------------ | -------------------------------- | +| `exact` | ผลลัพธ์จะต้องตรงกันทุกประการ | `"4"` | +| `contains` | เอาต์พุตจะต้องมีสตริงย่อย (ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) | `"Paris"` | +| `regex` | เอาต์พุตต้องตรงกับรูปแบบ regex | `"1.*2.*3"` | +| `custom` | ฟังก์ชัน JS แบบกำหนดเองส่งคืนค่า true/false | `(output) => output.length > 10` | --- @@ -1051,29 +1286,6 @@ Settings → API Configuration: --- -## 🧪 การประเมินผล (Evals) - -OmniRoute มีกรอบการประเมินในตัวเพื่อทดสอบคุณภาพการตอบสนองของ LLM เทียบกับชุดทอง เข้าถึงได้ผ่านทาง **Analytics → Evals** ในแดชบอร์ด - -### ชุดทองในตัว - -"OmniRoute Golden Set" ที่โหลดไว้ล่วงหน้าประกอบด้วยกรณีทดสอบ 10 กรณีที่ครอบคลุม: - -- คำทักทาย คณิตศาสตร์ ภูมิศาสตร์ การสร้างโค้ด -- การปฏิบัติตามรูปแบบ JSON, การแปล, มาร์กดาวน์ -- การปฏิเสธอย่างปลอดภัย (เนื้อหาที่เป็นอันตราย) การนับ ตรรกะบูลีน - -### กลยุทธ์การประเมินผล - -| กลยุทธ์ | คำอธิบาย | ตัวอย่าง | -| ---------- | ------------------------------------------------------------------ | -------------------------------- | -| `exact` | ผลลัพธ์จะต้องตรงกันทุกประการ | `"4"` | -| `contains` | เอาต์พุตจะต้องมีสตริงย่อย (ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) | `"Paris"` | -| `regex` | เอาต์พุตต้องตรงกับรูปแบบ regex | `"1.*2.*3"` | -| `custom` | ฟังก์ชัน JS แบบกำหนดเองส่งคืนค่า true/false | `(output) => output.length > 10` | - ---- - ## 🐛 การแก้ไขปัญหา
@@ -1130,7 +1342,7 @@ OmniRoute มีกรอบการประเมินในตัวเพ > **⚠️ สิ่งสำคัญสำหรับการใช้ OmniRoute กับ VPS/Docker/servidor remoto** -### ใช่ OAuth ของ Antigravity / Gemini CLI หรือไม่? +### OAuth ระบบปฏิบัติการ **Antigravity** และ **Gemini CLI** ใช้ **Google OAuth 2.0** สำหรับการรับรองความถูกต้อง O Google ต้องการ `redirect_uri` usada no fluxo OAuth seja **exatamente** uma das URIs pré-cadastradas no Google Cloud Console do aplicativo. @@ -1219,7 +1431,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🛠️ เทคสแต็ค +## 🛠️ - **รันไทม์**: Node.js 18–22 LTS (⚠️ Node.js 24+ ไม่ได้รับการสนับสนุน\*\* — `better-sqlite3` ไบนารีดั้งเดิมเข้ากันไม่ได้) - **ภาษา**: TypeScript 5.9 — **100% TypeScript** ทั่วทั้ง `src/` และ `open-sse/` (v1.0.6) @@ -1270,7 +1482,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🗺️ โรดแมป +## 🗺️ OmniRoute มี **ฟีเจอร์มากกว่า 210 รายการที่วางแผน** ไว้ในขั้นตอนการพัฒนาหลายขั้นตอน นี่คือประเด็นสำคัญ: @@ -1295,18 +1507,6 @@ OmniRoute มี **ฟีเจอร์มากกว่า 210 รายก --- -## 📧 สนับสนุน - -> 💌 **เข้าร่วมชุมชนของเรา!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — รับความช่วยเหลือ แบ่งปันเคล็ดลับ และติดตามข่าวสารล่าสุด - -- **เว็บไซต์**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **ปัญหา**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **โปรเจ็กต์ดั้งเดิม**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 ผู้มีส่วนร่วม [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.uk-UA.md b/README.uk-UA.md index cf59b27f19..c58c88cafc 100644 --- a/README.uk-UA.md +++ b/README.uk-UA.md @@ -110,6 +110,35 @@ _Підключіть будь-який інструмент IDE або CLI на --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Чому OmniRoute? **Припиніть витрачати гроші та досягати лімітів:** @@ -128,6 +157,18 @@ _Підключіть будь-який інструмент IDE або CLI на --- +## 📧 Підтримка + +> 💬 **Приєднуйтесь до нашої спільноти!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — отримуйте допомогу, діліться порадами та будьте в курсі подій. + +- **Веб-сайт**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Проблеми**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Оригінальний проект**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Як це працює ``` @@ -157,263 +198,501 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 Що вирішує OmniRoute — 30 реальних проблем і варіантів використання -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Кожен розробник, який використовує інструменти штучного інтелекту, щодня стикається з цими проблемами.** OmniRoute було створено, щоб вирішити їх усі — від перевитрати коштів до регіональних блокувань, від порушених потоків OAuth до операцій протоколу та спостережуваності підприємства.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. «Я плачу за дорогу підписку, але мене все одно переривають через обмеження» -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Розробники платять 20–200 доларів на місяць за Claude Pro, Codex Pro або GitHub Copilot. Навіть якщо платити, квота має максимальну межу — 5 годин використання, тижневі ліміти або ліміти за хвилину. У середині сеансу кодування постачальник перестає відповідати, а розробник втрачає швидкість і продуктивність. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Smart 4-Tier Fallback** — якщо квота підписки закінчується, автоматично перенаправляється до API Key → Дешево → Безкоштовно без ручного втручання +- **Відстеження квот у реальному часі** — показує споживання токенів у реальному часі зі зворотним відліком скидання (5 годин, щодня, щотижня) +- **Підтримка кількох облікових записів** — кілька облікових записів у кожного постачальника з автоматичним циклічним перебором — коли один закінчується, перемикається на наступний +- **Користувацькі комбінації** — резервні ланцюжки, які можна налаштувати, із 6 стратегіями балансування (спочатку заповнення, циклічний, P2C, випадковий, найменш використовуваний, економічно оптимізований) +- **Бізнес-квоти Codex** — Моніторинг квот робочого простору бізнесу/команди безпосередньо на інформаційній панелі
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. «Мені потрібно використовувати кілька постачальників, але кожен має різний API» -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI використовує один формат, Claude (Anthropic) використовує інший, Gemini ще інший. Якщо розробник хоче перевірити моделі від різних постачальників або повернутися до них, йому потрібно переналаштувати SDK, змінити кінцеві точки, мати справу з несумісними форматами. Спеціальні постачальники (FriendLI, NIM) мають нестандартні кінцеві точки моделі. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Уніфікована кінцева точка** — один `http://localhost:20128/v1` служить проксі для всіх 36+ постачальників +- **Переклад форматів** — автоматичний і прозорий: OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **Response Sanitization** — видаляє нестандартні поля (`x_groq`, `usage_breakdown`, `service_tier`), які порушують роботу OpenAI SDK v1.83+ +- **Нормалізація ролі** — перетворює `developer` → `system` для постачальників, які не є OpenAI; `system` → `user` для GLM/ERNIE +- **Think Tag Extraction** — витягує блоки `` із таких моделей, як DeepSeek R1, у стандартизований `reasoning_content` +- **Структурований вихід для Gemini** — `json_schema` → `responseMimeType`/`responseSchema` автоматичне перетворення +- **`stream` за замовчуванням — `false`** — відповідає специфікації OpenAI, уникаючи неочікуваних SSE у Python/Rust/Go SDK.
-🌐 3. "My AI provider blocks my region/country" +🌐 3. «Мій постачальник штучного інтелекту блокує мій регіон/країну» -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Такі постачальники, як OpenAI/Codex, блокують доступ із певних географічних регіонів. Користувачі отримують помилки на зразок `unsupported_country_region_territory` під час з’єднань OAuth і API. Це особливо засмучує розробників із країн, що розвиваються. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **3-рівнева конфігурація проксі-сервера** — налаштовується проксі-сервер на 3 рівнях: глобальний (увесь трафік), для кожного постачальника (лише один постачальник) і для кожного підключення/ключа +- **Значки проксі-сервера з кольоровим кодуванням** — Візуальні індикатори: 🟢 глобальний проксі, 🟡 проксі-сервер постачальника, 🔵 проксі-сервер підключення, завжди показує IP-адресу +- **Обмін маркерами OAuth через проксі** — потік OAuth також проходить через проксі, вирішуючи `unsupported_country_region_territory` +- **Тестування з’єднання через проксі** — тестування з’єднання використовує налаштований проксі (без прямого обходу) +- **Підтримка SOCKS5** — повна підтримка проксі SOCKS5 для вихідної маршрутизації +- **TLS Fingerprint Spoofing** — TLS-відбиток, як у браузері, через `wreq-js` для обходу виявлення ботів
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. «Я хочу використовувати ШІ для кодування, але в мене немає грошей» -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Не кожен може платити 20–200 доларів на місяць за підписку на AI. Студентам, розробникам із країн, що розвиваються, любителям і фрілансерам потрібен доступ до якісних моделей за нульовою ціною. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Вбудовані безкоштовні постачальники рівня** — Вбудована підтримка 100% безкоштовних постачальників: iFlow (8 необмежених моделей), Qwen (3 необмежені моделі), Kiro (Claude безкоштовно), Gemini CLI (180K/місяць безкоштовно) +- **Безкоштовні комбінації** — ланцюжок `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = 0 доларів США/місяць без простоїв +- **Безкоштовні кредити NVIDIA NIM** — інтегровано 1000 безкоштовних кредитів +- **Стратегія оптимізації витрат** — стратегія маршрутизації, яка автоматично вибирає найдешевшого доступного постачальника
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. «Мені потрібно захистити свій ШІ-шлюз від несанкціонованого доступу» -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Коли шлюз штучного інтелекту надається мережі (LAN, VPS, Docker), будь-хто, хто має адресу, може використовувати токени/квоту розробника. Без захисту API вразливі до неправильного використання, швидкого впровадження та зловживання. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Керування ключами API** — генерація, ротація та визначення обсягу для кожного постачальника за допомогою спеціальної сторінки `/dashboard/api-manager` +- **Дозволи на рівні моделі** — обмежте ключі API певними моделями (`openai/*`, шаблони узагальнення) із перемикачем «Дозволити все»/«Обмежити» +- **API Endpoint Protection** — вимагати ключ для `/v1/models` і блокувати певних постачальників зі списку +- **Auth Guard + CSRF Protection** — усі маршрути інформаційної панелі захищені проміжним програмним забезпеченням `withAuth` + маркерами CSRF +- **Обмежувач швидкості** — обмеження швидкості за IP-адресою з настроюваними вікнами +- **IP Filtering** — список дозволених/чорних адрес для контролю доступу +- **Prompt Injection Guard** — очищення від шкідливих шаблонів підказок +- **Шифрування AES-256-GCM** — облікові дані зашифровані в стані спокою
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. «Мій постачальник не працює, і я втратив потік кодування» -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Постачальники AI можуть стати нестабільними, повертати помилки 5xx або досягати тимчасових обмежень швидкості. Якщо розробник залежить від одного постачальника, вони перериваються. Без автоматичних вимикачів повторні спроби можуть призвести до збою програми. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Автоматичний вимикач для кожного постачальника** — автоматичне розмикання/замикання з настроюваними пороговими значеннями та часом відновлення (закрито/розімкнуто/напіврозімкнуто) +- **Exponential Backoff** — прогресивні затримки повторних спроб +- **Anti-Thundering Herd** — Mutex + захист семафора від одночасних повторних штормів +- **Комбіновані запасні ланцюги** — якщо основний постачальник виходить з ладу, автоматично проходить через ланцюжок без втручання. +- **Combo Circuit Breaker** — автоматично вимикає несправні постачальники в комбінованому ланцюжку +- **Health Dashboard** — Моніторинг безвідмовної роботи, стани автоматичного вимикача, блокування, статистика кешу, затримка p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. «Налаштування кожного інструменту штучного інтелекту є виснажливим і повторюваним процесом» -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Розробники використовують Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Кожному інструменту потрібна інша конфігурація (кінцева точка API, ключ, модель). Перенастроювання при зміні постачальника чи моделі – марна трата часу. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **Панель інструментів CLI** — спеціальна сторінка з налаштуванням одним клацанням для Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline +- **GitHub Copilot Config Generator** — генерує `chatLanguageModels.json` для коду VS із масовим вибором моделі +- **Майстер адаптації** — 4-етапне налаштування для тих, хто вперше користується +- **Одна кінцева точка, усі моделі** — налаштуйте `http://localhost:20128/v1` один раз, отримайте доступ до 36+ постачальників
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. «Керування токенами OAuth від кількох постачальників — це пекло» -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot — усі використовують OAuth 2.0 із терміном дії маркерів. Розробникам необхідно постійно проходити повторну автентифікацію, мати справу з `client_secret is missing`, `redirect_uri_mismatch` і збоями на віддалених серверах. OAuth у LAN/VPS є особливо проблематичним. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Auto Token Refresh** — маркери OAuth оновлюються у фоновому режимі до завершення терміну дії +- **Вбудований OAuth 2.0 (PKCE)** — автоматичний потік для Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **Multi-Account OAuth** — кілька облікових записів на постачальника за допомогою вилучення токенів JWT/ID +- **OAuth LAN/Remote Fix** — виявлення приватної IP-адреси для `redirect_uri` + ручний режим URL-адреси для віддалених серверів +- **OAuth за Nginx** — використовує `window.location.origin` для зворотної сумісності проксі +- **Remote OAuth Guide** — покроковий посібник для облікових даних Google Cloud на VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. «Я не знаю, скільки я витрачаю і куди» -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Розробники використовують кілька платних постачальників, але не мають єдиного уявлення про витрати. Кожен постачальник має власну платіжну панель, але немає консолідованого перегляду. Несподівані витрати можуть накопичитися. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Інформаційна панель аналізу витрат** — відстеження вартості кожного токена та керування бюджетом для кожного постачальника +- **Бюджетні обмеження на рівень** — максимальна сума витрат на рівень, що запускає автоматичний відкат +- **Конфігурація ціни за модель** — налаштовувані ціни за модель +- **Статистика використання за ключ API** — кількість запитів і позначка часу останнього використання для кожного ключа +- **Інформаційна панель аналітики** — картки зі статистичними даними, діаграма використання моделі, таблиця постачальників із показниками успіху та затримкою
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. «Я не можу діагностувати помилки та проблеми під час викликів ШІ» -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Коли виклик не вдається, розробник не знає, чи це було обмеження швидкості, прострочений маркер, неправильний формат чи помилка постачальника. Фрагментовані журнали на різних терміналах. Без спостережливості налагодження відбувається методом проб і помилок. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Інформаційна панель уніфікованих журналів** — 4 вкладки: журнали запитів, журнали проксі, журнали аудиту, консоль +- **Console Log Viewer** — засіб перегляду терміналу в режимі реального часу з кольоровими рівнями, автопрокручуванням, пошуком, фільтром +- **Проксі-журнали SQLite** — постійні журнали, які залишаються після перезапуску сервера +- **Translator Playground** — 4 режими налагодження: Playground (переклад формату), Chat Tester (туди й назад), Test Bench (пакет), Live Monitor (у реальному часі) +- **Запит телеметрії** — затримка p50/p95/p99 + трасування X-Request-Id +- **Логування на основі файлів із ротацією** — консольний перехоплювач записує все в журнал JSON із ротацією на основі розміру
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. «Розгортання та підтримка шлюзу є складною справою» -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Встановлення, налаштування та обслуговування проксі ШІ в різних середовищах (локальне, VPS, Docker, хмара) є трудомістким. Такі проблеми, як жорстко закодовані шляхи, `EACCES` у каталогах, конфлікти портів і кросплатформні збірки, додають тертя. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **npm global install** — `npm install -g omniroute && omniroute` — готово +- **Мультиплатформенний Docker** — нативний AMD64 + ARM64 (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Профілі створення Docker** — `base` (без інструментів CLI) і `cli` (з Claude Code, Codex, OpenClaw) +- **Electron Desktop App** — рідна програма для Windows/macOS/Linux із системним треєм, автозапуском, офлайн-режимом +- **Режим розділеного порту** — API та інформаційна панель на окремих портах для розширених сценаріїв (зворотний проксі, мережа контейнерів) +- **Cloud Sync** — синхронізація налаштувань між пристроями через Cloudflare Workers +- **Резервне копіювання БД** — автоматичне резервне копіювання, відновлення, експорт та імпорт усіх налаштувань
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. «Інтерфейс лише англійською мовою, і моя команда не розмовляє англійською» -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Команди в неангломовних країнах, особливо в Латинській Америці, Азії та Європі, стикаються з інтерфейсами лише англійською мовою. Мовні бар’єри зменшують адаптацію та збільшують кількість помилок конфігурації. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Інформаційна панель i18n — 30 мов** — перекладено всі 500+ клавіш, включаючи арабську, болгарську, датську, німецьку, іспанську, фінську, французьку, іврит, гінді, угорську, індонезійську, італійську, японську, корейську, малайську, голландську, норвезьку, польську, португальську (PT/BR), румунську, російську, словацьку, шведську, тайську, українську, в’єтнамську, китайська, філіппінська, англійська +- **Підтримка RTL** — підтримка арабської та івриту справа наліво +- **Багатомовні файли README** — 30 повних перекладів документації +- **Вибір мови** — значок глобуса в заголовку для перемикання в реальному часі
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. «Мені потрібно більше, ніж чат — мені потрібні вставки, зображення, аудіо» -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +ШІ — це не просто завершення чату. Розробникам потрібно генерувати зображення, транскрибувати аудіо, створювати вбудовування для RAG, змінювати рейтинг документів і модерувати вміст. Кожен API має різну кінцеву точку та формат. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Вбудовування** — `/v1/embeddings` із 6 постачальниками та 9+ моделями +- **Генерація зображень** — `/v1/images/generations` із 10 постачальниками та понад 20 моделями (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI) +- **Текст у відео** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) і SD WebUI +- **Текст у музику** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen) +- **Транскрипція аудіо** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Перетворення тексту в мовлення** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3 + існуючі постачальники +- **Модерації** — `/v1/moderations` — Перевірки безпеки вмісту +- **Переранжування** — `/v1/rerank` — Переранжування релевантності документа +- **Responses API** — повна підтримка `/v1/responses` для Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. «У мене немає можливості перевірити та порівняти якість різних моделей» -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Розробники хочуть знати, яка модель найкраще підходить для їхнього випадку використання — код, переклад, міркування — але порівнювати вручну повільно. Інтегрованих інструментів оцінювання не існує. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Оцінки LLM** — Золотий набір тестів із 10 попередньо завантаженими випадками, що охоплюють привітання, математику, географію, генерацію коду, відповідність JSON, переклад, уцінку, відмову безпеки +- **4 стратегії збігу** — `exact`, `contains`, `regex`, `custom` (функція JS) +- **Translator Playground Test Bench** — Пакетне тестування з кількома входами та очікуваними результатами, порівняння між постачальниками +- **Chat Tester** — повний цикл із візуальним відтворенням відповідей +- **Live Monitor** — потік усіх запитів, що проходять через проксі, у реальному часі
-📈 15. "I need to scale without losing performance" +📈 15. «Мені потрібно масштабувати без втрати продуктивності» -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +Оскільки кількість запитів зростає, без кешування ті самі запитання створюють дублюючі витрати. Без ідемпотентності, дублікат запитів обробки відходів. Необхідно дотримуватися обмежень тарифів для кожного постачальника. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Семантичний кеш** — дворівневий кеш (підпис + семантичний) зменшує вартість і затримку +- **Request Idempotency** — вікно дедуплікації 5 с для ідентичних запитів +- **Виявлення ліміту швидкості** — RPM для кожного постачальника, мінімальний розрив і максимальне одночасне відстеження +- **Обмеження швидкості, які можна редагувати** — налаштування за замовчуванням у Параметрах → Стійкість із наполегливістю +- **API Key Validation Cache** — 3-рівневий кеш для продуктивності +- **Інформаційна панель справності з телеметрією** — затримка p50/p95/p99, статистика кешу, час роботи
-🤖 16. "I want to control model behavior globally" +🤖 16. «Я хочу глобально контролювати поведінку моделі» -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Розробники, які хочуть, щоб усі відповіді відповідали певною мовою, з певним тоном або хочуть обмежити маркери міркування. Налаштовувати це в кожному інструменті/запиті є недоцільним. -**How OmniRoute solves it:** +**Як це вирішує OmniRoute:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **Впровадження системної підказки** — глобальна підказка застосовується до всіх запитів +- **Thinking Budget Validation** — Контроль розподілу токенів міркувань за запитом (прохідний, автоматичний, спеціальний, адаптивний) +- **6 стратегій маршрутизації** — глобальні стратегії, які визначають спосіб розподілу запитів +- **Wildcard Router** — шаблони `provider/*` динамічно маршрутизують до будь-якого постачальника +- **Увімкнути/вимкнути комбо** — перемикайте комбо безпосередньо з інформаційної панелі +- **Перемикнути постачальника** — увімкнути/вимкнути всі з’єднання для постачальника одним клацанням миші +- **Заблоковані постачальники** — виключити певних постачальників зі списку `/v1/models`
+
+🧰 17. «Мені потрібні інструменти MCP як першокласні можливості продукту» + +Багато шлюзів ШІ розкривають MCP лише як приховану деталь реалізації. Командам потрібен видимий, керований рівень операцій. + +**Як це вирішує OmniRoute:** + +- MCP з’являється на панелі навігації та на вкладці протоколу кінцевої точки +- Спеціальна сторінка керування MCP із процесом, інструментами, обсягами й аудитом +- Вбудований швидкий запуск для `omniroute --mcp` і адаптація клієнта + +
+ +
+🧠 18. «Мені потрібна оркестровка A2A із синхронізацією + шляхи завдань потоку» + +Робочі процеси агента потребують як прямих відповідей, так і тривалого потокового виконання з контролем життєвого циклу. + +**Як це вирішує OmniRoute:** + +- Кінцева точка A2A JSON-RPC (`POST /a2a`) з `message/send` і `message/stream` +- Потокова передача SSE з розповсюдженням стану терміналу +- API життєвого циклу завдань для `tasks/get` і `tasks/cancel` + +
+ +
+🛰️ 19. «Мені потрібна реальна справність процесу MCP, а не вгаданий статус» + +Операційним групам потрібно знати, чи справді MCP активний, а не лише те, чи доступний API. + +**Як це вирішує OmniRoute:** + +- Файл серцевого ритму виконання з PID, часовими мітками, транспортом, кількістю інструментів і режимом області +- API статусу MCP, що поєднує серцебиття + останню активність +- Картки стану інтерфейсу користувача для процесу/часу безперебійної роботи/свіжості пульсу + +
+ +
+📋 20. «Мені потрібне виконання інструменту MCP з можливістю перевірки» + +Коли інструменти змінюють конфігурацію або запускають операційні дії, командам потрібна криміналістична відстежуваність. + +**Як це вирішує OmniRoute:** + +— Журнал аудиту з підтримкою SQLite для викликів інструментів MCP + +- Фільтри за інструментом, успіхом/невдачею, ключем API та розбивкою на сторінки +- Таблиця аудиту інформаційної панелі + кінцеві точки статистики для автоматизації + +
+ +
+🔐 21. «Мені потрібні обмежені дозволи MCP для інтеграції» + +Різні клієнти повинні мати мінімальний доступ до категорій інструментів. + +**Як це вирішує OmniRoute:** + +- 9 детальних областей MCP для контрольованого доступу до інструменту +- Застосування обсягу та видимість в інтерфейсі користувача керування MCP +- Безпечна поза за замовчуванням для робочих інструментів + +
+ +
+⚙️ 22. «Мені потрібен оперативний контроль без перерозподілу» + +Командам потрібні швидкі зміни часу виконання під час інцидентів або витрат. + +**Як це вирішує OmniRoute:** + +- Перемикання комбо-активації безпосередньо з інформаційної панелі MCP +- Застосовуйте профілі стійкості з попередньо визначених пакетів політик +- Скинути стан автоматичного вимикача з тієї ж панелі керування + +
+ +
+🔄 23. «Мені потрібна видимість і скасування життєвого циклу завдання A2A» + +Без видимості життєвого циклу інциденти завдань стає важко сортувати. + +**Як це вирішує OmniRoute:** + +— Список завдань/фільтрування за станом/навиками з розбивкою на сторінки + +- Деталізація метаданих завдань, подій і артефактів +- Кінцева точка скасування завдання та дія інтерфейсу користувача з підтвердженням + +
+ +
+🌊 24. «Мені потрібні активні показники потоку для завантаження A2A» + +Робочі процеси потокової передачі вимагають оперативного розуміння паралельності та живих з’єднань. + +**Як це вирішує OmniRoute:** + +— Лічильники активних потоків інтегровані в статус A2A + +- Мітка часу останнього завдання та підрахунок стану +- Картки інформаційної панелі A2A для моніторингу операцій у реальному часі + +
+ +
+🪪 25. «Мені потрібне стандартне виявлення агентів для клієнтів» + +Зовнішнім клієнтам і оркестрантам потрібні машинозчитувані метадані для адаптації. + +**Як це вирішує OmniRoute:** + +- Картка агента розкрита на `/.well-known/agent.json` +- Можливості та навички, показані в інтерфейсі користувача користувача +- API стану A2A включає метадані виявлення для автоматизації + +
+ +
+🧭 26. «Мені потрібна можливість виявлення протоколу в UX продукту» + +Якщо користувачі не можуть виявити поверхні протоколу, якість впровадження та підтримки падає. + +**Як це вирішує OmniRoute:** + +— Записи бічної панелі для MCP і A2A + +- Сторінка кінцевої точки Вкладка протоколів із швидким запуском і статусом +- Посилання з огляду на спеціальні інформаційні панелі керування + +
+ +
+🧪 27. «Мені потрібна наскрізна перевірка протоколу з реальними клієнтами» + +Пробних тестів недостатньо для перевірки сумісності протоколу перед випуском. + +**Як це вирішує OmniRoute:** + +- Комплект E2E, який завантажує програму та використовує реальний клієнтський транспорт MCP SDK +- Клієнт A2A перевіряє потоки виявлення, надсилання, потокової передачі, отримання та скасування +- Перехресна перевірка тверджень щодо аудиту MCP та API завдань A2A + +
+ +
+📡 28. «Мені потрібна уніфікована можливість спостереження через усі інтерфейси» + +Поділ спостережуваності за протоколом створює сліпі зони та довший MTTR. + +**Як це вирішує OmniRoute:** + +- Уніфіковані інформаційні панелі/журнали/аналітика в одному продукті +- Справність + аудит + телеметрія запитів на рівнях OpenAI, MCP і A2A +- Операційні API для статусу та автоматизації + +
+ +
+💼 29. «Мені потрібне одне середовище виконання для проксі + інструментів + оркестровки агента» + +Запуск багатьох окремих служб збільшує експлуатаційні витрати та частоту збоїв. + +**Як це вирішує OmniRoute:** + +- OpenAI-сумісний проксі, сервер MCP і сервер A2A в одному стеку +- Спільна автентифікація, стійкість, зберігання даних і можливість спостереження +- Послідовна модель політики на всіх поверхнях взаємодії + +
+ +
+🚀 30. «Мені потрібно надсилати агентські робочі процеси без розповсюдження клею-коду» + +Команди втрачають швидкість під час з’єднання кількох спеціальних служб і сценаріїв. + +**Як це вирішує OmniRoute:** + +- Уніфікована стратегія кінцевих точок для клієнтів і агентів + — Вбудовані інтерфейси керування протоколами та шляхи перевірки диму +- Основи, готові до виробництва (безпека, журналювання, стійкість, резервне копіювання) + +
+ +### Приклади Playbooks + +**Playbook A: Максимальна кількість платної підписки + дешеве резервне копіювання** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: стек кодування без витрат** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: резервний ланцюжок 24/7** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: Операції агента з MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Швидкий старт **1. Встановити глобально:** @@ -506,7 +785,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +994,26 @@ OmniRoute містить потужний вбудований Translator Playgr
---- +## 🧪 Оцінки (Evals) -## 🎯 Випадки використання +OmniRoute містить вбудовану систему оцінювання для перевірки якості відповіді LLM на відповідність золотому набору. Доступ до нього через **Аналітика → Оцінки** на інформаційній панелі. -### Випадок 1: «У мене є підписка на Claude Pro» +### Вбудований Золотий набір -**Проблема:** Квота закінчується невикористаною, обмеження швидкості під час інтенсивного кодування +Попередньо завантажений "Золотий набір OmniRoute" містить 10 тестів, які охоплюють: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Привітання, математика, географія, генерація коду +- Відповідність формату JSON, переклад, розмітка +- Відмова безпеки (шкідливий контент), підрахунок, булева логіка -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Стратегії оцінювання -### Випадок 2: "Я хочу нульову вартість" - -**Проблема:** не можу дозволити собі підписку, потрібне надійне кодування ШІ - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Випадок 3: «Мені потрібне кодування 24/7, без перерв» - -**Проблема:** Дедлайни, не можу дозволити собі простою - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Випадок 4: «Я хочу БЕЗКОШТОВНОГО ШІ в OpenClaw» - -**Проблема:** потрібен помічник штучного інтелекту в програмах для обміну повідомленнями, повністю безкоштовний - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Стратегія | Опис | Приклад | +| ---------- | -------------------------------------------------------------- | -------------------------------- | +| `exact` | Вихідні дані повинні точно відповідати | `"4"` | +| `contains` | Вихідні дані повинні містити підрядок (незалежно від регістру) | `"Paris"` | +| `regex` | Вихідні дані мають відповідати шаблону регулярного виразу | `"1.*2.*3"` | +| `custom` | Спеціальна функція JS повертає true/false | `(output) => output.length > 10` | --- @@ -1058,29 +1297,6 @@ Settings → API Configuration: --- -## 🧪 Оцінки (Evals) - -OmniRoute містить вбудовану систему оцінювання для перевірки якості відповіді LLM на відповідність золотому набору. Доступ до нього через **Аналітика → Оцінки** на інформаційній панелі. - -### Вбудований Золотий набір - -Попередньо завантажений "Золотий набір OmniRoute" містить 10 тестів, які охоплюють: - -- Привітання, математика, географія, генерація коду -- Відповідність формату JSON, переклад, розмітка -- Відмова безпеки (шкідливий контент), підрахунок, булева логіка - -### Стратегії оцінювання - -| Стратегія | Опис | Приклад | -| ---------- | -------------------------------------------------------------- | -------------------------------- | -| `exact` | Вихідні дані повинні точно відповідати | `"4"` | -| `contains` | Вихідні дані повинні містити підрядок (незалежно від регістру) | `"Paris"` | -| `regex` | Вихідні дані мають відповідати шаблону регулярного виразу | `"1.*2.*3"` | -| `custom` | Спеціальна функція JS повертає true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Усунення несправностей
@@ -1134,13 +1350,13 @@ OmniRoute містить вбудовану систему оцінювання - OmniRoute v1.0.6+ включає резервну перевірку через завершення чату - Переконайтеся, що базова URL-адреса містить суфікс `/v1` -### 🔐 OAuth em Servidor Remoto (віддалене налаштування OAuth) +### 🔐 OAuth > **⚠️ ВАЖЛИВО для використання OmniRoute у віддаленому VPS/Docker/сервері** -### Чи OAuth для Antigravity / Gemini CLI не підтримує віддалені сервери? +### OAuth Провідники **Antigravity** і **Gemini CLI** використовують **Google OAuth 2.0** для автентифікації. Google вимагає, щоб `redirect_uri` не використовував fluxo OAuth, який **exatamente** має URI перед кадастрадами без додатка Google Cloud Console. @@ -1229,7 +1445,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🛠️ Tech Stack +## 🛠️ - **Серед виконання**: Node.js 18–22 LTS (⚠️ Node.js 24+ **не підтримується** — рідні двійкові файли `better-sqlite3` несумісні) - **Мова**: TypeScript 5.9 — **100% TypeScript** для `src/` та `open-sse/` (версія 1.0.6) @@ -1281,7 +1497,7 @@ Se não quiser criar credenciais próprias agora, ainda é possível usar o flux --- -## 🗺️ Дорожня карта +## 🗺️ OmniRoute має **заплановано понад 210 функцій** на кількох етапах розробки. Ось ключові області: @@ -1306,18 +1522,6 @@ OmniRoute має **заплановано понад 210 функцій** на --- -## 📧 Підтримка - -> 💬 **Приєднуйтесь до нашої спільноти!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — отримуйте допомогу, діліться порадами та будьте в курсі подій. - -- **Веб-сайт**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Проблеми**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Оригінальний проект**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Автори [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.vi.md b/README.vi.md index 5b082c1df6..25c998e6d7 100644 --- a/README.vi.md +++ b/README.vi.md @@ -110,6 +110,35 @@ _Kết nối mọi công cụ IDE hoặc CLI được hỗ trợ bởi AI thông --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 Tại sao lại là OmniRoute? **Ngưng lãng phí tiền và đạt đến giới hạn:** @@ -128,6 +157,18 @@ _Kết nối mọi công cụ IDE hoặc CLI được hỗ trợ bởi AI thông --- +## 📧 Hỗ trợ + +> 💬 **Tham gia cộng đồng của chúng tôi!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Nhận trợ giúp, chia sẻ mẹo và luôn cập nhật. + +- **Trang web**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Vấn đề**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **Dự án gốc**: [9router by decolua](https://github.com/decolua/9router) + +--- + ## 🔄 Nó hoạt động như thế nào ``` @@ -157,263 +198,497 @@ Result: Never stop coding, minimal cost --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 OmniRoute giải quyết được gì — 30 điểm khó thực sự và trường hợp sử dụng -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **Mọi nhà phát triển sử dụng công cụ AI đều phải đối mặt với những vấn đề này hàng ngày.** OmniRoute được xây dựng để giải quyết tất cả — từ chi phí vượt mức cho đến chặn khu vực, từ luồng OAuth bị hỏng đến hoạt động giao thức và khả năng quan sát của doanh nghiệp.
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1. "Tôi trả tiền cho một thuê bao đắt tiền nhưng vẫn bị gián đoạn bởi các giới hạn" -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +Các nhà phát triển trả 20–200 USD/tháng cho Claude Pro, Codex Pro hoặc GitHub Copilot. Ngay cả khi trả tiền, hạn ngạch vẫn có mức trần - 5 giờ sử dụng, giới hạn hàng tuần hoặc giới hạn tốc độ mỗi phút. Giữa phiên mã hóa, nhà cung cấp ngừng phản hồi và nhà phát triển mất đi dòng chảy và năng suất. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **Dự phòng 4 tầng thông minh** — Nếu hết hạn ngạch đăng ký, tự động chuyển hướng đến Khóa API → Giá rẻ → Miễn phí mà không cần can thiệp thủ công +- **Theo dõi hạn ngạch theo thời gian thực** — Hiển thị mức tiêu thụ mã thông báo trong thời gian thực với tính năng đếm ngược đặt lại (5 giờ, hàng ngày, hàng tuần) +- **Hỗ trợ nhiều tài khoản** — Nhiều tài khoản cho mỗi nhà cung cấp với tính năng tự động quay vòng — khi hết một tài khoản, hãy chuyển sang tài khoản tiếp theo +- **Combo tùy chỉnh** — Chuỗi dự phòng có thể tùy chỉnh với 6 chiến lược cân bằng (điền trước, quay vòng, P2C, ngẫu nhiên, ít sử dụng nhất, tối ưu hóa chi phí) +- **Hạn ngạch kinh doanh Codex** — Giám sát hạn ngạch không gian làm việc của Doanh nghiệp/Nhóm trực tiếp trong bảng điều khiển
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2. "Tôi cần sử dụng nhiều nhà cung cấp nhưng mỗi nhà cung cấp có một API khác nhau" -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI sử dụng một định dạng, Claude (Anthropic) sử dụng một định dạng khác, Gemini lại sử dụng một định dạng khác. Nếu nhà phát triển muốn thử nghiệm các mô hình từ các nhà cung cấp khác nhau hoặc dự phòng giữa các nhà cung cấp đó, họ cần phải định cấu hình lại SDK, thay đổi điểm cuối, xử lý các định dạng không tương thích. Các nhà cung cấp tùy chỉnh (FriendLI, NIM) có các điểm cuối mô hình không chuẩn. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **Điểm cuối hợp nhất** — Một `http://localhost:20128/v1` duy nhất đóng vai trò là proxy cho tất cả hơn 36 nhà cung cấp +- **Dịch định dạng** — Tự động và minh bạch: OpenAI ↔ Claude ↔ Gemini ↔ API phản hồi +- **Sạch hóa phản hồi** — Loại bỏ các trường không chuẩn (`x_groq`, `usage_breakdown`, `service_tier`) phá vỡ OpenAI SDK v1.83+ +- **Chuẩn hóa vai trò** — Chuyển đổi `developer` → `system` cho các nhà cung cấp không thuộc OpenAI; `system` → `user` cho GLM/ERNIE +- **Think Tag Extraction** — Trích xuất các khối `` từ các mô hình như DeepSeek R1 thành `reasoning_content` được tiêu chuẩn hóa +- **Đầu ra có cấu trúc cho Gemini** — `json_schema` → `responseMimeType`/`responseSchema` chuyển đổi tự động +- **`stream` mặc định là `false`** — Phù hợp với thông số OpenAI, tránh SSE không mong muốn trong SDK Python/Rust/Go
-🌐 3. "My AI provider blocks my region/country" +🌐 3. "Nhà cung cấp AI của tôi chặn khu vực/quốc gia của tôi" -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +Các nhà cung cấp như OpenAI/Codex chặn quyền truy cập từ các khu vực địa lý nhất định. Người dùng gặp phải các lỗi như `unsupported_country_region_territory` trong quá trình kết nối OAuth và API. Điều này đặc biệt gây khó chịu cho các nhà phát triển từ các nước đang phát triển. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **Cấu hình proxy 3 cấp** — Proxy có thể định cấu hình ở 3 cấp độ: toàn cầu (tất cả lưu lượng truy cập), mỗi nhà cung cấp (chỉ một nhà cung cấp) và mỗi kết nối/khóa +- **Huy hiệu proxy được mã hóa màu** — Chỉ báo trực quan: 🟢 proxy toàn cầu, 🟡 proxy nhà cung cấp, 🔵 proxy kết nối, luôn hiển thị IP +- **Trao đổi mã thông báo OAuth thông qua proxy** — Luồng OAuth cũng đi qua proxy, giải quyết `unsupported_country_region_territory` +- **Kiểm tra kết nối qua Proxy** — Kiểm tra kết nối sử dụng proxy đã định cấu hình (không cần bỏ qua trực tiếp nữa) +- **Hỗ trợ SOCKS5** — Hỗ trợ proxy SOCKS5 đầy đủ cho định tuyến đi +- **Giả mạo dấu vân tay TLS** — Dấu vân tay TLS giống trình duyệt thông qua `wreq-js` để vượt qua khả năng phát hiện bot
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4. "Tôi muốn sử dụng AI để viết mã nhưng tôi không có tiền" -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +Không phải ai cũng có thể trả 20–200 USD/tháng để đăng ký AI. Sinh viên, nhà phát triển từ các quốc gia mới nổi, những người có sở thích và người làm nghề tự do cần được tiếp cận với các mô hình chất lượng với chi phí bằng 0. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **Tích hợp sẵn nhà cung cấp cấp miễn phí** — Hỗ trợ riêng cho các nhà cung cấp miễn phí 100%: iFlow (8 mẫu không giới hạn), Qwen (3 mẫu không giới hạn), Kiro (Claude miễn phí), Gemini CLI (miễn phí 180K/tháng) +- **Combo chỉ miễn phí** — Chuỗi `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/tháng mà không có thời gian ngừng hoạt động +- **Tín dụng miễn phí NVIDIA NIM** — Tích hợp 1000 tín dụng miễn phí +- **Chiến lược tối ưu hóa chi phí** — Chiến lược định tuyến tự động chọn nhà cung cấp sẵn có rẻ nhất
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5. "Tôi cần bảo vệ cổng AI của mình khỏi bị truy cập trái phép" -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +Khi đưa cổng AI vào mạng (LAN, VPS, Docker), bất kỳ ai có địa chỉ đều có thể sử dụng mã thông báo/hạn ngạch của nhà phát triển. Nếu không có biện pháp bảo vệ, các API dễ bị lạm dụng, chèn ép và lạm dụng. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **Quản lý khóa API** — Tạo, xoay vòng và xác định phạm vi cho mỗi nhà cung cấp bằng trang `/dashboard/api-manager` chuyên dụng +- **Quyền cấp mô hình** — Hạn chế khóa API đối với các mô hình cụ thể (`openai/*`, mẫu ký tự đại diện), với nút chuyển đổi Cho phép tất cả/Hạn chế +- **Bảo vệ điểm cuối API** — Yêu cầu khóa cho `/v1/models` và chặn các nhà cung cấp cụ thể khỏi danh sách +- **Auth Guard + CSRF Protection** — Tất cả các tuyến bảng điều khiển được bảo vệ bằng phần mềm trung gian `withAuth` + mã thông báo CSRF +- **Giới hạn tốc độ** — Giới hạn tốc độ trên mỗi IP với các cửa sổ có thể định cấu hình +- **Lọc IP** — Danh sách cho phép/danh sách chặn để kiểm soát truy cập +- **Prompt Tiêm Guard** — Khử trùng các mẫu nhắc nhở độc hại +- **Mã hóa AES-256-GCM** — Thông tin xác thực được mã hóa ở trạng thái lưu trữ
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6. "Nhà cung cấp của tôi ngừng hoạt động và tôi mất luồng mã hóa" -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +Các nhà cung cấp AI có thể trở nên không ổn định, trả về lỗi 5xx hoặc đạt giới hạn tốc độ tạm thời. Nếu một nhà phát triển phụ thuộc vào một nhà cung cấp duy nhất thì họ sẽ bị gián đoạn. Nếu không có bộ ngắt mạch, việc thử lại nhiều lần có thể làm hỏng ứng dụng. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **Bộ ngắt mạch cho mỗi nhà cung cấp** — Tự động mở/đóng với ngưỡng có thể định cấu hình và thời gian hồi chiêu (Đóng/Mở/Nửa mở) +- **Thời gian chờ theo cấp số nhân** — Độ trễ thử lại lũy tiến +- **Bầy chống sấm sét** — Mutex + bảo vệ semaphore chống lại các cơn bão thử lại đồng thời +- **Chuỗi dự phòng kết hợp** — Nếu nhà cung cấp chính không thành công, nó sẽ tự động rơi qua chuỗi mà không cần can thiệp +- **Combo Circuit Breaker** — Tự động vô hiệu hóa các nhà cung cấp bị lỗi trong chuỗi kết hợp +- **Bảng thông tin sức khỏe** — Giám sát thời gian hoạt động, trạng thái ngắt mạch, khóa, số liệu thống kê bộ nhớ đệm, độ trễ p50/p95/p99
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. "Cấu hình từng công cụ AI thật tẻ nhạt và lặp đi lặp lại" -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +Nhà phát triển sử dụng Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Mỗi công cụ cần một cấu hình khác nhau (điểm cuối API, khóa, mô hình). Việc cấu hình lại khi chuyển đổi nhà cung cấp hoặc mô hình là một sự lãng phí thời gian. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **Bảng điều khiển công cụ CLI** — Trang chuyên dụng với thiết lập bằng một cú nhấp chuột cho Claude Code, Codex CLI, OpenClaw, Kilo Code, AntiGravity, Cline +- **Trình tạo cấu hình GitHub Copilot** — Tạo `chatLanguageModels.json` cho Mã VS với lựa chọn mô hình hàng loạt +- **Trình hướng dẫn tích hợp** — Thiết lập 4 bước có hướng dẫn cho người dùng lần đầu +- **Một điểm cuối, tất cả các kiểu máy** — Định cấu hình `http://localhost:20128/v1` một lần, truy cập hơn 36 nhà cung cấp
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8. "Quản lý mã thông báo OAuth từ nhiều nhà cung cấp là địa ngục" -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code, Codex, Gemini CLI, Copilot — tất cả đều sử dụng OAuth 2.0 với các mã thông báo sắp hết hạn. Các nhà phát triển cần liên tục xác thực lại, xử lý `client_secret is missing`, `redirect_uri_mismatch` và các lỗi trên máy chủ từ xa. OAuth trên LAN/VPS đặc biệt có vấn đề. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **Tự động làm mới mã thông báo** — Làm mới mã thông báo OAuth ở chế độ nền trước khi hết hạn +- **Tích hợp OAuth 2.0 (PKCE)** — Luồng tự động cho Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow +- **OAuth nhiều tài khoản** — Nhiều tài khoản cho mỗi nhà cung cấp thông qua trích xuất mã thông báo JWT/ID +- **OAuth LAN/Remote Fix** — Phát hiện IP riêng cho `redirect_uri` + chế độ URL thủ công cho máy chủ từ xa +- **OAuth đằng sau Nginx** — Sử dụng `window.location.origin` để tương thích với proxy ngược +- **Hướng dẫn OAuth từ xa** — Hướng dẫn từng bước về thông tin đăng nhập Google Cloud trên VPS/Docker
-📊 9. "I don't know how much I'm spending or where" +📊 9. "Tôi không biết mình đang chi bao nhiêu hay ở đâu" -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +Các nhà phát triển sử dụng nhiều nhà cung cấp trả phí nhưng không có quan điểm thống nhất về chi tiêu. Mỗi nhà cung cấp có trang tổng quan thanh toán riêng nhưng không có chế độ xem tổng hợp. Chi phí bất ngờ có thể chồng chất. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **Bảng thông tin phân tích chi phí** — Theo dõi chi phí mỗi mã thông báo và quản lý ngân sách cho mỗi nhà cung cấp +- **Giới hạn ngân sách cho mỗi cấp** — Mức chi tiêu trần cho mỗi cấp kích hoạt dự phòng tự động +- **Cấu hình định giá theo mẫu** — Giá có thể định cấu hình cho mỗi mẫu +- **Thống kê sử dụng trên mỗi khóa API** — Số lượng yêu cầu và dấu thời gian được sử dụng lần cuối trên mỗi khóa +- **Bảng thông tin phân tích** — Thẻ thống kê, biểu đồ sử dụng mô hình, bảng nhà cung cấp với tỷ lệ thành công và độ trễ
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10. "Tôi không thể chẩn đoán lỗi và sự cố trong cuộc gọi AI" -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +Khi cuộc gọi không thành công, nhà phát triển không biết liệu đó có phải là giới hạn tốc độ, mã thông báo đã hết hạn, sai định dạng hay lỗi nhà cung cấp hay không. Nhật ký bị phân mảnh trên các thiết bị đầu cuối khác nhau. Nếu không có khả năng quan sát được thì việc gỡ lỗi chỉ là thử và sai. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **Bảng điều khiển nhật ký hợp nhất** — 4 tab: Nhật ký yêu cầu, Nhật ký proxy, Nhật ký kiểm tra, Bảng điều khiển +- **Trình xem nhật ký bảng điều khiển** — Trình xem kiểu thiết bị đầu cuối thời gian thực với các cấp độ được mã hóa màu, tự động cuộn, tìm kiếm, lọc +- **Nhật ký proxy SQLite** — Nhật ký liên tục vẫn tồn tại khi máy chủ khởi động lại +- **Sân chơi dịch thuật** — 4 chế độ gỡ lỗi: Sân chơi (dịch định dạng), Trình kiểm tra trò chuyện (khứ hồi), Bàn thử nghiệm (hàng loạt), Giám sát trực tiếp (thời gian thực) +- **Yêu cầu đo từ xa** — độ trễ p50/p95/p99 + truy tìm X-Request-Id +- **Ghi nhật ký dựa trên tệp bằng xoay vòng** — Trình chặn chặn bảng điều khiển ghi lại mọi thứ vào nhật ký JSON bằng cách xoay vòng dựa trên kích thước
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11. "Việc triển khai và bảo trì cổng rất phức tạp" -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +Việc cài đặt, định cấu hình và duy trì proxy AI trên các môi trường khác nhau (cục bộ, VPS, Docker, đám mây) tốn nhiều công sức. Các vấn đề như đường dẫn được mã hóa cứng, `EACCES` trên thư mục, xung đột cổng và các bản dựng đa nền tảng sẽ gây thêm rắc rối. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **npm cài đặt toàn cầu** — `npm install -g omniroute && omniroute` — đã xong +- **Docker Đa nền tảng** — AMD64 + ARM64 gốc (Apple Silicon, AWS Graviton, Raspberry Pi) +- **Hồ sơ soạn thảo Docker** — `base` (không có công cụ CLI) và `cli` (với Claude Code, Codex, OpenClaw) +- **Ứng dụng máy tính để bàn điện tử** — Ứng dụng gốc dành cho Windows/macOS/Linux với khay hệ thống, tự động khởi động, chế độ ngoại tuyến +- **Chế độ chia cổng** — API và Bảng điều khiển trên các cổng riêng biệt cho các tình huống nâng cao (proxy ngược, mạng vùng chứa) +- **Cloud Sync** — Đồng bộ hóa cấu hình giữa các thiết bị thông qua Cloudflare Workers +- **Sao lưu DB** — Tự động sao lưu, khôi phục, xuất và nhập tất cả cài đặt
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12. "Giao diện chỉ có tiếng Anh và nhóm của tôi không nói được tiếng Anh" -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +Các đội ở các quốc gia không nói tiếng Anh, đặc biệt là ở Châu Mỹ Latinh, Châu Á và Châu Âu, gặp khó khăn với giao diện chỉ có tiếng Anh. Rào cản ngôn ngữ làm giảm khả năng tiếp nhận và tăng lỗi cấu hình. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **Bảng điều khiển i18n — 30 ngôn ngữ** — Tất cả hơn 500 phím được dịch bao gồm tiếng Ả Rập, tiếng Bungari, tiếng Đan Mạch, tiếng Đức, tiếng Tây Ban Nha, tiếng Phần Lan, tiếng Pháp, tiếng Do Thái, tiếng Hindi, tiếng Hungary, tiếng Indonesia, tiếng Ý, tiếng Nhật, tiếng Hàn, tiếng Mã Lai, tiếng Hà Lan, tiếng Na Uy, tiếng Ba Lan, tiếng Bồ Đào Nha (PT/BR), tiếng Rumani, tiếng Nga, tiếng Slovak, tiếng Thụy Điển, tiếng Thái, tiếng Ukraina, tiếng Việt, tiếng Trung, tiếng Philipin, tiếng Anh +- **Hỗ trợ RTL** — Hỗ trợ từ phải sang trái cho tiếng Ả Rập và tiếng Do Thái +- **README đa ngôn ngữ** — 30 bản dịch tài liệu hoàn chỉnh +- **Bộ chọn ngôn ngữ** — Biểu tượng quả cầu trong tiêu đề để chuyển đổi theo thời gian thực
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13. "Tôi cần nhiều hơn là trò chuyện - tôi cần nội dung nhúng, hình ảnh, âm thanh" -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +AI không chỉ hoàn thành cuộc trò chuyện. Nhà phát triển cần tạo hình ảnh, phiên âm âm thanh, tạo phần nhúng cho RAG, sắp xếp lại tài liệu và kiểm duyệt nội dung. Mỗi API có điểm cuối và định dạng khác nhau. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **Nhúng** — `/v1/embeddings` với 6 nhà cung cấp và hơn 9 mẫu máy +- **Tạo hình ảnh** — `/v1/images/generations` với 10 nhà cung cấp và hơn 20 mô hình (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, AntiGravity, SD WebUI, ComfyUI) +- **Chuyển văn bản thành video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) và SD WebUI +- **Chuyển văn bản thành nhạc** — `/v1/music/generations` — ComfyUI (Mở âm thanh ổn định, MusicGen) +- **Phiên âm âm thanh** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3 +- **Chuyển văn bản thành giọng nói** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + các nhà cung cấp hiện có +- **Kiểm duyệt** — `/v1/moderations` — Kiểm tra an toàn nội dung +- **Sắp xếp lại** — `/v1/rerank` — Sắp xếp lại mức độ liên quan của tài liệu +- **API phản hồi** — Hỗ trợ đầy đủ `/v1/responses` cho Codex
-🧪 14. "I have no way to test and compare quality across models" +🧪 14. "Tôi không có cách nào để kiểm tra và so sánh chất lượng giữa các mẫu" -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +Các nhà phát triển muốn biết mô hình nào là tốt nhất cho trường hợp sử dụng của họ — mã, dịch thuật, lý luận — nhưng việc so sánh thủ công rất chậm. Không có công cụ đánh giá tích hợp nào tồn tại. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **Đánh giá LLM** — Bộ thử nghiệm vàng với 10 trường hợp tải sẵn bao gồm lời chào, toán, địa lý, tạo mã, tuân thủ JSON, dịch thuật, đánh dấu, từ chối an toàn +- **4 Chiến lược kết hợp** — `exact`, `contains`, `regex`, `custom` (chức năng JS) +- **Băng thử nghiệm sân chơi dịch giả** — Thử nghiệm hàng loạt với nhiều đầu vào và đầu ra dự kiến, so sánh giữa các nhà cung cấp +- **Trình kiểm tra trò chuyện** — Toàn bộ chuyến đi với kết xuất phản hồi trực quan +- **Live Monitor** — Luồng thời gian thực của tất cả các yêu cầu truyền qua proxy
-📈 15. "I need to scale without losing performance" +📈 15. "Tôi cần mở rộng quy mô mà không làm giảm hiệu suất" -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +Khi khối lượng yêu cầu tăng lên mà không lưu vào bộ nhớ đệm thì các câu hỏi tương tự sẽ tạo ra chi phí trùng lặp. Nếu không có tính tạm thời, các yêu cầu trùng lặp sẽ bị lãng phí. Giới hạn tỷ lệ cho mỗi nhà cung cấp phải được tôn trọng. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **Bộ nhớ đệm ngữ nghĩa** — Bộ nhớ đệm hai tầng (chữ ký + ngữ nghĩa) giúp giảm chi phí và độ trễ +- **Yêu cầu Idempotency** — Khoảng thời gian loại bỏ trùng lặp 5 giây cho các yêu cầu giống hệt nhau +- **Phát hiện giới hạn tỷ lệ** — RPM của mỗi nhà cung cấp, khoảng cách tối thiểu và theo dõi đồng thời tối đa +- **Giới hạn tỷ lệ có thể chỉnh sửa** — Giá trị mặc định có thể định cấu hình trong Cài đặt → Khả năng phục hồi với tính bền bỉ +- **Bộ đệm xác thực khóa API** — Bộ đệm 3 tầng cho hiệu suất sản xuất +- **Bảng thông tin sức khỏe với phép đo từ xa** — độ trễ p50/p95/p99, số liệu thống kê bộ nhớ đệm, thời gian hoạt động
-🤖 16. "I want to control model behavior globally" +🤖 16. "Tôi muốn kiểm soát hành vi của mô hình trên toàn cầu" -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +Các nhà phát triển muốn tất cả phản hồi bằng một ngôn ngữ cụ thể, với giọng điệu cụ thể hoặc muốn giới hạn các mã thông báo lý luận. Việc định cấu hình điều này trong mọi công cụ/yêu cầu là không thực tế. -**How OmniRoute solves it:** +**Cách OmniRoute giải quyết vấn đề này:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **Tiêm nhắc nhở hệ thống** — Lời nhắc chung được áp dụng cho tất cả các yêu cầu +- **Xác thực ngân sách tư duy** — Kiểm soát phân bổ mã thông báo hợp lý cho mỗi yêu cầu (chuyển qua, tự động, tùy chỉnh, thích ứng) +- **6 Chiến lược định tuyến** — Chiến lược toàn cầu xác định cách phân phối yêu cầu +- **Bộ định tuyến ký tự đại diện** — Các mẫu `provider/*` tự động định tuyến tới bất kỳ nhà cung cấp nào +- **Bật/Tắt kết hợp chuyển đổi** — Chuyển đổi kết hợp trực tiếp từ bảng điều khiển +- **Chuyển đổi nhà cung cấp** — Bật/tắt tất cả kết nối cho nhà cung cấp chỉ bằng một cú nhấp chuột +- **Nhà cung cấp bị chặn** — Loại trừ các nhà cung cấp cụ thể khỏi danh sách `/v1/models`
+
+🧰 17. "Tôi cần các công cụ MCP làm khả năng của sản phẩm hạng nhất" + +Nhiều cổng AI chỉ hiển thị MCP dưới dạng chi tiết triển khai ẩn. Các nhóm cần một lớp hoạt động rõ ràng và dễ quản lý. + +**Cách OmniRoute giải quyết vấn đề này:** + +- MCP xuất hiện trong tab điều hướng bảng điều khiển và giao thức điểm cuối +- Trang quản lý MCP chuyên dụng với quy trình, công cụ, phạm vi và kiểm tra +- Tích hợp tính năng khởi động nhanh cho `omniroute --mcp` và quá trình cài đặt ứng dụng khách + +
+ +
+🧠 18. "Tôi cần phối hợp A2A với đường dẫn tác vụ đồng bộ hóa + truyền phát" + +Quy trình làm việc của tổng đài viên cần cả phản hồi trực tiếp và thực thi theo luồng trong thời gian dài với khả năng kiểm soát vòng đời. + +**Cách OmniRoute giải quyết vấn đề này:** + +- Điểm cuối JSON-RPC A2A (`POST /a2a`) với `message/send` và `message/stream` +- Truyền phát SSE với sự lan truyền trạng thái đầu cuối +- API vòng đời tác vụ cho `tasks/get` và `tasks/cancel` + +
+ +
+🛰️ 19. "Tôi cần tình trạng quy trình MCP thực sự, trạng thái không đoán được" + +Các nhóm vận hành cần biết liệu MCP có thực sự tồn tại hay không, chứ không chỉ là liệu API có thể truy cập được hay không. + +**Cách OmniRoute giải quyết vấn đề này:** + +- Tệp nhịp tim thời gian chạy với PID, dấu thời gian, vận chuyển, số lượng công cụ và chế độ phạm vi +- API trạng thái MCP kết hợp nhịp tim + hoạt động gần đây +- Thẻ trạng thái giao diện người dùng về độ mới của quy trình/thời gian hoạt động/nhịp tim + +
+ +
+📋 20. "Tôi cần thực thi công cụ MCP có thể kiểm tra được" + +Khi các công cụ thay đổi cấu hình hoặc kích hoạt các hành động vận hành, các nhóm cần truy xuất nguồn gốc pháp lý. + +**Cách OmniRoute giải quyết vấn đề này:** + +- Ghi nhật ký kiểm tra được hỗ trợ bởi SQLite cho các lệnh gọi công cụ MCP +- Bộ lọc theo công cụ, thành công/thất bại, khóa API và phân trang +- Bảng kiểm tra bảng điều khiển + điểm cuối thống kê để tự động hóa + +
+ +
+🔐 21. "Tôi cần quyền MCP trong phạm vi cho mỗi lần tích hợp" + +Các khách hàng khác nhau phải có quyền truy cập ít đặc quyền nhất vào các danh mục công cụ. + +**Cách OmniRoute giải quyết vấn đề này:** + +- 9 phạm vi MCP chi tiết để truy cập công cụ được kiểm soát +- Thực thi phạm vi và khả năng hiển thị trong giao diện người dùng quản lý MCP +- Tư thế mặc định an toàn cho dụng cụ vận hành + +
+ +
+⚙️ 22. "Tôi cần kiểm soát hoạt động mà không cần triển khai lại" + +Các nhóm cần thay đổi thời gian chạy nhanh trong các sự cố hoặc sự kiện tốn kém. + +**Cách OmniRoute giải quyết vấn đề này:** + +- Chuyển đổi kích hoạt kết hợp trực tiếp từ bảng điều khiển MCP +- Áp dụng hồ sơ khả năng phục hồi từ các gói chính sách được xác định trước +- Đặt lại trạng thái ngắt mạch từ cùng bảng vận hành + +
+ +
+🔄 23. "Tôi cần khả năng hiển thị và hủy trực tiếp trong vòng đời nhiệm vụ A2A" + +Nếu không có khả năng hiển thị vòng đời, các sự cố trong nhiệm vụ sẽ khó phân loại. + +**Cách OmniRoute giải quyết vấn đề này:** + +- Liệt kê/lọc nhiệm vụ theo trạng thái/kỹ năng với phân trang +- Xem chi tiết về siêu dữ liệu, sự kiện và hiện vật của nhiệm vụ +- Điểm cuối hủy tác vụ và hành động UI có xác nhận + +
+ +
+🌊 24. "Tôi cần số liệu luồng hoạt động cho tải A2A" + +Luồng công việc phát trực tuyến yêu cầu hiểu biết sâu sắc về hoạt động đồng thời và kết nối trực tiếp. + +**Cách OmniRoute giải quyết vấn đề này:** + +- Bộ đếm luồng hoạt động được tích hợp vào trạng thái A2A +- Dấu thời gian nhiệm vụ cuối cùng và số lượng trên mỗi trạng thái +- Thẻ bảng điều khiển A2A để theo dõi hoạt động theo thời gian thực + +
+ +
+🪪 25. "Tôi cần phát hiện đại lý tiêu chuẩn cho khách hàng" + +Máy khách và người điều phối bên ngoài cần siêu dữ liệu có thể đọc được bằng máy để triển khai. + +**Cách OmniRoute giải quyết vấn đề này:** + +- Thẻ đại lý bị lộ tại `/.well-known/agent.json` +- Khả năng và kỹ năng thể hiện trong UI quản lý +- API trạng thái A2A bao gồm siêu dữ liệu khám phá để tự động hóa + +
+ +
+🧭 26. "Tôi cần khả năng khám phá giao thức trong UX sản phẩm" + +Nếu người dùng không thể khám phá các bề mặt giao thức, chất lượng chấp nhận và hỗ trợ sẽ giảm. + +**Cách OmniRoute giải quyết vấn đề này:** + +- Các mục thanh bên cho MCP và A2A +- Tab Giao thức của trang điểm cuối với trạng thái và khởi động nhanh +- Liên kết từ tổng quan đến bảng điều khiển quản lý chuyên dụng + +
+ +
+🧪 27. "Tôi cần xác thực giao thức end-to-end với khách hàng thực" + +Các thử nghiệm mô phỏng không đủ để xác thực tính tương thích của giao thức trước khi phát hành. + +**Cách OmniRoute giải quyết vấn đề này:** + +- Bộ E2E khởi động ứng dụng và sử dụng vận chuyển máy khách MCP SDK thực +- Máy khách A2A kiểm tra các luồng khám phá, gửi, truyền phát, nhận và hủy +- Kiểm tra chéo các xác nhận đối với kiểm tra MCP và API nhiệm vụ A2A + +
+ +
+📡 28. "Tôi cần khả năng quan sát thống nhất trên tất cả các giao diện" + +Việc phân chia khả năng quan sát theo giao thức sẽ tạo ra các điểm mù và MTTR dài hơn. + +**Cách OmniRoute giải quyết vấn đề này:** + +- Bảng điều khiển/nhật ký/phân tích thống nhất trong một sản phẩm +- Sức khỏe + kiểm toán + yêu cầu đo từ xa trên các lớp OpenAI, MCP và A2A +- API hoạt động cho trạng thái và tự động hóa + +
+ +
+💼 29. "Tôi cần một thời gian chạy cho proxy + công cụ + điều phối tác nhân" + +Việc chạy nhiều dịch vụ riêng biệt làm tăng chi phí vận hành và các chế độ lỗi. + +**Cách OmniRoute giải quyết vấn đề này:** + +- Proxy tương thích với OpenAI, máy chủ MCP và máy chủ A2A trong một ngăn xếp +- Chia sẻ xác thực, khả năng phục hồi, lưu trữ dữ liệu và khả năng quan sát +- Mô hình chính sách nhất quán trên tất cả các bề mặt tương tác + +
+ +
+🚀 30. "Tôi cần gửi quy trình công việc tổng thể mà không cần sử dụng quá nhiều mã keo" + +Các nhóm bị mất tốc độ khi kết hợp nhiều dịch vụ và tập lệnh đặc biệt. + +**Cách OmniRoute giải quyết vấn đề này:** + +- Chiến lược điểm cuối thống nhất cho khách hàng và đại lý +- Giao diện người dùng quản lý giao thức tích hợp và đường dẫn xác thực khói +- Nền tảng sẵn sàng sản xuất (bảo mật, ghi nhật ký, khả năng phục hồi, sao lưu) + +
+ +### Sách hướng dẫn ví dụ (Trường hợp sử dụng tích hợp) + +**Playbook A: Tối đa hóa đăng ký trả phí + dự phòng giá rẻ** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**Playbook B: Ngăn xếp mã hóa không tốn phí** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**Playbook C: chuỗi dự phòng luôn hoạt động 24/7** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**Playbook D: Tác nhân hoạt động với MCP + A2A** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ Bắt đầu nhanh **1. Cài đặt trên toàn cầu:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ Desktop App — Offline & Always-On +## 🖥️ > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux. @@ -715,66 +990,26 @@ OmniRoute bao gồm Sân chơi dịch thuật tích hợp mạnh mẽ với **4
---- +## 🧪 Đánh giá (Evals) -## 🎯 Trường hợp sử dụng +OmniRoute bao gồm khung đánh giá tích hợp để kiểm tra chất lượng phản hồi LLM dựa trên bộ vàng. Truy cập thông qua **Analytics → Đánh giá** trong bảng điều khiển. -### Trường hợp 1: "Tôi có đăng ký Claude Pro" +### Bộ vàng tích hợp -**Vấn đề:** Hạn ngạch hết hạn không được sử dụng, giới hạn tốc độ trong quá trình mã hóa nặng +"Bộ vàng OmniRoute" được tải sẵn chứa 10 trường hợp thử nghiệm bao gồm: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (use subscription fully) - 2. glm/glm-4.7 (cheap backup when quota out) - 3. if/kimi-k2-thinking (free emergency fallback) +- Lời chào, toán, địa lý, tạo mã +- Tuân thủ định dạng JSON, dịch thuật, đánh dấu +- Từ chối an toàn (nội dung có hại), đếm, logic boolean -Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total -vs. $20 + hitting limits = frustration -``` +### Chiến lược đánh giá -### Trường hợp 2: "Tôi muốn chi phí bằng 0" - -**Vấn đề:** Không đủ khả năng đăng ký, cần mã hóa AI đáng tin cậy - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (180K free/month) - 2. if/kimi-k2-thinking (unlimited free) - 3. qw/qwen3-coder-plus (unlimited free) - -Monthly cost: $0 -Quality: Production-ready models -``` - -### Trường hợp 3: "Tôi cần code 24/7, không bị gián đoạn" - -**Vấn đề:** Thời hạn, không đủ khả năng cho thời gian ngừng hoạt động - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (best quality) - 2. cx/gpt-5.2-codex (second subscription) - 3. glm/glm-4.7 (cheap, resets daily) - 4. minimax/MiniMax-M2.1 (cheapest, 5h reset) - 5. if/kimi-k2-thinking (free unlimited) - -Result: 5 layers of fallback = zero downtime -``` - -### Trường hợp 4: "Tôi muốn AI MIỄN PHÍ trong OpenClaw" - -**Vấn đề:** Cần trợ lý AI trong ứng dụng nhắn tin, hoàn toàn miễn phí - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (unlimited free) - 2. if/minimax-m2.1 (unlimited free) - 3. if/kimi-k2-thinking (unlimited free) - -Monthly cost: $0 -Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal... -``` +| Chiến lược | Mô tả | Ví dụ | +| ---------- | --------------------------------------------------------------- | -------------------------------- | +| `exact` | Đầu ra phải khớp chính xác | `"4"` | +| `contains` | Đầu ra phải chứa chuỗi con (không phân biệt chữ hoa chữ thường) | `"Paris"` | +| `regex` | Đầu ra phải khớp với mẫu biểu thức chính quy | `"1.*2.*3"` | +| `custom` | Hàm JS tùy chỉnh trả về true/false | `(output) => output.length > 10` | --- @@ -1058,29 +1293,6 @@ Settings → API Configuration: --- -## 🧪 Đánh giá (Evals) - -OmniRoute bao gồm khung đánh giá tích hợp để kiểm tra chất lượng phản hồi LLM dựa trên bộ vàng. Truy cập thông qua **Analytics → Đánh giá** trong bảng điều khiển. - -### Bộ vàng tích hợp - -"Bộ vàng OmniRoute" được tải sẵn chứa 10 trường hợp thử nghiệm bao gồm: - -- Lời chào, toán, địa lý, tạo mã -- Tuân thủ định dạng JSON, dịch thuật, đánh dấu -- Từ chối an toàn (nội dung có hại), đếm, logic boolean - -### Chiến lược đánh giá - -| Chiến lược | Mô tả | Ví dụ | -| ---------- | --------------------------------------------------------------- | -------------------------------- | -| `exact` | Đầu ra phải khớp chính xác | `"4"` | -| `contains` | Đầu ra phải chứa chuỗi con (không phân biệt chữ hoa chữ thường) | `"Paris"` | -| `regex` | Đầu ra phải khớp với mẫu biểu thức chính quy | `"1.*2.*3"` | -| `custom` | Hàm JS tùy chỉnh trả về true/false | `(output) => output.length > 10` | - ---- - ## 🐛 Khắc phục sự cố
@@ -1132,13 +1344,13 @@ OmniRoute bao gồm khung đánh giá tích hợp để kiểm tra chất lượ - OmniRoute v1.0.6+ bao gồm xác thực dự phòng thông qua hoàn thành trò chuyện - Đảm bảo URL cơ sở bao gồm hậu tố `/v1` -### 🔐 OAuth trên Servidor Remoto (Thiết lập OAuth từ xa) +### 🔐 OAuth > **⚠️ QUAN TRỌNG đối với người sử dụng OmniRoute trên VPS/Docker/servidor remoto** -### Bởi vì OAuth làm cho AntiGravity / Gemini CLI có bị ảnh hưởng bởi các dịch vụ điều khiển từ xa không? +### OAuth Os đã được chứng minh **AntiGravity** e **Gemini CLI** sử dụng **Google OAuth 2.0** để xác thực. O Google exige que a `redirect_uri` usada no fluxo OAuth seja **exatamente** một trong các URI trước khi lập danh sách trên Google Cloud Console để ứng dụng. @@ -1227,7 +1439,7 @@ Nếu không có câu hỏi nào về thông tin xác thực trước đây, b --- -## 🛠️ Ngăn xếp công nghệ +## 🛠️ - **Thời gian chạy**: Node.js 18–22 LTS (⚠️ Node.js 24+ **không được hỗ trợ** — `better-sqlite3` các tệp nhị phân gốc không tương thích) - **Ngôn ngữ**: TypeScript 5.9 — **100% TypeScript** trên `src/` và `open-sse/` (v1.0.6) @@ -1279,7 +1491,7 @@ Nếu không có câu hỏi nào về thông tin xác thực trước đây, b --- -## 🗺️ Lộ trình +## 🗺️ OmniRoute có **210+ tính năng được lên kế hoạch** qua nhiều giai đoạn phát triển. Dưới đây là các lĩnh vực chính: @@ -1304,18 +1516,6 @@ OmniRoute có **210+ tính năng được lên kế hoạch** qua nhiều giai --- -## 📧 Hỗ trợ - -> 💬 **Tham gia cộng đồng của chúng tôi!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Nhận trợ giúp, chia sẻ mẹo và luôn cập nhật. - -- **Trang web**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Vấn đề**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **Dự án gốc**: [9router by decolua](https://github.com/decolua/9router) - ---- - ## 👥 Người đóng góp [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) diff --git a/README.zh-CN.md b/README.zh-CN.md index e73aab2fe6..cef605e003 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -110,6 +110,35 @@ _通过 OmniRoute 连接任何 AI 驱动的 IDE 或 CLI 工具 — 免费 API --- +## 🖼️ + +
+ OmniRoute +
+ +--- + +## 📸 + +
+... + +| # | # | +| ----- | ---------------------------------------- | +| **1** | ![1](docs/screenshots/01-providers.png) | +| **2** | ![2](docs/screenshots/02-combos.png) | +| **3** | ![3](docs/screenshots/03-analytics.png) | +| **4** | ![4](docs/screenshots/04-health.png) | +| **5** | ![5](docs/screenshots/05-translator.png) | +| **6** | ![6](docs/screenshots/06-settings.png) | +| **7** | ![7](docs/screenshots/07-cli-tools.png) | +| **8** | ![8](docs/screenshots/08-usage.png) | +| **9** | ![9](docs/screenshots/09-endpoint.png) | + +
+ +--- + ## 🤔 为什么选择 OmniRoute? **停止浪费金钱和遭遇限制:** @@ -128,6 +157,18 @@ _通过 OmniRoute 连接任何 AI 驱动的 IDE 或 CLI 工具 — 免费 API --- +## 📧 支持 + +> 💬 **加入我们的社区!** [WhatsApp 群组](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — 获取帮助、分享技巧、了解最新动态。 + +- **网站**: [omniroute.online](https://omniroute.online) +- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) +- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) +- **WhatsApp**: [社区群组](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) +- **原始项目**: [decolua 的 9router](https://github.com/decolua/9router) + +--- + ## 🔄 工作原理 ``` @@ -157,263 +198,497 @@ _通过 OmniRoute 连接任何 AI 驱动的 IDE 或 CLI 工具 — 免费 API --- -## 🎯 What OmniRoute Solves — 16 Real Pain Points +## 🎯 OmniRoute 解决了什么 — 30 个真正的痛点和用例 -> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability. +> **每个使用 AI 工具的开发人员每天都会面临这些问题。** OmniRoute 的构建是为了解决所有这些问题 - 从成本超支到区域封锁,从损坏的 OAuth 流程到协议操作和企业可观察性。
-💸 1. "I pay for an expensive subscription but still get interrupted by limits" +💸 1.“我支付了昂贵的订阅费用,但仍然受到限制的干扰” -Developers pay $20–200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity. +开发人员每月为 Claude Pro、Codex Pro 或 GitHub Copilot 支付 20-200 美元。即使付费,配额也有上限——5 小时的使用时间、每周限制或每分钟的费率限制。在编码会话中,提供商停止响应,开发人员失去流量和生产力。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention -- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly) -- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next -- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized) -- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard +- **智能 4 层回退** — 如果订阅配额用完,自动重定向到 API 密钥 → 便宜 → 免费,零手动干预 +- **实时配额跟踪** — 实时显示代币消耗情况并重置倒计时(5 小时、每日、每周) +- **多帐户支持** — 每个提供商有多个帐户,具有自动循环 — 当一个帐户用完时,切换到下一个帐户 +- **自定义组合** — 可定制的后备链,具有 6 种平衡策略(先填充、循环、P2C、随机、最少使用、成本优化) +- **Codex Business Quotas** — 直接在仪表板中监控业务/团队工作空间配额
-🔌 2. "I need to use multiple providers but each has a different API" +🔌 2.“我需要使用多个提供程序,但每个提供程序都有不同的 API” -OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints. +OpenAI 使用一种格式,Claude(Anthropic)使用另一种格式,Gemini 使用另一种格式。如果开发人员想要测试来自不同提供商的模型或在它们之间进行回退,他们需要重新配置 SDK、更改端点、处理不兼容的格式。自定义提供程序(FriendLI、NIM)具有非标准模型端点。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers -- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API -- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+ -- **Role Normalization** — Converts `developer` → `system` for non-OpenAI providers; `system` → `user` for GLM/ERNIE -- **Think Tag Extraction** — Extracts `` blocks from models like DeepSeek R1 into standardized `reasoning_content` -- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatic conversion -- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs +- **统一端点** — 单个 `http://localhost:20128/v1` 充当所有 36 个以上提供商的代理 +- **格式翻译** — 自动且透明:OpenAI ↔ Claude ↔ Gemini ↔ Responses API +- **响应清理** — 删除破坏 OpenAI SDK v1.83+ 的非标准字段(`x_groq`、`usage_breakdown`、`service_tier`) +- **角色标准化** — 对于非 OpenAI 提供商,将 `developer` → `system` 转换; `system` → `user` 适用于 GLM/ERNIE +- **Think Tag Extraction** — 将 DeepSeek R1 等模型中的 `` 块提取为标准化 `reasoning_content` +- **Gemini 的结构化输出** — `json_schema` → `responseMimeType`/`responseSchema` 自动转换 +- **`stream` 默认为 `false`** — 与 OpenAI 规范保持一致,避免 Python/Rust/Go SDK 中出现意外的 SSE
-🌐 3. "My AI provider blocks my region/country" +🌐 3.“我的人工智能提供商封锁了我的地区/国家” -Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries. +OpenAI/Codex 等提供商会阻止来自某些地理区域的访问。用户在 OAuth 和 API 连接期间收到类似 `unsupported_country_region_territory` 的错误。这对于发展中国家的开发商来说尤其令人沮丧。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key -- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP -- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory` -- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass) -- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing -- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection +- **3 级代理配置** — 3 级可配置代理:全局(所有流量)、每个提供商(仅一个提供商)和每个连接/密钥 +- **颜色编码的代理徽章** — 视觉指示器:🟢 全局代理、🟡 提供商代理、🔵 连接代理,始终显示 IP +- **通过代理进行 OAuth 令牌交换** — OAuth 流程也通过代理,解决了 `unsupported_country_region_territory` +- **通过代理进行连接测试** — 连接测试使用配置的代理(不再直接绕过) +- **SOCKS5 支持** — 对出站路由的完整 SOCKS5 代理支持 +- **TLS 指纹欺骗** — 通过 `wreq-js` 的类似浏览器的 TLS 指纹来绕过机器人检测
-🆓 4. "I want to use AI for coding but I have no money" +🆓 4.“我想用AI编码,但我没有钱” -Not everyone can pay $20–200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost. +并不是每个人都能每月支付 20-200 美元来订阅 AI。来自新兴国家的学生、开发人员、业余爱好者和自由职业者需要以零成本获得优质模型。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free) -- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime -- **NVIDIA NIM Free Credits** — 1000 free credits integrated -- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider +- **内置免费层级提供商** — 对 100% 免费提供商的本机支持:iFlow(8 个无限型号)、Qwen(3 个无限型号)、Kiro(Claude 免费)、Gemini CLI(180K/月免费) +- **仅限免费组合** — 链 `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = 0 美元/月,零停机时间 +- **NVIDIA NIM 免费积分** — 集成 1000 个免费积分 +- **成本优化策略** — 自动选择最便宜的可用提供商的路由策略
-🔒 5. "I need to protect my AI gateway from unauthorized access" +🔒 5.“我需要保护我的AI网关免遭未经授权的访问” -When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse. +当将人工智能网关暴露到网络(LAN、VPS、Docker)时,任何拥有该地址的人都可以消耗开发者的代币/配额。如果没有保护,API 很容易被误用、提示注入和滥用。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page -- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle -- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing -- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens -- **Rate Limiter** — Per-IP rate limiting with configurable windows -- **IP Filtering** — Allowlist/blocklist for access control -- **Prompt Injection Guard** — Sanitization against malicious prompt patterns -- **AES-256-GCM Encryption** — Credentials encrypted at rest +- **API 密钥管理** — 使用专用的 `/dashboard/api-manager` 页面为每个提供商生成、轮换和范围界定 +- **模型级权限** — 将 API 密钥限制为特定模型(`openai/*`、通配符模式),并具有“允许全部”/“限制”切换功能 +- **API 端点保护** — 需要 `/v1/models` 的密钥并阻止列表中的特定提供商 +- **Auth Guard + CSRF 保护** — 所有仪表板路由均受 `withAuth` 中间件 + CSRF 令牌保护 +- **速率限制器** — 通过可配置窗口限制每个 IP 的速率 +- **IP 过滤** — 用于访问控制的允许列表/阻止列表 +- **Prompt Injection Guard** — 针对恶意提示模式的清理 +- **AES-256-GCM 加密** — 静态加密的凭证
-🛑 6. "My provider went down and I lost my coding flow" +🛑 6.“我的提供商宕机了,我失去了编码流程” -AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application. +AI 提供商可能会变得不稳定、返回 5xx 错误或达到临时速率限制。如果开发人员依赖于单一提供商,他们就会受到干扰。如果没有断路器,重复重试可能会使应用程序崩溃。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open) -- **Exponential Backoff** — Progressive retry delays -- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms -- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention -- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain -- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency +- **每个提供商的断路器** — 自动打开/关闭,具有可配置的阈值和冷却时间(关闭/打开/半打开) +- **指数退避** — 渐进式重试延迟 +- **Anti-Thundering Herd** — 互斥锁 + 信号量保护,防止并发重试风暴 +- **组合后备链** — 如果主要提供商发生故障,则自动从该链中掉下来,无需干预 +- **组合断路器** — 自动禁用组合链中出现故障的提供商 +- **运行状况仪表板** — 正常运行时间监控、断路器状态、锁定、缓存统计、p50/p95/p99 延迟
-🔧 7. "Configuring each AI tool is tedious and repetitive" +🔧 7. “配置每个AI工具都是繁琐且重复的” -Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time. +开发人员使用 Cursor、Claude Code、Codex CLI、OpenClaw、Gemini CLI、Kilo Code...每个工具都需要不同的配置(API 端点、密钥、模型)。切换提供商或模型时重新配置是浪费时间。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline -- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection -- **Onboarding Wizard** — Guided 4-step setup for first-time users -- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers +- **CLI 工具仪表板** — 专用页面,可一键设置 Claude Code、Codex CLI、OpenClaw、Kilo Code、Antigravity、Cline +- **GitHub Copilot 配置生成器** — 通过批量模型选择为 VS Code 生成 `chatLanguageModels.json` +- **入门向导** — 为首次使用的用户提供 4 步设置指导 +- **一个端点,所有型号** — 配置 `http://localhost:20128/v1` 一次,访问 36 个以上提供商
-🔑 8. "Managing OAuth tokens from multiple providers is hell" +🔑 8.“管理来自多个提供商的 OAuth 令牌简直就是地狱” -Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic. +Claude Code、Codex、Gemini CLI、Copilot — 全部使用带有过期令牌的 OAuth 2.0。开发人员需要不断地重新进行身份验证,处理`client_secret is missing`、`redirect_uri_mismatch`以及远程服务器上的故障。 LAN/VPS 上的 OAuth 问题尤其严重。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **Auto Token Refresh** — OAuth tokens refresh in background before expiration -- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow -- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction -- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers -- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility -- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker +- **自动令牌刷新** — OAuth 令牌在过期前在后台刷新 +- **OAuth 2.0 (PKCE) 内置** — Claude Code、Codex、Gemini CLI、Copilot、Kiro、Qwen、iFlow 的自动流程 +- **多帐户 OAuth** — 每个提供商通过 JWT/ID 令牌提取多个帐户 +- **OAuth LAN/远程修复** — `redirect_uri` 的私有 IP 检测 + 远程服务器的手动 URL 模式 +- **Nginx 背后的 OAuth** — 使用 `window.location.origin` 实现反向代理兼容性 +- **远程 OAuth 指南** — VPS/Docker 上的 Google Cloud 凭据分步指南
-📊 9. "I don't know how much I'm spending or where" +📊 9.“我不知道我花了多少钱或在哪里” -Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up. +开发商使用多个付费提供商,但对支出没有统一的看法。每个提供商都有自己的计费仪表板,但没有统一的视图。意外的成本可能会不断增加。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider -- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback -- **Per-Model Pricing Configuration** — Configurable prices per model -- **Usage Statistics Per API Key** — Request count and last-used timestamp per key -- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency +- **成本分析仪表板** — 每个提供商的每个代币成本跟踪和预算管理 +- **每层预算限制** — 触发自动回退的每层支出上限 +- **按型号定价配置** — 每个型号的可配置价格 +- **每个 API 密钥的使用统计信息** — 每个密钥的请求计数和上次使用的时间戳 +- **分析仪表板** — 统计卡、模型使用图表、包含成功率和延迟的提供商表
-🐛 10. "I can't diagnose errors and problems in AI calls" +🐛 10.“我无法诊断人工智能调用中的错误和问题” -When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error. +当调用失败时,开发人员不知道这是否是速率限制、令牌过期、格式错误或提供商错误。跨不同终端的碎片日志。如果没有可观察性,调试就是反复试验。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console -- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter -- **SQLite Proxy Logs** — Persistent logs that survive server restarts -- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time) -- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing -- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation +- **统一日志仪表板** — 4 个选项卡:请求日志、代理日志、审核日志、控制台 +- **控制台日志查看器** — 实时终端式查看器,具有颜色编码级别、自动滚动、搜索、过滤功能 +- **SQLite 代理日志** — 服务器重新启动后仍保留的持久日志 +- **Translator Playground** — 4 种调试模式:Playground(格式翻译)、Chat Tester(往返)、Test Bench(批量)、Live Monitor(实时) +- **请求遥测** — p50/p95/p99 延迟 + X-Request-Id 跟踪 +- **基于文件的日志记录与旋转** — 控制台拦截器通过基于大小的旋转将所有内容捕获到 JSON 日志
-🏗️ 11. "Deploying and maintaining the gateway is complex" +🏗️ 11.“部署和维护网关很复杂” -Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction. +跨不同环境(本地、VPS、Docker、云)安装、配置和维护 AI 代理是一项劳动密集型工作。硬编码路径、目录上的 `EACCES`、端口冲突和跨平台构建等问题会增加摩擦。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **npm global install** — `npm install -g omniroute && omniroute` — done -- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi) -- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw) -- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode -- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking) -- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers -- **DB Backups** — Automatic backup, restore, export and import of all settings +- **npm 全局安装** — `npm install -g omniroute && omniroute` — 完成 +- **Docker 多平台** — AMD64 + ARM64 本机(Apple Silicon、AWS Graviton、Raspberry Pi) +- **Docker Compose Profiles** — `base`(无 CLI 工具)和 `cli`(带有 Claude Code、Codex、OpenClaw) +- **Electron 桌面应用程序** — 适用于 Windows/macOS/Linux 的本机应用程序,带系统托盘、自动启动、离线模式 +- **分割端口模式** — API 和仪表板位于单独的端口上,适用于高级场景(反向代理、容器网络) +- **云同步** — 通过 Cloudflare Workers 跨设备配置同步 +- **数据库备份** — 自动备份、恢复、导出和导入所有设置
-🌍 12. "The interface is English-only and my team doesn't speak English" +🌍 12.“界面只有英文,我的团队不会说英语” -Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors. +非英语国家的团队,尤其是拉丁美洲、亚洲和欧洲的团队,在纯英文界面上遇到了困难。语言障碍会降低采用率并增加配置错误。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English -- **RTL Support** — Right-to-left support for Arabic and Hebrew -- **Multi-Language READMEs** — 30 complete documentation translations -- **Language Selector** — Globe icon in header for real-time switching +- **仪表板 i18n — 30 种语言** — 所有 500 多个按键已翻译,包括阿拉伯语、保加利亚语、丹麦语、德语、西班牙语、芬兰语、法语、希伯来语、印地语、匈牙利语、印度尼西亚语、意大利语、日语、韩语、马来语、荷兰语、挪威语、波兰语、葡萄牙语(PT/BR)、罗马尼亚语、俄语、斯洛伐克语、瑞典语、泰语、乌克兰语、越南语、中文、菲律宾语、英语 +- **RTL 支持** — 从右到左支持阿拉伯语和希伯来语 +- **多语言自述文件** — 30 个完整的文档翻译 +- **语言选择器** — 标题中的地球图标用于实时切换
-🔄 13. "I need more than chat — I need embeddings, images, audio" +🔄 13.“我需要的不仅仅是聊天 - 我需要嵌入、图像、音频” -AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format. +人工智能不仅仅是完成聊天。开发人员需要生成图像、转录音频、为 RAG 创建嵌入、重新排列文档以及审核内容。每个 API 都有不同的端点和格式。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models -- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models -- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible -- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis -- **Moderations** — `/v1/moderations` — Content safety checks -- **Reranking** — `/v1/rerank` — Document relevance reranking -- **Responses API** — Full `/v1/responses` support for Codex +- **嵌入** — `/v1/embeddings` 具有 6 个提供商和 9 个以上模型 +- **图像生成** — `/v1/images/generations` 具有 10 个提供商和 20 多个模型(OpenAI、xAI、Together、Fireworks、Nebius、Hyperbolic、NanoBanana、Antigravity、SD WebUI、ComfyUI) +- **文本到视频** — `/v1/videos/generations` — ComfyUI(AnimateDiff、SVD)和 SD WebUI +- **文本转音乐** — `/v1/music/generations` — ComfyUI(稳定音频打开,MusicGen) +- **音频转录** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM、HuggingFace、Qwen3 +- **文本转语音** — `/v1/audio/speech` — ElevenLabs、Nvidia NIM、HuggingFace、Coqui、Tortoise、Qwen3 以及现有提供商 +- **审核** — `/v1/moderations` — 内容安全检查 +- **重新排名** — `/v1/rerank` — 文档相关性重新排名 +- **响应 API** — 对 Codex 的完整 `/v1/responses` 支持
-🧪 14. "I have no way to test and compare quality across models" +🧪 14.“我无法测试和比较不同型号的质量” -Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist. +开发人员想知道哪种模型最适合他们的用例(代码、翻译、推理),但手动比较速度很慢。不存在集成的评估工具。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal -- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function) -- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison -- **Chat Tester** — Full round-trip with visual response rendering -- **Live Monitor** — Real-time stream of all requests flowing through the proxy +- **LLM 评估** — 黄金套装测试,包含 10 个预加载案例,涵盖问候语、数学、地理、代码生成、JSON 合规性、翻译、降价、安全拒绝 +- **4种匹配策略** — `exact`、`contains`、`regex`、`custom`(JS函数) +- **Translator Playground 测试台** — 使用多个输入和预期输出进行批量测试、跨提供商比较 +- **聊天测试器** — 带有视觉响应渲染的完整往返 +- **实时监控** — 流经代理的所有请求的实时流
-📈 15. "I need to scale without losing performance" +📈 15.“我需要在不损失性能的情况下进行扩展” -As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected. +随着请求量的增长,如果不缓存相同的问题,就会产生重复的成本。如果没有幂等性,重复的请求就会浪费处理。必须遵守每个提供商的速率限制。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency -- **Request Idempotency** — 5s deduplication window for identical requests -- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking -- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence -- **API Key Validation Cache** — 3-tier cache for production performance -- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime +- **语义缓存** - 两层缓存(签名+语义)降低成本和延迟 +- **请求幂等性** — 相同请求的 5 秒重复数据删除窗口 +- **速率限制检测** — 每个提供商的 RPM、最小间隙和最大并发跟踪 +- **可编辑的速率限制** — 可在“设置”→“持久弹性”中配置默认值 +- **API 密钥验证缓存** — 用于提高生产性能的 3 层缓存 +- **带有遥测功能的运行状况仪表板** — p50/p95/p99 延迟、缓存统计数据、正常运行时间
-🤖 16. "I want to control model behavior globally" +🤖 16.“我想全局控制模型行为” -Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical. +希望所有响应都以特定语言、特定语气或想要限制推理标记的开发人员。在每个工具/请求中配置此功能是不切实际的。 -**How OmniRoute solves it:** +**OmniRoute 如何解决:** -- **System Prompt Injection** — Global prompt applied to all requests -- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive) -- **6 Routing Strategies** — Global strategies that determine how requests are distributed -- **Wildcard Router** — `provider/*` patterns route dynamically to any provider -- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard -- **Provider Toggle** — Enable/disable all connections for a provider with one click -- **Blocked Providers** — Exclude specific providers from `/v1/models` listing +- **系统提示注入** — 全局提示应用于所有请求 +- **思考预算验证** - 每个请求的推理令牌分配控制(直通、自动、自定义、自适应) +- **6 种路由策略** — 确定如何分发请求的全局策略 +- **通配符路由器** — `provider/*` 模式动态路由到任何提供商 +- **组合启用/禁用切换** — 直接从仪表板切换组合 +- **提供商切换** — 一键启用/禁用提供商的所有连接 +- **阻止的提供商** — 从 `/v1/models` 列表中排除特定提供商
+
+🧰 17.“我需要MCP工具作为一流的产品能力” + +许多 AI 网关仅将 MCP 作为隐藏的实现细节公开。团队需要一个可见的、可管理的操作层。 + +**OmniRoute 如何解决:** + +- MCP 显示在仪表板导航和端点协议选项卡中 +- 专用 MCP 管理页面,包含流程、工具、范围和审计 +- `omniroute --mcp` 和客户入门的内置快速启动 + +
+ +
+🧠 18.“我需要具有同步+流任务路径的 A2A 编排” + +代理工作流程需要直接回复和具有生命周期控制的长时间运行的流式执行。 + +**OmniRoute 如何解决:** + +- A2A JSON-RPC 端点 (`POST /a2a`) 与 `message/send` 和 `message/stream` +- 具有终端状态传播的 SSE 流式传输 +- `tasks/get` 和 `tasks/cancel` 的任务生命周期 API + +
+ +
+🛰️ 19.“我需要真实的 MCP 进程运行状况,而不是猜测的状态” + +运营团队需要知道 MCP 是否确实存在,而不仅仅是 API 是否可访问。 + +**OmniRoute 如何解决:** + +- 带有 PID、时间戳、传输、工具计数和范围模式的运行时心跳文件 +- MCP状态API结合心跳+最近的活动 +- 用于流程/正常运行时间/心跳新鲜度的 UI 状态卡 + +
+ +
+📋 20.“我需要可审核的 MCP 工具执行” + +当工具改变配置或触发操作操作时,团队需要取证可追溯性。 + +**OmniRoute 如何解决:** + +- SQLite 支持的 MCP 工具调用审核日志记录 +- 按工具、成功/失败、API 密钥和分页过滤 +- 仪表板审核表+自动化统计端点 + +
+ +
+🔐 21.“每次集成我都需要范围内的 MCP 权限” + +不同的客户端应该具有对工具类别的最低权限访问权限。 + +**OmniRoute 如何解决:** + +- 9 个粒度 MCP 范围,用于受控工具访问 +- MCP 管理 UI 中的范围执行和可见性 +- 操作工具的安全默认姿势 + +
+ +
+⚙️ 22.“我需要操作控制而不重新部署” + +团队需要在事件或成本事件期间快速更改运行时。 + +**OmniRoute 如何解决:** + +- 直接从 MCP 仪表板切换组合激活 +- 应用预定义策略包中的弹性配置文件 +- 从同一操作面板重置断路器状态 + +
+ +
+🔄 23.“我需要实时 A2A 任务生命周期可见性和取消” + +如果没有生命周期可见性,任务事件就很难分类。 + +**OmniRoute 如何解决:** + +- 任务列表/按状态/技能过滤并分页 +- 深入了解任务元数据、事件和工件 +- 任务取消端点和带有确认的 UI 操作 + +
+ +
+🌊 24.“我需要 A2A 负载的活动流指标” + +流媒体工作流程需要对并发和实时连接的操作洞察。 + +**OmniRoute 如何解决:** + +- 活动流计数器集成到 A2A 状态中 +- 最后任务时间戳和每个状态计数 +- 用于实时操作监控的 A2A 仪表板卡 + +
+ +
+🪪 25.“我需要为客户发现标准代理” + +外部客户端和协调器需要机器可读的元数据来进行引导。 + +**OmniRoute 如何解决:** + +- 特工卡暴露在`/.well-known/agent.json` +- 管理 UI 中显示的能力和技能 +- A2A 状态 API 包括用于自动化的发现元数据 + +
+ +
+🧭 26.“我需要产品 UX 中的协议可发现性” + +如果用户无法发现协议表面,采用和支持质量就会下降。 + +**OmniRoute 如何解决:** + +- MCP 和 A2A 的侧边栏条目 +- 端点页面“协议”选项卡包含快速启动和状态 +- 从概述到专用管理仪表板的链接 + +
+ +
+🧪 27.“我需要与真实客户端进行端到端协议验证” + +模拟测试不足以在发布前验证协议兼容性。 + +**OmniRoute 如何解决:** + +- E2E 套件,可启动应用程序并使用真正的 MCP SDK 客户端传输 +- A2A 客户端测试发现、发送、流式传输、获取和取消流程 +- 针对 MCP 审计和 A2A 任务 API 交叉检查断言 + +
+ +
+📡 28.“我需要跨所有接口的统一可观察性” + +按协议分割可观察性会产生盲点和更长的 MTTR。 + +**OmniRoute 如何解决:** + +- 一个产品中的统一仪表板/日志/分析 +- 跨 OpenAI、MCP 和 A2A 层的运行状况 + 审计 + 请求遥测 +- 用于状态和自动化的操作 API + +
+ +
+💼 29.“我需要一个用于代理+工具+代理编排的运行时” + +运行许多单独的服务会增加运营成本和故障模式。 + +**OmniRoute 如何解决:** + +- 兼容 OpenAI 的代理、MCP 服务器和 A2A 服务器位于一个堆栈中 +- 共享身份验证、弹性、数据存储和可观察性 +- 所有交互界面上一致的策略模型 + +
+ +
+🚀 30.“我需要在没有胶水代码蔓延的情况下交付代理工作流程” + +拼接多个临时服务和脚本时,团队会失去速度。 + +**OmniRoute 如何解决:** + +- 客户端和代理的统一端点策略 +- 内置协议管理 UI 和烟雾验证路径 +- 生产就绪的基础(安全性、日志记录、弹性、备份) + +
+ +### 示例手册(集成用例) + +**剧本 A:最大化付费订阅 + 廉价备份** + +```txt +Combo: "maximize-claude" + 1. cc/claude-opus-4-6 + 2. glm/glm-4.7 + 3. if/kimi-k2-thinking + +Monthly cost: $20 + small backup spend +Outcome: higher quality, near-zero interruption +``` + +**剧本 B:零成本编码堆栈** + +```txt +Combo: "free-forever" + 1. gc/gemini-3-flash + 2. if/kimi-k2-thinking + 3. qw/qwen3-coder-plus + +Monthly cost: $0 +Outcome: stable free coding workflow +``` + +**剧本 C:24/7 始终在线的后备链** + +```txt +Combo: "always-on" + 1. cc/claude-opus-4-6 + 2. cx/gpt-5.2-codex + 3. glm/glm-4.7 + 4. minimax/MiniMax-M2.1 + 5. if/kimi-k2-thinking + +Outcome: deep fallback depth for deadline-critical workloads +``` + +**剧本 D:使用 MCP + A2A 的特工操作** + +```txt +1) Start MCP transport (`omniroute --mcp`) for tool-driven operations +2) Run A2A tasks via `message/send` and `message/stream` +3) Observe via /dashboard/mcp and /dashboard/a2a +4) Control incidents with resilience profile + task cancellation +``` + +--- + ## ⚡ 快速开始 **1. 全局安装:** @@ -506,7 +781,7 @@ docker compose --profile cli up -d --- -## 🖥️ 桌面应用 — 离线 & 始终在线 +## 🖥️ > 🆕 **全新!** OmniRoute 现已提供适用于 Windows、macOS 和 Linux 的**原生桌面应用程序**。 @@ -696,66 +971,26 @@ Combo: "my-coding-stack"
---- +## 🧪 评估 (Evals) -## 🎯 使用场景 +OmniRoute 包含内置评估框架,用于针对黄金集测试 LLM 响应质量。通过仪表板中的 **Analytics → Evals** 访问。 -### 场景 1:"我有 Claude Pro 订阅" +### 内置黄金集 -**问题:** 配额未使用就过期,编程高峰期遇到速率限制 +预加载的「OmniRoute Golden Set」包含 10 个测试用例: -``` -Combo: "maximize-claude" - 1. cc/claude-opus-4-6 (充分使用订阅) - 2. glm/glm-4.7 (配额用完时的便宜备用) - 3. if/kimi-k2-thinking (免费应急后备) +- 问候、数学、地理、代码生成 +- JSON 格式合规性、翻译、markdown +- 安全拒绝(有害内容)、计数、布尔逻辑 -每月成本:$20(订阅)+ ~$5(备用)= $25 总计 -对比:$20 + 遇到限制 = 受挫 -``` +### 评估策略 -### 场景 2:"我想要零成本" - -**问题:** 无法承担订阅费用,需要可靠的 AI 编程 - -``` -Combo: "free-forever" - 1. gc/gemini-3-flash (每月 180K 免费) - 2. if/kimi-k2-thinking (无限免费) - 3. qw/qwen3-coder-plus (无限免费) - -每月成本:$0 -质量:生产级模型 -``` - -### 场景 3:"我需要 24/7 编程,不中断" - -**问题:** 截止日期紧迫,不能有停机时间 - -``` -Combo: "always-on" - 1. cc/claude-opus-4-6 (最佳质量) - 2. cx/gpt-5.2-codex (第二个订阅) - 3. glm/glm-4.7 (便宜,每日重置) - 4. minimax/MiniMax-M2.1 (最便宜,5小时重置) - 5. if/kimi-k2-thinking (免费无限制) - -结果:5 层故障转移 = 零停机 -``` - -### 场景 4:"我想在 OpenClaw 中使用免费 AI" - -**问题:** 需要在消息应用中使用 AI 助手,完全免费 - -``` -Combo: "openclaw-free" - 1. if/glm-4.7 (无限免费) - 2. if/minimax-m2.1 (无限免费) - 3. if/kimi-k2-thinking (无限免费) - -每月成本:$0 -访问方式:WhatsApp、Telegram、Slack、Discord、iMessage、Signal... -``` +| 策略 | 描述 | 示例 | +| ---------- | -------------------------------- | -------------------------------- | +| `exact` | 输出必须完全匹配 | `"4"` | +| `contains` | 输出必须包含子串(不区分大小写) | `"Paris"` | +| `regex` | 输出必须匹配正则表达式模式 | `"1.*2.*3"` | +| `custom` | 自定义 JS 函数返回 true/false | `(output) => output.length > 10` | --- @@ -1039,29 +1274,6 @@ codex "your prompt" --- -## 🧪 评估 (Evals) - -OmniRoute 包含内置评估框架,用于针对黄金集测试 LLM 响应质量。通过仪表板中的 **Analytics → Evals** 访问。 - -### 内置黄金集 - -预加载的「OmniRoute Golden Set」包含 10 个测试用例: - -- 问候、数学、地理、代码生成 -- JSON 格式合规性、翻译、markdown -- 安全拒绝(有害内容)、计数、布尔逻辑 - -### 评估策略 - -| 策略 | 描述 | 示例 | -| ---------- | -------------------------------- | -------------------------------- | -| `exact` | 输出必须完全匹配 | `"4"` | -| `contains` | 输出必须包含子串(不区分大小写) | `"Paris"` | -| `regex` | 输出必须匹配正则表达式模式 | `"1.*2.*3"` | -| `custom` | 自定义 JS 函数返回 true/false | `(output) => output.length > 10` | - ---- - ## 🐛 故障排除
@@ -1117,7 +1329,7 @@ OmniRoute 包含内置评估框架,用于针对黄金集测试 LLM 响应质 --- -## 🛠️ 技术栈 +## 🛠️ - **运行时**: Node.js 20+ - **语言**: TypeScript 5.9 — `src/` 和 `open-sse/` 中 **100% TypeScript**(v1.0.6) @@ -1148,17 +1360,7 @@ OmniRoute 包含内置评估框架,用于针对黄金集测试 LLM 响应质 --- -## 📧 支持 - -> 💬 **加入我们的社区!** [WhatsApp 群组](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — 获取帮助、分享技巧、了解最新动态。 - -- **网站**: [omniroute.online](https://omniroute.online) -- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) -- **Issues**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) -- **WhatsApp**: [社区群组](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) -- **原始项目**: [decolua 的 9router](https://github.com/decolua/9router) - ---- +## 🗺️ ## 👥 贡献者 diff --git a/open-sse/mcp-server/audit.ts b/open-sse/mcp-server/audit.ts index 944557cffd..211c7fa143 100644 --- a/open-sse/mcp-server/audit.ts +++ b/open-sse/mcp-server/audit.ts @@ -31,6 +31,96 @@ interface AuditTopToolRow { count: unknown; } +interface AuditCountRow { + total: unknown; +} + +interface AuditEntryRow { + id?: unknown; + tool_name?: unknown; + input_hash?: unknown; + output_summary?: unknown; + duration_ms?: unknown; + api_key_id?: unknown; + success?: unknown; + error_code?: unknown; + created_at?: unknown; +} + +export interface McpAuditQuery { + limit?: number; + offset?: number; + tool?: string; + success?: boolean; + apiKeyId?: string; +} + +export interface McpAuditEntry { + id: number; + toolName: string; + inputHash: string; + outputSummary: string; + durationMs: number; + apiKeyId: string | null; + success: boolean; + errorCode: string | null; + createdAt: string; +} + +function toNullableString(value: unknown): string | null { + return typeof value === "string" ? value : null; +} + +function toBoolean(value: unknown, fallback = false): boolean { + if (typeof value === "boolean") return value; + if (value === 1 || value === "1") return true; + if (value === 0 || value === "0") return false; + return fallback; +} + +function toPositiveInt(value: unknown, fallback: number): number { + const parsed = toNumber(value, fallback); + if (!Number.isFinite(parsed)) return fallback; + return Math.max(0, Math.floor(parsed)); +} + +function mapAuditEntry(row: AuditEntryRow): McpAuditEntry { + return { + id: toPositiveInt(row.id, 0), + toolName: toString(row.tool_name), + inputHash: toString(row.input_hash), + outputSummary: toString(row.output_summary), + durationMs: toNumber(row.duration_ms, 0), + apiKeyId: toNullableString(row.api_key_id), + success: toBoolean(row.success, false), + errorCode: toNullableString(row.error_code), + createdAt: toString(row.created_at), + }; +} + +function buildAuditFilterSql(filters: McpAuditQuery): { whereSql: string; params: unknown[] } { + const clauses: string[] = []; + const params: unknown[] = []; + + if (typeof filters.tool === "string" && filters.tool.trim().length > 0) { + clauses.push("tool_name = ?"); + params.push(filters.tool.trim()); + } + if (typeof filters.success === "boolean") { + clauses.push("success = ?"); + params.push(filters.success ? 1 : 0); + } + if (typeof filters.apiKeyId === "string" && filters.apiKeyId.trim().length > 0) { + clauses.push("api_key_id = ?"); + params.push(filters.apiKeyId.trim()); + } + + return { + whereSql: clauses.length > 0 ? `WHERE ${clauses.join(" AND ")}` : "", + params, + }; +} + let db: AuditDatabase | null = null; function toNumber(value: unknown, fallback = 0): number { @@ -129,19 +219,57 @@ export async function logToolCall( /** * Get recent audit entries (for dashboard/monitoring). */ -export async function getRecentAuditEntries(limit = 50): Promise { +export async function queryAuditEntries( + filters: McpAuditQuery = {} +): Promise<{ entries: McpAuditEntry[]; total: number; limit: number; offset: number }> { try { const database = await getDb(); - if (!database) return []; + const limit = Math.max(1, Math.min(500, toPositiveInt(filters.limit, 50))); + const offset = Math.max(0, toPositiveInt(filters.offset, 0)); + if (!database) return { entries: [], total: 0, limit, offset }; - return database - .prepare("SELECT * FROM mcp_tool_audit ORDER BY created_at DESC LIMIT ?") - .all(limit); + const { whereSql, params } = buildAuditFilterSql(filters); + const totalRow = database + .prepare(`SELECT COUNT(*) as total FROM mcp_tool_audit ${whereSql}`) + .get(...params); + const rows = database + .prepare( + `SELECT + id, + tool_name, + input_hash, + output_summary, + duration_ms, + api_key_id, + success, + error_code, + created_at + FROM mcp_tool_audit + ${whereSql} + ORDER BY created_at DESC + LIMIT ? OFFSET ?` + ) + .all(...params, limit, offset); + + return { + entries: rows.map(mapAuditEntry), + total: toPositiveInt(totalRow?.total, 0), + limit, + offset, + }; } catch { - return []; + return { entries: [], total: 0, limit: 50, offset: 0 }; } } +/** + * Backward compatible helper for existing callers. + */ +export async function getRecentAuditEntries(limit = 50): Promise { + const result = await queryAuditEntries({ limit, offset: 0 }); + return result.entries; +} + /** * Get audit stats for monitoring. */ diff --git a/open-sse/mcp-server/index.ts b/open-sse/mcp-server/index.ts index 85b958972f..a497cfc3c4 100644 --- a/open-sse/mcp-server/index.ts +++ b/open-sse/mcp-server/index.ts @@ -2,5 +2,11 @@ * OmniRoute MCP Server — barrel export. */ export { createMcpServer, startMcpStdio } from "./server.ts"; -export { logToolCall, getRecentAuditEntries, getAuditStats } from "./audit.ts"; +export { logToolCall, getRecentAuditEntries, getAuditStats, queryAuditEntries } from "./audit.ts"; +export { + resolveMcpHeartbeatPath, + readMcpHeartbeat, + isMcpHeartbeatOnline, + isProcessAlive, +} from "./runtimeHeartbeat.ts"; export * from "./schemas/index.ts"; diff --git a/open-sse/mcp-server/runtimeHeartbeat.ts b/open-sse/mcp-server/runtimeHeartbeat.ts new file mode 100644 index 0000000000..ce33d95c07 --- /dev/null +++ b/open-sse/mcp-server/runtimeHeartbeat.ts @@ -0,0 +1,162 @@ +/** + * MCP Runtime Heartbeat + * + * Persists MCP stdio process liveness into DATA_DIR/runtime/mcp-heartbeat.json + * so dashboard APIs can report real online/offline state. + */ + +import { promises as fs } from "node:fs"; +import { homedir } from "node:os"; +import { join } from "node:path"; + +export type McpHeartbeatSnapshot = { + pid: number; + startedAt: string; + lastHeartbeatAt: string; + version: string; + transport: "stdio"; + scopesEnforced: boolean; + allowedScopes: string[]; + toolCount: number; +}; + +const HEARTBEAT_FILE = "mcp-heartbeat.json"; +const RUNTIME_DIR = "runtime"; +const DEFAULT_INTERVAL_MS = 5000; + +function resolveDataDir(): string { + const configured = process.env.DATA_DIR; + if (typeof configured === "string" && configured.trim().length > 0) { + return configured.trim(); + } + return join(homedir(), ".omniroute"); +} + +export function resolveMcpHeartbeatPath(): string { + return join(resolveDataDir(), RUNTIME_DIR, HEARTBEAT_FILE); +} + +async function writeHeartbeat(snapshot: McpHeartbeatSnapshot): Promise { + const heartbeatPath = resolveMcpHeartbeatPath(); + const runtimeDir = join(resolveDataDir(), RUNTIME_DIR); + await fs.mkdir(runtimeDir, { recursive: true }); + await fs.writeFile(heartbeatPath, JSON.stringify(snapshot, null, 2), "utf-8"); +} + +export function startMcpHeartbeat(config: { + version: string; + scopesEnforced: boolean; + allowedScopes: string[]; + toolCount: number; + intervalMs?: number; +}): () => void { + const startedAt = new Date().toISOString(); + let timer: ReturnType | null = null; + let stopped = false; + const intervalMs = + typeof config.intervalMs === "number" && config.intervalMs > 0 + ? config.intervalMs + : DEFAULT_INTERVAL_MS; + + const tick = async () => { + if (stopped) return; + const snapshot: McpHeartbeatSnapshot = { + pid: process.pid, + startedAt, + lastHeartbeatAt: new Date().toISOString(), + version: config.version, + transport: "stdio", + scopesEnforced: config.scopesEnforced, + allowedScopes: [...config.allowedScopes], + toolCount: config.toolCount, + }; + + try { + await writeHeartbeat(snapshot); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + console.error("[MCP Heartbeat] Failed to write heartbeat:", message); + } + }; + + void tick(); + timer = setInterval(() => { + void tick(); + }, intervalMs); + + return () => { + if (stopped) return; + stopped = true; + if (timer) { + clearInterval(timer); + timer = null; + } + // Keep last snapshot on disk for post-mortem/offline reporting. + void tick(); + }; +} + +export async function readMcpHeartbeat(): Promise { + const heartbeatPath = resolveMcpHeartbeatPath(); + try { + const raw = await fs.readFile(heartbeatPath, "utf-8"); + const parsed = JSON.parse(raw) as Partial; + if (!parsed || typeof parsed !== "object") return null; + + if ( + typeof parsed.pid !== "number" || + typeof parsed.startedAt !== "string" || + typeof parsed.lastHeartbeatAt !== "string" || + typeof parsed.version !== "string" || + parsed.transport !== "stdio" || + typeof parsed.scopesEnforced !== "boolean" || + !Array.isArray(parsed.allowedScopes) || + typeof parsed.toolCount !== "number" + ) { + return null; + } + + const allowedScopes = parsed.allowedScopes.filter((scope): scope is string => { + return typeof scope === "string"; + }); + + return { + pid: parsed.pid, + startedAt: parsed.startedAt, + lastHeartbeatAt: parsed.lastHeartbeatAt, + version: parsed.version, + transport: "stdio", + scopesEnforced: parsed.scopesEnforced, + allowedScopes, + toolCount: parsed.toolCount, + }; + } catch { + return null; + } +} + +export function isProcessAlive(pid: number): boolean { + if (!Number.isFinite(pid) || pid <= 0) return false; + try { + process.kill(pid, 0); + return true; + } catch { + return false; + } +} + +export function isMcpHeartbeatOnline( + snapshot: McpHeartbeatSnapshot | null, + options?: { staleAfterMs?: number; requireLivePid?: boolean } +): boolean { + if (!snapshot) return false; + const staleAfterMs = + typeof options?.staleAfterMs === "number" && options.staleAfterMs > 0 + ? options.staleAfterMs + : DEFAULT_INTERVAL_MS * 3; + const elapsed = Date.now() - new Date(snapshot.lastHeartbeatAt).getTime(); + if (!Number.isFinite(elapsed) || elapsed > staleAfterMs) return false; + + if (options?.requireLivePid === false) return true; + return isProcessAlive(snapshot.pid); +} diff --git a/open-sse/mcp-server/server.ts b/open-sse/mcp-server/server.ts index 899edf79e6..4bfeaf0dee 100644 --- a/open-sse/mcp-server/server.ts +++ b/open-sse/mcp-server/server.ts @@ -14,6 +14,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { + MCP_TOOLS, getHealthInput, listCombosInput, getComboMetricsInput, @@ -31,6 +32,7 @@ import { explainRouteInput, getSessionSnapshotInput, } from "./schemas/tools.ts"; +import { startMcpHeartbeat } from "./runtimeHeartbeat.ts"; import { logToolCall } from "./audit.ts"; import { @@ -674,10 +676,30 @@ export function createMcpServer(): McpServer { export async function startMcpStdio(): Promise { const server = createMcpServer(); const transport = new StdioServerTransport(); + const version = process.env.npm_package_version || "1.8.1"; + const stopHeartbeat = startMcpHeartbeat({ + version, + scopesEnforced: MCP_ENFORCE_SCOPES, + allowedScopes: Array.from(MCP_ALLOWED_SCOPES), + toolCount: MCP_TOOLS.length, + }); + const stopHeartbeatOnce = () => { + stopHeartbeat(); + }; + process.once("exit", stopHeartbeatOnce); + process.once("SIGINT", stopHeartbeatOnce); + process.once("SIGTERM", stopHeartbeatOnce); console.error("[MCP] OmniRoute MCP Server starting (stdio transport)..."); - await server.connect(transport); - console.error("[MCP] OmniRoute MCP Server connected and ready."); + try { + await server.connect(transport); + console.error("[MCP] OmniRoute MCP Server connected and ready."); + } finally { + stopHeartbeatOnce(); + process.off("exit", stopHeartbeatOnce); + process.off("SIGINT", stopHeartbeatOnce); + process.off("SIGTERM", stopHeartbeatOnce); + } } // If this file is run directly, start stdio server diff --git a/package.json b/package.json index 8ba08acc2e..dab4b4d9c0 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,7 @@ "typecheck:noimplicit:core": "tsc --pretty false -p tsconfig.typecheck-noimplicit-core.json", "test:integration": "node --import tsx/esm --test tests/integration/*.test.mjs", "test:e2e": "node scripts/run-playwright-tests.mjs test tests/e2e/*.spec.ts", + "test:protocols:e2e": "node scripts/run-protocol-clients-tests.mjs", "test:vitest": "vitest run open-sse/mcp-server/__tests__/*.test.ts open-sse/services/autoCombo/__tests__/*.test.ts", "test:ecosystem": "node scripts/run-ecosystem-tests.mjs", "test:coverage": "npx c8 --exclude=open-sse --check-coverage --lines 50 --functions 50 --branches 50 node --import tsx/esm --test tests/unit/*.test.mjs", diff --git a/scripts/run-protocol-clients-tests.mjs b/scripts/run-protocol-clients-tests.mjs new file mode 100644 index 0000000000..f87cfafe9d --- /dev/null +++ b/scripts/run-protocol-clients-tests.mjs @@ -0,0 +1,79 @@ +#!/usr/bin/env node + +import { spawn } from "node:child_process"; +import { setTimeout as delay } from "node:timers/promises"; +import { sanitizeColorEnv } from "./runtime-env.mjs"; + +const port = process.env.DASHBOARD_PORT || process.env.PORT || "20128"; +const baseUrl = process.env.OMNIROUTE_BASE_URL || `http://localhost:${port}`; +const healthUrl = `${baseUrl}/api/monitoring/health`; +const maxWaitMs = Number(process.env.ECOSYSTEM_SERVER_WAIT_MS || 180000); +const pollMs = 2000; + +async function isServerReady() { + const timeout = AbortSignal.timeout(2000); + try { + const res = await fetch(healthUrl, { signal: timeout }); + return res.ok; + } catch { + return false; + } +} + +async function waitForServerReady() { + const maxAttempts = Math.ceil(maxWaitMs / pollMs); + for (let attempt = 1; attempt <= maxAttempts; attempt += 1) { + if (await isServerReady()) return; + await delay(pollMs); + } + throw new Error(`Timed out waiting for ${healthUrl} after ${maxWaitMs}ms`); +} + +async function main() { + let serverProcess = null; + let startedHere = false; + const testEnv = sanitizeColorEnv(process.env); + + if (!(await isServerReady())) { + serverProcess = spawn(process.execPath, ["scripts/run-next-playwright.mjs", "dev"], { + stdio: "inherit", + env: testEnv, + }); + startedHere = true; + await waitForServerReady(); + } + + const vitestProcess = spawn( + process.execPath, + ["./node_modules/vitest/vitest.mjs", "run", "tests/e2e/protocol-clients.test.ts"], + { + stdio: "inherit", + env: testEnv, + } + ); + + const exitCode = await new Promise((resolve) => { + vitestProcess.on("exit", (code, signal) => { + if (signal) { + resolve(1); + return; + } + resolve(code ?? 1); + }); + }); + + if (startedHere && serverProcess) { + serverProcess.kill("SIGTERM"); + await delay(1000); + if (!serverProcess.killed) { + serverProcess.kill("SIGKILL"); + } + } + + process.exit(exitCode); +} + +main().catch((error) => { + console.error("[test:protocols:e2e] Failed:", error?.message || error); + process.exit(1); +}); diff --git a/src/app/(dashboard)/dashboard/a2a/page.tsx b/src/app/(dashboard)/dashboard/a2a/page.tsx index 62dd9efbf8..d0853252a9 100644 --- a/src/app/(dashboard)/dashboard/a2a/page.tsx +++ b/src/app/(dashboard)/dashboard/a2a/page.tsx @@ -1,118 +1,555 @@ -/** - * Dashboard A2A Panel — /dashboard/a2a - * - * Shows Agent Card, active/completed tasks, and routing metadata. - */ - "use client"; -import { useEffect, useState, useCallback } from "react"; +import { useCallback, useEffect, useMemo, useState } from "react"; +import { Card, Button } from "@/shared/components"; +import { useTranslations } from "next-intl"; -export default function A2ADashboard() { - const [agentCard, setAgentCard] = useState(null); - const [tasks, setTasks] = useState([]); +type A2ATaskState = "submitted" | "working" | "completed" | "failed" | "cancelled"; - const fetchData = useCallback(async () => { - try { - const [cardRes, tasksRes] = await Promise.allSettled([ - fetch("/.well-known/agent.json"), - fetch("/api/a2a/tasks"), - ]); - if (cardRes.status === "fulfilled") setAgentCard(await cardRes.value.json()); - if (tasksRes.status === "fulfilled") { - const data = await tasksRes.value.json(); - setTasks(Array.isArray(data) ? data : data.tasks || []); - } - } catch { - /* ignore */ - } +type A2AStatus = { + status: "ok"; + tasks: { + counts: Record; + total: number; + activeStreams: number; + lastTaskAt: string | null; + }; + agent: { + name: string; + description: string; + version: string; + url: string; + } | null; + capabilities: Record | null; + skills: Array<{ + id: string; + name: string; + description: string; + tags?: string[]; + }>; +}; + +type TaskArtifact = { + type: "text" | "json" | "error"; + content: string; +}; + +type TaskEvent = { + timestamp: string; + state: A2ATaskState; + message?: string; +}; + +type A2ATask = { + id: string; + skill: string; + state: A2ATaskState; + input: { + skill: string; + messages: Array<{ role: string; content: string }>; + metadata?: Record; + }; + artifacts: TaskArtifact[]; + events: TaskEvent[]; + metadata: Record; + createdAt: string; + updatedAt: string; + expiresAt: string; +}; + +type TaskListResponse = { + tasks: A2ATask[]; + total: number; + limit: number; + offset: number; +}; + +const PAGE_SIZE = 20; +const TASK_STATES: Array<"all" | A2ATaskState> = [ + "all", + "submitted", + "working", + "completed", + "failed", + "cancelled", +]; + +function stateClass(state: A2ATaskState) { + if (state === "completed") return "bg-green-500/15 text-green-500"; + if (state === "failed") return "bg-red-500/15 text-red-500"; + if (state === "working") return "bg-amber-500/15 text-amber-500"; + if (state === "cancelled") return "bg-gray-500/15 text-gray-400"; + return "bg-blue-500/15 text-blue-500"; +} + +export default function A2ADashboardPage() { + const t = useTranslations("a2aDashboard"); + const [loading, setLoading] = useState(true); + const [status, setStatus] = useState(null); + + const [stateFilter, setStateFilter] = useState<"all" | A2ATaskState>("all"); + const [skillFilter, setSkillFilter] = useState(""); + const [offset, setOffset] = useState(0); + const [tasksData, setTasksData] = useState({ + tasks: [], + total: 0, + limit: PAGE_SIZE, + offset: 0, + }); + const [tasksLoading, setTasksLoading] = useState(false); + + const [selectedTask, setSelectedTask] = useState(null); + const [actionMessage, setActionMessage] = useState(""); + const [actionBusy, setActionBusy] = useState(null); + + const refreshStatus = useCallback(async () => { + const response = await fetch("/api/a2a/status"); + if (!response.ok) return; + const json = await response.json(); + setStatus(json); }, []); + const refreshTasks = useCallback(async () => { + setTasksLoading(true); + try { + const params = new URLSearchParams(); + params.set("limit", String(PAGE_SIZE)); + params.set("offset", String(offset)); + if (stateFilter !== "all") params.set("state", stateFilter); + if (skillFilter) params.set("skill", skillFilter); + + const response = await fetch(`/api/a2a/tasks?${params.toString()}`); + if (!response.ok) return; + const json = await response.json(); + setTasksData({ + tasks: Array.isArray(json.tasks) ? json.tasks : [], + total: Number(json.total || 0), + limit: Number(json.limit || PAGE_SIZE), + offset: Number(json.offset || 0), + }); + } finally { + setTasksLoading(false); + } + }, [offset, stateFilter, skillFilter]); + useEffect(() => { - const id = setTimeout(fetchData, 0); - const interval = setInterval(fetchData, 30_000); - return () => { - clearTimeout(id); - clearInterval(interval); - }; - }, [fetchData]); + Promise.allSettled([refreshStatus(), refreshTasks()]).finally(() => setLoading(false)); + const interval = setInterval(() => { + void refreshStatus(); + void refreshTasks(); + }, 30000); + return () => clearInterval(interval); + }, [refreshStatus, refreshTasks]); + + useEffect(() => { + void refreshTasks(); + }, [refreshTasks]); + + const availableSkills = useMemo(() => { + const values = new Set(); + for (const skill of status?.skills || []) values.add(skill.id); + for (const task of tasksData.tasks) values.add(task.skill); + return Array.from(values.values()).sort(); + }, [status, tasksData.tasks]); + + const currentPage = Math.floor(tasksData.offset / PAGE_SIZE) + 1; + const totalPages = Math.max(1, Math.ceil(tasksData.total / PAGE_SIZE)); + + const handleLoadTask = async (taskId: string) => { + const response = await fetch(`/api/a2a/tasks/${encodeURIComponent(taskId)}`); + if (!response.ok) return; + const json = await response.json(); + setSelectedTask(json.task || null); + }; + + const handleCancelTask = async (taskId: string) => { + if (!globalThis.confirm(t("confirmCancelTask", { taskId }))) return; + setActionBusy("cancel"); + setActionMessage(""); + try { + const response = await fetch(`/api/a2a/tasks/${encodeURIComponent(taskId)}/cancel`, { + method: "POST", + }); + if (!response.ok) { + const json = await response.json().catch(() => ({})); + setActionMessage(json?.error || t("cancelTaskFailed")); + return; + } + setActionMessage(t("cancelTaskSuccess", { taskId })); + await refreshStatus(); + await refreshTasks(); + if (selectedTask?.id === taskId) { + await handleLoadTask(taskId); + } + } finally { + setActionBusy(null); + } + }; + + const handleSmokeSend = async () => { + setActionBusy("send"); + setActionMessage(""); + try { + const response = await fetch("/a2a", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + jsonrpc: "2.0", + id: "dashboard-send", + method: "message/send", + params: { + skill: "quota-management", + messages: [{ role: "user", content: "Show a short quota summary." }], + }, + }), + }); + + const json = await response.json().catch(() => ({})); + if (!response.ok || json?.error) { + setActionMessage(json?.error?.message || t("smokeSendFailed")); + return; + } + + const taskId = json?.result?.task?.id; + setActionMessage(taskId ? t("smokeSendSuccessWithTask", { taskId }) : t("smokeSendSuccess")); + await refreshStatus(); + await refreshTasks(); + } finally { + setActionBusy(null); + } + }; + + const handleSmokeStream = async () => { + setActionBusy("stream"); + setActionMessage(""); + try { + const response = await fetch("/a2a", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + jsonrpc: "2.0", + id: "dashboard-stream", + method: "message/stream", + params: { + skill: "quota-management", + messages: [{ role: "user", content: "Stream a short quota summary." }], + }, + }), + }); + + if (!response.ok || !response.body) { + const text = await response.text().catch(() => ""); + setActionMessage(text || t("smokeStreamFailed")); + return; + } + + const reader = response.body.getReader(); + const decoder = new TextDecoder(); + let buffer = ""; + let streamTaskId: string | null = null; + let terminalState: string | null = null; + + while (true) { + const { value, done } = await reader.read(); + if (done) break; + buffer += decoder.decode(value, { stream: true }); + + const parts = buffer.split("\n\n"); + buffer = parts.pop() || ""; + + for (const part of parts) { + if (!part.startsWith("data: ")) continue; + const payload = part.slice("data: ".length); + let parsed: any; + try { + parsed = JSON.parse(payload); + } catch { + continue; + } + const nextTaskId = parsed?.params?.task?.id; + const nextState = parsed?.params?.task?.state; + if (nextTaskId) streamTaskId = nextTaskId; + if (typeof nextState === "string") { + if (["completed", "failed", "cancelled"].includes(nextState)) { + terminalState = nextState; + } + } + } + } + + if (streamTaskId) { + setActionMessage( + t("smokeStreamSuccessWithTask", { + taskId: streamTaskId, + stateSuffix: terminalState ? `, ${t(`state.${terminalState as A2ATaskState}`)}` : "", + }) + ); + } else { + setActionMessage(t("smokeStreamNoTaskId")); + } + await refreshStatus(); + await refreshTasks(); + } finally { + setActionBusy(null); + } + }; + + if (loading) { + return ( +
+
{t("loading")}
+
+ ); + } return ( -
-

🤖 A2A Server Dashboard

+
+
+ + + + +
- {/* Agent Card */} - {agentCard && ( -
-

{agentCard.name}

-

{agentCard.description}

-
- - v{agentCard.version} - - {agentCard.capabilities?.streaming && ( - - Streaming - - )} -
-

Skills ({agentCard.skills?.length || 0})

-
- {agentCard.skills?.map((s: any) => ( -
- {s.name} -

{s.description?.slice(0, 100)}

-
- {s.tags?.slice(0, 4).map((t: string) => ( - - {t} - - ))} -
+ +

{t("taskStateOverview")}

+
+ {(["submitted", "working", "completed", "failed", "cancelled"] as A2ATaskState[]).map( + (state) => ( +
+

{t(`state.${state}`)}

+

{status?.tasks?.counts?.[state] || 0}

- ))} + ) + )} +
+
+ +
+ +

{t("agentCard")}

+ {status?.agent ? ( +
+

{status.agent.name}

+

{status.agent.description}

+

+ {t("version")}: {status.agent.version} +

+

+ {t("url")}: {status.agent.url} +

+
+

{t("capabilities")}

+ + {JSON.stringify(status.capabilities || {}, null, 2)} + +
+
+ ) : ( +

{t("agentCardNotAvailable")}

+ )} +
+ + +

{t("quickValidation")}

+

{t("quickValidationDescription")}

+
+ + +
+ {actionMessage &&

{actionMessage}

} +
+
+ + +
+
+

{t("taskManagement")}

+

+ {t("taskSummary", { total: tasksData.total, page: currentPage, totalPages })} +

+
+
+ +
- )} - {/* Tasks */} -
-

📋 Task History

- {tasks.length === 0 ? ( -

- No A2A tasks yet. Send a request to /a2a to get started. -

+ {tasksLoading ? ( +

{t("loadingTasks")}

+ ) : tasksData.tasks.length === 0 ? ( +

{t("noTasksForFilters")}

) : ( -
- {tasks.map((task: any) => ( -
-
- {task.id} - - {task.state} - -
-

- Skill: {task.skill} -

- {task.metadata?.routing_explanation && ( -

{task.metadata.routing_explanation}

- )} -
- ))} +
+ + + + + + + + + + + + {tasksData.tasks.map((task) => ( + + + + + + + + ))} + +
{t("tableTask")}{t("tableSkill")}{t("tableState")}{t("tableUpdated")}{t("tableActions")}
{task.id}{task.skill} + + {t(`state.${task.state}`)} + + + {new Date(task.updatedAt).toLocaleString()} + + + +
)} -
+ +
+ + +
+ + + {selectedTask && ( + +
+

{t("taskDetail")}

+ +
+
+
+

{t("metadata")}

+ + {JSON.stringify( + { + id: selectedTask.id, + skill: selectedTask.skill, + state: selectedTask.state, + createdAt: selectedTask.createdAt, + updatedAt: selectedTask.updatedAt, + expiresAt: selectedTask.expiresAt, + metadata: selectedTask.metadata, + }, + null, + 2 + )} + +
+
+

{t("events")}

+ + {JSON.stringify(selectedTask.events, null, 2)} + +
+
+
+

{t("artifacts")}

+ + {JSON.stringify(selectedTask.artifacts, null, 2)} + +
+
+ )} +
+ ); +} + +function StatCard({ label, value }: { label: string; value: string | number }) { + return ( +
+

{label}

+

{value}

); } diff --git a/src/app/(dashboard)/dashboard/combos/page.tsx b/src/app/(dashboard)/dashboard/combos/page.tsx index 8c9abfe406..921fbcb01f 100644 --- a/src/app/(dashboard)/dashboard/combos/page.tsx +++ b/src/app/(dashboard)/dashboard/combos/page.tsx @@ -12,6 +12,7 @@ import { ProxyConfigModal, EmptyState, } from "@/shared/components"; +import Tooltip from "@/shared/components/Tooltip"; import { useCopyToClipboard } from "@/shared/hooks/useCopyToClipboard"; import { useNotificationStore } from "@/store/notificationStore"; import { useTranslations } from "next-intl"; @@ -19,6 +20,36 @@ import { useTranslations } from "next-intl"; // Validate combo name: letters, numbers, -, _, /, . const VALID_NAME_REGEX = /^[a-zA-Z0-9_/.-]+$/; +const STRATEGY_OPTIONS = [ + { value: "priority", labelKey: "priority", descKey: "priorityDesc", icon: "sort" }, + { value: "weighted", labelKey: "weighted", descKey: "weightedDesc", icon: "percent" }, + { value: "round-robin", labelKey: "roundRobin", descKey: "roundRobinDesc", icon: "autorenew" }, + { value: "random", labelKey: "random", descKey: "randomDesc", icon: "shuffle" }, + { value: "least-used", labelKey: "leastUsed", descKey: "leastUsedDesc", icon: "low_priority" }, + { value: "cost-optimized", labelKey: "costOpt", descKey: "costOptimizedDesc", icon: "savings" }, +]; + +function getStrategyMeta(strategy) { + return STRATEGY_OPTIONS.find((s) => s.value === strategy) || STRATEGY_OPTIONS[0]; +} + +function getStrategyLabel(t, strategy) { + return t(getStrategyMeta(strategy).labelKey); +} + +function getStrategyDescription(t, strategy) { + return t(getStrategyMeta(strategy).descKey); +} + +function getStrategyBadgeClass(strategy) { + if (strategy === "weighted") return "bg-amber-500/15 text-amber-600 dark:text-amber-400"; + if (strategy === "round-robin") return "bg-emerald-500/15 text-emerald-600 dark:text-emerald-400"; + if (strategy === "random") return "bg-purple-500/15 text-purple-600 dark:text-purple-400"; + if (strategy === "least-used") return "bg-cyan-500/15 text-cyan-600 dark:text-cyan-400"; + if (strategy === "cost-optimized") return "bg-teal-500/15 text-teal-600 dark:text-teal-400"; + return "bg-blue-500/15 text-blue-600 dark:text-blue-400"; +} + // ───────────────────────────────────────────── // Helper: normalize model entry (legacy string ↔ new object) // ───────────────────────────────────────────── @@ -219,6 +250,8 @@ export default function CombosPage() {
+ + {/* Combos List */} {combos.length === 0 ? ( +
+
+ + tips_and_updates + +
+
+

{t("routingStrategy")}

+

{t("description")}

+
+
+ +
+ {guideStrategies.map((strategyValue) => { + const strategyMeta = getStrategyMeta(strategyValue); + return ( +
+
+ + {strategyMeta.icon} + + {getStrategyLabel(t, strategyValue)} +
+

+ {getStrategyDescription(t, strategyValue)} +

+
+ ); + })} +
+ + ); +} + // ───────────────────────────────────────────── // Combo Card // ───────────────────────────────────────────── @@ -322,6 +398,7 @@ function ComboCard({ const isDisabled = combo.isActive === false; const t = useTranslations("combos"); const tc = useTranslations("common"); + const strategyDescription = getStrategyDescription(t, strategy); // Resolve provider UUID to user-defined name const formatModelDisplay = (modelValue) => { @@ -346,23 +423,15 @@ function ComboCard({ {/* Name + Strategy Badge + Copy */}
{combo.name} - - {strategy} - + + + {getStrategyLabel(t, strategy)} + + {hasProxy && ( @@ -440,7 +509,7 @@ function ComboCard({ onChange={onToggle} title={isDisabled ? t("enableCombo") : t("disableCombo")} /> -
+
))}

- { - { - priority: "Sequential fallback: tries model 1 first, then 2, etc.", - weighted: "Distributes traffic by weight percentage with fallback", - "round-robin": - "Circular distribution: each request goes to the next model in rotation", - random: "Uniform random selection, then fallback to remaining models", - "least-used": "Picks the model with fewest requests, balancing load over time", - "cost-optimized": "Routes to the cheapest model first based on pricing", - }[strategy] - } + {getStrategyDescription(t, strategy)}

@@ -918,6 +986,22 @@ function ComboFormModal({ isOpen, combo, onClose, onSave, activeProviders }) { {/* Weight total indicator */} {strategy === "weighted" && models.length > 0 && } + {hasNoModels && ( +
+ warning + {t("noModelsYet")} +
+ )} + + {hasInvalidWeightedTotal && ( +
+ warning + + {t("weighted")} {weightTotal}% {"\u2260"} 100%. {t("autoBalance")} + +
+ )} + {/* Add Model button */} -
diff --git a/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx b/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx index 8825817f04..fe65b1e505 100644 --- a/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx +++ b/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx @@ -2,7 +2,8 @@ import { useState, useEffect, useMemo } from "react"; import PropTypes from "prop-types"; -import { Card, Button, Input, Modal, CardSkeleton } from "@/shared/components"; +import Link from "next/link"; +import { Card, Button, Input, Modal, CardSkeleton, SegmentedControl } from "@/shared/components"; import { useCopyToClipboard } from "@/shared/hooks/useCopyToClipboard"; import { AI_PROVIDERS, getProviderByAlias } from "@/shared/constants/providers"; import { useTranslations } from "next-intl"; @@ -13,7 +14,6 @@ const CLOUD_ACTION_TIMEOUT_MS = 15000; export default function APIPageClient({ machineId }) { const t = useTranslations("endpoint"); const tc = useTranslations("common"); - const [providerConnections, setProviderConnections] = useState([]); const [loading, setLoading] = useState(true); // Endpoints / models state @@ -30,13 +30,16 @@ export default function APIPageClient({ machineId }) { const [modalSuccess, setModalSuccess] = useState(false); // show success state in modal before closing const [selectedProvider, setSelectedProvider] = useState(null); // for provider models popup const [cloudBaseUrl, setCloudBaseUrl] = useState(CLOUD_URL); // dynamic cloud URL from API response + const [viewTab, setViewTab] = useState("api"); + const [mcpStatus, setMcpStatus] = useState(null); + const [a2aStatus, setA2aStatus] = useState(null); const { copied, copy } = useCopyToClipboard(); useEffect(() => { - fetchData(); - loadCloudSettings(); - fetchModels(); + Promise.allSettled([loadCloudSettings(), fetchModels(), fetchProtocolStatus()]).finally(() => { + setLoading(false); + }); }, []); const fetchModels = async () => { @@ -51,6 +54,24 @@ export default function APIPageClient({ machineId }) { } }; + const fetchProtocolStatus = async () => { + try { + const [mcpRes, a2aRes] = await Promise.allSettled([ + fetch("/api/mcp/status"), + fetch("/api/a2a/status"), + ]); + + if (mcpRes.status === "fulfilled" && mcpRes.value.ok) { + setMcpStatus(await mcpRes.value.json()); + } + if (a2aRes.status === "fulfilled" && a2aRes.value.ok) { + setA2aStatus(await a2aRes.value.json()); + } + } catch { + // Ignore status failures; protocols panel has fallback text. + } + }; + // Categorize models by endpoint type // Filter out parent models (models with parent field set) to avoid showing duplicates const endpointData = useMemo(() => { @@ -68,34 +89,6 @@ export default function APIPageClient({ machineId }) { return { chat, embeddings, images, rerank, audioTranscription, audioSpeech, moderation }; }, [allModels]); - const providerStats = useMemo(() => { - return Object.entries(AI_PROVIDERS).map(([providerId, providerInfo]) => { - const connections = providerConnections.filter((conn) => conn.provider === providerId); - const connected = connections.filter( - (conn) => - conn.isActive !== false && - (conn.testStatus === "active" || - conn.testStatus === "success" || - conn.testStatus === "unknown") - ).length; - const errors = connections.filter( - (conn) => - conn.isActive !== false && - (conn.testStatus === "error" || - conn.testStatus === "expired" || - conn.testStatus === "unavailable") - ).length; - - return { - id: providerId, - provider: providerInfo, - total: connections.length, - connected, - errors, - }; - }); - }, [providerConnections]); - const postCloudAction = async (action, timeoutMs = CLOUD_ACTION_TIMEOUT_MS) => { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), timeoutMs); @@ -130,22 +123,6 @@ export default function APIPageClient({ machineId }) { } }; - const fetchData = async () => { - try { - const providersRes = await fetch("/api/providers"); - - const providersData = await providersRes.json(); - - if (providersRes.ok) { - setProviderConnections(providersData.connections || []); - } - } catch (error) { - console.log("Error fetching data:", error); - } finally { - setLoading(false); - } - }; - const handleCloudToggle = (checked) => { if (checked) { setShowCloudModal(true); @@ -162,6 +139,11 @@ export default function APIPageClient({ machineId }) { } }, [cloudStatus]); + useEffect(() => { + const interval = setInterval(fetchProtocolStatus, 30000); + return () => clearInterval(interval); + }, []); + const dispatchCloudChange = () => { globalThis.dispatchEvent(new Event("cloud-status-changed")); }; @@ -201,10 +183,6 @@ export default function APIPageClient({ machineId }) { }); } - // Refresh keys list if new key was created - if (data.createdKey) { - await fetchData(); - } // Update cloud URL from API response (fixes undefined/v1 when env var not set) if (data.cloudUrl) { setCloudBaseUrl(data.cloudUrl); @@ -260,24 +238,6 @@ export default function APIPageClient({ machineId }) { } }; - const handleSyncCloud = async () => { - if (!cloudEnabled) return; - - setCloudSyncing(true); - try { - const { ok, data } = await postCloudAction("sync"); - if (ok) { - setCloudStatus({ type: "success", message: t("syncedSuccess") }); - } else { - setCloudStatus({ type: "error", message: data.error || t("syncFailed") }); - } - } catch (error) { - setCloudStatus({ type: "error", message: error.message || t("syncFailed") }); - } finally { - setCloudSyncing(false); - } - }; - const [baseUrl, setBaseUrl] = useState("/v1"); const cloudEndpointNew = cloudBaseUrl ? `${cloudBaseUrl}/v1` : null; @@ -299,6 +259,10 @@ export default function APIPageClient({ machineId }) { // Use new format endpoint (machineId embedded in key) const currentEndpoint = cloudEnabled && cloudEndpointNew ? cloudEndpointNew : baseUrl; + const mcpOnline = Boolean(mcpStatus?.online); + const a2aOnline = a2aStatus?.status === "ok"; + const mcpToolCount = Number(mcpStatus?.heartbeat?.toolCount || 0); + const a2aActiveStreams = Number(a2aStatus?.tasks?.activeStreams || 0); return (
@@ -387,219 +351,408 @@ export default function APIPageClient({ machineId }) {
- {/* Available Endpoints */} -
+
-

{t("available")}

+

{t("sectionTitle") || "Integration Surface"}

- {t("modelsAcrossEndpoints", { - models: Object.values(endpointData).reduce((acc, models) => acc + models.length, 0), - endpoints: [ - endpointData.chat, - endpointData.embeddings, - endpointData.images, - endpointData.rerank, - endpointData.audioTranscription, - endpointData.audioSpeech, - endpointData.moderation, - ].filter((a) => a.length > 0).length + 2, - })} + {t("sectionDescription") || + "OpenAI-compatible APIs and operational protocol endpoints"}

-
- - {/* Core APIs */} -
-
- hub -

- {t("categoryCore") || "Core APIs"} -

-
-
-
- {/* Chat Completions */} - setExpandedEndpoint(expandedEndpoint === "chat" ? null : "chat")} - copy={copy} - copied={copied} - baseUrl={currentEndpoint} - /> - - {/* Responses API */} - setExpandedEndpoint(expandedEndpoint === "responses" ? null : "responses")} - copy={copy} - copied={copied} - baseUrl={currentEndpoint} - /> -
-
- - {/* Media & Multi-Modal */} -
-
- perm_media -

- {t("categoryMedia") || "Media & Multi-Modal"} -

-
-
-
- {/* Embeddings */} - - setExpandedEndpoint(expandedEndpoint === "embeddings" ? null : "embeddings") - } - copy={copy} - copied={copied} - baseUrl={currentEndpoint} - /> - - {/* Image Generation */} - setExpandedEndpoint(expandedEndpoint === "images" ? null : "images")} - copy={copy} - copied={copied} - baseUrl={currentEndpoint} - /> - - {/* Audio Transcription */} - - setExpandedEndpoint( - expandedEndpoint === "audioTranscription" ? null : "audioTranscription" - ) - } - copy={copy} - copied={copied} - baseUrl={currentEndpoint} - /> - - {/* Audio Speech (TTS) */} - - setExpandedEndpoint(expandedEndpoint === "audioSpeech" ? null : "audioSpeech") - } - copy={copy} - copied={copied} - baseUrl={currentEndpoint} - /> -
-
- - {/* Utility & Management */} -
-
- build -

- {t("categoryUtility") || "Utility & Management"} -

-
-
-
- {/* Rerank */} - setExpandedEndpoint(expandedEndpoint === "rerank" ? null : "rerank")} - copy={copy} - copied={copied} - baseUrl={currentEndpoint} - /> - - {/* Moderations */} - - setExpandedEndpoint(expandedEndpoint === "moderation" ? null : "moderation") - } - copy={copy} - copied={copied} - baseUrl={currentEndpoint} - /> - - {/* List Models */} - setExpandedEndpoint(expandedEndpoint === "models" ? null : "models")} - copy={copy} - copied={copied} - baseUrl={currentEndpoint} - /> -
+
+ {viewTab === "api" ? ( + +
+
+

{t("available")}

+

+ {t("modelsAcrossEndpoints", { + models: Object.values(endpointData).reduce( + (acc, models) => acc + models.length, + 0 + ), + endpoints: + [ + endpointData.chat, + endpointData.embeddings, + endpointData.images, + endpointData.rerank, + endpointData.audioTranscription, + endpointData.audioSpeech, + endpointData.moderation, + ].filter((a) => a.length > 0).length + 2, + })} +

+
+
+ + {/* Core APIs */} +
+
+ hub +

+ {t("categoryCore") || "Core APIs"} +

+
+
+
+ {/* Chat Completions */} + setExpandedEndpoint(expandedEndpoint === "chat" ? null : "chat")} + copy={copy} + copied={copied} + baseUrl={currentEndpoint} + /> + + {/* Responses API */} + + setExpandedEndpoint(expandedEndpoint === "responses" ? null : "responses") + } + copy={copy} + copied={copied} + baseUrl={currentEndpoint} + /> +
+
+ + {/* Media & Multi-Modal */} +
+
+ perm_media +

+ {t("categoryMedia") || "Media & Multi-Modal"} +

+
+
+
+ {/* Embeddings */} + + setExpandedEndpoint(expandedEndpoint === "embeddings" ? null : "embeddings") + } + copy={copy} + copied={copied} + baseUrl={currentEndpoint} + /> + + {/* Image Generation */} + + setExpandedEndpoint(expandedEndpoint === "images" ? null : "images") + } + copy={copy} + copied={copied} + baseUrl={currentEndpoint} + /> + + {/* Audio Transcription */} + + setExpandedEndpoint( + expandedEndpoint === "audioTranscription" ? null : "audioTranscription" + ) + } + copy={copy} + copied={copied} + baseUrl={currentEndpoint} + /> + + {/* Audio Speech (TTS) */} + + setExpandedEndpoint(expandedEndpoint === "audioSpeech" ? null : "audioSpeech") + } + copy={copy} + copied={copied} + baseUrl={currentEndpoint} + /> +
+
+ + {/* Utility & Management */} +
+
+ build +

+ {t("categoryUtility") || "Utility & Management"} +

+
+
+
+ {/* Rerank */} + + setExpandedEndpoint(expandedEndpoint === "rerank" ? null : "rerank") + } + copy={copy} + copied={copied} + baseUrl={currentEndpoint} + /> + + {/* Moderations */} + + setExpandedEndpoint(expandedEndpoint === "moderation" ? null : "moderation") + } + copy={copy} + copied={copied} + baseUrl={currentEndpoint} + /> + + {/* List Models */} + + setExpandedEndpoint(expandedEndpoint === "models" ? null : "models") + } + copy={copy} + copied={copied} + baseUrl={currentEndpoint} + /> +
+
+ + ) : ( + +
+
+

{t("protocolsTitle") || "Protocols"}

+

+ {t("protocolsDescription") || + "MCP and A2A are first-class endpoints with dedicated observability and controls."} +

+
+ +
+
+
+
+

+ + hub + + {t("mcpCardTitle") || "MCP Server"} +

+

+ {t("mcpCardDescription") || "Model Context Protocol over stdio"} +

+
+ + {mcpOnline ? tc("active") : tc("inactive")} + +
+
+

+ {t("protocolToolsLabel") || "Tools"}:{" "} + {mcpToolCount || 16} +

+

+ {t("protocolLastActivity") || "Last activity"}:{" "} + + {mcpStatus?.activity?.lastCallAt + ? new Date(mcpStatus.activity.lastCallAt).toLocaleString() + : "—"} + +

+
+
+

{t("quickStart") || "Quick Start"}

+ omniroute --mcp +
+
+ + {t("openMcpDashboard") || "Open MCP management"} → + +
+
+ +
+
+
+

+ + group_work + + {t("a2aCardTitle") || "A2A Server"} +

+

+ {t("a2aCardDescription") || "Agent2Agent JSON-RPC endpoint"} +

+
+ + {a2aOnline ? tc("active") : tc("inactive")} + +
+
+

+ {t("protocolTasksLabel") || "Tasks"}:{" "} + + {a2aStatus?.tasks?.total || 0} + +

+

+ {t("protocolActiveStreamsLabel") || "Active streams"}:{" "} + {a2aActiveStreams} +

+
+
+

{t("quickStart") || "Quick Start"}

+ + {baseUrl.replace(/\/v1$/, "")}/a2a + +
+
+ + {t("openA2aDashboard") || "Open A2A management"} → + +
+
+
+ +
+
+

+ {t("mcpQuickStartTitle") || "MCP Quick Start"} +

+
    +
  1. {t("mcpQuickStartStep1") || "Run the MCP server via `omniroute --mcp`."}
  2. +
  3. + {t("mcpQuickStartStep2") || + "Configure your MCP client to connect over stdio transport."} +
  4. +
  5. + {t("mcpQuickStartStep3") || + "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`."} +
  6. +
+
+
+

+ {t("a2aQuickStartTitle") || "A2A Quick Start"} +

+
    +
  1. + {t("a2aQuickStartStep1") || + "Discover the agent card at `/.well-known/agent.json`."} +
  2. +
  3. + {t("a2aQuickStartStep2") || + "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`."} +
  4. +
  5. + {t("a2aQuickStartStep3") || + "Track and control tasks using `tasks/get` and `tasks/cancel`."} +
  6. +
+
+
+
+
+ )} + {/* Cloud Enable Modal */} ; + lastCallAt: string | null; + lastCallTool: string | null; + }; +}; + +type McpTool = { + name: string; + description: string; + scopes: string[]; + phase: 1 | 2; + auditLevel: "none" | "basic" | "full"; + sourceEndpoints: string[]; +}; + +type McpAuditEntry = { + id: number; + toolName: string; + inputHash: string; + outputSummary: string; + durationMs: number; + apiKeyId: string | null; success: boolean; - api_key_hash: string; + errorCode: string | null; + createdAt: string; +}; + +type McpAuditResponse = { + entries: McpAuditEntry[]; + total: number; + limit: number; + offset: number; +}; + +type Combo = { + id: string; + name: string; + isActive?: boolean; +}; + +const AUDIT_PAGE_SIZE = 20; + +const RESILIENCE_PRESETS = { + aggressive: { + profiles: { + oauth: { + transientCooldown: 3000, + rateLimitCooldown: 30000, + maxBackoffLevel: 4, + circuitBreakerThreshold: 2, + circuitBreakerReset: 30000, + }, + apikey: { + transientCooldown: 2000, + rateLimitCooldown: 0, + maxBackoffLevel: 3, + circuitBreakerThreshold: 3, + circuitBreakerReset: 15000, + }, + }, + defaults: { + requestsPerMinute: 180, + minTimeBetweenRequests: 100, + concurrentRequests: 16, + }, + }, + balanced: { + profiles: { + oauth: { + transientCooldown: 5000, + rateLimitCooldown: 60000, + maxBackoffLevel: 8, + circuitBreakerThreshold: 3, + circuitBreakerReset: 60000, + }, + apikey: { + transientCooldown: 3000, + rateLimitCooldown: 0, + maxBackoffLevel: 5, + circuitBreakerThreshold: 5, + circuitBreakerReset: 30000, + }, + }, + defaults: { + requestsPerMinute: 100, + minTimeBetweenRequests: 200, + concurrentRequests: 10, + }, + }, + conservative: { + profiles: { + oauth: { + transientCooldown: 8000, + rateLimitCooldown: 120000, + maxBackoffLevel: 10, + circuitBreakerThreshold: 8, + circuitBreakerReset: 120000, + }, + apikey: { + transientCooldown: 5000, + rateLimitCooldown: 30000, + maxBackoffLevel: 8, + circuitBreakerThreshold: 8, + circuitBreakerReset: 60000, + }, + }, + defaults: { + requestsPerMinute: 60, + minTimeBetweenRequests: 350, + concurrentRequests: 6, + }, + }, +} as const; + +function formatDuration(ms: number | null | undefined) { + if (typeof ms !== "number" || !Number.isFinite(ms)) return "—"; + if (ms < 1000) return `${Math.round(ms)}ms`; + return `${(ms / 1000).toFixed(1)}s`; } -interface McpStats { - totalCalls: number; - successRate: number; - avgDurationMs: number; - byTool: Array<{ tool: string; count: number; avgMs: number }>; +function formatPercent(value: number | null | undefined) { + if (typeof value !== "number" || !Number.isFinite(value)) return "0%"; + return `${(value * 100).toFixed(1)}%`; } -export default function McpDashboard() { - const [audit, setAudit] = useState([]); - const [stats, setStats] = useState(null); +export default function McpDashboardPage() { + const t = useTranslations("mcpDashboard"); const [loading, setLoading] = useState(true); + const [status, setStatus] = useState(null); + const [tools, setTools] = useState([]); + const [combos, setCombos] = useState([]); - const fetchData = useCallback(async () => { + const [toolFilter, setToolFilter] = useState(""); + const [successFilter, setSuccessFilter] = useState<"all" | "true" | "false">("all"); + const [apiKeyFilter, setApiKeyFilter] = useState(""); + const [auditOffset, setAuditOffset] = useState(0); + const [auditData, setAuditData] = useState({ + entries: [], + total: 0, + limit: AUDIT_PAGE_SIZE, + offset: 0, + }); + const [auditLoading, setAuditLoading] = useState(false); + + const [selectedComboId, setSelectedComboId] = useState(""); + const [selectedProfile, setSelectedProfile] = + useState("balanced"); + const [actionBusy, setActionBusy] = useState(null); + const [actionMessage, setActionMessage] = useState(""); + + const selectedCombo = useMemo( + () => combos.find((combo) => combo.id === selectedComboId) || null, + [combos, selectedComboId] + ); + + const refreshSummary = useCallback(async () => { try { - const [auditRes, statsRes] = await Promise.allSettled([ - fetch("/api/mcp/audit?limit=50"), - fetch("/api/mcp/audit/stats"), + const [statusRes, toolsRes, combosRes] = await Promise.all([ + fetch("/api/mcp/status"), + fetch("/api/mcp/tools"), + fetch("/api/combos"), ]); - if (auditRes.status === "fulfilled") setAudit(await auditRes.value.json()); - if (statsRes.status === "fulfilled") setStats(await statsRes.value.json()); - } catch { - /* fallback data */ + + if (statusRes.ok) { + const json = await statusRes.json(); + setStatus(json); + } + + if (toolsRes.ok) { + const json = await toolsRes.json(); + setTools(Array.isArray(json.tools) ? json.tools : []); + } + + if (combosRes.ok) { + const json = await combosRes.json(); + const nextCombos = Array.isArray(json?.combos) ? json.combos : []; + setCombos(nextCombos); + if (!selectedComboId && nextCombos.length > 0) { + setSelectedComboId(nextCombos[0].id); + } + } + } finally { + setLoading(false); } - setLoading(false); - }, []); + }, [selectedComboId]); + + const refreshAudit = useCallback(async () => { + setAuditLoading(true); + try { + const params = new URLSearchParams(); + params.set("limit", String(AUDIT_PAGE_SIZE)); + params.set("offset", String(auditOffset)); + if (toolFilter) params.set("tool", toolFilter); + if (successFilter !== "all") params.set("success", successFilter); + if (apiKeyFilter) params.set("apiKeyId", apiKeyFilter); + + const response = await fetch(`/api/mcp/audit?${params.toString()}`); + if (!response.ok) return; + + const json = await response.json(); + setAuditData({ + entries: Array.isArray(json.entries) ? json.entries : [], + total: Number(json.total || 0), + limit: Number(json.limit || AUDIT_PAGE_SIZE), + offset: Number(json.offset || 0), + }); + } finally { + setAuditLoading(false); + } + }, [auditOffset, toolFilter, successFilter, apiKeyFilter]); useEffect(() => { - const id = setTimeout(fetchData, 0); - const interval = setInterval(fetchData, 30_000); - return () => { - clearTimeout(id); - clearInterval(interval); - }; - }, [fetchData]); + refreshSummary(); + const interval = setInterval(refreshSummary, 30000); + return () => clearInterval(interval); + }, [refreshSummary]); - const tools = [ - "omniroute_get_health", - "omniroute_list_combos", - "omniroute_get_combo_metrics", - "omniroute_switch_combo", - "omniroute_check_quota", - "omniroute_route_request", - "omniroute_cost_report", - "omniroute_list_models_catalog", - "omniroute_simulate_route", - "omniroute_set_budget_guard", - "omniroute_set_resilience_profile", - "omniroute_test_combo", - "omniroute_get_provider_metrics", - "omniroute_best_combo_for_task", - "omniroute_explain_route", - "omniroute_get_session_snapshot", - ]; + useEffect(() => { + refreshAudit(); + }, [refreshAudit]); + + const handleSwitchCombo = async () => { + if (!selectedCombo) return; + const nextState = selectedCombo.isActive === false; + const confirmLabel = nextState ? t("activate") : t("deactivate"); + if ( + !globalThis.confirm( + t("confirmSwitchCombo", { action: confirmLabel, combo: selectedCombo.name }) + ) + ) + return; + + setActionBusy("switch"); + setActionMessage(""); + try { + const response = await fetch(`/api/combos/${selectedCombo.id}`, { + method: "PUT", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ isActive: nextState }), + }); + + if (!response.ok) { + const json = await response.json().catch(() => ({})); + setActionMessage(json?.error || t("switchComboFailed")); + return; + } + + setActionMessage(t("switchComboSuccess", { combo: selectedCombo.name })); + await refreshSummary(); + } finally { + setActionBusy(null); + } + }; + + const handleApplyResilience = async () => { + const preset = RESILIENCE_PRESETS[selectedProfile]; + const profileLabelById: Record = { + aggressive: t("profileAggressive"), + balanced: t("profileBalanced"), + conservative: t("profileConservative"), + }; + const profileLabel = profileLabelById[selectedProfile]; + if (!globalThis.confirm(t("confirmApplyProfile", { profile: profileLabel }))) return; + + setActionBusy("resilience"); + setActionMessage(""); + try { + const response = await fetch("/api/resilience", { + method: "PATCH", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(preset), + }); + + if (!response.ok) { + const json = await response.json().catch(() => ({})); + setActionMessage(json?.error || t("applyProfileFailed")); + return; + } + + setActionMessage(t("applyProfileSuccess", { profile: profileLabel })); + await refreshSummary(); + } finally { + setActionBusy(null); + } + }; + + const handleResetCircuitBreakers = async () => { + if (!globalThis.confirm(t("confirmResetBreakers"))) return; + + setActionBusy("reset"); + setActionMessage(""); + try { + const response = await fetch("/api/monitoring/health", { method: "DELETE" }); + if (!response.ok) { + const json = await response.json().catch(() => ({})); + setActionMessage(json?.error || t("resetBreakersFailed")); + return; + } + + const json = await response.json().catch(() => ({})); + setActionMessage(json?.message || t("resetBreakersSuccess")); + await refreshSummary(); + } finally { + setActionBusy(null); + } + }; + + const totalPages = Math.max(1, Math.ceil((auditData.total || 0) / AUDIT_PAGE_SIZE)); + const currentPage = Math.floor((auditData.offset || 0) / AUDIT_PAGE_SIZE) + 1; + const topTools = status?.activity?.topTools || []; + + if (loading) { + return ( +
+
{t("loading")}
+
+ ); + } return ( -
-

🔧 MCP Server Dashboard

- - {/* Stats Grid */} -
- - - - +
+
+ + + +
- {/* Tool List */} -
-

📋 Available Tools ({tools.length})

-
- {tools.map((t) => ( -
- {t.replace("omniroute_", "")} -
- ))} + +

{t("activity24h")}

+
+ + +
-
+
+
+

{t("topTools")}

+ {topTools.length === 0 ? ( +

{t("noToolCalls24h")}

+ ) : ( +
    + {topTools.map((entry) => ( +
  • + {entry.tool} + {entry.count} +
  • + ))} +
+ )} +
+
+

{t("runtimeDetails")}

+
+

+ {t("transport")}:{" "} + {status?.heartbeat?.transport || "—"} +

+

+ {t("scopesEnforced")}:{" "} + + {status?.heartbeat?.scopesEnforced ? t("yes") : t("no")} + +

+

+ {t("lastCall")}:{" "} + + {status?.activity?.lastCallTool || "—"}{" "} + {status?.activity?.lastCallAt + ? `(${new Date(status.activity.lastCallAt).toLocaleString()})` + : ""} + +

+

+ {t("heartbeatPath")}:{" "} + {status?.heartbeatPath || "—"} +

+
+
+
+ - {/* Audit Log */} -
-

📊 Recent Calls

- {loading ? ( -

Loading...

- ) : audit.length === 0 ? ( -

- No MCP calls yet. Use omniroute --mcp to connect. -

+ +

{t("operationalControls")}

+
+
+

{t("switchCombo")}

+ + +
+ +
+

{t("applyResilienceProfile")}

+ + +
+ +
+

{t("resetCircuitBreakers")}

+

{t("resetCircuitBreakersHelp")}

+ +
+
+ {actionMessage &&

{actionMessage}

} +
+ + +

{t("toolsAndScopes")}

+
+ + + + + + + + + + + {tools.map((tool) => ( + + + + + + + ))} + +
{t("tableTool")}{t("tableScopes")}{t("tablePhase")}{t("tableAudit")}
{tool.name}{tool.scopes.join(", ") || "—"}{tool.phase}{tool.auditLevel}
+
+
+ + +
+
+

{t("auditLog")}

+

+ {t("auditSummary", { total: auditData.total, page: currentPage, totalPages })} +

+
+
+ + + { + setAuditOffset(0); + setApiKeyFilter(event.target.value); + }} + /> +
+
+ + {auditLoading ? ( +

{t("loadingAuditEntries")}

+ ) : auditData.entries.length === 0 ? ( +

{t("noAuditEntriesForFilters")}

) : (
- - - - - + + + + + + - {audit.map((entry, i) => ( - - - + - - + + + + ))}
ToolTimeDurationStatus
{t("tableTimestamp")}{t("tableTool")}{t("tableDuration")}{t("tableResult")}{t("tableApiKey")}
{entry.tool_name} - {new Date(entry.timestamp).toLocaleTimeString()} + {auditData.entries.map((entry) => ( +
+ {new Date(entry.createdAt).toLocaleString()} {entry.duration_ms}ms{entry.success ? "✅" : "❌"}{entry.toolName}{entry.durationMs}ms + + {entry.success ? t("success") : entry.errorCode || t("failed")} + + {entry.apiKeyId || "—"}
)} -
+ +
+ + +
+
); } -function StatCard({ label, value }: { label: string; value: string | number }) { +function StatCard({ + label, + value, + compact = false, +}: { + label: string; + value: string | number; + compact?: boolean; +}) { return ( -
-

{label}

-

{value}

+
+

{label}

+

{value}

); } diff --git a/src/app/a2a/route.ts b/src/app/a2a/route.ts index 6088b45763..2a7b319d98 100644 --- a/src/app/a2a/route.ts +++ b/src/app/a2a/route.ts @@ -194,7 +194,11 @@ export async function POST(req: NextRequest) { const stream = createA2AStream( task, async (t) => executeA2ATaskWithState(tm, t, handler), - req.signal + req.signal, + { + onStart: () => tm.beginStream(), + onEnd: () => tm.endStream(), + } ); return new Response(stream, { headers: SSE_HEADERS }); diff --git a/src/app/api/a2a/status/route.ts b/src/app/api/a2a/status/route.ts new file mode 100644 index 0000000000..cc089883ee --- /dev/null +++ b/src/app/api/a2a/status/route.ts @@ -0,0 +1,36 @@ +import { NextResponse } from "next/server"; +import { getTaskManager } from "@/lib/a2a/taskManager"; + +export async function GET() { + try { + const tm = getTaskManager(); + const stats = tm.getStats(); + + let agentCard: any = null; + try { + const agentModule = await import("@/app/.well-known/agent.json/route"); + const cardResponse = await agentModule.GET(); + agentCard = await cardResponse.json(); + } catch { + agentCard = null; + } + + return NextResponse.json({ + status: "ok", + tasks: stats, + agent: agentCard + ? { + name: agentCard.name, + description: agentCard.description, + version: agentCard.version, + url: agentCard.url, + } + : null, + capabilities: agentCard?.capabilities || null, + skills: Array.isArray(agentCard?.skills) ? agentCard.skills : [], + }); + } catch (error) { + const message = error instanceof Error ? error.message : "Failed to load A2A status"; + return NextResponse.json({ error: message }, { status: 500 }); + } +} diff --git a/src/app/api/a2a/tasks/[id]/cancel/route.ts b/src/app/api/a2a/tasks/[id]/cancel/route.ts new file mode 100644 index 0000000000..9919626f39 --- /dev/null +++ b/src/app/api/a2a/tasks/[id]/cancel/route.ts @@ -0,0 +1,15 @@ +import { NextResponse } from "next/server"; +import { getTaskManager } from "@/lib/a2a/taskManager"; + +export async function POST(_request: Request, { params }: { params: Promise<{ id: string }> }) { + try { + const { id } = await params; + const tm = getTaskManager(); + const task = tm.cancelTask(id); + return NextResponse.json({ task: { id: task.id, state: task.state } }); + } catch (error) { + const message = error instanceof Error ? error.message : "Failed to cancel A2A task"; + const status = message.includes("not found") ? 404 : 400; + return NextResponse.json({ error: message }, { status }); + } +} diff --git a/src/app/api/a2a/tasks/[id]/route.ts b/src/app/api/a2a/tasks/[id]/route.ts new file mode 100644 index 0000000000..ae3906171e --- /dev/null +++ b/src/app/api/a2a/tasks/[id]/route.ts @@ -0,0 +1,17 @@ +import { NextResponse } from "next/server"; +import { getTaskManager } from "@/lib/a2a/taskManager"; + +export async function GET(_request: Request, { params }: { params: Promise<{ id: string }> }) { + try { + const { id } = await params; + const tm = getTaskManager(); + const task = tm.getTask(id); + if (!task) { + return NextResponse.json({ error: `Task not found: ${id}` }, { status: 404 }); + } + return NextResponse.json({ task }); + } catch (error) { + const message = error instanceof Error ? error.message : "Failed to load A2A task"; + return NextResponse.json({ error: message }, { status: 500 }); + } +} diff --git a/src/app/api/a2a/tasks/route.ts b/src/app/api/a2a/tasks/route.ts new file mode 100644 index 0000000000..73bd0c9694 --- /dev/null +++ b/src/app/api/a2a/tasks/route.ts @@ -0,0 +1,46 @@ +import { NextResponse } from "next/server"; +import { getTaskManager, type TaskState } from "@/lib/a2a/taskManager"; + +const VALID_TASK_STATES = new Set([ + "submitted", + "working", + "completed", + "failed", + "cancelled", +]); + +function parseIntParam(value: string | null, fallback: number): number { + if (typeof value !== "string") return fallback; + const parsed = Number.parseInt(value, 10); + if (!Number.isFinite(parsed)) return fallback; + return parsed; +} + +export async function GET(request: Request) { + try { + const { searchParams } = new URL(request.url); + const stateParam = searchParams.get("state"); + const skill = searchParams.get("skill") || undefined; + const limit = Math.max(1, Math.min(200, parseIntParam(searchParams.get("limit"), 50))); + const offset = Math.max(0, parseIntParam(searchParams.get("offset"), 0)); + + const state = + typeof stateParam === "string" && VALID_TASK_STATES.has(stateParam as TaskState) + ? (stateParam as TaskState) + : undefined; + + const tm = getTaskManager(); + const total = tm.countTasks({ state, skill }); + const tasks = tm.listTasks({ state, skill, limit, offset }); + + return NextResponse.json({ + tasks, + total, + limit, + offset, + }); + } catch (error) { + const message = error instanceof Error ? error.message : "Failed to list A2A tasks"; + return NextResponse.json({ error: message }, { status: 500 }); + } +} diff --git a/src/app/api/mcp/audit/route.ts b/src/app/api/mcp/audit/route.ts new file mode 100644 index 0000000000..f2625bc420 --- /dev/null +++ b/src/app/api/mcp/audit/route.ts @@ -0,0 +1,39 @@ +import { NextResponse } from "next/server"; +import { queryAuditEntries } from "@omniroute/open-sse/mcp-server/audit"; + +function parseBooleanParam(value: string | null): boolean | undefined { + if (value === "true" || value === "1") return true; + if (value === "false" || value === "0") return false; + return undefined; +} + +function parseNumberParam(value: string | null, fallback: number): number { + if (typeof value !== "string") return fallback; + const parsed = Number.parseInt(value, 10); + if (!Number.isFinite(parsed)) return fallback; + return parsed; +} + +export async function GET(request: Request) { + try { + const { searchParams } = new URL(request.url); + const limit = parseNumberParam(searchParams.get("limit"), 50); + const offset = parseNumberParam(searchParams.get("offset"), 0); + const tool = searchParams.get("tool") || undefined; + const success = parseBooleanParam(searchParams.get("success")); + const apiKeyId = searchParams.get("apiKeyId") || undefined; + + const result = await queryAuditEntries({ + limit, + offset, + tool, + success, + apiKeyId, + }); + + return NextResponse.json(result); + } catch (error) { + const message = error instanceof Error ? error.message : "Failed to load MCP audit log"; + return NextResponse.json({ error: message }, { status: 500 }); + } +} diff --git a/src/app/api/mcp/audit/stats/route.ts b/src/app/api/mcp/audit/stats/route.ts new file mode 100644 index 0000000000..faba426854 --- /dev/null +++ b/src/app/api/mcp/audit/stats/route.ts @@ -0,0 +1,12 @@ +import { NextResponse } from "next/server"; +import { getAuditStats } from "@omniroute/open-sse/mcp-server/audit"; + +export async function GET() { + try { + const stats = await getAuditStats(); + return NextResponse.json(stats); + } catch (error) { + const message = error instanceof Error ? error.message : "Failed to load MCP audit stats"; + return NextResponse.json({ error: message }, { status: 500 }); + } +} diff --git a/src/app/api/mcp/status/route.ts b/src/app/api/mcp/status/route.ts new file mode 100644 index 0000000000..d6bb5f59c6 --- /dev/null +++ b/src/app/api/mcp/status/route.ts @@ -0,0 +1,57 @@ +import { NextResponse } from "next/server"; +import { getAuditStats, queryAuditEntries } from "@omniroute/open-sse/mcp-server/audit"; +import { + isMcpHeartbeatOnline, + isProcessAlive, + readMcpHeartbeat, + resolveMcpHeartbeatPath, +} from "@omniroute/open-sse/mcp-server/runtimeHeartbeat"; + +export async function GET() { + try { + const [heartbeat, stats, lastCallPage] = await Promise.all([ + readMcpHeartbeat(), + getAuditStats(), + queryAuditEntries({ limit: 1, offset: 0 }), + ]); + + const online = isMcpHeartbeatOnline(heartbeat, { requireLivePid: true }); + const lastCall = lastCallPage.entries[0] || null; + const now = Date.now(); + const lastHeartbeatAtMs = heartbeat ? new Date(heartbeat.lastHeartbeatAt).getTime() : null; + const startedAtMs = heartbeat ? new Date(heartbeat.startedAt).getTime() : null; + const heartbeatAgeMs = + typeof lastHeartbeatAtMs === "number" && Number.isFinite(lastHeartbeatAtMs) + ? Math.max(0, now - lastHeartbeatAtMs) + : null; + const uptimeMs = + typeof startedAtMs === "number" && Number.isFinite(startedAtMs) + ? Math.max(0, now - startedAtMs) + : null; + + return NextResponse.json({ + status: online ? "online" : "offline", + online, + heartbeatPath: resolveMcpHeartbeatPath(), + heartbeat: heartbeat + ? { + ...heartbeat, + pidAlive: isProcessAlive(heartbeat.pid), + heartbeatAgeMs, + uptimeMs, + } + : null, + activity: { + totalCalls24h: stats.totalCalls, + successRate: stats.successRate, + avgDurationMs: stats.avgDurationMs, + topTools: stats.topTools, + lastCallAt: lastCall?.createdAt || null, + lastCallTool: lastCall?.toolName || null, + }, + }); + } catch (error) { + const message = error instanceof Error ? error.message : "Failed to load MCP status"; + return NextResponse.json({ error: message }, { status: 500 }); + } +} diff --git a/src/app/api/mcp/tools/route.ts b/src/app/api/mcp/tools/route.ts new file mode 100644 index 0000000000..f0a98aef1b --- /dev/null +++ b/src/app/api/mcp/tools/route.ts @@ -0,0 +1,22 @@ +import { NextResponse } from "next/server"; +import { MCP_TOOLS, MCP_TOOL_MAP } from "@omniroute/open-sse/mcp-server/schemas/tools"; + +export async function GET() { + try { + return NextResponse.json({ + total: MCP_TOOLS.length, + mappedTotal: Object.keys(MCP_TOOL_MAP).length, + tools: MCP_TOOLS.map((tool) => ({ + name: tool.name, + description: tool.description, + scopes: [...tool.scopes], + phase: tool.phase, + auditLevel: tool.auditLevel, + sourceEndpoints: [...tool.sourceEndpoints], + })), + }); + } catch (error) { + const message = error instanceof Error ? error.message : "Failed to load MCP tools"; + return NextResponse.json({ error: message }, { status: 500 }); + } +} diff --git a/src/app/docs/page.tsx b/src/app/docs/page.tsx index a5e2881f3a..93754594fc 100644 --- a/src/app/docs/page.tsx +++ b/src/app/docs/page.tsx @@ -46,6 +46,7 @@ const TOC_ITEMS = [ { href: "#supported-providers", labelKey: "supportedProvidersToc" }, { href: "#use-cases", labelKey: "commonUseCases" }, { href: "#client-compatibility", labelKey: "clientCompatibility" }, + { href: "#protocols", labelKey: "protocolsToc" }, { href: "#api-reference", labelKey: "apiReference" }, { href: "#model-prefixes", labelKey: "modelPrefixes" }, { href: "#troubleshooting", labelKey: "troubleshooting" }, @@ -366,6 +367,49 @@ export default function DocsPage() {
+
+

{t("protocolsTitle")}

+

{t("protocolsDescription")}

+ +
+
+

{t("protocolMcpTitle")}

+

{t("protocolMcpDesc")}

+
    +
  1. {t("protocolMcpStep1")}
  2. +
  3. {t("protocolMcpStep2")}
  4. +
  5. {t("protocolMcpStep3")}
  6. +
+
+                {`omniroute --mcp`}
+              
+
+ +
+

{t("protocolA2aTitle")}

+

{t("protocolA2aDesc")}

+
    +
  1. {t("protocolA2aStep1")}
  2. +
  3. {t("protocolA2aStep2")}
  4. +
  5. {t("protocolA2aStep3")}
  6. +
+
+                {`GET /.well-known/agent.json
+POST /a2a  (JSON-RPC: message/send | message/stream)`}
+              
+
+
+ +
+

{t("protocolTroubleshootingTitle")}

+
    +
  • {t("protocolTroubleshooting1")}
  • +
  • {t("protocolTroubleshooting2")}
  • +
  • {t("protocolTroubleshooting3")}
  • +
+
+
+

{t("apiReference")}

diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index 0f2bffc609..acdcc705c4 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -75,6 +75,8 @@ "docs": "Docs", "issues": "Issues", "endpoint": "Endpoint", + "mcp": "MCP", + "a2a": "A2A", "apiManager": "API Manager", "logs": "Logs", "auditLog": "Audit Log", @@ -128,6 +130,10 @@ "homeDescription": "Welcome to OmniRoute", "endpoint": "Endpoint", "endpointDescription": "API endpoint configuration", + "mcp": "MCP Management", + "mcpDescription": "Monitor MCP server process, tools, and operational controls", + "a2a": "A2A Management", + "a2aDescription": "Monitor Agent2Agent status, tasks, and streaming activity", "settings": "Settings", "settingsDescription": "Manage your preferences", "openaiCompatible": "OpenAI Compatible", @@ -658,7 +664,155 @@ "embedding": "Embedding", "image": "Image", "custom": "custom", - "modelsCount": "{count, plural, one {# model} other {# models}}" + "modelsCount": "{count, plural, one {# model} other {# models}}", + "sectionTitle": "Integration Surface", + "sectionDescription": "OpenAI-compatible APIs and operational protocol endpoints", + "tabApis": "OpenAI-compatible APIs", + "tabProtocols": "Protocols", + "tabsAria": "Endpoint sections", + "protocolsTitle": "Protocols", + "protocolsDescription": "MCP and A2A are first-class endpoints with dedicated observability and controls.", + "mcpCardTitle": "MCP Server", + "mcpCardDescription": "Model Context Protocol over stdio", + "a2aCardTitle": "A2A Server", + "a2aCardDescription": "Agent2Agent JSON-RPC endpoint", + "protocolToolsLabel": "Tools", + "protocolTasksLabel": "Tasks", + "protocolActiveStreamsLabel": "Active streams", + "protocolLastActivity": "Last activity", + "quickStart": "Quick Start", + "openMcpDashboard": "Open MCP management", + "openA2aDashboard": "Open A2A management", + "mcpQuickStartTitle": "MCP Quick Start", + "mcpQuickStartStep1": "Run the MCP server via `omniroute --mcp`.", + "mcpQuickStartStep2": "Configure your MCP client to connect over stdio transport.", + "mcpQuickStartStep3": "Invoke tools such as `omniroute_get_health` and `omniroute_list_combos`.", + "a2aQuickStartTitle": "A2A Quick Start", + "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", + "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + }, + "mcpDashboard": { + "loading": "Loading MCP dashboard...", + "activate": "activate", + "deactivate": "deactivate", + "confirmSwitchCombo": "Confirm {action} combo \"{combo}\"?", + "switchComboFailed": "Failed to switch combo state.", + "switchComboSuccess": "Combo \"{combo}\" updated.", + "confirmApplyProfile": "Apply resilience profile \"{profile}\"?", + "applyProfileFailed": "Failed to apply resilience profile.", + "applyProfileSuccess": "Profile \"{profile}\" applied.", + "confirmResetBreakers": "Reset all circuit breakers?", + "resetBreakersFailed": "Failed to reset circuit breakers.", + "resetBreakersSuccess": "Circuit breakers reset.", + "processStatus": "Process status", + "online": "Online", + "offline": "Offline", + "pid": "PID", + "sessionUptime": "Session uptime", + "lastHeartbeat": "Last heartbeat", + "activity24h": "Activity (24h)", + "totalCalls": "Total calls", + "successRate": "Success rate", + "avgLatency": "Avg latency", + "topTools": "Top tools", + "noToolCalls24h": "No tool calls in the last 24 hours.", + "runtimeDetails": "Runtime details", + "transport": "Transport", + "scopesEnforced": "Scopes enforced", + "yes": "yes", + "no": "no", + "lastCall": "Last call", + "heartbeatPath": "Heartbeat path", + "operationalControls": "Operational controls", + "switchCombo": "Switch combo", + "inactive": "inactive", + "active": "active", + "activateCombo": "Activate combo", + "deactivateCombo": "Deactivate combo", + "applyResilienceProfile": "Apply resilience profile", + "profileAggressive": "aggressive", + "profileBalanced": "balanced", + "profileConservative": "conservative", + "applyProfile": "Apply profile", + "resetCircuitBreakers": "Reset circuit breakers", + "resetCircuitBreakersHelp": "Clears current breaker state and failure counters for providers.", + "resetAllBreakers": "Reset all breakers", + "toolsAndScopes": "Tools and scopes", + "tableTool": "Tool", + "tableScopes": "Scopes", + "tablePhase": "Phase", + "tableAudit": "Audit", + "auditLog": "Audit log", + "auditSummary": "Calls: {total} | page {page} of {totalPages}", + "allTools": "All tools", + "allResults": "All results", + "success": "Success", + "failure": "Failure", + "apiKeyIdPlaceholder": "apiKeyId", + "loadingAuditEntries": "Loading audit entries...", + "noAuditEntriesForFilters": "No audit entries found for current filters.", + "tableTimestamp": "Timestamp", + "tableDuration": "Duration", + "tableResult": "Result", + "tableApiKey": "API key", + "failed": "failed", + "previous": "Previous", + "next": "Next" + }, + "a2aDashboard": { + "loading": "Loading A2A dashboard...", + "confirmCancelTask": "Cancel task {taskId}?", + "cancelTaskFailed": "Failed to cancel task.", + "cancelTaskSuccess": "Task {taskId} cancelled.", + "smokeSendFailed": "message/send smoke test failed.", + "smokeSendSuccessWithTask": "message/send ok (task {taskId}).", + "smokeSendSuccess": "message/send ok.", + "smokeStreamFailed": "message/stream smoke test failed.", + "smokeStreamSuccessWithTask": "message/stream ok (task {taskId}{stateSuffix}).", + "smokeStreamNoTaskId": "message/stream finished without task id.", + "health": "Health", + "ok": "ok", + "totalTasks": "Total tasks", + "activeStreams": "Active streams", + "lastTask": "Last task", + "taskStateOverview": "Task state overview", + "state": { + "submitted": "submitted", + "working": "working", + "completed": "completed", + "failed": "failed", + "cancelled": "cancelled" + }, + "agentCard": "Agent card", + "version": "Version", + "url": "URL", + "capabilities": "Capabilities", + "agentCardNotAvailable": "Agent card not available.", + "quickValidation": "Quick validation", + "quickValidationDescription": "Executes smoke calls through the live `/a2a` endpoint.", + "runMessageSend": "Run message/send", + "runMessageStream": "Run message/stream", + "taskManagement": "Task management", + "taskSummary": "{total} tasks | page {page} of {totalPages}", + "allStates": "all", + "allSkills": "all skills", + "loadingTasks": "Loading tasks...", + "noTasksForFilters": "No tasks found for current filters.", + "tableTask": "Task", + "tableSkill": "Skill", + "tableState": "State", + "tableUpdated": "Updated", + "tableActions": "Actions", + "view": "View", + "cancel": "Cancel", + "previous": "Previous", + "next": "Next", + "taskDetail": "Task detail", + "close": "Close", + "metadata": "Metadata", + "events": "Events", + "artifacts": "Artifacts" }, "health": { "title": "System Health", @@ -1959,6 +2113,7 @@ "supportedProvidersToc": "Providers", "commonUseCases": "Common Use Cases", "clientCompatibility": "Client Compatibility", + "protocolsToc": "Protocols", "apiReference": "API Reference", "method": "Method", "path": "Path", @@ -2031,6 +2186,22 @@ "clientClaudeBullet1Prefix": "Use", "clientClaudeBullet1Middle": "(Claude) or", "clientClaudeBullet1Suffix": "(Antigravity) prefix.", + "protocolsTitle": "Protocols: MCP & A2A", + "protocolsDescription": "OmniRoute exposes two operational protocols in addition to OpenAI-compatible APIs: MCP for tool execution and A2A for agent-to-agent workflows.", + "protocolMcpTitle": "MCP (Model Context Protocol)", + "protocolMcpDesc": "Use MCP over stdio to let clients discover and call OmniRoute tools with audit visibility.", + "protocolMcpStep1": "Start MCP transport with `omniroute --mcp`.", + "protocolMcpStep2": "Point your MCP client to stdio transport.", + "protocolMcpStep3": "Call `omniroute_get_health` and `omniroute_list_combos` to validate connectivity.", + "protocolA2aTitle": "A2A (Agent2Agent)", + "protocolA2aDesc": "Use A2A JSON-RPC to submit tasks synchronously or via SSE streaming.", + "protocolA2aStep1": "Read `/.well-known/agent.json` for agent discovery.", + "protocolA2aStep2": "Send `message/send` or `message/stream` requests to `POST /a2a`.", + "protocolA2aStep3": "Manage task lifecycle with `tasks/get` and `tasks/cancel`.", + "protocolTroubleshootingTitle": "Protocol Troubleshooting", + "protocolTroubleshooting1": "If MCP status is offline, verify the stdio process is running and heartbeat file is updating.", + "protocolTroubleshooting2": "If A2A tasks stay in `working`, inspect `/api/a2a/tasks/:id` and stream events for terminal state.", + "protocolTroubleshooting3": "Use `/dashboard/mcp` and `/dashboard/a2a` for operational controls and audit visibility.", "endpointChatNote": "OpenAI-compatible chat endpoint (default).", "endpointResponsesNote": "Responses API endpoint (Codex, o-series).", "endpointModelsNote": "Model catalog for all connected providers.", diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json index 4c068e5c96..70a6869a69 100644 --- a/src/i18n/messages/pt-BR.json +++ b/src/i18n/messages/pt-BR.json @@ -75,6 +75,8 @@ "docs": "Documentação", "issues": "Problemas", "endpoint": "Endpoint", + "mcp": "MCP", + "a2a": "A2A", "apiManager": "Gerenciador API", "logs": "Logs", "auditLog": "Log de Auditoria", @@ -108,6 +110,10 @@ "homeDescription": "Bem-vindo ao OmniRoute", "endpoint": "Endpoint", "endpointDescription": "Configuração de endpoint da API", + "mcp": "Gestão MCP", + "mcpDescription": "Monitore processo MCP, ferramentas e controles operacionais", + "a2a": "Gestão A2A", + "a2aDescription": "Monitore status Agent2Agent, tarefas e atividade de streaming", "settings": "Configurações", "settingsDescription": "Gerencie suas preferências", "openaiCompatible": "Compatível com OpenAI", @@ -636,7 +642,155 @@ "settingsApiDesc": "Ler e modificar a configuração do OmniRoute via API", "categoryCore": "APIs Principais", "categoryMedia": "Mídia e Multi-Modal", - "categoryUtility": "Utilidades e Gerenciamento" + "categoryUtility": "Utilidades e Gerenciamento", + "sectionTitle": "Superfície de Integração", + "sectionDescription": "APIs compatíveis com OpenAI e endpoints operacionais de protocolos", + "tabApis": "APIs compatíveis com OpenAI", + "tabProtocols": "Protocolos", + "tabsAria": "Seções de endpoint", + "protocolsTitle": "Protocolos", + "protocolsDescription": "MCP e A2A são endpoints de primeira classe com observabilidade e controles dedicados.", + "mcpCardTitle": "Servidor MCP", + "mcpCardDescription": "Model Context Protocol via stdio", + "a2aCardTitle": "Servidor A2A", + "a2aCardDescription": "Endpoint Agent2Agent JSON-RPC", + "protocolToolsLabel": "Ferramentas", + "protocolTasksLabel": "Tarefas", + "protocolActiveStreamsLabel": "Streams ativos", + "protocolLastActivity": "Última atividade", + "quickStart": "Início rápido", + "openMcpDashboard": "Abrir gestão MCP", + "openA2aDashboard": "Abrir gestão A2A", + "mcpQuickStartTitle": "MCP Início rápido", + "mcpQuickStartStep1": "Inicie o servidor MCP com `omniroute --mcp`.", + "mcpQuickStartStep2": "Configure o cliente MCP para conectar por transporte stdio.", + "mcpQuickStartStep3": "Execute ferramentas como `omniroute_get_health` e `omniroute_list_combos`.", + "a2aQuickStartTitle": "A2A Início rápido", + "a2aQuickStartStep1": "Descubra o agent card em `/.well-known/agent.json`.", + "a2aQuickStartStep2": "Envie requisições JSON-RPC para `POST /a2a` usando `message/send` ou `message/stream`.", + "a2aQuickStartStep3": "Acompanhe e controle tarefas com `tasks/get` e `tasks/cancel`." + }, + "mcpDashboard": { + "loading": "Carregando painel MCP...", + "activate": "ativar", + "deactivate": "desativar", + "confirmSwitchCombo": "Confirmar {action} combo \"{combo}\"?", + "switchComboFailed": "Falha ao alternar estado do combo.", + "switchComboSuccess": "Combo \"{combo}\" atualizado.", + "confirmApplyProfile": "Aplicar perfil de resiliência \"{profile}\"?", + "applyProfileFailed": "Falha ao aplicar perfil de resiliência.", + "applyProfileSuccess": "Perfil \"{profile}\" aplicado.", + "confirmResetBreakers": "Resetar todos os circuit breakers?", + "resetBreakersFailed": "Falha ao resetar circuit breakers.", + "resetBreakersSuccess": "Circuit breakers resetados.", + "processStatus": "Status do processo", + "online": "Online", + "offline": "Offline", + "pid": "PID", + "sessionUptime": "Uptime da sessão", + "lastHeartbeat": "Último heartbeat", + "activity24h": "Atividade (24h)", + "totalCalls": "Total de chamadas", + "successRate": "Taxa de sucesso", + "avgLatency": "Latência média", + "topTools": "Top ferramentas", + "noToolCalls24h": "Sem chamadas de ferramenta nas últimas 24 horas.", + "runtimeDetails": "Detalhes de runtime", + "transport": "Transporte", + "scopesEnforced": "Scopes aplicados", + "yes": "sim", + "no": "não", + "lastCall": "Última chamada", + "heartbeatPath": "Caminho do heartbeat", + "operationalControls": "Controles operacionais", + "switchCombo": "Trocar combo", + "inactive": "inativo", + "active": "ativo", + "activateCombo": "Ativar combo", + "deactivateCombo": "Desativar combo", + "applyResilienceProfile": "Aplicar perfil de resiliência", + "profileAggressive": "agressivo", + "profileBalanced": "balanceado", + "profileConservative": "conservador", + "applyProfile": "Aplicar perfil", + "resetCircuitBreakers": "Resetar circuit breakers", + "resetCircuitBreakersHelp": "Limpa o estado atual de breaker e os contadores de falha dos provedores.", + "resetAllBreakers": "Resetar todos os breakers", + "toolsAndScopes": "Ferramentas e scopes", + "tableTool": "Ferramenta", + "tableScopes": "Scopes", + "tablePhase": "Fase", + "tableAudit": "Auditoria", + "auditLog": "Log de auditoria", + "auditSummary": "Chamadas: {total} | página {page} de {totalPages}", + "allTools": "Todas as ferramentas", + "allResults": "Todos os resultados", + "success": "Sucesso", + "failure": "Falha", + "apiKeyIdPlaceholder": "apiKeyId", + "loadingAuditEntries": "Carregando registros de auditoria...", + "noAuditEntriesForFilters": "Nenhum registro de auditoria para os filtros atuais.", + "tableTimestamp": "Timestamp", + "tableDuration": "Duração", + "tableResult": "Resultado", + "tableApiKey": "Chave API", + "failed": "falhou", + "previous": "Anterior", + "next": "Próxima" + }, + "a2aDashboard": { + "loading": "Carregando painel A2A...", + "confirmCancelTask": "Cancelar tarefa {taskId}?", + "cancelTaskFailed": "Falha ao cancelar tarefa.", + "cancelTaskSuccess": "Tarefa {taskId} cancelada.", + "smokeSendFailed": "Falha no smoke test de message/send.", + "smokeSendSuccessWithTask": "message/send ok (tarefa {taskId}).", + "smokeSendSuccess": "message/send ok.", + "smokeStreamFailed": "Falha no smoke test de message/stream.", + "smokeStreamSuccessWithTask": "message/stream ok (tarefa {taskId}{stateSuffix}).", + "smokeStreamNoTaskId": "message/stream finalizado sem task id.", + "health": "Saúde", + "ok": "ok", + "totalTasks": "Total de tarefas", + "activeStreams": "Streams ativos", + "lastTask": "Última tarefa", + "taskStateOverview": "Visão de estados das tarefas", + "state": { + "submitted": "submetida", + "working": "executando", + "completed": "concluída", + "failed": "falhou", + "cancelled": "cancelada" + }, + "agentCard": "Cartão do agente", + "version": "Versão", + "url": "URL", + "capabilities": "Capacidades", + "agentCardNotAvailable": "Cartão do agente indisponível.", + "quickValidation": "Validação rápida", + "quickValidationDescription": "Executa chamadas de smoke pelo endpoint `/a2a` em produção.", + "runMessageSend": "Executar message/send", + "runMessageStream": "Executar message/stream", + "taskManagement": "Gestão de tarefas", + "taskSummary": "{total} tarefas | página {page} de {totalPages}", + "allStates": "todos", + "allSkills": "todas as skills", + "loadingTasks": "Carregando tarefas...", + "noTasksForFilters": "Nenhuma tarefa encontrada para os filtros atuais.", + "tableTask": "Tarefa", + "tableSkill": "Skill", + "tableState": "Estado", + "tableUpdated": "Atualizada", + "tableActions": "Ações", + "view": "Ver", + "cancel": "Cancelar", + "previous": "Anterior", + "next": "Próxima", + "taskDetail": "Detalhe da tarefa", + "close": "Fechar", + "metadata": "Metadados", + "events": "Eventos", + "artifacts": "Artefatos" }, "health": { "title": "Saúde do Sistema", @@ -1938,6 +2092,7 @@ "supportedProvidersToc": "Provedores", "commonUseCases": "Casos de Uso Comuns", "clientCompatibility": "Compatibilidade de Clientes", + "protocolsToc": "Protocolos", "apiReference": "Referência da API", "method": "Método", "path": "Caminho", @@ -2010,6 +2165,22 @@ "clientClaudeBullet1Prefix": "Use", "clientClaudeBullet1Middle": "(Claude) ou", "clientClaudeBullet1Suffix": "(Antigravity) como prefixo.", + "protocolsTitle": "Protocolos: MCP e A2A", + "protocolsDescription": "O OmniRoute expõe dois protocolos operacionais além das APIs compatíveis com OpenAI: MCP para execução de ferramentas e A2A para fluxos agente-para-agente.", + "protocolMcpTitle": "MCP (Model Context Protocol)", + "protocolMcpDesc": "Use MCP via stdio para permitir descoberta e execução de ferramentas OmniRoute com visibilidade de auditoria.", + "protocolMcpStep1": "Inicie o transporte MCP com `omniroute --mcp`.", + "protocolMcpStep2": "Aponte seu cliente MCP para transporte stdio.", + "protocolMcpStep3": "Chame `omniroute_get_health` e `omniroute_list_combos` para validar conectividade.", + "protocolA2aTitle": "A2A (Agent2Agent)", + "protocolA2aDesc": "Use A2A JSON-RPC para submeter tarefas de forma síncrona ou via SSE streaming.", + "protocolA2aStep1": "Leia `/.well-known/agent.json` para descoberta do agente.", + "protocolA2aStep2": "Envie `message/send` ou `message/stream` para `POST /a2a`.", + "protocolA2aStep3": "Gerencie ciclo de vida das tarefas com `tasks/get` e `tasks/cancel`.", + "protocolTroubleshootingTitle": "Troubleshooting de protocolos", + "protocolTroubleshooting1": "Se o status MCP estiver offline, verifique se o processo stdio está rodando e atualizando o heartbeat.", + "protocolTroubleshooting2": "Se tarefas A2A ficarem em `working`, inspecione `/api/a2a/tasks/:id` e os eventos de stream até estado terminal.", + "protocolTroubleshooting3": "Use `/dashboard/mcp` e `/dashboard/a2a` para controles operacionais e visibilidade de auditoria.", "endpointChatNote": "Endpoint de chat compatível com OpenAI (padrão).", "endpointResponsesNote": "Endpoint da API Responses (Codex, o-series).", "endpointModelsNote": "Catálogo de modelos para todos os provedores conectados.", diff --git a/src/lib/a2a/streaming.ts b/src/lib/a2a/streaming.ts index 04a3069284..50ed518e23 100644 --- a/src/lib/a2a/streaming.ts +++ b/src/lib/a2a/streaming.ts @@ -92,12 +92,17 @@ export function createA2AStream( executeSkill: ( task: A2ATask ) => Promise<{ artifacts: Array<{ content: string }>; metadata: Record }>, - abortSignal?: AbortSignal + abortSignal?: AbortSignal, + lifecycle?: { + onStart?: () => void; + onEnd?: () => void; + } ): ReadableStream { const encoder = new TextEncoder(); return new ReadableStream({ async start(controller) { + lifecycle?.onStart?.(); // Heartbeat interval const heartbeatInterval = setInterval(() => { try { @@ -136,6 +141,7 @@ export function createA2AStream( controller.enqueue(encoder.encode(createFailureEvent(task.id, msg))); } finally { clearInterval(heartbeatInterval); + lifecycle?.onEnd?.(); controller.close(); } }, diff --git a/src/lib/a2a/taskManager.ts b/src/lib/a2a/taskManager.ts index 85b248958c..b999228f8c 100644 --- a/src/lib/a2a/taskManager.ts +++ b/src/lib/a2a/taskManager.ts @@ -47,6 +47,20 @@ export interface A2ATask { expiresAt: string; } +export interface TaskListFilter { + state?: TaskState; + skill?: string; + limit?: number; + offset?: number; +} + +export interface A2ATaskStats { + counts: Record; + total: number; + activeStreams: number; + lastTaskAt: string | null; +} + // ============ Valid Transitions ============ const VALID_TRANSITIONS: Record = { @@ -63,6 +77,7 @@ export class A2ATaskManager { private tasks = new Map(); private readonly ttlMs: number; private cleanupInterval: ReturnType; + private activeStreams = 0; constructor(ttlMinutes: number = 5) { this.ttlMs = ttlMinutes * 60 * 1000; @@ -125,12 +140,59 @@ export class A2ATaskManager { return this.updateTask(taskId, "cancelled", undefined, "Cancelled by client"); } - listTasks(filter?: { state?: TaskState; skill?: string; limit?: number }): A2ATask[] { + countTasks(filter?: Pick): number { + let tasks = [...this.tasks.values()]; + if (filter?.state) tasks = tasks.filter((t) => t.state === filter.state); + if (filter?.skill) tasks = tasks.filter((t) => t.skill === filter.skill); + return tasks.length; + } + + listTasks(filter?: TaskListFilter): A2ATask[] { let tasks = [...this.tasks.values()]; if (filter?.state) tasks = tasks.filter((t) => t.state === filter.state); if (filter?.skill) tasks = tasks.filter((t) => t.skill === filter.skill); tasks.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()); - return tasks.slice(0, filter?.limit || 50); + const offset = Math.max(0, filter?.offset || 0); + const limit = + typeof filter?.limit === "number" && Number.isFinite(filter.limit) + ? Math.max(1, Math.floor(filter.limit)) + : 50; + return tasks.slice(offset, offset + limit); + } + + beginStream() { + this.activeStreams += 1; + } + + endStream() { + this.activeStreams = Math.max(0, this.activeStreams - 1); + } + + getStats(): A2ATaskStats { + const counts: Record = { + submitted: 0, + working: 0, + completed: 0, + failed: 0, + cancelled: 0, + }; + + let lastTaskAt: string | null = null; + for (const task of this.tasks.values()) { + counts[task.state] += 1; + const updatedAt = new Date(task.updatedAt).getTime(); + if (!Number.isFinite(updatedAt)) continue; + if (!lastTaskAt || updatedAt > new Date(lastTaskAt).getTime()) { + lastTaskAt = task.updatedAt; + } + } + + return { + counts, + total: this.tasks.size, + activeStreams: this.activeStreams, + lastTaskAt, + }; } private cleanupExpired() { diff --git a/src/shared/components/Header.tsx b/src/shared/components/Header.tsx index 8d30b41b07..4a577bd483 100644 --- a/src/shared/components/Header.tsx +++ b/src/shared/components/Header.tsx @@ -86,6 +86,10 @@ function usePageInfo(pathname: string | null) { return { title: t("cliTools"), description: t("cliToolsDescription"), breadcrumbs: [] }; if (pathname === "/dashboard") return { title: t("home"), description: t("homeDescription"), breadcrumbs: [] }; + if (pathname.includes("/mcp")) + return { title: t("mcp"), description: t("mcpDescription"), breadcrumbs: [] }; + if (pathname.includes("/a2a")) + return { title: t("a2a"), description: t("a2aDescription"), breadcrumbs: [] }; if (pathname.includes("/endpoint")) return { title: t("endpoint"), description: t("endpointDescription"), breadcrumbs: [] }; if (pathname.includes("/profile")) diff --git a/src/shared/components/Sidebar.tsx b/src/shared/components/Sidebar.tsx index 20b3a13581..501d61d2b7 100644 --- a/src/shared/components/Sidebar.tsx +++ b/src/shared/components/Sidebar.tsx @@ -15,6 +15,8 @@ import { useTranslations } from "next-intl"; const navItemDefs = [ { href: "/dashboard", i18nKey: "home", icon: "home", exact: true }, { href: "/dashboard/endpoint", i18nKey: "endpoint", icon: "api" }, + { href: "/dashboard/mcp", i18nKey: "mcp", icon: "hub" }, + { href: "/dashboard/a2a", i18nKey: "a2a", icon: "group_work" }, { href: "/dashboard/api-manager", i18nKey: "apiManager", icon: "vpn_key" }, { href: "/dashboard/providers", i18nKey: "providers", icon: "dns" }, { href: "/dashboard/combos", i18nKey: "combos", icon: "layers" }, diff --git a/tests/e2e/protocol-clients.test.ts b/tests/e2e/protocol-clients.test.ts new file mode 100644 index 0000000000..5f3570c84d --- /dev/null +++ b/tests/e2e/protocol-clients.test.ts @@ -0,0 +1,202 @@ +import { describe, it, expect } from "vitest"; +import { Client } from "@modelcontextprotocol/sdk/client/index.js"; +import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; + +const BASE_URL = process.env.OMNIROUTE_BASE_URL || "http://localhost:20128"; +const API_KEY = process.env.OMNIROUTE_API_KEY || ""; +const REQUEST_TIMEOUT_MS = Number(process.env.ECOSYSTEM_REQUEST_TIMEOUT_MS || 30000); +const TEST_TIMEOUT_MS = Number(process.env.ECOSYSTEM_TEST_TIMEOUT_MS || 60000); + +function headers(extra?: Record) { + return { + "Content-Type": "application/json", + ...(API_KEY ? { Authorization: `Bearer ${API_KEY}` } : {}), + ...(extra || {}), + }; +} + +async function apiFetch(path: string, options?: RequestInit) { + return fetch(`${BASE_URL}${path}`, { + ...options, + headers: { + ...headers(), + ...(options?.headers || {}), + }, + signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS), + }); +} + +async function callA2A(method: string, params: Record, id: string) { + const response = await apiFetch("/a2a", { + method: "POST", + body: JSON.stringify({ + jsonrpc: "2.0", + id, + method, + params, + }), + }); + const json = await response.json().catch(() => ({})); + return { response, json }; +} + +async function consumeA2AStream(response: Response): Promise<{ + taskId: string | null; + terminalState: string | null; + chunks: number; +}> { + if (!response.body) return { taskId: null, terminalState: null, chunks: 0 }; + + const reader = response.body.getReader(); + const decoder = new TextDecoder(); + let buffer = ""; + let taskId: string | null = null; + let terminalState: string | null = null; + let chunks = 0; + + while (true) { + const { value, done } = await reader.read(); + if (done) break; + buffer += decoder.decode(value, { stream: true }); + const events = buffer.split("\n\n"); + buffer = events.pop() || ""; + + for (const event of events) { + if (!event.startsWith("data: ")) continue; + const payload = event.slice("data: ".length); + let parsed: any; + try { + parsed = JSON.parse(payload); + } catch { + continue; + } + const nextTaskId = parsed?.params?.task?.id; + const nextState = parsed?.params?.task?.state; + if (nextTaskId) taskId = nextTaskId; + if (parsed?.params?.chunk) chunks += 1; + if ( + typeof nextState === "string" && + ["completed", "failed", "cancelled"].includes(nextState) + ) { + terminalState = nextState; + } + } + } + + return { taskId, terminalState, chunks }; +} + +describe("Protocol clients E2E", () => { + it( + "connects via MCP stdio and invokes required tools", + async () => { + const transport = new StdioClientTransport({ + command: process.execPath, + args: ["--import", "tsx/esm", "open-sse/mcp-server/server.ts"], + env: { + ...process.env, + OMNIROUTE_BASE_URL: BASE_URL, + OMNIROUTE_API_KEY: API_KEY, + } as Record, + stderr: "pipe", + }); + + const client = new Client({ name: "protocol-e2e", version: "1.0.0" }); + await client.connect(transport); + + try { + const listed = await client.listTools(); + const toolNames = listed.tools.map((tool) => tool.name); + expect(toolNames).toContain("omniroute_get_health"); + expect(toolNames).toContain("omniroute_list_combos"); + + const healthResult = await client.callTool({ + name: "omniroute_get_health", + arguments: {}, + }); + expect(Array.isArray(healthResult.content)).toBe(true); + + const combosResult = await client.callTool({ + name: "omniroute_list_combos", + arguments: { includeMetrics: false }, + }); + expect(Array.isArray(combosResult.content)).toBe(true); + } finally { + await client.close(); + } + + const auditRes = await apiFetch("/api/mcp/audit?limit=50&tool=omniroute_get_health"); + expect(auditRes.ok).toBe(true); + const auditJson = await auditRes.json(); + const entries = Array.isArray(auditJson?.entries) ? auditJson.entries : []; + expect(entries.some((entry: any) => entry.toolName === "omniroute_get_health")).toBe(true); + }, + TEST_TIMEOUT_MS * 2 + ); + + it( + "executes A2A discovery/send/stream/get/cancel flow", + async () => { + const cardRes = await apiFetch("/.well-known/agent.json"); + expect(cardRes.ok).toBe(true); + const card = await cardRes.json(); + expect(card).toHaveProperty("name"); + expect(Array.isArray(card?.skills)).toBe(true); + + const send = await callA2A( + "message/send", + { + skill: "quota-management", + messages: [{ role: "user", content: "Return a short quota summary." }], + }, + "protocol-send" + ); + expect(send.response.ok).toBe(true); + expect(send.json?.error).toBeFalsy(); + const sendTaskId: string = send.json?.result?.task?.id; + expect(typeof sendTaskId).toBe("string"); + + const streamRes = await apiFetch("/a2a", { + method: "POST", + body: JSON.stringify({ + jsonrpc: "2.0", + id: "protocol-stream", + method: "message/stream", + params: { + skill: "quota-management", + messages: [{ role: "user", content: "Stream a short quota summary." }], + }, + }), + }); + expect(streamRes.ok).toBe(true); + expect(streamRes.headers.get("content-type") || "").toContain("text/event-stream"); + + const stream = await consumeA2AStream(streamRes); + expect(typeof stream.taskId === "string" || stream.taskId === null).toBe(true); + expect( + stream.terminalState === null || + ["completed", "failed", "cancelled"].includes(stream.terminalState) + ).toBe(true); + + const taskIdForGet = stream.taskId || sendTaskId; + const get = await callA2A("tasks/get", { taskId: taskIdForGet }, "protocol-get"); + expect(get.response.ok).toBe(true); + expect(get.json?.result?.task?.id).toBe(taskIdForGet); + + const cancelRes = await apiFetch( + `/api/a2a/tasks/${encodeURIComponent(taskIdForGet)}/cancel`, + { + method: "POST", + } + ); + expect([200, 400, 404]).toContain(cancelRes.status); + + const tasksRes = await apiFetch("/api/a2a/tasks?limit=50"); + expect(tasksRes.ok).toBe(true); + const tasksJson = await tasksRes.json(); + const tasks = Array.isArray(tasksJson?.tasks) ? tasksJson.tasks : []; + expect(tasks.some((task: any) => task.id === sendTaskId)).toBe(true); + }, + TEST_TIMEOUT_MS * 2 + ); +}); diff --git a/tests/e2e/protocol-visibility.spec.ts b/tests/e2e/protocol-visibility.spec.ts new file mode 100644 index 0000000000..b27b2901d5 --- /dev/null +++ b/tests/e2e/protocol-visibility.spec.ts @@ -0,0 +1,39 @@ +import { test, expect } from "@playwright/test"; + +test.describe("Protocol visibility", () => { + test("shows MCP/A2A navigation and protocols tab in endpoint page", async ({ page }) => { + await page.goto("/dashboard/endpoint"); + await page.waitForLoadState("networkidle"); + + const redirectedToLogin = page.url().includes("/login"); + test.skip(redirectedToLogin, "Authentication enabled without a login fixture."); + + await expect(page.locator('a[href="/dashboard/mcp"]').first()).toBeVisible(); + await expect(page.locator('a[href="/dashboard/a2a"]').first()).toBeVisible(); + + const protocolTab = page.getByRole("tab", { name: /protocols|protocolos/i }); + await expect(protocolTab).toBeVisible(); + await protocolTab.click(); + + const mcpLinks = await page.locator('a[href="/dashboard/mcp"]').count(); + const a2aLinks = await page.locator('a[href="/dashboard/a2a"]').count(); + expect(mcpLinks).toBeGreaterThanOrEqual(2); + expect(a2aLinks).toBeGreaterThanOrEqual(2); + }); + + test("loads MCP and A2A dashboards without runtime error page", async ({ page }) => { + await page.goto("/dashboard/mcp"); + await page.waitForLoadState("networkidle"); + let redirectedToLogin = page.url().includes("/login"); + test.skip(redirectedToLogin, "Authentication enabled without a login fixture."); + await expect(page.locator("body")).toBeVisible(); + await expect(page.locator("body")).not.toContainText(/application error|500/i); + + await page.goto("/dashboard/a2a"); + await page.waitForLoadState("networkidle"); + redirectedToLogin = page.url().includes("/login"); + test.skip(redirectedToLogin, "Authentication enabled without a login fixture."); + await expect(page.locator("body")).toBeVisible(); + await expect(page.locator("body")).not.toContainText(/application error|500/i); + }); +});