omniroute 2.1.0 → 2.1.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 (246) hide show
  1. package/README.md +1 -1
  2. package/app/.next/BUILD_ID +1 -1
  3. package/app/.next/app-path-routes-manifest.json +55 -55
  4. package/app/.next/build-manifest.json +2 -2
  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/settings/page_client-reference-manifest.js +1 -1
  28. package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  29. package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  30. package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  31. package/app/.next/server/app/.well-known/agent.json/route_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/page_client-reference-manifest.js +1 -1
  41. package/app/.next/server/app/_global-error.html +2 -2
  42. package/app/.next/server/app/_global-error.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/_global-error/__PAGE__.segment.rsc +1 -1
  45. package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  46. package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  47. package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  48. package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  49. package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  50. package/app/.next/server/app/a2a/route_client-reference-manifest.js +1 -1
  51. package/app/.next/server/app/api/a2a/status/route_client-reference-manifest.js +1 -1
  52. package/app/.next/server/app/api/a2a/tasks/[id]/cancel/route_client-reference-manifest.js +1 -1
  53. package/app/.next/server/app/api/a2a/tasks/[id]/route_client-reference-manifest.js +1 -1
  54. package/app/.next/server/app/api/a2a/tasks/route_client-reference-manifest.js +1 -1
  55. package/app/.next/server/app/api/acp/agents/route_client-reference-manifest.js +1 -1
  56. package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  57. package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  58. package/app/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
  59. package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -1
  60. package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +1 -1
  61. package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
  62. package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
  63. package/app/.next/server/app/api/cli-tools/backups/route_client-reference-manifest.js +1 -1
  64. package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
  65. package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
  66. package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
  67. package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
  68. package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
  69. package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
  70. package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
  71. package/app/.next/server/app/api/cli-tools/openclaw/auto-order/route_client-reference-manifest.js +1 -1
  72. package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
  73. package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route_client-reference-manifest.js +1 -1
  74. package/app/.next/server/app/api/cli-tools/status/route_client-reference-manifest.js +1 -1
  75. package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
  76. package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
  77. package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
  78. package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
  79. package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
  80. package/app/.next/server/app/api/combos/auto/route_client-reference-manifest.js +1 -1
  81. package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
  82. package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
  83. package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
  84. package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -1
  85. package/app/.next/server/app/api/db-backups/export/route_client-reference-manifest.js +1 -1
  86. package/app/.next/server/app/api/db-backups/exportAll/route_client-reference-manifest.js +1 -1
  87. package/app/.next/server/app/api/db-backups/import/route_client-reference-manifest.js +1 -1
  88. package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
  89. package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -1
  90. package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -1
  91. package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -1
  92. package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  93. package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
  94. package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
  95. package/app/.next/server/app/api/logs/console/route_client-reference-manifest.js +1 -1
  96. package/app/.next/server/app/api/mcp/audit/route_client-reference-manifest.js +1 -1
  97. package/app/.next/server/app/api/mcp/audit/stats/route_client-reference-manifest.js +1 -1
  98. package/app/.next/server/app/api/mcp/sse/route_client-reference-manifest.js +1 -1
  99. package/app/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  100. package/app/.next/server/app/api/mcp/stream/route_client-reference-manifest.js +1 -1
  101. package/app/.next/server/app/api/mcp/tools/route_client-reference-manifest.js +1 -1
  102. package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
  103. package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
  104. package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
  105. package/app/.next/server/app/api/models/openrouter-catalog/route_client-reference-manifest.js +1 -1
  106. package/app/.next/server/app/api/models/route.js +1 -1
  107. package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  108. package/app/.next/server/app/api/monitoring/health/route.js +1 -1
  109. package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -1
  110. package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
  111. package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
  112. package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
  113. package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
  114. package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
  115. package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
  116. package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
  117. package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -1
  118. package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
  119. package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
  120. package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
  121. package/app/.next/server/app/api/provider-metrics/route_client-reference-manifest.js +1 -1
  122. package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
  123. package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
  124. package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
  125. package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
  126. package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
  127. package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
  128. package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
  129. package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
  130. package/app/.next/server/app/api/providers/route.js +1 -1
  131. package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
  132. package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
  133. package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
  134. package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
  135. package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
  136. package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -1
  137. package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -1
  138. package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  139. package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  140. package/app/.next/server/app/api/settings/background-degradation/route_client-reference-manifest.js +1 -1
  141. package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
  142. package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
  143. package/app/.next/server/app/api/settings/model-aliases/route_client-reference-manifest.js +1 -1
  144. package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
  145. package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
  146. package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
  147. package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  148. package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
  149. package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
  150. package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  151. package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
  152. package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
  153. package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
  154. package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
  155. package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -1
  156. package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -1
  157. package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
  158. package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
  159. package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
  160. package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
  161. package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
  162. package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
  163. package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
  164. package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
  165. package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -1
  166. package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
  167. package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
  168. package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
  169. package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
  170. package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
  171. package/app/.next/server/app/api/usage/quota/route_client-reference-manifest.js +1 -1
  172. package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
  173. package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
  174. package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
  175. package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
  176. package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
  177. package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
  178. package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
  179. package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
  180. package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
  181. package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
  182. package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
  183. package/app/.next/server/app/api/v1/music/generations/route_client-reference-manifest.js +1 -1
  184. package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
  185. package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
  186. package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route_client-reference-manifest.js +1 -1
  187. package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
  188. package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
  189. package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
  190. package/app/.next/server/app/api/v1/videos/generations/route_client-reference-manifest.js +1 -1
  191. package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
  192. package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
  193. package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  194. package/app/.next/server/app/docs/page.js +1 -1
  195. package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  196. package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
  197. package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
  198. package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  199. package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
  200. package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
  201. package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
  202. package/app/.next/server/app/page_client-reference-manifest.js +1 -1
  203. package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
  204. package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
  205. package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
  206. package/app/.next/server/app-paths-manifest.json +55 -55
  207. package/app/.next/server/chunks/1909.js +1 -1
  208. package/app/.next/server/chunks/8252.js +1 -1
  209. package/app/.next/server/chunks/8907.js +1 -1
  210. package/app/.next/server/pages/500.html +2 -2
  211. package/app/.next/server/server-reference-manifest.js +1 -1
  212. package/app/.next/server/server-reference-manifest.json +1 -1
  213. package/app/.next/static/chunks/{5846-2907f9dda1834c88.js → 5846-d3aa3ba9dd16fa55.js} +1 -1
  214. package/app/package.json +1 -1
  215. package/package.json +1 -1
  216. package/README.ar.md +0 -1683
  217. package/README.bg.md +0 -1691
  218. package/README.da.md +0 -1692
  219. package/README.de.md +0 -1696
  220. package/README.es.md +0 -1436
  221. package/README.fi.md +0 -1586
  222. package/README.fr.md +0 -1435
  223. package/README.he.md +0 -1586
  224. package/README.hu.md +0 -1586
  225. package/README.id.md +0 -1586
  226. package/README.in.md +0 -1225
  227. package/README.it.md +0 -1434
  228. package/README.ja.md +0 -1583
  229. package/README.ko.md +0 -1586
  230. package/README.ms.md +0 -1587
  231. package/README.nl.md +0 -1586
  232. package/README.no.md +0 -1586
  233. package/README.phi.md +0 -1587
  234. package/README.pl.md +0 -1586
  235. package/README.pt-BR.md +0 -1499
  236. package/README.pt.md +0 -1586
  237. package/README.ro.md +0 -1588
  238. package/README.ru.md +0 -1433
  239. package/README.sk.md +0 -1590
  240. package/README.sv.md +0 -1587
  241. package/README.th.md +0 -1577
  242. package/README.uk-UA.md +0 -1592
  243. package/README.vi.md +0 -1586
  244. package/README.zh-CN.md +0 -1432
  245. /package/app/.next/static/{jBXsbnBQXxbuL3eAmEO72 → xYoMYiq2lWi73ieYn-e4s}/_buildManifest.js +0 -0
  246. /package/app/.next/static/{jBXsbnBQXxbuL3eAmEO72 → xYoMYiq2lWi73ieYn-e4s}/_ssgManifest.js +0 -0
package/README.no.md DELETED
@@ -1,1586 +0,0 @@
1
- <div align="center">
2
- <img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute Dashboard" width="800"/>
3
-
4
- # 🚀 OmniRoute — Den gratis AI-gatewayen
5
-
6
- ### Slutt aldri å kode. Smart ruting til **GRATIS og rimelige AI-modeller** med automatisk fallback.
7
-
8
- _Din universelle API-proxy – ett endepunkt, 36+ leverandører, null nedetid._
9
-
10
- **Chatfullføringer • Innebygginger • Bildegenerering • Lyd • Omrangering • 100 % TypeScript**
11
-
12
- ---
13
-
14
- ### 🚀 New in v2.0.9+ — Playground, CLI Fingerprints & ACP
15
-
16
- | Feature | What It Does |
17
- | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
18
- | 🎮 **Model Playground** | Dashboard page to test any model directly — provider/model/endpoint selectors, Monaco Editor, streaming, abort, timing |
19
- | 🔏 **CLI Fingerprint Matching** | Per-provider header/body ordering to match native CLI signatures — toggle per provider in Settings > Security. **Your proxy IP is preserved** |
20
- | 🤝 **ACP Support (Agent Client Protocol)** | CLI agent discovery (Codex, Claude, Goose, Gemini CLI, OpenClaw), process spawner, `/api/acp/agents` endpoint |
21
- | 🤖 **ACP Agents Dashboard** | Debug > Agents page — grid of 14 agents with install status, version, custom agent form for any CLI tool |
22
- | 🔧 **Custom Model `apiFormat` Routing** | Custom models with `apiFormat: "responses"` now correctly route to the Responses API translator |
23
- | 🏢 **Codex Workspace Isolation** | Multiple Codex workspaces per email — OAuth correctly separates connections by workspace ID |
24
- | 🔄 **Electron Auto-Update** | Desktop app checks for updates + auto-install on restart |
25
-
26
- ### 🤖 Gratis AI-leverandør for dine favorittkodeagenter
27
-
28
- _Koble til ethvert AI-drevet IDE- eller CLI-verktøy gjennom OmniRoute – gratis API-gateway for ubegrenset koding._
29
-
30
- <table>
31
- <tr>
32
- <td align="center" width="110">
33
- <a href="https://github.com/cline/cline">
34
- <img src="./public/providers/openclaw.png" alt="OpenClaw" width="48"/><br/>
35
- <b>OpenClaw</b>
36
- </a><br/>
37
- <sub>⭐ 205K</sub>
38
- </td>
39
- <td align="center" width="110">
40
- <a href="https://github.com/HKUDS/nanobot">
41
- <img src="./public/providers/nanobot.png" alt="NanoBot" width="48"/><br/>
42
- <b>NanoBot</b>
43
- </a><br/>
44
- <sub>⭐ 20.9K</sub>
45
- </td>
46
- <td align="center" width="110">
47
- <a href="https://github.com/sipeed/picoclaw">
48
- <img src="./public/providers/picoclaw.jpg" alt="PicoClaw" width="48"/><br/>
49
- <b>PicoClaw</b>
50
- </a><br/>
51
- <sub>⭐ 14.6K</sub>
52
- </td>
53
- <td align="center" width="110">
54
- <a href="https://github.com/zeroclaw-labs/zeroclaw">
55
- <img src="./public/providers/zeroclaw.png" alt="ZeroClaw" width="48"/><br/>
56
- <b>ZeroClaw</b>
57
- </a><br/>
58
- <sub>⭐ 9.9K</sub>
59
- </td>
60
- <td align="center" width="110">
61
- <a href="https://github.com/nearai/ironclaw">
62
- <img src="./public/providers/ironclaw.png" alt="IronClaw" width="48"/><br/>
63
- <b>IronClaw</b>
64
- </a><br/>
65
- <sub>⭐ 2.1K</sub>
66
- </td>
67
- </tr>
68
- <tr>
69
- <td align="center" width="110">
70
- <a href="https://github.com/anomalyco/opencode">
71
- <img src="./public/providers/opencode.svg" alt="OpenCode" width="48"/><br/>
72
- <b>OpenCode</b>
73
- </a><br/>
74
- <sub>⭐ 106K</sub>
75
- </td>
76
- <td align="center" width="110">
77
- <a href="https://github.com/openai/codex">
78
- <img src="./public/providers/codex.png" alt="Codex CLI" width="48"/><br/>
79
- <b>Codex CLI</b>
80
- </a><br/>
81
- <sub>⭐ 60.8K</sub>
82
- </td>
83
- <td align="center" width="110">
84
- <a href="https://github.com/anthropics/claude-code">
85
- <img src="./public/providers/claude.png" alt="Claude Code" width="48"/><br/>
86
- <b>Claude Code</b>
87
- </a><br/>
88
- <sub>⭐ 67.3K</sub>
89
- </td>
90
- <td align="center" width="110">
91
- <a href="https://github.com/google-gemini/gemini-cli">
92
- <img src="./public/providers/gemini-cli.png" alt="Gemini CLI" width="48"/><br/>
93
- <b>Gemini CLI</b>
94
- </a><br/>
95
- <sub>⭐ 94.7K</sub>
96
- </td>
97
- <td align="center" width="110">
98
- <a href="https://github.com/Kilo-Org/kilocode">
99
- <img src="./public/providers/kilocode.png" alt="Kilo Code" width="48"/><br/>
100
- <b>Kilo Code</b>
101
- </a><br/>
102
- <sub>⭐ 15.5K</sub>
103
- </td>
104
- </tr>
105
- </table>
106
-
107
- <sub>📡 Alle agenter kobler til via <code>http://localhost:20128/v1</code> eller <code>http://cloud.omniroute.online/v1</code>, —limited one models_245 kvote</sub>
108
-
109
- ---
110
-
111
- [![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute)
112
- [![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute)
113
- [![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE)
114
- [![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online)
115
- [![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
116
-
117
- [🌐 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)
118
-
119
- 🌐 **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)
120
-
121
- </div>
122
-
123
- ---
124
-
125
- ## 🖼️
126
-
127
- <div align="center">
128
- <img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute" width="800"/>
129
- </div>
130
-
131
- ---
132
-
133
- ## 📸
134
-
135
- <details>
136
- <summary><b>...</b></summary>
137
-
138
- | # | # |
139
- | ----- | ---------------------------------------- |
140
- | **1** | ![1](docs/screenshots/01-providers.png) |
141
- | **2** | ![2](docs/screenshots/02-combos.png) |
142
- | **3** | ![3](docs/screenshots/03-analytics.png) |
143
- | **4** | ![4](docs/screenshots/04-health.png) |
144
- | **5** | ![5](docs/screenshots/05-translator.png) |
145
- | **6** | ![6](docs/screenshots/06-settings.png) |
146
- | **7** | ![7](docs/screenshots/07-cli-tools.png) |
147
- | **8** | ![8](docs/screenshots/08-usage.png) |
148
- | **9** | ![9](docs/screenshots/09-endpoint.png) |
149
-
150
- </details>
151
-
152
- ---
153
-
154
- ## 🤔 Hvorfor OmniRoute?
155
-
156
- **Slutt å kaste bort penger og nå grensene:**
157
-
158
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Abonnementskvoten utløper ubrukt hver måned
159
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Takstgrenser stopper deg med midtkoding
160
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Dyre APIer ($20–50/måned per leverandør)
161
- - <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Manuell veksling mellom tilbydere
162
-
163
- **OmniRoute løser dette:**
164
-
165
- - ✅ **Maksimer abonnementer** - Spor kvote, bruk hver bit før tilbakestilling
166
- - ✅ **Automatisk fallback** - Abonnement → API-nøkkel → Billig → Gratis, null nedetid
167
- - ✅ **Multi-konto** - Round-robin mellom kontoer per leverandør
168
- - ✅ **Universal** - Fungerer med Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, hvilket som helst CLI-verktøy
169
-
170
- ---
171
-
172
- ## 📧 Støtte
173
-
174
- > 💬 **Bli med i fellesskapet vårt!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Få hjelp, del tips og hold deg oppdatert.
175
-
176
- - **Nettsted**: [omniroute.online](https://omniroute.online)
177
- - **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
178
- - **Problemer**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
179
- - **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
180
- - **Originalt prosjekt**: [9router by decolua](https://github.com/decolua/9router)
181
-
182
- ---
183
-
184
- ## 🔄 Hvordan det fungerer
185
-
186
- ```
187
- ┌─────────────┐
188
- │ Your CLI │ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...)
189
- │ Tool │
190
- └──────┬──────┘
191
- │ http://localhost:20128/v1
192
-
193
- ┌─────────────────────────────────────────┐
194
- │ OmniRoute (Smart Router) │
195
- │ • Format translation (OpenAI ↔ Claude) │
196
- │ • Quota tracking + Embeddings + Images │
197
- │ • Auto token refresh │
198
- └──────┬──────────────────────────────────┘
199
-
200
- ├─→ [Tier 1: SUBSCRIPTION] Claude Code, Codex, Gemini CLI
201
- │ ↓ quota exhausted
202
- ├─→ [Tier 2: API KEY] DeepSeek, Groq, xAI, Mistral, NVIDIA NIM, etc.
203
- │ ↓ budget limit
204
- ├─→ [Tier 3: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M)
205
- │ ↓ budget limit
206
- └─→ [Tier 4: FREE] iFlow, Qwen, Kiro (unlimited)
207
-
208
- Result: Never stop coding, minimal cost
209
- ```
210
-
211
- ---
212
-
213
- ## 🎯 Hva OmniRoute løser — 30 ekte smertepoeng og brukstilfeller
214
-
215
- > **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.
216
-
217
- <details>
218
- <summary><b>💸 1. "Jeg betaler for et dyrt abonnement, men blir fortsatt avbrutt av grenser" </b></summary>
219
-
220
- 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.
221
-
222
- **Hvordan OmniRoute løser det:**
223
-
224
- - **Smart 4-lags fallback** — Hvis abonnementskvoten går tom, omdirigeres automatisk til API-nøkkel → Billig → Gratis med null manuell intervensjon
225
- - **Sanntidskvotesporing** — Viser tokenforbruk i sanntid med tilbakestilt nedtelling (5 timer, daglig, ukentlig)
226
- - **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
227
- - **Egendefinerte kombinasjoner** — Tilpassbare reservekjeder med 6 balansestrategier (fyll først, round-robin, P2C, tilfeldig, minst brukt, kostnadsoptimalisert)
228
- - **Codex Business Quotas** — Overvåking av bedrifts-/teamarbeidsområdekvoter direkte i dashbordet
229
-
230
- </details>
231
-
232
- <details>
233
- <summary><b>🔌 2. "Jeg trenger å bruke flere leverandører, men hver av dem har en annen API" </b></summary>
234
-
235
- 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.
236
-
237
- **Hvordan OmniRoute løser det:**
238
-
239
- - **Unified Endpoint** - En enkelt `http://localhost:20128/v1` fungerer som proxy for alle 36+ leverandører
240
- - **Formatoversettelse** — Automatisk og gjennomsiktig: OpenAI ↔ Claude ↔ Gemini ↔ Responses API
241
- - **Responsrensing** — Fjerner ikke-standardfelter (`x_groq`, `usage_breakdown`, `service_tier`) som bryter OpenAI SDK v1.83+
242
- - **Rollenormalisering** — Konverterer `developer` → `system` for ikke-OpenAI-leverandører; `system` → `user` for GLM/ERNIE
243
- - **Think Tag Extraction** — Trekker ut `<think>`-blokker fra modeller som DeepSeek R1 til standardiserte `reasoning_content`
244
- - **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatisk konvertering
245
- - **`stream` er standard til `false`** — Justerer med OpenAI-spesifikasjoner, og unngår uventet SSE i Python/Rust/Go SDK-er
246
-
247
- </details>
248
-
249
- <details>
250
- <summary><b>🌐 3. "Min AI-leverandør blokkerer min region/land" </b></summary>
251
-
252
- 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.
253
-
254
- **Hvordan OmniRoute løser det:**
255
-
256
- - **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
257
- - **Fargekodede proxy-merker** — Visuelle indikatorer: 🟢 global proxy, 🟡 leverandørproxy, 🔵 tilkoblings proxy, viser alltid IP
258
- - **OAuth-tokenutveksling gjennom proxy** - OAuth-flyt går også gjennom proxyen, og løser `unsupported_country_region_territory`
259
- - **Test av tilkobling via proxy** — Tilkoblingstester bruker den konfigurerte proxyen (ikke mer direkte forbikobling)
260
- - **SOCKS5-støtte** — Full SOCKS5-proxystøtte for utgående ruting
261
- - **TLS-fingeravtrykkspoofing** — Nettleserlignende TLS-fingeravtrykk via `wreq-js` for å omgå botdeteksjon
262
-
263
- </details>
264
-
265
- <details>
266
- <summary><b>🆓 4. "Jeg vil bruke AI for koding, men jeg har ingen penger" </b></summary>
267
-
268
- 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.
269
-
270
- **Hvordan OmniRoute løser det:**
271
-
272
- - **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)
273
- - **Ollama Cloud** — Cloud-hosted Ollama models at `api.ollama.com` with free "Light usage" tier; use `ollamacloud/<model>` prefix
274
- - **Kun gratis kombinasjoner** — Kjede `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/måned med null nedetid
275
- - **NVIDIA NIM gratis kreditter** — 1000 gratis kreditter integrert
276
- - **Kostnadsoptimalisert strategi** — Rutingstrategi som automatisk velger den billigste tilgjengelige leverandøren
277
-
278
- </details>
279
-
280
- <details>
281
- <summary><b>🔒 5. "Jeg trenger å beskytte AI-gatewayen min mot uautorisert tilgang" </b></summary>
282
-
283
- 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.
284
-
285
- **Hvordan OmniRoute løser det:**
286
-
287
- - **API Key Management** — Generering, rotasjon og scoping per leverandør med en dedikert `/dashboard/api-manager`-side
288
- - **Tillatelser på modellnivå** — Begrens API-nøkler til spesifikke modeller (`openai/*`, jokertegnmønstre), med Tillat alt/begrens
289
- - **API Endpoint Protection** — Krev en nøkkel for `/v1/models` og blokker spesifikke leverandører fra oppføringen
290
- - **Auth Guard + CSRF Protection** — Alle dashbordruter beskyttet med `withAuth` mellomvare + CSRF-tokens
291
- - **Rate Limiter** — Per-IP ratebegrensning med konfigurerbare vinduer
292
- - **IP-filtrering** — Tillatelsesliste/blokkeringsliste for tilgangskontroll
293
- - **Prompt Injection Guard** — Sanitisering mot ondsinnede spørsmålsmønstre
294
- - **AES-256-GCM-kryptering** — Legitimasjon kryptert i hvile
295
-
296
- </details>
297
-
298
- <details>
299
- <summary><b>🛑 6. «Tilbyderen min gikk ned og jeg mistet kodeflyten min» </b></summary>
300
-
301
- 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.
302
-
303
- **Hvordan OmniRoute løser det:**
304
-
305
- - **Circuit Breaker per leverandør** — Automatisk åpning/lukking med konfigurerbare terskler og nedkjøling (Lukket/Åpen/HalvÅpen)
306
- - **Eksponentiell backoff** — Progressive forsinkelser på nytt forsøk
307
- - **Anti-tordenflokk** — Mutex + semaforbeskyttelse mot samtidige stormer på nytt forsøk
308
- - **Combo Fallback Chains** — Hvis primærleverandøren mislykkes, faller den automatisk gjennom kjeden uten inngrep
309
- - **Combo Circuit Breaker** - Deaktiverer sviktende leverandører automatisk i en kombinasjonskjede
310
- - **Helsedashbord** — Oppetidsovervåking, strømbrytertilstander, sperringer, cachestatistikk, p50/p95/p99 latency
311
-
312
- </details>
313
-
314
- <details>
315
- <summary><b>🔧 7. "Å konfigurere hvert AI-verktøy er kjedelig og repeterende" </b></summary>
316
-
317
- 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.
318
-
319
- **Hvordan OmniRoute løser det:**
320
-
321
- - **CLI Tools Dashboard** — Dedikert side med ett-klikksoppsett for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline
322
- - **GitHub Copilot Config Generator** — Genererer `chatLanguageModels.json` for VS-kode med bulkmodellvalg
323
- - **Onboarding Wizard** — Veiledet 4-trinns oppsett for førstegangsbrukere
324
- - **Ett endepunkt, alle modeller** — Konfigurer `http://localhost:20128/v1` én gang, få tilgang til 36+ leverandører
325
-
326
- </details>
327
-
328
- <details>
329
- <summary><b>🔑 8. "Å administrere OAuth-tokens fra flere leverandører er et helvete" </b></summary>
330
-
331
- 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.
332
-
333
- **Hvordan OmniRoute løser det:**
334
-
335
- - **Automatisk oppdatering av token** — OAuth-tokener oppdateres i bakgrunnen før utløp
336
- - **OAuth 2.0 (PKCE) innebygd** — Automatisk flyt for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow
337
- - **Multi-Account OAuth** - Flere kontoer per leverandør via JWT/ID-tokenutvinning
338
- - **OAuth LAN/Remote Fix** — Privat IP-deteksjon for `redirect_uri` + manuell URL-modus for eksterne servere
339
- - **OAuth Behind Nginx** — Bruker `window.location.origin` for omvendt proxy-kompatibilitet
340
- - **Remote OAuth Guide** — Trinn-for-trinn-veiledning for Google Cloud-legitimasjon på VPS/Docker
341
-
342
- </details>
343
-
344
- <details>
345
- <summary><b>📊 9. "Jeg vet ikke hvor mye jeg bruker eller hvor" </b></summary>
346
-
347
- 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.
348
-
349
- **Hvordan OmniRoute løser det:**
350
-
351
- - **Dashboard for kostnadsanalyse** — Kostnadssporing per token og budsjettadministrasjon per leverandør
352
- – **Budsjettgrenser per nivå** – Utgiftstak per nivå som utløser automatisk fallback
353
- - **Priskonfigurasjon per modell** — Konfigurerbare priser per modell
354
- - **Bruksstatistikk per API-nøkkel** — Antall forespørsler og sist brukte tidsstempel per nøkkel
355
- - **Analytics Dashboard** — Statistiske kort, modellbruksdiagram, leverandørtabell med suksessrater og latens
356
-
357
- </details>
358
-
359
- <details>
360
- <summary><b>🐛 10. "Jeg kan ikke diagnostisere feil og problemer i AI-anrop" </b></summary>
361
-
362
- 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.
363
-
364
- **Hvordan OmniRoute løser det:**
365
-
366
- - **Unified Logs Dashboard** — 4 faner: Forespørselslogger, proxy-logger, revisjonslogger, konsoll
367
- - **Console Log Viewer** — Viser i sanntid i terminalstil med fargekodede nivåer, automatisk rulling, søk, filter
368
- - **SQLite Proxy Logger** — Vedvarende logger som overlever serverstarter
369
- - **Translator Playground** — 4 feilsøkingsmoduser: Playground (formatoversettelse), Chat Tester (tur-retur), Test Bench (batch), Live Monitor (sanntid)
370
- - **Request Telemetri** — p50/p95/p99 latens + X-Request-Id-sporing
371
- - **Filbasert logging med rotasjon** — Konsollinterceptor fanger opp alt til JSON-logg med størrelsesbasert rotasjon
372
-
373
- </details>
374
-
375
- <details>
376
- <summary><b>🏗️ 11. "Deployering og vedlikehold av gatewayen er kompleks" </b></summary>
377
-
378
- 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.
379
-
380
- **Hvordan OmniRoute løser det:**
381
-
382
- - **npm global installasjon** — `npm install -g omniroute && omniroute` — ferdig
383
- - **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi)
384
- - **Docker Compose-profiler** — `base` (ingen CLI-verktøy) og `cli` (med Claude Code, Codex, OpenClaw)
385
- - **Electron Desktop App** — Innebygd app for Windows/macOS/Linux med systemstatusfelt, automatisk start, offline-modus
386
- - **Split-Port Mode** — API og Dashboard på separate porter for avanserte scenarier (omvendt proxy, containernettverk)
387
- - **Cloud Sync** — Konfigurer synkronisering på tvers av enheter via Cloudflare Workers
388
- - **DB-sikkerhetskopier** — Automatisk sikkerhetskopiering, gjenoppretting, eksport og import av alle innstillinger
389
-
390
- </details>
391
-
392
- <details>
393
- <summary><b>🌍 12. "Grensesnittet er kun engelsk, og teamet mitt snakker ikke engelsk" </b></summary>
394
-
395
- 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.
396
-
397
- **Hvordan OmniRoute løser det:**
398
-
399
- - **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
400
- - **RTL-støtte** — Høyre-til-venstre-støtte for arabisk og hebraisk
401
- - **Multi-Language READMEs** - 30 komplette dokumentasjonsoversettelser
402
- - **Språkvelger** — Globusikon i overskriften for sanntidsbytte
403
-
404
- </details>
405
-
406
- <details>
407
- <summary><b>🔄 13. "Jeg trenger mer enn chat — jeg trenger innebygginger, bilder, lyd" </b></summary>
408
-
409
- 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.
410
-
411
- **Hvordan OmniRoute løser det:**
412
-
413
- - **Innbygging** — `/v1/embeddings` med 6 leverandører og 9+ modeller
414
- - **Bildegenerering** — `/v1/images/generations` med 10 leverandører og 20+ modeller (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI)
415
- - **Tekst-til-video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) og SD WebUI
416
- - **Tekst-til-musikk** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen)
417
- - **Lydtranskripsjon** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3
418
- - **Tekst-til-tale** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, Inworld, Cartesia, PlayHT, + eksisterende leverandører
419
- - **Moderasjoner** — `/v1/moderations` — Innholdssikkerhetssjekker
420
- - **Rerangering** — `/v1/rerank` — Rerangering av dokumentrelevans
421
- - **Responses API** — Full `/v1/responses`-støtte for Codex
422
-
423
- </details>
424
-
425
- <details>
426
- <summary><b>🧪 14. "Jeg har ingen måte å teste og sammenligne kvalitet på tvers av modeller" </b></summary>
427
-
428
- 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.
429
-
430
- **Hvordan OmniRoute løser det:**
431
-
432
- - **LLM-evalueringer** — Gyldent sett-testing med 10 forhåndslastede tilfeller som dekker hilsener, matematikk, geografi, kodegenerering, JSON-overholdelse, oversettelse, nedskrivning, sikkerhetsavslag
433
- - **4 matchstrategier** — `exact`, `contains`, `regex`, `custom` (JS-funksjon)
434
- - **Translator Playground Test Bench** — Batchtesting med flere innganger og forventede utganger, sammenligning på tvers av leverandører
435
- - **Chattetester** — Full rundtur med visuell responsgjengivelse
436
- - **Live Monitor** — Sanntidsstrøm av alle forespørsler som strømmer gjennom proxyen
437
-
438
- </details>
439
-
440
- <details>
441
- <summary><b>📈 15. "Jeg trenger å skalere uten å miste ytelse" </b></summary>
442
-
443
- 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.
444
-
445
- **Hvordan OmniRoute løser det:**
446
-
447
- - **Semantisk hurtigbuffer** — To-lags cache (signatur + semantisk) reduserer kostnader og ventetid
448
- - **Request Idempotency** — 5s dedupliseringsvindu for identiske forespørsler
449
- - **Deteksjon av hastighetsgrense** - RPM per leverandør, minimum gap og maksimal samtidig sporing
450
- - **Redigerbare frekvensgrenser** — Konfigurerbare standardinnstillinger i Innstillinger → Motstandsdyktighet med utholdenhet
451
- - **API Key Validation Cache** — 3-lags cache for produksjonsytelse
452
- - **Helsedashbord med telemetri** — p50/p95/p99-forsinkelse, hurtigbufferstatistikk, oppetid
453
-
454
- </details>
455
-
456
- <details>
457
- <summary><b>🤖 16. "Jeg vil kontrollere modellatferd globalt" </b></summary>
458
-
459
- 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.
460
-
461
- **Hvordan OmniRoute løser det:**
462
-
463
- - **System Prompt Injection** — Global forespørsel brukt på alle forespørsler
464
- - **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive)
465
- - **6 rutingstrategier** — Globale strategier som bestemmer hvordan forespørsler distribueres
466
- - **Wildcard-ruter** — `provider/*`-mønstre ruter dynamisk til enhver leverandør
467
- - **Kombo aktiver/deaktiver veksle** — Veksle kombinasjoner direkte fra dashbordet
468
- - **Tilkobling av leverandør** — Aktiver/deaktiver alle tilkoblinger for en leverandør med ett klikk
469
- - **Blokkerte leverandører** — Ekskluder spesifikke leverandører fra `/v1/models`-oppføringen
470
-
471
- </details>
472
-
473
- <details>
474
- <summary><b>🧰 17. "Jeg trenger MCP-verktøy som førsteklasses produktegenskaper" </b></summary>
475
-
476
- Mange AI-gatewayer avslører MCP bare som en skjult implementeringsdetalj. Team trenger et synlig, håndterbart driftslag.
477
-
478
- **Hvordan OmniRoute løser det:**
479
-
480
- - MCP vises i dashbordnavigasjons- og endepunktprotokollfanen
481
- - Dedikert MCP-administrasjonsside med prosess, verktøy, omfang og revisjon
482
- - Innebygd hurtigstart for `omniroute --mcp` og klient onboarding
483
-
484
- </details>
485
-
486
- <details>
487
- <summary><b>🧠 18. "Jeg trenger A2A-orkestrering med synkronisering + strømoppgavestier" </b></summary>
488
-
489
- Agentarbeidsflyter trenger både direkte svar og langvarig strømmet utførelse med livssykluskontroll.
490
-
491
- **Hvordan OmniRoute løser det:**
492
-
493
- - A2A JSON-RPC-endepunkt (`POST /a2a`) med `message/send` og `message/stream`
494
- - SSE-streaming med forplantning av terminaltilstand
495
- - Oppgavelivssyklus-APIer for `tasks/get` og `tasks/cancel`
496
-
497
- </details>
498
-
499
- <details>
500
- <summary><b>🛰️ 19. "Jeg trenger ekte MCP-prosesshelse, ikke gjettet status" </b></summary>
501
-
502
- Operasjonelle team må vite om MCP faktisk er i live, ikke bare om en API er tilgjengelig.
503
-
504
- **Hvordan OmniRoute løser det:**
505
-
506
- - Runtime hjerteslag-fil med PID, tidsstempler, transport, verktøytelling og omfangsmodus
507
- - MCP status API som kombinerer hjerteslag + nylig aktivitet
508
- - UI-statuskort for prosess/oppetid/hjerteslag
509
-
510
- </details>
511
-
512
- <details>
513
- <summary><b>📋 20. "Jeg trenger reviderbar MCP-verktøykjøring" </b></summary>
514
-
515
- Når verktøy muterer konfigurasjon eller utløser operasjonshandlinger, trenger teamene rettsmedisinsk sporbarhet.
516
-
517
- **Hvordan OmniRoute løser det:**
518
-
519
- - SQLite-støttet revisjonslogging for MCP-verktøykall
520
- - Filtrerer etter verktøy, suksess/fiasko, API-nøkkel og paginering
521
- - Dashboard revisjonstabell + statistikkendepunkter for automatisering
522
-
523
- </details>
524
-
525
- <details>
526
- <summary><b>🔐 21. "Jeg trenger scoped MCP-tillatelser per integrasjon" </b></summary>
527
-
528
- Ulike klienter bør ha minst privilegert tilgang til verktøykategorier.
529
-
530
- **Hvordan OmniRoute løser det:**
531
-
532
- - 9 granulære MCP-skoper for kontrollert verktøytilgang
533
- - Håndhevelse av omfang og synlighet i MCP-administrasjonsgrensesnittet
534
- - Sikker standardstilling for operativt verktøy
535
-
536
- </details>
537
-
538
- <details>
539
- <summary><b>⚙️ 22. "Jeg trenger operasjonelle kontroller uten å omdistribuere" </b></summary>
540
-
541
- Lag trenger raske endringer i kjøretiden under hendelser eller kostnadshendelser.
542
-
543
- **Hvordan OmniRoute løser det:**
544
-
545
- - Bytt kombinasjonsaktivering direkte fra MCP-dashbordet
546
- - Bruk robusthetsprofiler fra forhåndsdefinerte policypakker
547
- - Tilbakestill strømbryterens tilstand fra samme driftspanel
548
-
549
- </details>
550
-
551
- <details>
552
- <summary><b>🔄 23. «I need live A2A task lifecycle synibility and cancellation»</b></summary>
553
-
554
- Uten livssyklussynlighet blir oppgavehendelser vanskelig å triage.
555
-
556
- **Hvordan OmniRoute løser det:**
557
-
558
- - Oppgaveliste/filtrering etter tilstand/ferdighet med paginering
559
- - Drill-down på oppgavemetadata, hendelser og artefakter
560
- - Sluttpunkt for kansellering av oppgave og UI-handling med bekreftelse
561
-
562
- </details>
563
-
564
- <details>
565
- <summary><b>🌊 24. «Jeg trenger aktive strømmålinger for A2A-last» </b></summary>
566
-
567
- Strømmearbeidsflyter krever operasjonell innsikt i samtidighet og direkteforbindelser.
568
-
569
- **Hvordan OmniRoute løser det:**
570
-
571
- - Aktive strømtellere integrert i A2A-status
572
- - Tidsstempel for siste oppgave og antall per stat
573
- - A2A dashbordkort for operasjonsovervåking i sanntid
574
-
575
- </details>
576
-
577
- <details>
578
- <summary><b>🪪 25. "Jeg trenger standard agentoppdagelse for klienter" </b></summary>
579
-
580
- Eksterne klienter og orkestratorer trenger maskinlesbare metadata for onboarding.
581
-
582
- **Hvordan OmniRoute løser det:**
583
-
584
- - Agentkort eksponert på `/.well-known/agent.json`
585
- - Evner og ferdigheter vist i ledelsens brukergrensesnitt
586
- - A2A status API inkluderer oppdagelsesmetadata for automatisering
587
-
588
- </details>
589
-
590
- <details>
591
- <summary><b>🧭 26. "Jeg trenger protokolloppdagbarhet i produktets UX" </b></summary>
592
-
593
- Hvis brukere ikke kan oppdage protokolloverflater, faller kvaliteten på adopsjon og støtte.
594
-
595
- **Hvordan OmniRoute løser det:**
596
-
597
- - Sidefeltoppføringer for MCP og A2A
598
- - Endpoint-side Protokoller-fane med hurtigstart og status
599
- - Lenker fra oversikt til dedikerte styringsdashboards
600
-
601
- </details>
602
-
603
- <details>
604
- <summary><b>🧪 27. "Jeg trenger ende-til-ende protokollvalidering med ekte klienter" </b></summary>
605
-
606
- Mock-tester er ikke nok til å validere protokollkompatibilitet før utgivelse.
607
-
608
- **Hvordan OmniRoute løser det:**
609
-
610
- - E2E-suite som starter opp app og bruker ekte MCP SDK-klienttransport
611
- - A2A-klient tester for å oppdage, sende, streame, hente og kansellere flyter
612
- - Krysssjekk påstander mot MCP-revisjon og A2A-oppgave-APIer
613
-
614
- </details>
615
-
616
- <details>
617
- <summary><b>📡 28. «Jeg trenger enhetlig observerbarhet på tvers av alle grensesnitt» </b></summary>
618
-
619
- Å dele observerbarhet etter protokoll skaper blinde flekker og lengre MTTR.
620
-
621
- **Hvordan OmniRoute løser det:**
622
-
623
- - Samlede dashboards/logger/analyse i ett produkt
624
- - Helse + revisjon + forespørsel om telemetri på tvers av OpenAI-, MCP- og A2A-lag
625
- - Operasjonelle APIer for status og automatisering
626
-
627
- </details>
628
-
629
- <details>
630
- <summary><b>💼 29. "Jeg trenger én kjøretid for proxy + verktøy + agentorkestrering" </b></summary>
631
-
632
- Å kjøre mange separate tjenester øker driftskostnadene og feilmodusene.
633
-
634
- **Hvordan OmniRoute løser det:**
635
-
636
- - OpenAI-kompatibel proxy, MCP-server og A2A-server i én stabel
637
- - Delt autentisering, robusthet, datalagring og observerbarhet
638
- - Konsekvent policymodell på tvers av alle interaksjonsflater
639
-
640
- </details>
641
-
642
- <details>
643
- <summary><b>🚀 30. "Jeg trenger å sende agentiske arbeidsflyter uten limkodespredning" </b></summary>
644
-
645
- Lag mister hastighet når de setter sammen flere ad-hoc-tjenester og skript.
646
-
647
- **Hvordan OmniRoute løser det:**
648
-
649
- - Enhetlig endepunktstrategi for kunder og agenter
650
- - Innebygde brukergrensesnitt for protokolladministrasjon og røykvalideringsveier
651
- - Produksjonsklare fundamenter (sikkerhet, logging, robusthet, backup)
652
-
653
- </details>
654
-
655
- ### Eksempel på Playbooks (integrerte brukstilfeller)
656
-
657
- **Playbook A: Maksimer betalt abonnement + billig backup**
658
-
659
- ```txt
660
- Combo: "maximize-claude"
661
- 1. cc/claude-opus-4-6
662
- 2. glm/glm-4.7
663
- 3. if/kimi-k2-thinking
664
-
665
- Monthly cost: $20 + small backup spend
666
- Outcome: higher quality, near-zero interruption
667
- ```
668
-
669
- **Playbook B: Nullkostnadskodestabel**
670
-
671
- ```txt
672
- Combo: "free-forever"
673
- 1. gc/gemini-3-flash
674
- 2. if/kimi-k2-thinking
675
- 3. qw/qwen3-coder-plus
676
-
677
- Monthly cost: $0
678
- Outcome: stable free coding workflow
679
- ```
680
-
681
- **Playbook C: 24/7 alltid aktiv reservekjede**
682
-
683
- ```txt
684
- Combo: "always-on"
685
- 1. cc/claude-opus-4-6
686
- 2. cx/gpt-5.2-codex
687
- 3. glm/glm-4.7
688
- 4. minimax/MiniMax-M2.1
689
- 5. if/kimi-k2-thinking
690
-
691
- Outcome: deep fallback depth for deadline-critical workloads
692
- ```
693
-
694
- **Playbook D: Agentoperasjoner med MCP + A2A**
695
-
696
- ```txt
697
- 1) Start MCP transport (`omniroute --mcp`) for tool-driven operations
698
- 2) Run A2A tasks via `message/send` and `message/stream`
699
- 3) Observe via /dashboard/mcp and /dashboard/a2a
700
- 4) Control incidents with resilience profile + task cancellation
701
- ```
702
-
703
- ---
704
-
705
- ## ⚡ Hurtigstart
706
-
707
- **1. Installer globalt:**
708
-
709
- ```bash
710
- npm install -g omniroute
711
- omniroute
712
- ```
713
-
714
- 🎉 Dashboard åpner kl. `http://localhost:20128`
715
-
716
- | Kommando | Beskrivelse |
717
- | ----------------------- | ---------------------------------- |
718
- | `omniroute` | Start server (standard port 20128) |
719
- | `omniroute --port 3000` | Bruk tilpasset port |
720
- | `omniroute --no-open` | Ikke åpne nettleseren automatisk |
721
- | `omniroute --help` | Vis hjelp |
722
-
723
- **2. Koble til en GRATIS leverandør:**
724
-
725
- Dashboard → Leverandører → Koble til **Claude-kode** eller **Antigravity** → OAuth-pålogging → Ferdig!
726
-
727
- **3. Bruk i CLI-verktøyet:**
728
-
729
- ```
730
- Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings:
731
- Endpoint: http://localhost:20128/v1
732
- API Key: [copy from dashboard]
733
- Model: if/kimi-k2-thinking
734
- ```
735
-
736
- **Det var det!** Begynn å kode med GRATIS AI-modeller.
737
-
738
- **Alternativt – kjør fra kilden:**
739
-
740
- ```bash
741
- cp .env.example .env
742
- npm install
743
- PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
744
- ```
745
-
746
- ---
747
-
748
- ## 🐳 Docker
749
-
750
- OmniRoute er tilgjengelig som et offentlig Docker-bilde på [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute).
751
-
752
- **Rask løp:**
753
-
754
- ```bash
755
- docker run -d \
756
- --name omniroute \
757
- --restart unless-stopped \
758
- -p 20128:20128 \
759
- -v omniroute-data:/app/data \
760
- diegosouzapw/omniroute:latest
761
- ```
762
-
763
- **Med miljøfil:**
764
-
765
- ```bash
766
- # Copy and edit .env first
767
- cp .env.example .env
768
-
769
- docker run -d \
770
- --name omniroute \
771
- --restart unless-stopped \
772
- --env-file .env \
773
- -p 20128:20128 \
774
- -v omniroute-data:/app/data \
775
- diegosouzapw/omniroute:latest
776
- ```
777
-
778
- **Bruke Docker Compose:**
779
-
780
- ```bash
781
- # Base profile (no CLI tools)
782
- docker compose --profile base up -d
783
-
784
- # CLI profile (Claude Code, Codex, OpenClaw built-in)
785
- docker compose --profile cli up -d
786
- ```
787
-
788
- | Bilde | Tag | Størrelse | Beskrivelse |
789
- | ------------------------ | -------- | --------- | ----------------------- |
790
- | `diegosouzapw/omniroute` | `latest` | ~250MB | Siste stabile utgivelse |
791
- | `diegosouzapw/omniroute` | `1.0.3` | ~250MB | Gjeldende versjon |
792
-
793
- ---
794
-
795
- ---
796
-
797
- ## 🖥️
798
-
799
- > 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux.
800
-
801
- - 🖥️ **Native Window** — Dedicated app window with system tray integration
802
- - 🔄 **Auto-Start** — Launch OmniRoute on system login
803
- - 🔔 **Native Notifications** — Get alerts for quota exhaustion or provider issues
804
- - ⚡ **One-Click Install** — NSIS (Windows), DMG (macOS), AppImage (Linux)
805
- - 🌐 **Offline Mode** — Works fully offline with bundled server
806
-
807
- ```bash
808
- npm run electron:dev # Development mode
809
- npm run electron:build # Current platform
810
- npm run electron:build:win # Windows (.exe)
811
- npm run electron:build:mac # macOS (.dmg)
812
- npm run electron:build:linux # Linux (.AppImage)
813
- ```
814
-
815
- 📖 Full documentation: [`electron/README.md`](electron/README.md)
816
-
817
- ---
818
-
819
- ## 💰 Priser på et øyeblikk
820
-
821
- | Nivå | Leverandør | Kostnad | Kvote Tilbakestill | Best for |
822
- | ----------------- | ----------------- | ----------------------------- | ----------------------- | -------------------- |
823
- | **💳 ABONNEMENT** | Claude Code (Pro) | $20/md | 5t + ukentlig | Allerede abonnert |
824
- | | Codex (Pluss/Pro) | $20-200/md | 5t + ukentlig | OpenAI-brukere |
825
- | | Gemini CLI | **GRATIS** | 180K/mnd + 1K/dag | Alle sammen! |
826
- | | GitHub Copilot | $10-19/md | Månedlig | GitHub-brukere |
827
- | **🔑 API NØKKEL** | NVIDIA NIM | **GRATIS** (1000 studiepoeng) | Engangs | Gratis tier testing |
828
- | | DeepSeek | Betal per bruk | Ingen | Beste pris/kvalitet |
829
- | | Groq | Gratis lag + betalt | Begrenset pris | Ultrarask slutning |
830
- | | xAI (Grok) | Betal per bruk | Ingen | Grok modeller |
831
- | | Mistral | Gratis lag + betalt | Begrenset pris | Europeisk AI |
832
- | | OpenRouter | Betal per bruk | Ingen | 100+ modeller |
833
- | **💰 BILLIG** | GLM-4.7 | $0,6/1M | Daglig 10:00 | Budsjett backup |
834
- | | MiniMax M2.1 | $0,2/1M | 5-timers rullende | Billigste alternativ |
835
- | | Kimi K2 | $9/md leilighet | 10 millioner tokens/mnd | Forutsigbar kostnad |
836
- | **🆓 GRATIS** | iFlow | $0 | Ubegrenset | 8 modeller gratis |
837
- | | Qwen | $0 | Ubegrenset | 3 modeller gratis |
838
- | | Kiro | $0 | Ubegrenset | Claude gratis |
839
-
840
- **💡 Profftips:** Start med Gemini CLI (180K gratis/måned) + iFlow (ubegrenset gratis) kombinasjon = $0 kostnad!
841
-
842
- ---
843
-
844
- ## 💡 Nøkkelfunksjoner
845
-
846
- ### 🧠 Kjerneruting og intelligens
847
-
848
- | Funksjon | Hva det gjør |
849
- | ---------------------------------- | ---------------------------------------------------------------------------------------- |
850
- | 🎯 **Smart 4-lags fallback** | Automatisk rute: Abonnement → API-nøkkel → Billig → Gratis |
851
- | 📊 **Sanntidskvotesporing** | Live tokenantall + tilbakestilt nedtelling per leverandør |
852
- | 🔄 **Formatoversettelse** | OpenAI ↔ Claude ↔ Gemini ↔ Markør ↔ Kiro sømløs + respons sanitization |
853
- | 👥 **Støtte for flere kontoer** | Flere kontoer per leverandør med intelligent utvalg |
854
- | 🔄 **Auto Token Refresh** | OAuth-tokens oppdateres automatisk med prøv på nytt |
855
- | 🎨 **Egendefinerte kombinasjoner** | 6 strategier: fyll først, round-robin, p2c, tilfeldig, minst brukt, kostnadsoptimalisert |
856
- | 🧩 **Egendefinerte modeller** | Legg til hvilken som helst modell-ID til en hvilken som helst leverandør |
857
- | 🌐 **Wildcard-ruter** | Ruter `provider/*`-mønstre til enhver leverandør dynamisk |
858
- | 🧠 **Tenkebudsjett** | Passthrough, auto, egendefinerte og adaptive moduser for resonnerende modeller |
859
- | 🔀 **Model Aliases** | Auto-forward deprecated model IDs to current replacements (built-in + custom) |
860
- | ⚡ **Background Degradation** | Auto-route background tasks (titles, summaries) to cheaper models |
861
- | 💬 **Systemprompt-injeksjon** | Global systemforespørsel brukt på alle forespørsler |
862
- | 📄 **Responses API** | Full støtte for OpenAI Responses API (`/v1/responses`) for Codex |
863
-
864
- ### 🎵 Multi-Modal APIer
865
-
866
- | Funksjon | Hva det gjør |
867
- | ----------------------- | ------------------------------------------------------ |
868
- | 🖼️ **Bildegenerering** | `/v1/images/generations` — 4 leverandører, 9+ modeller |
869
- | 📐 **Innbygging** | `/v1/embeddings` — 6 leverandører, 9+ modeller |
870
- | 🎤 **Lydtranskripsjon** | `/v1/audio/transcriptions` — Whisper-kompatibel |
871
- | 🔊 **Tekst-til-tale** | `/v1/audio/speech` — Multi-leverandør lydsyntese |
872
- | 🛡️ **Moderasjoner** | `/v1/moderations` — Innholdssikkerhetssjekker |
873
- | 🔀 **Omrangering** | `/v1/rerank` — Rerangering av dokumentrelevans |
874
-
875
- ### 🛡️ Spenst og sikkerhet
876
-
877
- | Funksjon | Hva det gjør |
878
- | --------------------------------- | ----------------------------------------------------------------------------- |
879
- | 🔌 **Circuit Breaker** | Automatisk åpning/lukking per leverandør med konfigurerbare terskler |
880
- | 🎯 **Endpoint-Aware Models** | Custom models declare supported endpoints + API format |
881
- | 🛡️ **Anti-tordenflokk** | Mutex + semaforhastighetsgrense for API-nøkkelleverandører |
882
- | 🧠 **Semantisk cache** | To-lags cache (signatur + semantisk) reduserer kostnader og ventetid |
883
- | ⚡ **Be om idempotens** | 5s dedup-vindu for dupliserte forespørsler |
884
- | 🔒 **TLS-fingeravtrykkspoofing** | Omgå TLS-basert botdeteksjon via wreq-js |
885
- | 🌐 **IP-filtrering** | Tillatelsesliste/blokkeringsliste for API-tilgangskontroll |
886
- | 📊 **Redigerbare satsgrenser** | Konfigurerbar RPM, min gap og maks samtidig på systemnivå |
887
- | 💾 **Rate Limit Persistence** | Learned limits survive restarts via SQLite with 60s debounce + 24h staleness |
888
- | 🔄 **Token Refresh Resilience** | Per-provider circuit breaker (5 fails→30min) + 30s timeout per attempt |
889
- | 🛡 **API-endepunktbeskyttelse** | Auth-gate + leverandørblokkering for `/models`-endepunktet |
890
- | 🔒 **Proxy-synlighet** | Fargekodede merker: 🟢 global, 🟡 leverandør, 🔵 per tilkobling med IP-skjerm |
891
- | 🌐 **3-nivå proxy-konfigurasjon** | Konfigurer proxyer på globalt nivå, per leverandør eller per tilkoblingsnivå |
892
-
893
- ### 📊 Observerbarhet og analyse
894
-
895
- | Funksjon | Hva det gjør |
896
- | -------------------------- | ----------------------------------------------------------------------------------- |
897
- | 📝 **Be om logging** | Feilsøkingsmodus med fullstendige forespørsels-/svarlogger |
898
- | 💾 **SQLite proxy-logger** | Vedvarende proxy-logger overlever omstart av server |
899
- | 📊 **Analytics Dashboard** | Recharts-drevet: statistikkkort, modellbruksdiagram, leverandørtabell |
900
- | 📈 **Fremdriftssporing** | Opt-in SSE-fremdriftshendelser for streaming |
901
- | 🧪 **LLM-evalueringer** | Gylden sett-testing med 4 kampstrategier |
902
- | 🔍 **Be om telemetri** | p50/p95/p99 latensaggregering + X-Request-Id-sporing |
903
- | 📋 **Logger Dashboard** | Samlet side med 4 faner: Forespørselslogger, proxy-logger, revisjonslogger, konsoll |
904
- | 🖥️ **Konsollloggvisning** | Viser i sanntid i terminalstil med nivåfilter, søk, automatisk rulling |
905
- | 📑 **Filbasert logging** | Console interceptor fanger opp all utgang til JSON-loggfil med rotasjon |
906
- | 🏥 **Helse Dashboard** | Systemoppetid, strømbrytertilstander, sperringer, cachestatistikk |
907
- | 💰 **Kostnadssporing** | Budsjettadministrasjon + priskonfigurasjon per modell |
908
-
909
- ### ☁️ Implementering og synkronisering
910
-
911
- | Funksjon | Hva det gjør |
912
- | -------------------------------- | ---------------------------------------------------------------------------------------- |
913
- | 💾 **Cloud Sync** | Synkroniser konfigurasjon på tvers av enheter via Cloudflare Workers |
914
- | 🌐 **Distribuer hvor som helst** | Localhost, VPS, Docker, Cloudflare Workers |
915
- | 🔑 **API Key Management** | Generer, roter og omfang API-nøkler per leverandør |
916
- | 🧙 **Onboarding Wizard** | 4-trinns veiledet oppsett for førstegangsbrukere |
917
- | 🔧 **CLI Tools Dashboard** | Ett-klikk konfigurer Claude, Codex, Cline, OpenClaw, Kilo, Antigravity |
918
- | 🔄 **DB-sikkerhetskopier** | Automatisk sikkerhetskopiering, gjenoppretting, eksport og import for alle innstillinger |
919
- | 🌐 **Internasjonalisering** | Full i18n med neste-intl — støtte for engelsk + portugisisk (Brasil) |
920
- | 🌍 **Språkvelger** | Globusikon i overskriften for sanntids språkbytte (🇺🇸/🇧🇷) |
921
- | 📂 **Tilpasset datakatalog** | `DATA_DIR` env var for å overstyre standard `~/.omniroute` lagringsbane |
922
-
923
- <details>
924
- <summary><b>📖 Funksjonsdetaljer</b></summary>
925
-
926
- ### 🎯 Smart 4-lags fallback
927
-
928
- Lag kombinasjoner med automatisk fallback:
929
-
930
- ```
931
- Combo: "my-coding-stack"
932
- 1. cc/claude-opus-4-6 (your subscription)
933
- 2. nvidia/llama-3.3-70b (free NVIDIA API)
934
- 3. glm/glm-4.7 (cheap backup, $0.6/1M)
935
- 4. if/kimi-k2-thinking (free fallback)
936
-
937
- → Auto switches when quota runs out or errors occur
938
- ```
939
-
940
- ### 📊 Sanntidskvotesporing
941
-
942
- - Tokenforbruk per leverandør
943
- - Tilbakestill nedtellingen (5 timer, daglig, ukentlig)
944
- - Kostnadsestimat for betalte nivåer
945
- - Månedlige utgiftsrapporter
946
-
947
- ### 🔄 Formatoversettelse
948
-
949
- Sømløs oversettelse mellom formater:
950
-
951
- - **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **OpenAI-svar**
952
- - CLI-verktøyet ditt sender OpenAI-format → OmniRoute oversetter → Leverandøren mottar eget format
953
- - Fungerer med alle verktøy som støtter tilpassede OpenAI-endepunkter
954
- - **Responssanering** - Fjerner ikke-standardfelter for streng OpenAI SDK-kompatibilitet
955
- - **Rollenormalisering** — `developer` → `system` for ikke-OpenAI; `system` → `user` for GLM/ERNIE-modeller
956
- - **Tenk tag-utvinning** — `<think>` blokker → `reasoning_content` for tenkemodeller
957
- - **Strukturert utgang** — `json_schema` → Gemini's `responseMimeType`/`responseSchema`
958
-
959
- ### 👥 Støtte for flere kontoer
960
-
961
- - Legg til flere kontoer per leverandør
962
- - Auto round-robin eller prioritetsbasert ruting
963
- - Tilbakeslag til neste konto når en når kvoten
964
-
965
- ### 🔄 Automatisk tokenoppdatering
966
-
967
- - OAuth-tokens oppdateres automatisk før utløp
968
- - Ingen manuell re-autentisering nødvendig
969
- - Sømløs opplevelse på tvers av alle leverandører
970
-
971
- ### 🎨 Egendefinerte kombinasjoner
972
-
973
- - Lag ubegrensede modellkombinasjoner
974
- - 6 strategier: fyll-først, round-robin, kraft-av-to-valg, tilfeldig, minst brukt, kostnadsoptimalisert
975
- - Del kombinasjoner på tvers av enheter med Cloud Sync
976
-
977
- ### 🏥 Helse Dashboard
978
-
979
- - Systemstatus (oppetid, versjon, minnebruk)
980
- - Strømbrytertilstander per leverandør (lukket/åpen/halvåpen)
981
- - Takstgrensestatus og aktive sperringer
982
- - Signaturbufferstatistikk
983
- - Latency-telemetri (p50/p95/p99) + hurtigbuffer
984
- - Tilbakestill helsestatus med ett klikk
985
-
986
- ### 🔧 Oversetter Lekeplass
987
-
988
- OmniRoute inkluderer en kraftig innebygd oversetterlekeplass med **4 moduser** for feilsøking, testing og overvåking av API-oversettelser:
989
-
990
- | Modus | Beskrivelse |
991
- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
992
- | **💻 Lekeplass** | Direkte formatoversettelse – lim inn hvilken som helst API-forespørselstekst og se umiddelbart hvordan OmniRoute oversetter den mellom leverandørformater (OpenAI ↔ Claude ↔ Gemini ↔ Responses API). Inkluderer eksempelmaler og automatisk gjenkjenning av formater. |
993
- | **💬 Chat Tester** | Send ekte chatteforespørsler gjennom OmniRoute og se hele rundturen: innspillet ditt, den oversatte forespørselen, leverandørens svar og det oversatte svaret tilbake. Uvurderlig for validering av kombinasjonsruting. |
994
- | **🧪 Testbenk** | Batch-testmodus – definer flere testtilfeller med forskjellige innganger og forventede utganger, kjør dem alle samtidig og sammenlign resultater på tvers av leverandører og modeller. |
995
- | **📱 Live Monitor** | Sanntidsovervåking av forespørsler – se innkommende forespørsler mens de strømmer gjennom OmniRoute, se formatoversettelser som skjer live, og identifiser problemer umiddelbart. |
996
-
997
- **Tilgang:** Dashboard → Oversetter (sidefelt)
998
-
999
- ### 💾 Cloud Sync
1000
-
1001
- - Synkroniser leverandører, kombinasjoner og innstillinger på tvers av enheter
1002
- - Automatisk bakgrunnssynkronisering
1003
- - Sikker kryptert lagring
1004
-
1005
- </details>
1006
-
1007
- ## 🧪 Evalueringer (evalueringer)
1008
-
1009
- OmniRoute inkluderer et innebygd evalueringsrammeverk for å teste LLM-responskvaliteten mot et gyldent sett. Få tilgang til den via **Analytics → Evals** i dashbordet.
1010
-
1011
- ### Innebygd gyldent sett
1012
-
1013
- Det forhåndsinstallerte "OmniRoute Golden Set" inneholder 10 testcases som dekker:
1014
-
1015
- - Hilsen, matematikk, geografi, kodegenerering
1016
- - JSON-formatoverholdelse, oversettelse, markdown
1017
- - Sikkerhetsavslag (skadelig innhold), telling, boolsk logikk
1018
-
1019
- ### Evalueringsstrategier
1020
-
1021
- | Strategi | Beskrivelse | Eksempel |
1022
- | ---------- | --------------------------------------------------------------------- | -------------------------------- |
1023
- | `exact` | Utdata må samsvare nøyaktig med | `"4"` |
1024
- | `contains` | Utdata må inneholde understreng (uavhengig av store og små bokstaver) | `"Paris"` |
1025
- | `regex` | Utdata må samsvare med regulært uttrykksmønster | `"1.*2.*3"` |
1026
- | `custom` | Egendefinert JS-funksjon returnerer true/false | `(output) => output.length > 10` |
1027
-
1028
- ---
1029
-
1030
- ## 📖 Oppsettveiledning
1031
-
1032
- <details>
1033
- <summary><b>💳 Abonnementsleverandører</b></summary>
1034
-
1035
- ### Claude Code (Pro/Max)
1036
-
1037
- ```bash
1038
- Dashboard → Providers → Connect Claude Code
1039
- → OAuth login → Auto token refresh
1040
- → 5-hour + weekly quota tracking
1041
-
1042
- Models:
1043
- cc/claude-opus-4-6
1044
- cc/claude-sonnet-4-5-20250929
1045
- cc/claude-haiku-4-5-20251001
1046
- ```
1047
-
1048
- **Profftips:** Bruk Opus for komplekse oppgaver, Sonnet for hastighet. OmniRoute sporer kvote per modell!
1049
-
1050
- ### OpenAI Codex (Plus/Pro)
1051
-
1052
- ```bash
1053
- Dashboard → Providers → Connect Codex
1054
- → OAuth login (port 1455)
1055
- → 5-hour + weekly reset
1056
-
1057
- Models:
1058
- cx/gpt-5.2-codex
1059
- cx/gpt-5.1-codex-max
1060
- ```
1061
-
1062
- ### Gemini CLI (GRATIS 180K/måned!)
1063
-
1064
- ```bash
1065
- Dashboard → Providers → Connect Gemini CLI
1066
- → Google OAuth
1067
- → 180K completions/month + 1K/day
1068
-
1069
- Models:
1070
- gc/gemini-3-flash-preview
1071
- gc/gemini-2.5-pro
1072
- ```
1073
-
1074
- **Mest verdi:** Enormt gratis nivå! Bruk dette før betalte nivåer.
1075
-
1076
- ### GitHub Copilot
1077
-
1078
- ```bash
1079
- Dashboard → Providers → Connect GitHub
1080
- → OAuth via GitHub
1081
- → Monthly reset (1st of month)
1082
-
1083
- Models:
1084
- gh/gpt-5
1085
- gh/claude-4.5-sonnet
1086
- gh/gemini-3-pro
1087
- ```
1088
-
1089
- </details>
1090
-
1091
- <details>
1092
- <summary><b>🔑 API nøkkelleverandører</b></summary>
1093
-
1094
- ### NVIDIA NIM (GRATIS 1000 studiepoeng!)
1095
-
1096
- 1. Registrer deg: [build.nvidia.com](https://build.nvidia.com)
1097
- 2. Få gratis API-nøkkel (1000 slutningspoeng inkludert)
1098
- 3. Dashboard → Legg til leverandør → NVIDIA NIM:
1099
- - API-nøkkel: `nvapi-your-key`
1100
-
1101
- **Modeller:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` og 50+ til
1102
-
1103
- **Profftips:** OpenAI-kompatibel API — fungerer sømløst med OmniRoutes formatoversettelse!
1104
-
1105
- ### DeepSeek
1106
-
1107
- 1. Registrer deg: [platform.deepseek.com](https://platform.deepseek.com)
1108
- 2. Få API-nøkkel
1109
- 3. Dashboard → Legg til leverandør → DeepSeek
1110
-
1111
- **Modeller:** `deepseek/deepseek-chat`, `deepseek/deepseek-coder`
1112
-
1113
- ### Groq (gratis nivå tilgjengelig!)
1114
-
1115
- 1. Registrer deg: [console.groq.com](https://console.groq.com)
1116
- 2. Få API-nøkkel (gratis nivå inkludert)
1117
- 3. Dashboard → Legg til leverandør → Groq
1118
-
1119
- **Modeller:** `groq/llama-3.3-70b`, `groq/mixtral-8x7b`
1120
-
1121
- **Profftips:** Ultrarask slutning — best for sanntidskoding!
1122
-
1123
- ### OpenRouter (100+ modeller)
1124
-
1125
- 1. Registrer deg: [openrouter.ai](https://openrouter.ai)
1126
- 2. Få API-nøkkel
1127
- 3. Dashboard → Legg til leverandør → OpenRouter
1128
-
1129
- **Modeller:** Få tilgang til 100+ modeller fra alle store leverandører gjennom én enkelt API-nøkkel.
1130
-
1131
- </details>
1132
-
1133
- <details>
1134
- <summary><b>💰 Billige leverandører (backup)</b></summary>
1135
-
1136
- ### GLM-4.7 (Daglig tilbakestilling, $0,6/1M)
1137
-
1138
- 1. Registrer deg: [Zhipu AI](https://open.bigmodel.cn/)
1139
- 2. Få API-nøkkel fra Coding Plan
1140
- 3. Dashboard → Legg til API-nøkkel:
1141
- - Leverandør: `glm`
1142
- - API-nøkkel: `your-key`
1143
-
1144
- **Bruk:** `glm/glm-4.7`
1145
-
1146
- **Profftips:** Coding Plan tilbyr 3× kvote til 1/7 kostnad! Tilbakestill daglig 10:00.
1147
-
1148
- ### MiniMax M2.1 (5t tilbakestilling, $0,20/1M)
1149
-
1150
- 1. Registrer deg: [MiniMax](https://www.minimax.io/)
1151
- 2. Få API-nøkkel
1152
- 3. Dashboard → Legg til API-nøkkel
1153
-
1154
- **Bruk:** `minimax/MiniMax-M2.1`
1155
-
1156
- **Profftips:** Billigste alternativet for lang kontekst (1M tokens)!
1157
-
1158
- ### Kimi K2 ($9/mnd leilighet)
1159
-
1160
- 1. Abonner: [Moonshot AI](https://platform.moonshot.ai/)
1161
- 2. Få API-nøkkel
1162
- 3. Dashboard → Legg til API-nøkkel
1163
-
1164
- **Bruk:** `kimi/kimi-latest`
1165
-
1166
- **Profftips:** Fast $9/måned for 10M tokens = $0,90/1M effektiv kostnad!
1167
-
1168
- </details>
1169
-
1170
- <details>
1171
- <summary><b>🆓 GRATIS Leverandører (Emergency Backup)</b></summary>
1172
-
1173
- ### iFlow (8 GRATIS modeller)
1174
-
1175
- ```bash
1176
- Dashboard → Connect iFlow
1177
- → iFlow OAuth login
1178
- → Unlimited usage
1179
-
1180
- Models:
1181
- if/kimi-k2-thinking
1182
- if/qwen3-coder-plus
1183
- if/glm-4.7
1184
- if/minimax-m2
1185
- if/deepseek-r1
1186
- ```
1187
-
1188
- ### Qwen (3 GRATIS modeller)
1189
-
1190
- ```bash
1191
- Dashboard → Connect Qwen
1192
- → Device code authorization
1193
- → Unlimited usage
1194
-
1195
- Models:
1196
- qw/qwen3-coder-plus
1197
- qw/qwen3-coder-flash
1198
- ```
1199
-
1200
- ### Kiro (Claude FREE)
1201
-
1202
- ```bash
1203
- Dashboard → Connect Kiro
1204
- → AWS Builder ID or Google/GitHub
1205
- → Unlimited usage
1206
-
1207
- Models:
1208
- kr/claude-sonnet-4.5
1209
- kr/claude-haiku-4.5
1210
- ```
1211
-
1212
- </details>
1213
-
1214
- <details>
1215
- <summary><b>🎨 Lag kombinasjoner</b></summary>
1216
-
1217
- ### Eksempel 1: Maksimer abonnement → Billig sikkerhetskopi
1218
-
1219
- ```
1220
- Dashboard → Combos → Create New
1221
-
1222
- Name: premium-coding
1223
- Models:
1224
- 1. cc/claude-opus-4-6 (Subscription primary)
1225
- 2. glm/glm-4.7 (Cheap backup, $0.6/1M)
1226
- 3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M)
1227
-
1228
- Use in CLI: premium-coding
1229
- ```
1230
-
1231
- ### Eksempel 2: Kun gratis (nullkostnad)
1232
-
1233
- ```
1234
- Name: free-combo
1235
- Models:
1236
- 1. gc/gemini-3-flash-preview (180K free/month)
1237
- 2. if/kimi-k2-thinking (unlimited)
1238
- 3. qw/qwen3-coder-plus (unlimited)
1239
-
1240
- Cost: $0 forever!
1241
- ```
1242
-
1243
- </details>
1244
-
1245
- <details>
1246
- <summary><b>🔧 CLI-integrasjon</b></summary>
1247
-
1248
- ### Markør IDE
1249
-
1250
- ```
1251
- Settings → Models → Advanced:
1252
- OpenAI API Base URL: http://localhost:20128/v1
1253
- OpenAI API Key: [from OmniRoute dashboard]
1254
- Model: cc/claude-opus-4-6
1255
- ```
1256
-
1257
- ### Claude Code
1258
-
1259
- Bruk **CLI Tools**-siden i dashbordet for ett-klikks konfigurasjon, eller rediger `~/.claude/settings.json` manuelt.
1260
-
1261
- ### Codex CLI
1262
-
1263
- ```bash
1264
- export OPENAI_BASE_URL="http://localhost:20128"
1265
- export OPENAI_API_KEY="your-omniroute-api-key"
1266
-
1267
- codex "your prompt"
1268
- ```
1269
-
1270
- ### OpenClaw
1271
-
1272
- **Alternativ 1 – Dashboard (anbefalt):**
1273
-
1274
- ```
1275
- Dashboard → CLI Tools → OpenClaw → Select Model → Apply
1276
- ```
1277
-
1278
- **Alternativ 2 — Manuell:** Rediger `~/.openclaw/openclaw.json`:
1279
-
1280
- ```json
1281
- {
1282
- "models": {
1283
- "providers": {
1284
- "omniroute": {
1285
- "baseUrl": "http://127.0.0.1:20128/v1",
1286
- "apiKey": "sk_omniroute",
1287
- "api": "openai-completions"
1288
- }
1289
- }
1290
- }
1291
- }
1292
- ```
1293
-
1294
- > **Merk:** OpenClaw fungerer bare med lokale OmniRoute. Bruk `127.0.0.1` i stedet for `localhost` for å unngå problemer med IPv6-oppløsning.
1295
-
1296
- ### Cline / Fortsett / RooCode
1297
-
1298
- ```
1299
- Settings → API Configuration:
1300
- Provider: OpenAI Compatible
1301
- Base URL: http://localhost:20128/v1
1302
- API Key: [from OmniRoute dashboard]
1303
- Model: if/kimi-k2-thinking
1304
- ```
1305
-
1306
- </details>
1307
-
1308
- ---
1309
-
1310
- ## 🐛 Feilsøking
1311
-
1312
- <details>
1313
- <summary><b>Klikk for å utvide feilsøkingsveiledningen</b></summary>
1314
-
1315
- **«Språkmodellen ga ikke meldinger»**
1316
-
1317
- - Leverandørkvoten er oppbrukt → Sjekk dashboardkvotesporing
1318
- - Løsning: Bruk kombinasjonsalternativ eller bytt til et billigere nivå
1319
-
1320
- **Satsbegrensning**
1321
-
1322
- - Abonnementskvote ut → Fallback til GLM/MiniMax
1323
- - Legg til kombinasjon: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
1324
-
1325
- **OAuth-token er utløpt**
1326
-
1327
- - Automatisk oppdatering av OmniRoute
1328
- - Hvis problemene vedvarer: Dashboard → Leverandør → Koble til på nytt
1329
-
1330
- **Høye kostnader**
1331
-
1332
- - Sjekk bruksstatistikk i Dashboard → Kostnader
1333
- - Bytt primærmodell til GLM/MiniMax
1334
- - Bruk gratis nivå (Gemini CLI, iFlow) for ikke-kritiske oppgaver
1335
-
1336
- **Dashboard åpnes på feil port**
1337
-
1338
- - Sett `PORT=20128` og `NEXT_PUBLIC_BASE_URL=http://localhost:20128`
1339
-
1340
- **Skysynkroniseringsfeil**
1341
-
1342
- - Bekreft at `BASE_URL` peker på løpeforekomsten din
1343
- - Bekreft `CLOUD_URL` poeng til det forventede skyendepunktet
1344
- - Hold `NEXT_PUBLIC_*` verdier på linje med verdiene på tjenersiden
1345
-
1346
- **Første pålogging fungerer ikke**
1347
-
1348
- - Sjekk `INITIAL_PASSWORD` i `.env`
1349
- - Hvis det ikke er angitt, er reservepassordet `123456`
1350
-
1351
- **Ingen forespørselslogger**
1352
-
1353
- - Sett `ENABLE_REQUEST_LOGS=true` i `.env`
1354
-
1355
- **Test viser «Ugyldig» for OpenAI-kompatible leverandører**
1356
-
1357
- - Mange leverandører avslører ikke et `/models`-endepunkt
1358
- - OmniRoute v1.0.6+ inkluderer reservevalidering via chatfullføringer
1359
- - Sørg for at basis-URL inkluderer suffikset `/v1`
1360
-
1361
- ### 🔐 OAuth
1362
-
1363
- <a name="oauth-em-servidor-remoto"></a>
1364
-
1365
- > **⚠️ VIKTIG for bruk av OmniRoute med VPS/Docker/server-fjernkontroll**
1366
-
1367
- ### OAuth
1368
-
1369
- 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.
1370
-
1371
- Som credenciais OAuth embutidas no OmniRoute estão cadastradas **apenas para `localhost`**. Quando você acessa o OmniRoute em um servidor remoto (eks: `https://omniroute.meuservidor.com`), o Google avviser autenticação com:
1372
-
1373
- ```
1374
- Error 400: redirect_uri_mismatch
1375
- ```
1376
-
1377
- ### Løsning: Konfigurer OAuth-tilbehør
1378
-
1379
- Você precisa criar um **OAuth 2.0 Client ID** no Google Cloud Console com en URI for seu service.
1380
-
1381
- #### Passo a passo
1382
-
1383
- **1. Tilgang til Google Cloud Console**
1384
-
1385
- Abra: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials)
1386
-
1387
- **2. Crie um novo OAuth 2.0 Client ID**
1388
-
1389
- - Klikk dem **"+ Opprett legitimasjon"** → **"OAuth-klient-ID"**
1390
- - Tipo de aplicativo: **"Nettapplikasjon"**
1391
- - Navn: escolha qualquer nome (eks.: `OmniRoute Remote`)
1392
-
1393
- **3. Adicione som autorisert omdirigerings-URI**
1394
-
1395
- Ingen campo **"Authorized redirect URIs"**, adicione:
1396
-
1397
- ```
1398
- https://seu-servidor.com/callback
1399
- ```
1400
-
1401
- > 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`).
1402
-
1403
- **4. Salve e copy as credenciais**
1404
-
1405
- Após criar, o Google mostrará o **Client ID** e o **Client Secret**.
1406
-
1407
- **5. Konfigurer som variáveis de ambiente**
1408
-
1409
- No seu `.env` (ou nas variáveis de ambiente do Docker):
1410
-
1411
- ```bash
1412
- # Para Antigravity:
1413
- ANTIGRAVITY_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
1414
- ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
1415
-
1416
- # Para Gemini CLI:
1417
- GEMINI_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
1418
- GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
1419
- GEMINI_CLI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
1420
- ```
1421
-
1422
- **6. Reinicie o OmniRoute**
1423
-
1424
- ```bash
1425
- # Se usando npm:
1426
- npm run dev
1427
-
1428
- # Se usando Docker:
1429
- docker restart omniroute
1430
- ```
1431
-
1432
- **7. Tente conectar novamente**
1433
-
1434
- Dashboard → Leverandører → Antigravity (ou Gemini CLI) → OAuth
1435
-
1436
- Agora o Google redirecionará corretamente para `https://seu-servidor.com/callback` e autenticação funcionará.
1437
-
1438
- ---
1439
-
1440
- ### Midlertidig midlertidig løsning (som konfigureres på forhånd)
1441
-
1442
- Se não quiser criar credenciais próprias agora, ainda é possível usar o fluxo **manual de URL**:
1443
-
1444
- 1. O OmniRoute abrirá en URL fra autorização til Google
1445
- 2. Após você autorizar, o Google tentará redirecionar for `localhost` (que falha no servidor remoto)
1446
- 3. **Kopier en URL fullført** da barra de endereço do seu nettleseren (mesmo que a página não carregue)
1447
- 4. Cole essa URL no campo que aparece no modal de conexão do OmniRoute
1448
- 5. Klikk på **"Koble til"**
1449
-
1450
- > Este workaround funciona porque or código de autorização na URL é válido independente do redirect ter carregado or não.
1451
-
1452
- </details>
1453
-
1454
- ---
1455
-
1456
- ## 🛠️
1457
-
1458
- - **Kjøretid**: Node.js 18–22 LTS (⚠️ Node.js 24+ støttes **ikke** — `better-sqlite3` native binærfiler er inkompatible)
1459
- - **Språk**: TypeScript 5.9 — **100 % TypeScript** på tvers av `src/` og `open-sse/` (v1.0.6)
1460
- - **Rammeverk**: Next.js 16 + React 19 + Tailwind CSS 4
1461
- - **Database**: LowDB (JSON) + SQLite (domenetilstand + proxy-logger)
1462
- - **Streaming**: Server-sendte hendelser (SSE)
1463
- - **Auth**: OAuth 2.0 (PKCE) + JWT + API-nøkler
1464
- - **Test**: Node.js-testløper (368+ enhetstester)
1465
- - **CI/CD**: GitHub-handlinger (automatisk npm-publisering + Docker Hub ved utgivelse)
1466
- - **Nettsted**: [omniroute.online](https://omniroute.online)
1467
- - **Pakke**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
1468
- - **Dokker**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
1469
- - **Resiliens**: Strømbryter, eksponentiell backoff, anti-trdnende flokk, TLS-spoofing
1470
-
1471
- ---
1472
-
1473
- ## 📖 Dokumentasjon
1474
-
1475
- | Dokument | Beskrivelse |
1476
- | -------------------------------------------- | ---------------------------------------------------------- |
1477
- | [User Guide](docs/USER_GUIDE.md) | Leverandører, kombinasjoner, CLI-integrasjon, distribusjon |
1478
- | [API Reference](docs/API_REFERENCE.md) | Alle endepunkter med eksempler |
1479
- | [Troubleshooting](docs/TROUBLESHOOTING.md) | Vanlige problemer og løsninger |
1480
- | [Architecture](docs/ARCHITECTURE.md) | Systemarkitektur og innvendig |
1481
- | [Contributing](CONTRIBUTING.md) | Utviklingsoppsett og retningslinjer |
1482
- | [OpenAPI Spec](docs/openapi.yaml) | OpenAPI 3.0-spesifikasjon |
1483
- | [Security Policy](SECURITY.md) | Sårbarhetsrapportering og sikkerhetspraksis |
1484
- | [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | Komplett guide: VM + nginx + Cloudflare-oppsett |
1485
- | [Features Gallery](docs/FEATURES.md) | Visuell dashbordomvisning med skjermbilder |
1486
-
1487
- ### 📸 Forhåndsvisning av dashbord
1488
-
1489
- <details>
1490
- <summary><b>Klikk for å se skjermbilder av dashbordet</b></summary>
1491
-
1492
- | Side | Skjermbilde |
1493
- | ----------------- | ------------------------------------------------- |
1494
- | **Tilbydere** | ![Providers](docs/screenshots/01-providers.png) |
1495
- | **Komboer** | ![Combos](docs/screenshots/02-combos.png) |
1496
- | **Analyse** | ![Analytics](docs/screenshots/03-analytics.png) |
1497
- | **Helse** | ![Health](docs/screenshots/04-health.png) |
1498
- | **Oversetter** | ![Translator](docs/screenshots/05-translator.png) |
1499
- | **Innstillinger** | ![Settings](docs/screenshots/06-settings.png) |
1500
- | **CLI-verktøy** | ![CLI Tools](docs/screenshots/07-cli-tools.png) |
1501
- | **Brukslogger** | ![Usage](docs/screenshots/08-usage.png) |
1502
- | **Endepunkt** | ![Endpoint](docs/screenshots/09-endpoint.png) |
1503
-
1504
- </details>
1505
-
1506
- ---
1507
-
1508
- ## 🗺️
1509
-
1510
- OmniRoute har **210+ funksjoner planlagt** på tvers av flere utviklingsfaser. Her er nøkkelområdene:
1511
-
1512
- | Kategori | Planlagte funksjoner | Høydepunkter |
1513
- | -------------------------------- | -------------------- | ---------------------------------------------------------------------------------------------- |
1514
- | 🧠 **Routing og intelligens** | 25+ | Ruting med lavest ventetid, tag-basert ruting, forhåndskontroll av kvoter, valg av P2C-konto |
1515
- | 🔒 **Sikkerhet og overholdelse** | 20+ | SSRF-herding, tilsløring av legitimasjon, hastighetsgrense per endepunkt, styringsnøkkelomfang |
1516
- | 📊 **Observerbarhet** | 15+ | OpenTelemetry-integrasjon, kvoteovervåking i sanntid, kostnadssporing per modell |
1517
- | 🔄 **Tilbyderintegrasjoner** | 20+ | Dynamisk modellregister, leverandørnedkjøling, multi-konto Codex, Copilot-kvoteparsing |
1518
- | ⚡ **Ytelse** | 15+ | Dobbelt hurtigbufferlag, promptbuffer, svarbuffer, streaming keepalive, batch API |
1519
- | 🌐 **Økosystem** | 10+ | WebSocket API, config hot-reload, distribuert config store, kommersiell modus |
1520
-
1521
- ### 🔜 Kommer snart
1522
-
1523
- - 🔗 **OpenCode Integration** — Innebygd leverandørstøtte for OpenCode AI-kodings-IDE
1524
- - 🔗 **TRAE-integrasjon** — Full støtte for utviklingsrammeverket for TRAE AI
1525
- - 📦 **Batch API** — Asynkron batchbehandling for bulkforespørsler
1526
- - 🎯 **Tag-basert ruting** — Ruteforespørsler basert på tilpassede tagger og metadata
1527
- - 💰 **Laveste kostnadsstrategi** — Velg automatisk den billigste tilgjengelige leverandøren
1528
-
1529
- > 📝 Full funksjonsspesifikasjoner tilgjengelig i [link](docs/new-features/) (217 detaljerte spesifikasjoner)
1530
-
1531
- ---
1532
-
1533
- ## 👥 Bidragsytere
1534
-
1535
- [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors)
1536
-
1537
- ### Hvordan bidra
1538
-
1539
- 1. Fordel depotet
1540
- 2. Lag din funksjonsgren (`git checkout -b feature/amazing-feature`)
1541
- 3. Bekreft endringene dine (`git commit -m 'Add amazing feature'`)
1542
- 4. Skyv til grenen (`git push origin feature/amazing-feature`)
1543
- 5. Åpne en pull-forespørsel
1544
-
1545
- Se [CONTRIBUTING.md](CONTRIBUTING.md) for detaljerte retningslinjer.
1546
-
1547
- ### Slipper en ny versjon
1548
-
1549
- ```bash
1550
- # Create a release — npm publish happens automatically
1551
- gh release create v1.0.6 --title "v1.0.6" --generate-notes
1552
- ```
1553
-
1554
- ---
1555
-
1556
- ## 📊 Stjernehistorie
1557
-
1558
- <a href="https://star-history.com/#diegosouzapw/OmniRoute&Date">
1559
- <picture>
1560
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date&theme=dark" />
1561
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1562
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
1563
- </picture>
1564
- </a>
1565
-
1566
- ---
1567
-
1568
- ## 🙏 Anerkjennelser
1569
-
1570
- Spesiell takk til **[9router](https://github.com/decolua/9router)** av **[decolua](https://github.com/decolua)** — det originale prosjektet som inspirerte denne gaffelen. OmniRoute bygger på det utrolige grunnlaget med tilleggsfunksjoner, multimodale APIer og en full TypeScript-omskriving.
1571
-
1572
- Spesiell takk til **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** — den originale Go-implementeringen som inspirerte denne JavaScript-porten.
1573
-
1574
- ---
1575
-
1576
- ## 📄 Lisens
1577
-
1578
- MIT-lisens - se [LICENSE](LICENSE) for detaljer.
1579
-
1580
- ---
1581
-
1582
- <div align="center">
1583
- <sub>Bygget med ❤️ for utviklere som koder 24/7</sub>
1584
- <br/>
1585
- <sub><a href="https://omniroute.online">omniroute.online</a></sub>
1586
- </div>