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.
- package/README.md +11 -11
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/build-manifest.json +2 -2
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +2 -2
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__17482fc3._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__80e3bfc3._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__84e445b2._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__8c8abde4._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__98560fc3._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__beb64bf2._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__d4563e10._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__e27a89bd._.js +1 -1
- package/app/.next/server/chunks/_05c48915._.js +1 -1
- package/app/.next/server/chunks/_2115d8de._.js +1 -1
- package/app/.next/server/chunks/_3ac953eb._.js +1 -1
- package/app/.next/server/chunks/_4b8fd853._.js +1 -1
- package/app/.next/server/chunks/_68683848._.js +1 -1
- package/app/.next/server/chunks/_ac39a13d._.js +1 -1
- package/app/.next/server/chunks/_ee9b677b._.js +1 -1
- package/app/.next/server/chunks/node_modules_next_dist_esm_build_templates_app-route_e1050fd8.js +1 -1
- package/app/.next/server/chunks/ssr/[root-of-the-server]__9affb65e._.js +1 -1
- package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
- package/app/.next/server/pages/500.html +2 -2
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/chunks/{fef8169cad93c6a0.js → fd85bdf42d9b4807.js} +1 -1
- package/app/CHANGELOG.md +25 -0
- package/app/README.md +11 -11
- package/app/docs/i18n/ar/README.md +2 -2
- package/app/docs/i18n/bg/README.md +2 -2
- package/app/docs/i18n/da/README.md +2 -2
- package/app/docs/i18n/de/README.md +2 -2
- package/app/docs/i18n/es/README.md +8 -8
- package/app/docs/i18n/fi/README.md +8 -8
- package/app/docs/i18n/fr/README.md +8 -8
- package/app/docs/i18n/he/README.md +8 -8
- package/app/docs/i18n/hu/README.md +8 -8
- package/app/docs/i18n/id/README.md +8 -8
- package/app/docs/i18n/in/README.md +8 -8
- package/app/docs/i18n/it/README.md +8 -8
- package/app/docs/i18n/ja/README.md +8 -8
- package/app/docs/i18n/ko/README.md +8 -8
- package/app/docs/i18n/ms/README.md +8 -8
- package/app/docs/i18n/nl/README.md +8 -8
- package/app/docs/i18n/no/README.md +8 -8
- package/app/docs/i18n/phi/README.md +8 -8
- package/app/docs/i18n/pl/README.md +8 -8
- package/app/docs/i18n/pt/README.md +8 -8
- package/app/docs/i18n/pt-BR/README.md +10 -10
- package/app/docs/i18n/ro/README.md +8 -8
- package/app/docs/i18n/ru/README.md +8 -8
- package/app/docs/i18n/sk/README.md +8 -8
- package/app/docs/i18n/sv/README.md +8 -8
- package/app/docs/i18n/th/README.md +8 -8
- package/app/docs/i18n/uk-UA/README.md +8 -8
- package/app/docs/i18n/vi/README.md +8 -8
- package/app/docs/i18n/zh-CN/README.md +8 -8
- package/app/docs/openapi.yaml +1 -1
- package/app/open-sse/handlers/audioSpeech.ts +8 -4
- package/app/open-sse/handlers/audioTranscription.ts +64 -8
- package/app/package-lock.json +2 -2
- package/app/package.json +1 -1
- package/app/tsconfig.json +2 -1
- package/package.json +1 -1
- /package/app/.next/static/{gfcpuM-1Pzw0GdWmd_wBd → oPsVeqYdA1wqN11b0zbRn}/_buildManifest.js +0 -0
- /package/app/.next/static/{gfcpuM-1Pzw0GdWmd_wBd → oPsVeqYdA1wqN11b0zbRn}/_clientMiddlewareManifest.json +0 -0
- /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` —
|
|
883
|
-
| 🔊 **Text-to-speech** | `/v1/audio/speech` —
|
|
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` —
|
|
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` —
|
|
885
|
-
| 🔊 **Prevod textu na reč** | `/v1/audio/speech` —
|
|
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-
|
|
881
|
-
| 🔊 **Text-till-tal** | `/v1/audio/speech` —
|
|
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` —
|
|
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` —
|
|
882
|
-
| 🔊 **Chuyển văn bản thành giọng nói** | `/v1/audio/speech` —
|
|
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
|
|
package/app/docs/openapi.yaml
CHANGED
|
@@ -28,13 +28,17 @@ function upstreamErrorResponse(res, errText) {
|
|
|
28
28
|
let errorMessage: string;
|
|
29
29
|
try {
|
|
30
30
|
const parsed = JSON.parse(errText);
|
|
31
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
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
|
|
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") {
|
package/app/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omniroute",
|
|
3
|
-
"version": "2.9.
|
|
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.
|
|
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.
|
|
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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omniroute",
|
|
3
|
-
"version": "2.9.
|
|
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": {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|