omniroute 2.9.1 → 2.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +11 -11
  2. package/app/.next/BUILD_ID +1 -1
  3. package/app/.next/build-manifest.json +2 -2
  4. package/app/.next/prerender-manifest.json +3 -3
  5. package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
  6. package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
  7. package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  8. package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
  9. package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
  10. package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
  11. package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  12. package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  13. package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
  14. package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  15. package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
  16. package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
  17. package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
  18. package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
  19. package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
  20. package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
  21. package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  22. package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
  23. package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  24. package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  25. package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  26. package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  27. package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  32. package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
  33. package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
  34. package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
  35. package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
  36. package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
  37. package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
  38. package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
  39. package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
  40. package/app/.next/server/app/_global-error.html +2 -2
  41. package/app/.next/server/app/_global-error.rsc +1 -1
  42. package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  43. package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  44. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  45. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  46. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  47. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  48. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  49. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  60. package/app/.next/server/chunks/[root-of-the-server]__17482fc3._.js +1 -1
  61. package/app/.next/server/chunks/[root-of-the-server]__80e3bfc3._.js +2 -2
  62. package/app/.next/server/chunks/[root-of-the-server]__84e445b2._.js +1 -1
  63. package/app/.next/server/chunks/[root-of-the-server]__8c8abde4._.js +1 -1
  64. package/app/.next/server/chunks/[root-of-the-server]__98560fc3._.js +1 -1
  65. package/app/.next/server/chunks/[root-of-the-server]__beb64bf2._.js +1 -1
  66. package/app/.next/server/chunks/[root-of-the-server]__d4563e10._.js +1 -1
  67. package/app/.next/server/chunks/[root-of-the-server]__e27a89bd._.js +1 -1
  68. package/app/.next/server/chunks/_05c48915._.js +1 -1
  69. package/app/.next/server/chunks/_2115d8de._.js +1 -1
  70. package/app/.next/server/chunks/_3ac953eb._.js +1 -1
  71. package/app/.next/server/chunks/_4b8fd853._.js +1 -1
  72. package/app/.next/server/chunks/_68683848._.js +1 -1
  73. package/app/.next/server/chunks/_ac39a13d._.js +1 -1
  74. package/app/.next/server/chunks/_ee9b677b._.js +1 -1
  75. package/app/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_e1050fd8.js +1 -1
  76. package/app/.next/server/chunks/ssr/[root-of-the-server]__9affb65e._.js +1 -1
  77. package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
  78. package/app/.next/server/pages/500.html +2 -2
  79. package/app/.next/server/server-reference-manifest.js +1 -1
  80. package/app/.next/server/server-reference-manifest.json +1 -1
  81. package/app/.next/static/chunks/{fef8169cad93c6a0.js → fd85bdf42d9b4807.js} +1 -1
  82. package/app/CHANGELOG.md +25 -0
  83. package/app/README.md +11 -11
  84. package/app/docs/i18n/ar/README.md +2 -2
  85. package/app/docs/i18n/bg/README.md +2 -2
  86. package/app/docs/i18n/da/README.md +2 -2
  87. package/app/docs/i18n/de/README.md +2 -2
  88. package/app/docs/i18n/es/README.md +8 -8
  89. package/app/docs/i18n/fi/README.md +8 -8
  90. package/app/docs/i18n/fr/README.md +8 -8
  91. package/app/docs/i18n/he/README.md +8 -8
  92. package/app/docs/i18n/hu/README.md +8 -8
  93. package/app/docs/i18n/id/README.md +8 -8
  94. package/app/docs/i18n/in/README.md +8 -8
  95. package/app/docs/i18n/it/README.md +8 -8
  96. package/app/docs/i18n/ja/README.md +8 -8
  97. package/app/docs/i18n/ko/README.md +8 -8
  98. package/app/docs/i18n/ms/README.md +8 -8
  99. package/app/docs/i18n/nl/README.md +8 -8
  100. package/app/docs/i18n/no/README.md +8 -8
  101. package/app/docs/i18n/phi/README.md +8 -8
  102. package/app/docs/i18n/pl/README.md +8 -8
  103. package/app/docs/i18n/pt/README.md +8 -8
  104. package/app/docs/i18n/pt-BR/README.md +10 -10
  105. package/app/docs/i18n/ro/README.md +8 -8
  106. package/app/docs/i18n/ru/README.md +8 -8
  107. package/app/docs/i18n/sk/README.md +8 -8
  108. package/app/docs/i18n/sv/README.md +8 -8
  109. package/app/docs/i18n/th/README.md +8 -8
  110. package/app/docs/i18n/uk-UA/README.md +8 -8
  111. package/app/docs/i18n/vi/README.md +8 -8
  112. package/app/docs/i18n/zh-CN/README.md +8 -8
  113. package/app/docs/openapi.yaml +1 -1
  114. package/app/open-sse/handlers/audioSpeech.ts +8 -4
  115. package/app/open-sse/handlers/audioTranscription.ts +64 -8
  116. package/app/package-lock.json +2 -2
  117. package/app/package.json +1 -1
  118. package/app/tsconfig.json +2 -1
  119. package/package.json +1 -1
  120. /package/app/.next/static/{gfcpuM-1Pzw0GdWmd_wBd → oPsVeqYdA1wqN11b0zbRn}/_buildManifest.js +0 -0
  121. /package/app/.next/static/{gfcpuM-1Pzw0GdWmd_wBd → oPsVeqYdA1wqN11b0zbRn}/_clientMiddlewareManifest.json +0 -0
  122. /package/app/.next/static/{gfcpuM-1Pzw0GdWmd_wBd → oPsVeqYdA1wqN11b0zbRn}/_ssgManifest.js +0 -0
@@ -875,14 +875,14 @@ npm run electron:build:linux # Linux (.AppImage)
875
875
 
876
876
  ### 🎵 API-uri multimodale
877
877
 
878
- | Caracteristica | Ce face |
879
- | ------------------------- | ---------------------------------------------------------- |
880
- | 🖼️ **Generarea imaginii** | `/v1/images/generations` — 4 furnizori, peste 9 modele |
881
- | 📐 **Inglobări** | `/v1/embeddings` — 6 furnizori, peste 9 modele |
882
- | 🎤 **Transcriere audio** | `/v1/audio/transcriptions` — Compatibil cu Whisper |
883
- | 🔊 **Text-to-speech** | `/v1/audio/speech` — Sinteză audio cu mai mulți furnizori |
884
- | 🛡️ **Moderații** | `/v1/moderations` — Verificări de siguranță a conținutului |
885
- | 🔀 **Reclasificare** | `/v1/rerank` — Reclasificarea relevanței documentului |
878
+ | Caracteristica | Ce face |
879
+ | ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
880
+ | 🖼️ **Generarea imaginii** | `/v1/images/generations` — 4 furnizori, peste 9 modele |
881
+ | 📐 **Inglobări** | `/v1/embeddings` — 6 furnizori, peste 9 modele |
882
+ | 🎤 **Transcriere audio** | `/v1/audio/transcriptions` — 7 providers (Deepgram Nova 3, AssemblyAI, Groq Whisper, HuggingFace, ElevenLabs, OpenAI, Azure), auto-language detection, MP4/MP3/WAV support |
883
+ | 🔊 **Text-to-speech** | `/v1/audio/speech` — 10 providers (ElevenLabs, OpenAI, Deepgram, Cartesia, PlayHT, HuggingFace, Nvidia NIM, Inworld, Coqui, Tortoise) |
884
+ | 🛡️ **Moderații** | `/v1/moderations` — Verificări de siguranță a conținutului |
885
+ | 🔀 **Reclasificare** | `/v1/rerank` — Reclasificarea relevanței documentului |
886
886
 
887
887
  ### 🛡️ Reziliență și securitate
888
888
 
@@ -873,14 +873,14 @@ npm run electron:build:linux # Linux (.AppImage)
873
873
 
874
874
  ### 🎵 Мультимодальные API
875
875
 
876
- | Функция | Что делает |
877
- | ---------------------------- | --------------------------------------------------- |
878
- | 🖼️ **Генерация изображений** | `/v1/images/generations` — 4 провайдера, 9+ моделей |
879
- | 📐 **Embeddings** | `/v1/embeddings` — 6 провайдеров, 9+ моделей |
880
- | 🎤 **Транскрипция аудио** | `/v1/audio/transcriptions` — Совместимо с Whisper |
881
- | 🔊 **Текст в речь** | `/v1/audio/speech` — Мульти-провайдерный синтез |
882
- | 🛡️ **Модерация** | `/v1/moderations` — Проверки безопасности контента |
883
- | 🔀 **Reranking** | `/v1/rerank` — Переранжирование релевантности |
876
+ | Функция | Что делает |
877
+ | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
878
+ | 🖼️ **Генерация изображений** | `/v1/images/generations` — 4 провайдера, 9+ моделей |
879
+ | 📐 **Embeddings** | `/v1/embeddings` — 6 провайдеров, 9+ моделей |
880
+ | 🎤 **Транскрипция аудио** | `/v1/audio/transcriptions` — 7 providers (Deepgram Nova 3, AssemblyAI, Groq Whisper, HuggingFace, ElevenLabs, OpenAI, Azure), auto-language detection, MP4/MP3/WAV support |
881
+ | 🔊 **Текст в речь** | `/v1/audio/speech` — 10 providers (ElevenLabs, OpenAI, Deepgram, Cartesia, PlayHT, HuggingFace, Nvidia NIM, Inworld, Coqui, Tortoise) |
882
+ | 🛡️ **Модерация** | `/v1/moderations` — Проверки безопасности контента |
883
+ | 🔀 **Reranking** | `/v1/rerank` — Переранжирование релевантности |
884
884
 
885
885
  ### 🛡️ Устойчивость и безопасность
886
886
 
@@ -877,14 +877,14 @@ npm run electron:build:linux # Linux (.AppImage)
877
877
 
878
878
  ### 🎵 Multimodálne API
879
879
 
880
- | Funkcia | Čo to robí |
881
- | --------------------------- | ---------------------------------------------------------------- |
882
- | 🖼️ **Generovanie obrázkov** | `/v1/images/generations` — 4 poskytovatelia, 9+ modelov |
883
- | 📐 **Vloženie** | `/v1/embeddings` — 6 poskytovateľov, 9+ modelov |
884
- | 🎤 **Prepis zvuku** | `/v1/audio/transcriptions` — Kompatibilné so šepotom |
885
- | 🔊 **Prevod textu na reč** | `/v1/audio/speech` — Zvuková syntéza od viacerých poskytovateľov |
886
- | 🛡️ **Moderovania** | `/v1/moderations` — Kontroly bezpečnosti obsahu |
887
- | 🔀 **Reranking** | `/v1/rerank` — Zmena poradia relevantnosti dokumentu |
880
+ | Funkcia | Čo to robí |
881
+ | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
882
+ | 🖼️ **Generovanie obrázkov** | `/v1/images/generations` — 4 poskytovatelia, 9+ modelov |
883
+ | 📐 **Vloženie** | `/v1/embeddings` — 6 poskytovateľov, 9+ modelov |
884
+ | 🎤 **Prepis zvuku** | `/v1/audio/transcriptions` — 7 providers (Deepgram Nova 3, AssemblyAI, Groq Whisper, HuggingFace, ElevenLabs, OpenAI, Azure), auto-language detection, MP4/MP3/WAV support |
885
+ | 🔊 **Prevod textu na reč** | `/v1/audio/speech` — 10 providers (ElevenLabs, OpenAI, Deepgram, Cartesia, PlayHT, HuggingFace, Nvidia NIM, Inworld, Coqui, Tortoise) |
886
+ | 🛡️ **Moderovania** | `/v1/moderations` — Kontroly bezpečnosti obsahu |
887
+ | 🔀 **Reranking** | `/v1/rerank` — Zmena poradia relevantnosti dokumentu |
888
888
 
889
889
  ### 🛡️ Odolnosť a bezpečnosť
890
890
 
@@ -873,14 +873,14 @@ npm run electron:build:linux # Linux (.AppImage)
873
873
 
874
874
  ### 🎵 Multimodala API:er
875
875
 
876
- | Funktion | Vad det gör |
877
- | ------------------------ | ------------------------------------------------------ |
878
- | 🖼️ **Bildgenerering** | `/v1/images/generations` — 4 leverantörer, 9+ modeller |
879
- | 📐 **Inbäddningar** | `/v1/embeddings` — 6 leverantörer, 9+ modeller |
880
- | 🎤 **Ljudtranskription** | `/v1/audio/transcriptions` — Whisper-kompatibel |
881
- | 🔊 **Text-till-tal** | `/v1/audio/speech` — Ljudsyntes med flera leverantörer |
882
- | 🛡️ **Moderationer** | `/v1/moderations` — Innehållssäkerhetskontroller |
883
- | 🔀 **Omrankning** | `/v1/rerank` — Omrankning av dokumentrelevans |
876
+ | Funktion | Vad det gör |
877
+ | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
878
+ | 🖼️ **Bildgenerering** | `/v1/images/generations` — 4 leverantörer, 9+ modeller |
879
+ | 📐 **Inbäddningar** | `/v1/embeddings` — 6 leverantörer, 9+ modeller |
880
+ | 🎤 **Ljudtranskription** | `/v1/audio/transcriptions` — 7 providers (Deepgram Nova 3, AssemblyAI, Groq Whisper, HuggingFace, ElevenLabs, OpenAI, Azure), auto-language detection, MP4/MP3/WAV support |
881
+ | 🔊 **Text-till-tal** | `/v1/audio/speech` — 10 providers (ElevenLabs, OpenAI, Deepgram, Cartesia, PlayHT, HuggingFace, Nvidia NIM, Inworld, Coqui, Tortoise) |
882
+ | 🛡️ **Moderationer** | `/v1/moderations` — Innehållssäkerhetskontroller |
883
+ | 🔀 **Omrankning** | `/v1/rerank` — Omrankning av dokumentrelevans |
884
884
 
885
885
  ### 🛡️ Motståndskraft och säkerhet
886
886
 
@@ -874,14 +874,14 @@ npm run electron:build:linux # Linux (.AppImage)
874
874
 
875
875
  ### 🎵 Multi-Modal API
876
876
 
877
- | คุณสมบัติ | มันทำอะไร |
878
- | ----------------------- | ------------------------------------------------------------- |
879
- | 🖼️ **การสร้างภาพ** | `/v1/images/generations` — ผู้ให้บริการ 4 ราย รุ่น 9+ |
880
- | 📐 **การฝัง** | `/v1/embeddings` — ผู้ให้บริการ 6 ราย รุ่น 9+ |
881
- | 🎶 **การถอดเสียง** | `/v1/audio/transcriptions` — รองรับการกระซิบ |
882
- | 🔊 **ข้อความเป็นคำพูด** | `/v1/audio/speech` — การสังเคราะห์เสียงจากผู้ให้บริการหลายราย |
883
- | 🛡️ **การกลั่นกรอง** | `/v1/moderations` — การตรวจสอบความปลอดภัยของเนื้อหา |
884
- | 🔀 **จัดอันดับ** | `/v1/rerank` — การจัดอันดับความเกี่ยวข้องของเอกสาร |
877
+ | คุณสมบัติ | มันทำอะไร |
878
+ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
879
+ | 🖼️ **การสร้างภาพ** | `/v1/images/generations` — ผู้ให้บริการ 4 ราย รุ่น 9+ |
880
+ | 📐 **การฝัง** | `/v1/embeddings` — ผู้ให้บริการ 6 ราย รุ่น 9+ |
881
+ | 🎶 **การถอดเสียง** | `/v1/audio/transcriptions` — รองรับการกระซิบ |
882
+ | 🔊 **ข้อความเป็นคำพูด** | `/v1/audio/speech` — 10 providers (ElevenLabs, OpenAI, Deepgram, Cartesia, PlayHT, HuggingFace, Nvidia NIM, Inworld, Coqui, Tortoise) |
883
+ | 🛡️ **การกลั่นกรอง** | `/v1/moderations` — การตรวจสอบความปลอดภัยของเนื้อหา |
884
+ | 🔀 **จัดอันดับ** | `/v1/rerank` — การจัดอันดับความเกี่ยวข้องของเอกสาร |
885
885
 
886
886
  ### 🛡️ ความยืดหยุ่นและความปลอดภัย
887
887
 
@@ -878,14 +878,14 @@ npm run electron:build:linux # Linux (.AppImage)
878
878
 
879
879
  ### 🎵 Мультимодальні API
880
880
 
881
- | Особливість | Що він робить |
882
- | ---------------------------------- | ----------------------------------------------------- |
883
- | 🖼️ **Створення зображень** | `/v1/images/generations` — 4 провайдери, 9+ моделей |
884
- | 📐 **Вбудовування** | `/v1/embeddings` — 6 провайдерів, 9+ моделей |
885
- | 🎤 **Транскрипція аудіо** | `/v1/audio/transcriptions` — сумісний із Whisper |
886
- | 🔊 **Створення тексту в мовлення** | `/v1/audio/speech` — Багатопровайдерний аудіосинтез |
887
- | 🛡️ **Модерації** | `/v1/moderations` — Перевірка безпеки вмісту |
888
- | 🔀 **Переранжування** | `/v1/rerank` — Переранжування релевантності документа |
881
+ | Особливість | Що він робить |
882
+ | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
883
+ | 🖼️ **Створення зображень** | `/v1/images/generations` — 4 провайдери, 9+ моделей |
884
+ | 📐 **Вбудовування** | `/v1/embeddings` — 6 провайдерів, 9+ моделей |
885
+ | 🎤 **Транскрипція аудіо** | `/v1/audio/transcriptions` — 7 providers (Deepgram Nova 3, AssemblyAI, Groq Whisper, HuggingFace, ElevenLabs, OpenAI, Azure), auto-language detection, MP4/MP3/WAV support |
886
+ | 🔊 **Створення тексту в мовлення** | `/v1/audio/speech` — 10 providers (ElevenLabs, OpenAI, Deepgram, Cartesia, PlayHT, HuggingFace, Nvidia NIM, Inworld, Coqui, Tortoise) |
887
+ | 🛡️ **Модерації** | `/v1/moderations` — Перевірка безпеки вмісту |
888
+ | 🔀 **Переранжування** | `/v1/rerank` — Переранжування релевантності документа |
889
889
 
890
890
  ### 🛡️ Стійкість і безпека
891
891
 
@@ -874,14 +874,14 @@ npm run electron:build:linux # Linux (.AppImage)
874
874
 
875
875
  ### 🎵 API đa phương thức
876
876
 
877
- | Tính năng | Nó làm gì |
878
- | ------------------------------------- | ------------------------------------------------------------ |
879
- | 🖼️ **Tạo hình ảnh** | `/v1/images/generations` — 4 nhà cung cấp, hơn 9 mô hình |
880
- | 📐 **Nhúng** | `/v1/embeddings` — 6 nhà cung cấp, hơn 9 mô hình |
881
- | 🎤 **Phiên âm âm thanh** | `/v1/audio/transcriptions` — Tương thích với lời thì thầm |
882
- | 🔊 **Chuyển văn bản thành giọng nói** | `/v1/audio/speech` — Tổng hợp âm thanh từ nhiều nhà cung cấp |
883
- | 🛡️ **Kiểm duyệt** | `/v1/moderations` — Kiểm tra an toàn nội dung |
884
- | 🔀 **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 |
877
+ | Tính năng | Nó làm gì |
878
+ | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
879
+ | 🖼️ **Tạo hình ảnh** | `/v1/images/generations` — 4 nhà cung cấp, hơn 9 mô hình |
880
+ | 📐 **Nhúng** | `/v1/embeddings` — 6 nhà cung cấp, hơn 9 mô hình |
881
+ | 🎤 **Phiên âm âm thanh** | `/v1/audio/transcriptions` — 7 providers (Deepgram Nova 3, AssemblyAI, Groq Whisper, HuggingFace, ElevenLabs, OpenAI, Azure), auto-language detection, MP4/MP3/WAV support |
882
+ | 🔊 **Chuyển văn bản thành giọng nói** | `/v1/audio/speech` — 10 providers (ElevenLabs, OpenAI, Deepgram, Cartesia, PlayHT, HuggingFace, Nvidia NIM, Inworld, Coqui, Tortoise) |
883
+ | 🛡️ **Kiểm duyệt** | `/v1/moderations` — Kiểm tra an toàn nội dung |
884
+ | 🔀 **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 |
885
885
 
886
886
  ### 🛡️ Khả năng phục hồi và bảo mật
887
887
 
@@ -873,14 +873,14 @@ npm run electron:build:linux # Linux (.AppImage)
873
873
 
874
874
  ### 🎵 多模态 API
875
875
 
876
- | 功能 | 功能描述 |
877
- | ----------------- | ---------------------------------------------- |
878
- | 🖼️ **图像生成** | `/v1/images/generations` — 4 个提供商,9+ 模型 |
879
- | 📐 **Embeddings** | `/v1/embeddings` — 6 个提供商,9+ 模型 |
880
- | 🎤 **音频转录** | `/v1/audio/transcriptions` — Whisper 兼容 |
881
- | 🔊 **文字转语音** | `/v1/audio/speech` — 多提供商音频合成 |
882
- | 🛡️ **内容审核** | `/v1/moderations` — 内容安全检查 |
883
- | 🔀 **重排序** | `/v1/rerank` — 文档相关性重排序 |
876
+ | 功能 | 功能描述 |
877
+ | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
878
+ | 🖼️ **图像生成** | `/v1/images/generations` — 4 个提供商,9+ 模型 |
879
+ | 📐 **Embeddings** | `/v1/embeddings` — 6 个提供商,9+ 模型 |
880
+ | 🎤 **音频转录** | `/v1/audio/transcriptions` — 7 providers (Deepgram Nova 3, AssemblyAI, Groq Whisper, HuggingFace, ElevenLabs, OpenAI, Azure), auto-language detection, MP4/MP3/WAV support |
881
+ | 🔊 **文字转语音** | `/v1/audio/speech` — 10 providers (ElevenLabs, OpenAI, Deepgram, Cartesia, PlayHT, HuggingFace, Nvidia NIM, Inworld, Coqui, Tortoise) |
882
+ | 🛡️ **内容审核** | `/v1/moderations` — 内容安全检查 |
883
+ | 🔀 **重排序** | `/v1/rerank` — 文档相关性重排序 |
884
884
 
885
885
  ### 🛡️ 弹性与安全
886
886
 
@@ -1,7 +1,7 @@
1
1
  openapi: 3.1.0
2
2
  info:
3
3
  title: OmniRoute API
4
- version: 2.9.1
4
+ version: 2.9.2
5
5
  description: |
6
6
  OmniRoute is a local-first AI API proxy router. It provides an OpenAI-compatible
7
7
  endpoint that routes requests to multiple AI providers with load balancing,
@@ -28,13 +28,17 @@ function upstreamErrorResponse(res, errText) {
28
28
  let errorMessage: string;
29
29
  try {
30
30
  const parsed = JSON.parse(errText);
31
- errorMessage =
31
+ // Extract a human-readable message from various error response shapes.
32
+ // Guard against `parsed.error` being an object (e.g. ElevenLabs returns
33
+ // { error: { message: "...", status_code: 401 } } or { detail: { ... } })
34
+ const raw =
32
35
  parsed?.err_msg ||
33
36
  parsed?.error?.message ||
34
- parsed?.error ||
37
+ (typeof parsed?.error === "string" ? parsed.error : null) ||
35
38
  parsed?.message ||
36
- parsed?.detail ||
37
- errText;
39
+ (typeof parsed?.detail === "string" ? parsed.detail : parsed?.detail?.message) ||
40
+ null;
41
+ errorMessage = raw ? String(raw) : errText || `Upstream error (${res.status})`;
38
42
  } catch {
39
43
  errorMessage = errText || `Upstream error (${res.status})`;
40
44
  }
@@ -34,13 +34,15 @@ function upstreamErrorResponse(res, errText) {
34
34
  let errorMessage: string;
35
35
  try {
36
36
  const parsed = JSON.parse(errText);
37
- errorMessage =
37
+ // Guard against `parsed.error` or `parsed.detail` being objects
38
+ const raw =
38
39
  parsed?.err_msg ||
39
40
  parsed?.error?.message ||
40
- parsed?.error ||
41
+ (typeof parsed?.error === "string" ? parsed.error : null) ||
41
42
  parsed?.message ||
42
- parsed?.detail ||
43
- errText;
43
+ (typeof parsed?.detail === "string" ? parsed.detail : parsed?.detail?.message) ||
44
+ null;
45
+ errorMessage = raw ? String(raw) : errText || `Upstream error (${res.status})`;
44
46
  } catch {
45
47
  errorMessage = errText || `Upstream error (${res.status})`;
46
48
  }
@@ -65,13 +67,67 @@ function getUploadedFileName(file: Blob & { name?: unknown }): string {
65
67
  return typeof file.name === "string" && file.name.length > 0 ? file.name : "audio.wav";
66
68
  }
67
69
 
70
+ /**
71
+ * Infer a suitable Content-Type for Deepgram from the browser-provided MIME
72
+ * type and the original filename. Deepgram accepts `audio/*` and many raw
73
+ * formats, but `video/*` causes it to silently fail with "no speech detected".
74
+ *
75
+ * Strategy:
76
+ * 1. If the browser says `audio/*`, keep it as-is.
77
+ * 2. If it's `video/*` (e.g. `.mp4`), remap to the audio equivalent so
78
+ * Deepgram extracts the audio track. `.mp4` → `audio/mp4`, etc.
79
+ * 3. Fall back to `application/octet-stream` which tells Deepgram to
80
+ * auto-detect from the raw bytes (most reliable for unknown formats).
81
+ */
82
+ function resolveAudioContentType(file: Blob & { name?: unknown }): string {
83
+ const browserType = (file.type || "").toLowerCase();
84
+ const fileName = typeof file.name === "string" ? file.name.toLowerCase() : "";
85
+
86
+ // 1) Browser already says it's audio — trust it
87
+ if (browserType.startsWith("audio/")) return browserType;
88
+
89
+ // 2) Derive from file extension (covers video/* and empty MIME)
90
+ const ext = fileName.includes(".") ? fileName.split(".").pop() : "";
91
+ const EXT_TO_MIME: Record<string, string> = {
92
+ mp3: "audio/mpeg",
93
+ mp4: "audio/mp4",
94
+ m4a: "audio/mp4",
95
+ wav: "audio/wav",
96
+ ogg: "audio/ogg",
97
+ flac: "audio/flac",
98
+ webm: "audio/webm",
99
+ aac: "audio/aac",
100
+ wma: "audio/x-ms-wma",
101
+ opus: "audio/opus",
102
+ };
103
+ if (ext && EXT_TO_MIME[ext]) return EXT_TO_MIME[ext];
104
+
105
+ // 3) Fallback — let Deepgram auto-detect from raw bytes
106
+ return "application/octet-stream";
107
+ }
108
+
68
109
  /**
69
110
  * Handle Deepgram transcription (raw binary audio, model via query param)
70
111
  */
71
- async function handleDeepgramTranscription(providerConfig, file, modelId, token) {
112
+ async function handleDeepgramTranscription(
113
+ providerConfig,
114
+ file,
115
+ modelId,
116
+ token,
117
+ formData?: FormData
118
+ ) {
72
119
  const url = new URL(providerConfig.baseUrl);
73
120
  url.searchParams.set("model", modelId);
74
121
  url.searchParams.set("smart_format", "true");
122
+ url.searchParams.set("punctuate", "true");
123
+
124
+ // Language: if caller specified one, use it; otherwise let Deepgram auto-detect
125
+ const langParam = formData?.get("language");
126
+ if (typeof langParam === "string" && langParam.trim()) {
127
+ url.searchParams.set("language", langParam.trim());
128
+ } else {
129
+ url.searchParams.set("detect_language", "true");
130
+ }
75
131
 
76
132
  const arrayBuffer = await file.arrayBuffer();
77
133
 
@@ -79,7 +135,7 @@ async function handleDeepgramTranscription(providerConfig, file, modelId, token)
79
135
  method: "POST",
80
136
  headers: {
81
137
  ...buildAuthHeaders(providerConfig, token),
82
- "Content-Type": file.type || "audio/wav",
138
+ "Content-Type": resolveAudioContentType(file),
83
139
  },
84
140
  body: arrayBuffer,
85
141
  });
@@ -212,7 +268,7 @@ async function handleHuggingFaceTranscription(providerConfig, file, modelId, tok
212
268
  method: "POST",
213
269
  headers: {
214
270
  ...buildAuthHeaders(providerConfig, token),
215
- "Content-Type": file.type || "audio/wav",
271
+ "Content-Type": resolveAudioContentType(file),
216
272
  },
217
273
  body: arrayBuffer,
218
274
  });
@@ -283,7 +339,7 @@ export async function handleAudioTranscription({
283
339
 
284
340
  // Route to provider-specific handler
285
341
  if (providerConfig.format === "deepgram") {
286
- return handleDeepgramTranscription(providerConfig, file, modelId, token);
342
+ return handleDeepgramTranscription(providerConfig, file, modelId, token, formData);
287
343
  }
288
344
 
289
345
  if (providerConfig.format === "assemblyai") {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "2.9.1",
3
+ "version": "2.9.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omniroute",
9
- "version": "2.9.1",
9
+ "version": "2.9.2",
10
10
  "hasInstallScript": true,
11
11
  "license": "MIT",
12
12
  "workspaces": [
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "2.9.1",
3
+ "version": "2.9.2",
4
4
  "description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",
5
5
  "type": "module",
6
6
  "bin": {
package/app/tsconfig.json CHANGED
@@ -34,7 +34,8 @@
34
34
  "**/*.js",
35
35
  "**/*.jsx",
36
36
  ".next/types/**/*.ts",
37
- ".next/dev/types/**/*.ts"
37
+ ".next/dev/types/**/*.ts",
38
+ ".next/dev/dev/types/**/*.ts"
38
39
  ],
39
40
  "exclude": [
40
41
  "node_modules",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omniroute",
3
- "version": "2.9.1",
3
+ "version": "2.9.2",
4
4
  "description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",
5
5
  "type": "module",
6
6
  "bin": {