omniroute 1.4.10 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ar.md +1153 -0
- package/README.bg.md +1238 -0
- package/README.da.md +1238 -0
- package/README.de.md +1 -1
- package/README.es.md +1 -1
- package/README.fi.md +1238 -0
- package/README.fr.md +1 -1
- package/README.he.md +1238 -0
- package/README.hu.md +1238 -0
- package/README.id.md +1238 -0
- package/README.in.md +952 -0
- package/README.it.md +1 -1
- package/README.ja.md +1152 -0
- package/README.ko.md +1238 -0
- package/README.md +25 -20
- package/README.ms.md +1238 -0
- package/README.nl.md +1238 -0
- package/README.no.md +1238 -0
- package/README.phi.md +1238 -0
- package/README.pl.md +1238 -0
- package/README.pt-BR.md +16 -12
- package/README.pt.md +1238 -0
- package/README.ro.md +1238 -0
- package/README.ru.md +1 -1
- package/README.sk.md +1239 -0
- package/README.sv.md +1238 -0
- package/README.th.md +1229 -0
- package/README.uk-UA.md +1240 -0
- package/README.vi.md +1238 -0
- package/README.zh-CN.md +1 -1
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/app-path-routes-manifest.json +39 -39
- package/app/.next/build-manifest.json +2 -2
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/api-manager/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/audit-log/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +6 -6
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/costs/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/costs/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/health/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/health/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/limits/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/limits/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/settings/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js +2 -2
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js +4 -4
- package/app/.next/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +2 -2
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page.js +1 -1
- package/app/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/auth/login/route.js +1 -1
- package/app/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cache/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cache/stats/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/antigravity-mitm/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/backups/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/backups/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/claude-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/cline-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/cline-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-profiles/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/codex-profiles/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/codex-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/codex-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/droid-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/guide-settings/[toolId]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/kilo-settings/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/kilo-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/openclaw-settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route.js +2 -2
- package/app/.next/server/app/api/cli-tools/runtime/[toolId]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cli-tools/status/route.js +1 -1
- package/app/.next/server/app/api/cli-tools/status/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/auth/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/credentials/update/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/model/resolve/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/cloud/models/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/metrics/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/route.js +1 -1
- package/app/.next/server/app/api/combos/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/combos/test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/compliance/audit-log/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/db-backups/export/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/db-backups/exportAll/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/db-backups/import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/db-backups/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/evals/[suiteId]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/evals/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/fallback/chains/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/keys/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/keys/route.js +1 -1
- package/app/.next/server/app/api/keys/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/logs/console/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/alias/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/availability/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/catalog/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/models/route.js +1 -1
- package/app/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/monitoring/health/route.js +1 -1
- package/app/.next/server/app/api/monitoring/health/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/[provider]/[action]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/auto-import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/cursor/import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/auto-import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/import/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-authorize/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/oauth/kiro/social-exchange/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/policies/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/pricing/defaults/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/pricing/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/pricing/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-metrics/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/provider-nodes/validate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/client/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/route.js +1 -1
- package/app/.next/server/app/api/providers/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/test-batch/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/providers/validate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/rate-limit/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/rate-limits/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/resilience/reset/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/resilience/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/combo-defaults/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/ip-filter/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/proxy/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/proxy/test/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/require-login/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/route.js +1 -1
- package/app/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/system-prompt/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/settings/thinking-budget/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/storage/health/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/sync/cloud/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/sync/initialize/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/tags/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/telemetry/summary/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/token-health/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/detect/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/history/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/load/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/save/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/send/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/translator/translate/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/analytics/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/budget/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/call-logs/[id]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/call-logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/history/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/proxy-logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/usage/request-logs/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/api/chat/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/audio/speech/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/audio/transcriptions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/chat/completions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/embeddings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/images/generations/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/messages/count_tokens/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/messages/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/moderations/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/chat/completions/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/embeddings/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/providers/[provider]/images/generations/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/rerank/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/responses/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1beta/models/[...path]/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/v1beta/models/route_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback/page.js +2 -2
- package/app/.next/server/app/callback/page.js.nft.json +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/docs/page.js +2 -2
- package/app/.next/server/app/docs/page.js.nft.json +1 -1
- package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forbidden/page.js +2 -2
- package/app/.next/server/app/forbidden/page.js.nft.json +1 -1
- package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forgot-password/page.js +2 -2
- package/app/.next/server/app/forgot-password/page.js.nft.json +1 -1
- package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing/page.js +2 -2
- package/app/.next/server/app/landing/page.js.nft.json +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login/page.js +2 -2
- package/app/.next/server/app/login/page.js.nft.json +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/page.js +1 -1
- package/app/.next/server/app/page.js.nft.json +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/privacy/page.js +2 -2
- package/app/.next/server/app/privacy/page.js.nft.json +1 -1
- package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/terms/page.js +2 -2
- package/app/.next/server/app/terms/page.js.nft.json +1 -1
- package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app-paths-manifest.json +39 -39
- package/app/.next/server/chunks/1248.js +1 -0
- package/app/.next/server/chunks/{3994.js → 1465.js} +2 -2
- package/app/.next/server/chunks/1526.js +1 -0
- package/app/.next/server/chunks/1584.js +1 -0
- package/app/.next/server/chunks/1623.js +1 -0
- package/app/.next/server/chunks/1880.js +1 -0
- package/app/.next/server/chunks/1960.js +1 -1
- package/app/.next/server/chunks/1990.js +1 -1
- package/app/.next/server/chunks/2214.js +1 -0
- package/app/.next/server/chunks/2372.js +1 -0
- package/app/.next/server/chunks/2594.js +1 -0
- package/app/.next/server/chunks/3371.js +1 -0
- package/app/.next/server/chunks/3498.js +5 -3
- package/app/.next/server/chunks/3911.js +1 -0
- package/app/.next/server/chunks/438.js +1 -0
- package/app/.next/server/chunks/496.js +1 -0
- package/app/.next/server/chunks/5047.js +1 -0
- package/app/.next/server/chunks/5094.js +1 -0
- package/app/.next/server/chunks/5097.js +1 -0
- package/app/.next/server/chunks/5393.js +2 -0
- package/app/.next/server/chunks/5521.js +1 -0
- package/app/.next/server/chunks/5945.js +1 -0
- package/app/.next/server/chunks/6118.js +1 -0
- package/app/.next/server/chunks/6930.js +1 -0
- package/app/.next/server/chunks/7011.js +1 -0
- package/app/.next/server/chunks/708.js +1 -0
- package/app/.next/server/chunks/7650.js +1 -0
- package/app/.next/server/chunks/8220.js +1 -0
- package/app/.next/server/chunks/8464.js +1 -0
- package/app/.next/server/chunks/8706.js +1 -0
- package/app/.next/server/chunks/8976.js +1 -0
- package/app/.next/server/chunks/9119.js +1 -0
- package/app/.next/server/chunks/944.js +1 -0
- package/app/.next/server/chunks/9824.js +2 -2
- package/app/.next/server/chunks/9837.js +1 -0
- package/app/.next/server/pages/500.html +2 -2
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/chunks/{6458-085536744d592424.js → 1149-fefe7f95f0e9842f.js} +1 -1
- package/app/.next/static/chunks/{5846-bac355f56b136439.js → 5846-c6bffec2bf9757fa.js} +1 -1
- package/app/.next/static/chunks/{782-5e138760b7f7bf48.js → 8055-5844ff783b2e8a99.js} +3 -3
- package/app/.next/static/chunks/{993-961f6e199b93539a.js → 993-cf9fe6c017bc7e67.js} +3 -3
- package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/page-52f76c7c91444ec2.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-1dd4d0c348a7b0a6.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/audit-log/page-e5bf8955e7b9a4f5.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-ce332ffdb491a4d8.js +15 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/combos/{page-ede2315b6918315e.js → page-6abed29d64c46388.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/costs/page-3ed2a7685adf9b91.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-1420c3ca376f1585.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/health/page-9a6519bf1468f16e.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-f4a2d6d07df5ddc4.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/logs/{page-6ee69634597daee0.js → page-833d24f322a20f5a.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/onboarding/page-ec914ae79f085e6f.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-388840686801f3f5.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-9c8ffb212f855704.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-31cdb6e15134d8c2.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-1f022385b812b987.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-1393d4935fc087cf.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/pricing/{page-77158451270c1852.js → page-f10a8d4bb8236913.js} +1 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-83b07523f81d6282.js +4 -0
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-9cc99ab874fc36e7.js +1 -0
- package/app/.next/static/chunks/app/(dashboard)/{layout-b23c2c5427e04dcf.js → layout-00d5d56af65098a9.js} +1 -1
- package/app/.next/static/chunks/app/callback/page-585a53f7dc6a30f1.js +1 -0
- package/app/.next/static/chunks/app/docs/page-2fe9dcbeb3f738c0.js +1 -0
- package/app/.next/static/chunks/app/forbidden/{page-4a39fedc08aaaf55.js → page-df886dfa2d5bd9fa.js} +1 -1
- package/app/.next/static/chunks/app/forgot-password/page-2a495f0b0c653ab4.js +1 -0
- package/app/.next/static/chunks/app/landing/page-9d540ab1716f8e3e.js +1 -0
- package/app/.next/static/chunks/app/login/page-121c612ee459e7c2.js +1 -0
- package/app/.next/static/chunks/app/privacy/page-2fe9dcbeb3f738c0.js +1 -0
- package/app/.next/static/chunks/app/terms/page-2fe9dcbeb3f738c0.js +1 -0
- package/app/.next/static/css/6f101b114a4a7286.css +1 -0
- package/app/package.json +1 -1
- package/package.json +1 -1
- package/app/.next/server/chunks/1259.js +0 -2
- package/app/.next/server/chunks/4509.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/analytics/page-3fcbbdb2221f0b0c.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/api-manager/page-d806e4f28c15636a.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/audit-log/page-27bc511cf3930e1e.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-ad885fdf9806e9a6.js +0 -15
- package/app/.next/static/chunks/app/(dashboard)/dashboard/costs/page-f256689b8410bd74.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/endpoint/page-6e4f3ca7ac9778be.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/health/page-8725f1a181e558a3.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/limits/page-a5a48afa8c125ada.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/onboarding/page-931fa0c45dca76c9.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/page-04bc41f9e9de17ef.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-6b6d62c5872aee46.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/new/page-2dc2a865e90681dd.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/providers/page-ac85ce5066cd9044.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/settings/page-88cac9e6f2fbe335.js +0 -1
- package/app/.next/static/chunks/app/(dashboard)/dashboard/translator/page-75c8b38a55e13042.js +0 -4
- package/app/.next/static/chunks/app/(dashboard)/dashboard/usage/page-f0809c7842e4f5b4.js +0 -1
- package/app/.next/static/chunks/app/callback/page-e439cd5a287000d8.js +0 -1
- package/app/.next/static/chunks/app/docs/page-8f74097544a61b9d.js +0 -1
- package/app/.next/static/chunks/app/forgot-password/page-057ea91c6f140e0b.js +0 -1
- package/app/.next/static/chunks/app/landing/page-09741814aaca7548.js +0 -1
- package/app/.next/static/chunks/app/login/page-c1d7bfab91a7877c.js +0 -1
- package/app/.next/static/chunks/app/privacy/page-8f74097544a61b9d.js +0 -1
- package/app/.next/static/chunks/app/terms/page-8f74097544a61b9d.js +0 -1
- package/app/.next/static/css/e90887a86e63903f.css +0 -1
- /package/app/.next/static/{8UAle4UTGR7gIVofXmh_1 → XOdkUGO-Pm15MwsN4s6B3}/_buildManifest.js +0 -0
- /package/app/.next/static/{8UAle4UTGR7gIVofXmh_1 → XOdkUGO-Pm15MwsN4s6B3}/_ssgManifest.js +0 -0
package/README.da.md
ADDED
|
@@ -0,0 +1,1238 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute Dashboard" width="800"/>
|
|
3
|
+
|
|
4
|
+
# 🚀 OmniRoute — Den gratis AI-gateway
|
|
5
|
+
|
|
6
|
+
🌐 **[English](#-omniroute--the-free-ai-gateway)** | **[Português (BR)](#-omniroute--gateway-de-ia-gratuito)**
|
|
7
|
+
|
|
8
|
+
### Stop aldrig med at kode. Smart routing til **GRATIS og billige AI-modeller** med automatisk fallback.
|
|
9
|
+
|
|
10
|
+
_Din universelle API-proxy — ét slutpunkt, 36+ udbydere, ingen nedetid._
|
|
11
|
+
|
|
12
|
+
**Chatafslutninger • Indlejringer • Billedgenerering • Lyd • Genrangering • 100 % TypeScript**
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
### 🤖 Gratis AI-udbyder til dine foretrukne kodningsagenter
|
|
17
|
+
|
|
18
|
+
_Tilslut ethvert AI-drevet IDE- eller CLI-værktøj gennem OmniRoute - gratis API-gateway til ubegrænset kodning._
|
|
19
|
+
|
|
20
|
+
<table>
|
|
21
|
+
<tr>
|
|
22
|
+
<td align="center" width="110">
|
|
23
|
+
<a href="https://github.com/cline/cline">
|
|
24
|
+
<img src="./public/providers/openclaw.png" alt="OpenClaw" width="48"/><br/>
|
|
25
|
+
<b>OpenClaw</b>
|
|
26
|
+
</a><br/>
|
|
27
|
+
<sub>⭐ 205K</sub>
|
|
28
|
+
</td>
|
|
29
|
+
<td align="center" width="110">
|
|
30
|
+
<a href="https://github.com/HKUDS/nanobot">
|
|
31
|
+
<img src="./public/providers/nanobot.png" alt="NanoBot" width="48"/><br/>
|
|
32
|
+
<b>NanoBot</b>
|
|
33
|
+
</a><br/>
|
|
34
|
+
<sub>⭐ 20.9K</sub>
|
|
35
|
+
</td>
|
|
36
|
+
<td align="center" width="110">
|
|
37
|
+
<a href="https://github.com/sipeed/picoclaw">
|
|
38
|
+
<img src="./public/providers/picoclaw.jpg" alt="PicoClaw" width="48"/><br/>
|
|
39
|
+
<b>PicoClaw</b>
|
|
40
|
+
</a><br/>
|
|
41
|
+
<sub>⭐ 14.6K</sub>
|
|
42
|
+
</td>
|
|
43
|
+
<td align="center" width="110">
|
|
44
|
+
<a href="https://github.com/zeroclaw-labs/zeroclaw">
|
|
45
|
+
<img src="./public/providers/zeroclaw.png" alt="ZeroClaw" width="48"/><br/>
|
|
46
|
+
<b>ZeroClaw</b>
|
|
47
|
+
</a><br/>
|
|
48
|
+
<sub>⭐ 9.9K</sub>
|
|
49
|
+
</td>
|
|
50
|
+
<td align="center" width="110">
|
|
51
|
+
<a href="https://github.com/nearai/ironclaw">
|
|
52
|
+
<img src="./public/providers/ironclaw.png" alt="IronClaw" width="48"/><br/>
|
|
53
|
+
<b>IronClaw</b>
|
|
54
|
+
</a><br/>
|
|
55
|
+
<sub>⭐ 2.1K</sub>
|
|
56
|
+
</td>
|
|
57
|
+
</tr>
|
|
58
|
+
<tr>
|
|
59
|
+
<td align="center" width="110">
|
|
60
|
+
<a href="https://github.com/anomalyco/opencode">
|
|
61
|
+
<img src="./public/providers/opencode.svg" alt="OpenCode" width="48"/><br/>
|
|
62
|
+
<b>OpenCode</b>
|
|
63
|
+
</a><br/>
|
|
64
|
+
<sub>⭐ 106K</sub>
|
|
65
|
+
</td>
|
|
66
|
+
<td align="center" width="110">
|
|
67
|
+
<a href="https://github.com/openai/codex">
|
|
68
|
+
<img src="./public/providers/codex.png" alt="Codex CLI" width="48"/><br/>
|
|
69
|
+
<b>Codex CLI</b>
|
|
70
|
+
</a><br/>
|
|
71
|
+
<sub>⭐ 60.8K</sub>
|
|
72
|
+
</td>
|
|
73
|
+
<td align="center" width="110">
|
|
74
|
+
<a href="https://github.com/anthropics/claude-code">
|
|
75
|
+
<img src="./public/providers/claude.png" alt="Claude Code" width="48"/><br/>
|
|
76
|
+
<b>Claude Code</b>
|
|
77
|
+
</a><br/>
|
|
78
|
+
<sub>⭐ 67.3K</sub>
|
|
79
|
+
</td>
|
|
80
|
+
<td align="center" width="110">
|
|
81
|
+
<a href="https://github.com/google-gemini/gemini-cli">
|
|
82
|
+
<img src="./public/providers/gemini-cli.png" alt="Gemini CLI" width="48"/><br/>
|
|
83
|
+
<b>Gemini CLI</b>
|
|
84
|
+
</a><br/>
|
|
85
|
+
<sub>⭐ 94.7K</sub>
|
|
86
|
+
</td>
|
|
87
|
+
<td align="center" width="110">
|
|
88
|
+
<a href="https://github.com/Kilo-Org/kilocode">
|
|
89
|
+
<img src="./public/providers/kilocode.png" alt="Kilo Code" width="48"/><br/>
|
|
90
|
+
<b>Kilo Code</b>
|
|
91
|
+
</a><br/>
|
|
92
|
+
<sub>⭐ 15.5K</sub>
|
|
93
|
+
</td>
|
|
94
|
+
</tr>
|
|
95
|
+
</table>
|
|
96
|
+
|
|
97
|
+
<sub>📡 Alle agenter forbinder via <code>http://localhost:20128/v1</code> eller <code>http://cloud.omniroute.online/v1 , —limited one config and kvote</sub>
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
[](https://www.npmjs.com/package/omniroute)
|
|
102
|
+
[](https://hub.docker.com/r/diegosouzapw/omniroute)
|
|
103
|
+
[](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE)
|
|
104
|
+
[](https://omniroute.online)
|
|
105
|
+
[](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
|
|
106
|
+
|
|
107
|
+
[🌐 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)
|
|
108
|
+
|
|
109
|
+
🌐 **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)
|
|
110
|
+
|
|
111
|
+
</div>
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 🤔 Hvorfor OmniRoute?
|
|
116
|
+
|
|
117
|
+
**Stop med at spilde penge og nå grænser:**
|
|
118
|
+
|
|
119
|
+
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Abonnementskontingent udløber ubrugt hver måned
|
|
120
|
+
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Hastighedsgrænser stopper dig midtkodning
|
|
121
|
+
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Dyre API'er ($20-50/måned pr. udbyder)
|
|
122
|
+
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Manuel skift mellem udbydere
|
|
123
|
+
|
|
124
|
+
**OmniRoute løser dette:**
|
|
125
|
+
|
|
126
|
+
- ✅ **Maksimer abonnementer** - Spor kvote, brug hver bit før nulstilling
|
|
127
|
+
- ✅ **Automatisk fallback** - Abonnement → API-nøgle → Billig → Gratis, ingen nedetid
|
|
128
|
+
- ✅ **Multi-konto** - Round-robin mellem konti pr. udbyder
|
|
129
|
+
- ✅ **Universal** - Virker med Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, ethvert CLI-værktøj
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 🔄 Sådan virker det
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
┌─────────────┐
|
|
137
|
+
│ Your CLI │ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...)
|
|
138
|
+
│ Tool │
|
|
139
|
+
└──────┬──────┘
|
|
140
|
+
│ http://localhost:20128/v1
|
|
141
|
+
↓
|
|
142
|
+
┌─────────────────────────────────────────┐
|
|
143
|
+
│ OmniRoute (Smart Router) │
|
|
144
|
+
│ • Format translation (OpenAI ↔ Claude) │
|
|
145
|
+
│ • Quota tracking + Embeddings + Images │
|
|
146
|
+
│ • Auto token refresh │
|
|
147
|
+
└──────┬──────────────────────────────────┘
|
|
148
|
+
│
|
|
149
|
+
├─→ [Tier 1: SUBSCRIPTION] Claude Code, Codex, Gemini CLI
|
|
150
|
+
│ ↓ quota exhausted
|
|
151
|
+
├─→ [Tier 2: API KEY] DeepSeek, Groq, xAI, Mistral, NVIDIA NIM, etc.
|
|
152
|
+
│ ↓ budget limit
|
|
153
|
+
├─→ [Tier 3: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M)
|
|
154
|
+
│ ↓ budget limit
|
|
155
|
+
└─→ [Tier 4: FREE] iFlow, Qwen, Kiro (unlimited)
|
|
156
|
+
|
|
157
|
+
Result: Never stop coding, minimal cost
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## ⚡ Hurtig start
|
|
163
|
+
|
|
164
|
+
**1. Installer globalt:**
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
npm install -g omniroute
|
|
168
|
+
omniroute
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
🎉 Dashboard åbner kl. `http://localhost:20128`
|
|
172
|
+
|
|
173
|
+
| Kommando | Beskrivelse |
|
|
174
|
+
| ----------------------- | --------------------------------- |
|
|
175
|
+
| `omniroute` | Start server (standardport 20128) |
|
|
176
|
+
| `omniroute --port 3000` | Brug tilpasset port |
|
|
177
|
+
| `omniroute --no-open` | Åbn ikke browseren automatisk |
|
|
178
|
+
| `omniroute --help` | Vis hjælp |
|
|
179
|
+
|
|
180
|
+
**2. Tilslut en GRATIS udbyder:**
|
|
181
|
+
|
|
182
|
+
Dashboard → Udbydere → Connect **Claude Code** eller **Antigravity** → OAuth-login → Færdig!
|
|
183
|
+
|
|
184
|
+
**3. Brug i dit CLI-værktøj:**
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings:
|
|
188
|
+
Endpoint: http://localhost:20128/v1
|
|
189
|
+
API Key: [copy from dashboard]
|
|
190
|
+
Model: if/kimi-k2-thinking
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**Det var det!** Begynd at kode med GRATIS AI-modeller.
|
|
194
|
+
|
|
195
|
+
**Alternativt — kør fra kilden:**
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
cp .env.example .env
|
|
199
|
+
npm install
|
|
200
|
+
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 🐳 Docker
|
|
206
|
+
|
|
207
|
+
OmniRoute er tilgængelig som et offentligt Docker-billede på [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute).
|
|
208
|
+
|
|
209
|
+
**Hurtigt løb:**
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
docker run -d \
|
|
213
|
+
--name omniroute \
|
|
214
|
+
--restart unless-stopped \
|
|
215
|
+
-p 20128:20128 \
|
|
216
|
+
-v omniroute-data:/app/data \
|
|
217
|
+
diegosouzapw/omniroute:latest
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Med miljøfil:**
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
# Copy and edit .env first
|
|
224
|
+
cp .env.example .env
|
|
225
|
+
|
|
226
|
+
docker run -d \
|
|
227
|
+
--name omniroute \
|
|
228
|
+
--restart unless-stopped \
|
|
229
|
+
--env-file .env \
|
|
230
|
+
-p 20128:20128 \
|
|
231
|
+
-v omniroute-data:/app/data \
|
|
232
|
+
diegosouzapw/omniroute:latest
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**Brug af Docker Compose:**
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
# Base profile (no CLI tools)
|
|
239
|
+
docker compose --profile base up -d
|
|
240
|
+
|
|
241
|
+
# CLI profile (Claude Code, Codex, OpenClaw built-in)
|
|
242
|
+
docker compose --profile cli up -d
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
| Billede | Tag | Størrelse | Beskrivelse |
|
|
246
|
+
| ------------------------ | -------- | --------- | ------------------------- |
|
|
247
|
+
| `diegosouzapw/omniroute` | `latest` | ~250MB | Seneste stabile udgivelse |
|
|
248
|
+
| `diegosouzapw/omniroute` | `1.0.3` | ~250MB | Nuværende version |
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## 💰 Prissætning på et øjeblik
|
|
253
|
+
|
|
254
|
+
| Tier | Udbyder | Omkostninger | Kvote nulstilling | Bedst til |
|
|
255
|
+
| ----------------- | ----------------- | --------------------------- | ------------------ | -------------------------- |
|
|
256
|
+
| **💳 ABONNEMENT** | Claude Code (Pro) | 20 USD/md. | 5 timer + ugentlig | Allerede abonneret |
|
|
257
|
+
| | Codex (Plus/Pro) | $20-200/md. | 5 timer + ugentlig | OpenAI-brugere |
|
|
258
|
+
| | Gemini CLI | **GRATIS** | 180K/md + 1K/dag | Alle sammen! |
|
|
259
|
+
| | GitHub Copilot | $10-19/md. | Månedlig | GitHub-brugere |
|
|
260
|
+
| **🔑 API NØGLE** | NVIDIA NIM | **GRATIS** (1000 kreditter) | Engangs | Gratis tier test |
|
|
261
|
+
| | DeepSeek | Betal pr. brug | Ingen | Bedste pris/kvalitet |
|
|
262
|
+
| | Groq | Gratis niveau + betalt | Sats begrænset | Ultrahurtig slutning |
|
|
263
|
+
| | xAI (Grok) | Betal pr. brug | Ingen | Grok modeller |
|
|
264
|
+
| | Mistral | Gratis niveau + betalt | Sats begrænset | Europæisk AI |
|
|
265
|
+
| | OpenRouter | Betal pr. brug | Ingen | 100+ modeller |
|
|
266
|
+
| **💰 BILLIG** | GLM-4.7 | 0,6 USD/1 mio. | Dagligt 10:00 | Budget backup |
|
|
267
|
+
| | MiniMax M2.1 | $0,2/1 mio. | 5-timers rullende | Billigste mulighed |
|
|
268
|
+
| | Kimi K2 | 9 USD/md. lejlighed | 10M tokens/md. | Forudsigelige omkostninger |
|
|
269
|
+
| **🆓 GRATIS** | iFlow | $0 | Ubegrænset | 8 modeller gratis |
|
|
270
|
+
| | Qwen | $0 | Ubegrænset | 3 modeller gratis |
|
|
271
|
+
| | Kiro | $0 | Ubegrænset | Claude gratis |
|
|
272
|
+
|
|
273
|
+
**💡 Pro-tip:** Start med Gemini CLI (180K gratis/måned) + iFlow (ubegrænset gratis) combo = $0 omkostninger!
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## 🎯 Use Cases
|
|
278
|
+
|
|
279
|
+
### Case 1: "Jeg har Claude Pro-abonnement"
|
|
280
|
+
|
|
281
|
+
**Problem:** Kvoten udløber ubrugt, satsgrænser under tung kodning
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
Combo: "maximize-claude"
|
|
285
|
+
1. cc/claude-opus-4-6 (use subscription fully)
|
|
286
|
+
2. glm/glm-4.7 (cheap backup when quota out)
|
|
287
|
+
3. if/kimi-k2-thinking (free emergency fallback)
|
|
288
|
+
|
|
289
|
+
Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total
|
|
290
|
+
vs. $20 + hitting limits = frustration
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### Case 2: "Jeg vil have nul omkostninger"
|
|
294
|
+
|
|
295
|
+
**Problem:** Har ikke råd til abonnementer, har brug for pålidelig AI-kodning
|
|
296
|
+
|
|
297
|
+
```
|
|
298
|
+
Combo: "free-forever"
|
|
299
|
+
1. gc/gemini-3-flash (180K free/month)
|
|
300
|
+
2. if/kimi-k2-thinking (unlimited free)
|
|
301
|
+
3. qw/qwen3-coder-plus (unlimited free)
|
|
302
|
+
|
|
303
|
+
Monthly cost: $0
|
|
304
|
+
Quality: Production-ready models
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Case 3: "Jeg har brug for 24/7 kodning, ingen afbrydelser"
|
|
308
|
+
|
|
309
|
+
**Problem:** Deadlines, har ikke råd til nedetid
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
Combo: "always-on"
|
|
313
|
+
1. cc/claude-opus-4-6 (best quality)
|
|
314
|
+
2. cx/gpt-5.2-codex (second subscription)
|
|
315
|
+
3. glm/glm-4.7 (cheap, resets daily)
|
|
316
|
+
4. minimax/MiniMax-M2.1 (cheapest, 5h reset)
|
|
317
|
+
5. if/kimi-k2-thinking (free unlimited)
|
|
318
|
+
|
|
319
|
+
Result: 5 layers of fallback = zero downtime
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Case 4: "Jeg vil have GRATIS AI i OpenClaw"
|
|
323
|
+
|
|
324
|
+
**Problem:** Har brug for AI-assistent i beskedapps, helt gratis
|
|
325
|
+
|
|
326
|
+
```
|
|
327
|
+
Combo: "openclaw-free"
|
|
328
|
+
1. if/glm-4.7 (unlimited free)
|
|
329
|
+
2. if/minimax-m2.1 (unlimited free)
|
|
330
|
+
3. if/kimi-k2-thinking (unlimited free)
|
|
331
|
+
|
|
332
|
+
Monthly cost: $0
|
|
333
|
+
Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## 💡 Nøglefunktioner
|
|
339
|
+
|
|
340
|
+
### 🧠 Core Routing & Intelligence
|
|
341
|
+
|
|
342
|
+
| Funktion | Hvad det gør |
|
|
343
|
+
| ---------------------------------- | -------------------------------------------------------------------------------------- |
|
|
344
|
+
| 🎯 **Smart 4-lags fallback** | Auto-rute: Abonnement → API-nøgle → Billig → Gratis |
|
|
345
|
+
| 📊 **Kvotesporing i realtid** | Live token count + nulstil nedtælling pr. udbyder |
|
|
346
|
+
| 🔄 **Formatoversættelse** | OpenAI ↔ Claude ↔ Gemini ↔ Markør ↔ Kiro sømløs + respons sanitisering |
|
|
347
|
+
| 👥 **Multi-Account Support** | Flere konti pr. udbyder med intelligent valg |
|
|
348
|
+
| 🔄 **Automatisk token-opdatering** | OAuth-tokens opdateres automatisk med genforsøg |
|
|
349
|
+
| 🎨 **Tilpassede kombinationer** | 6 strategier: fill-first, round-robin, p2c, random, mindst brugt, omkostningsoptimeret |
|
|
350
|
+
| 🧩 **Tilpassede modeller** | Tilføj ethvert model-id til enhver udbyder |
|
|
351
|
+
| 🌐 **Wildcard-router** | Rut `provider/*` mønstre til enhver udbyder dynamisk |
|
|
352
|
+
| 🧠 **Tænkende budget** | Passthrough, auto, brugerdefinerede og adaptive tilstande til ræsonnerende modeller |
|
|
353
|
+
| 💬 **System Prompt Injection** | Global systemprompt anvendt på tværs af alle anmodninger |
|
|
354
|
+
| 📄 **Responses API** | Fuld OpenAI Responses API (`/v1/responses`) understøttelse af Codex |
|
|
355
|
+
|
|
356
|
+
### 🎵 Multi-Modal API'er
|
|
357
|
+
|
|
358
|
+
| Funktion | Hvad det gør |
|
|
359
|
+
| ------------------------ | -------------------------------------------------- |
|
|
360
|
+
| 🖼️ **Billedgenerering** | `/v1/images/generations` — 4 udbydere, 9+ modeller |
|
|
361
|
+
| 📐 **Indlejringer** | `/v1/embeddings` — 6 udbydere, 9+ modeller |
|
|
362
|
+
| 🎤 **Lydtransskription** | `/v1/audio/transcriptions` — Whisper-kompatibel |
|
|
363
|
+
| 🔊 **Tekst-til-tale** | `/v1/audio/speech` — Multi-udbyder lydsyntese |
|
|
364
|
+
| 🛡️ **Moderationer** | `/v1/moderations` — Indholdssikkerhedstjek |
|
|
365
|
+
| 🔀 **Omrangering** | `/v1/rerank` — Omrangering af dokumentrelevans |
|
|
366
|
+
|
|
367
|
+
### 🛡️ Modstandsdygtighed og sikkerhed
|
|
368
|
+
|
|
369
|
+
| Funktion | Hvad det gør |
|
|
370
|
+
| -------------------------------- | ------------------------------------------------------------------------------ |
|
|
371
|
+
| 🔌 **Circuit Breaker** | Automatisk åbning/lukning pr. udbyder med konfigurerbare tærskler |
|
|
372
|
+
| 🛡️ **Anti-tordenbesætning** | Mutex + semafor-hastighedsgrænse for API-nøgleudbydere |
|
|
373
|
+
| 🧠 **Semantisk cache** | To-lags cache (signatur + semantisk) reducerer omkostninger og ventetid |
|
|
374
|
+
| ⚡ **Anmod om idempotens** | 5s dedup-vindue for duplikerede anmodninger |
|
|
375
|
+
| 🔒 **TLS Fingerprint Spoofing** | Omgå TLS-baseret botdetektion via wreq-js |
|
|
376
|
+
| 🌐 **IP-filtrering** | Tilladelsesliste/blokeringsliste til API-adgangskontrol |
|
|
377
|
+
| 📊 **Redigerbare satsgrænser** | Konfigurerbar RPM, min. gap og maks. samtidighed på systemniveau |
|
|
378
|
+
| 🛡 **API-endepunktsbeskyttelse** | Auth gating + udbyderblokering for `/models` slutpunktet |
|
|
379
|
+
| 🔒 **Proxysynlighed** | Farvekodede badges: 🟢 global, 🟡 udbyder, 🔵 per forbindelse med IP-skærm |
|
|
380
|
+
| 🌐 **3-Level Proxy Config** | Konfigurer proxyer på globalt niveau, pr. udbyder eller pr. forbindelsesniveau |
|
|
381
|
+
|
|
382
|
+
### 📊 Observerbarhed og analyse
|
|
383
|
+
|
|
384
|
+
| Funktion | Hvad det gør |
|
|
385
|
+
| --------------------------- | ------------------------------------------------------------------------------------- |
|
|
386
|
+
| 📝 **Anmod om logning** | Fejlretningstilstand med fuld anmodnings-/svarlogs |
|
|
387
|
+
| 💾 **SQLite Proxy Logs** | Vedvarende proxy-logfiler overlever genstart af server |
|
|
388
|
+
| 📊 **Analytics Dashboard** | Recharts-drevet: statkort, modelbrugsdiagram, udbydertabel |
|
|
389
|
+
| 📈 **Fremskridtssporing** | Opt-in SSE-fremskridtsbegivenheder til streaming |
|
|
390
|
+
| 🧪 **LLM-evalueringer** | Gyldne sæt test med 4 kampstrategier |
|
|
391
|
+
| 🔍 **Anmod om telemetri** | p50/p95/p99 latenstidsaggregering + X-Request-Id-sporing |
|
|
392
|
+
| 📋 **Log Dashboard** | Samlet side med 4 faner: Anmodningslogfiler, Proxylogfiler, Revisionslogfiler, Konsol |
|
|
393
|
+
| 🖥️ **Konsol Log Viewer** | Real-time terminal-stil fremviser med niveau filter, søgning, auto-scroll |
|
|
394
|
+
| 📑 **Filbaseret logning** | Konsolinterceptor fanger alt output til JSON-logfil med rotation |
|
|
395
|
+
| 🏥 **Sundhedskontrolpanel** | Systemets oppetid, strømafbrydertilstande, lockouts, cachestatistik |
|
|
396
|
+
| 💰 **Omkostningssporing** | Budgetstyring + priskonfiguration pr. model |
|
|
397
|
+
|
|
398
|
+
### ☁️ Implementering og synkronisering
|
|
399
|
+
|
|
400
|
+
| Funktion | Hvad det gør |
|
|
401
|
+
| ---------------------------- | ------------------------------------------------------------------------ |
|
|
402
|
+
| 💾 **Cloud Sync** | Synkroniser konfiguration på tværs af enheder via Cloudflare Workers |
|
|
403
|
+
| 🌐 **Deploy hvor som helst** | Localhost, VPS, Docker, Cloudflare Workers |
|
|
404
|
+
| 🔑 **API Key Management** | Generer, roter og omfang API-nøgler pr. udbyder |
|
|
405
|
+
| 🧙 **Onboarding Wizard** | 4-trins guidet opsætning for førstegangsbrugere |
|
|
406
|
+
| 🔧 **CLI Tools Dashboard** | Et-klik konfigurer Claude, Codex, Cline, OpenClaw, Kilo, Antigravity |
|
|
407
|
+
| 🔄 **DB-sikkerhedskopier** | Automatisk backup, gendannelse, eksport og import for alle indstillinger |
|
|
408
|
+
| 🌐 **Internationalisering** | Fuld i18n med next-intl — engelsk + portugisisk (Brasilien) support |
|
|
409
|
+
| 🌍 **Sprogvælger** | Globusikon i overskriften til sprogskift i realtid (🇺🇸/🇧🇷) |
|
|
410
|
+
| 📂 **Tilpasset datakatalog** | `DATA_DIR` env var for at tilsidesætte standard `~/.omniroute` lagersti |
|
|
411
|
+
|
|
412
|
+
<details>
|
|
413
|
+
<summary><b>📖 Funktionsdetaljer</b></summary>
|
|
414
|
+
|
|
415
|
+
### 🎯 Smart 4-Tier Fallback
|
|
416
|
+
|
|
417
|
+
Opret kombinationer med automatisk fallback:
|
|
418
|
+
|
|
419
|
+
```
|
|
420
|
+
Combo: "my-coding-stack"
|
|
421
|
+
1. cc/claude-opus-4-6 (your subscription)
|
|
422
|
+
2. nvidia/llama-3.3-70b (free NVIDIA API)
|
|
423
|
+
3. glm/glm-4.7 (cheap backup, $0.6/1M)
|
|
424
|
+
4. if/kimi-k2-thinking (free fallback)
|
|
425
|
+
|
|
426
|
+
→ Auto switches when quota runs out or errors occur
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
### 📊 Kvotesporing i realtid
|
|
430
|
+
|
|
431
|
+
- Tokenforbrug pr. udbyder
|
|
432
|
+
- Nulstil nedtælling (5 timer, dagligt, ugentligt)
|
|
433
|
+
- Omkostningsestimat for betalte niveauer
|
|
434
|
+
- Månedlige udgiftsrapporter
|
|
435
|
+
|
|
436
|
+
### 🔄 Formatoversættelse
|
|
437
|
+
|
|
438
|
+
Problemfri oversættelse mellem formater:
|
|
439
|
+
|
|
440
|
+
- **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **OpenAI-svar**
|
|
441
|
+
- Dit CLI-værktøj sender OpenAI-format → OmniRoute oversætter → Udbyder modtager oprindeligt format
|
|
442
|
+
- Fungerer med ethvert værktøj, der understøtter brugerdefinerede OpenAI-endepunkter
|
|
443
|
+
- **Responssanering** — Fjerner ikke-standardfelter for streng OpenAI SDK-kompatibilitet
|
|
444
|
+
- **Rollenormalisering** — `developer` → `system` for ikke-OpenAI; `system` → `user` til GLM/ERNIE-modeller
|
|
445
|
+
- **Tænk tag-udtrækning** — `<think>` blokke → `reasoning_content` til tænkende modeller
|
|
446
|
+
- **Struktureret output** — `json_schema` → Gemini's `responseMimeType`/`responseSchema`
|
|
447
|
+
|
|
448
|
+
### 👥 Support til flere konti
|
|
449
|
+
|
|
450
|
+
- Tilføj flere konti pr. udbyder
|
|
451
|
+
- Auto round-robin eller prioritetsbaseret routing
|
|
452
|
+
- Fallback til næste konto, når man rammer kvoten
|
|
453
|
+
|
|
454
|
+
### 🔄 Automatisk token-opdatering
|
|
455
|
+
|
|
456
|
+
- OAuth-tokens opdateres automatisk før udløb
|
|
457
|
+
- Ingen manuel gengodkendelse nødvendig
|
|
458
|
+
- Problemfri oplevelse på tværs af alle udbydere
|
|
459
|
+
|
|
460
|
+
### 🎨 Brugerdefinerede kombinationer
|
|
461
|
+
|
|
462
|
+
- Opret ubegrænsede modelkombinationer
|
|
463
|
+
- 6 strategier: fill-first, round-robin, power-of-to-choices, tilfældig, mindst brugt, omkostningsoptimeret
|
|
464
|
+
- Del kombinationer på tværs af enheder med Cloud Sync
|
|
465
|
+
|
|
466
|
+
### 🏥 Health Dashboard
|
|
467
|
+
|
|
468
|
+
- Systemstatus (oppetid, version, hukommelsesforbrug)
|
|
469
|
+
- Strømafbrydertilstande pr. udbyder (lukket/åbent/halvt åbent)
|
|
470
|
+
- Takstgrænsestatus og aktive lockouts
|
|
471
|
+
- Signatur cache statistik
|
|
472
|
+
- Latency-telemetri (p50/p95/p99) + prompt-cache
|
|
473
|
+
- Nulstil sundhedsstatus med et enkelt klik
|
|
474
|
+
|
|
475
|
+
### 🔧 Oversætterlegeplads
|
|
476
|
+
|
|
477
|
+
OmniRoute inkluderer en kraftfuld indbygget oversætterlegeplads med **4 tilstande** til fejlretning, test og overvågning af API-oversættelser:
|
|
478
|
+
|
|
479
|
+
| Tilstand | Beskrivelse |
|
|
480
|
+
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
481
|
+
| **💻 Legeplads** | Direkte formatoversættelse — indsæt enhver API-anmodningstekst og se øjeblikkeligt, hvordan OmniRoute oversætter det mellem udbyderformater (OpenAI ↔ Claude ↔ Gemini ↔ Responses API). Indeholder eksempelskabeloner og automatisk genkendelse af formater. |
|
|
482
|
+
| **💬 Chattester** | Send rigtige chatanmodninger gennem OmniRoute og se den fulde rundrejse: dit input, den oversatte anmodning, udbyderens svar og det oversatte svar tilbage. Uvurderlig til validering af combo routing. |
|
|
483
|
+
| **🧪 Test bænk** | Batch-testtilstand – definer flere testcases med forskellige input og forventede output, kør dem alle på én gang, og sammenlign resultater på tværs af udbydere og modeller. |
|
|
484
|
+
| **📱 Live Monitor** | Overvågning af anmodninger i realtid — se indgående anmodninger, mens de flyder gennem OmniRoute, se formatoversættelser, der foregår live, og identificer problemer med det samme. |
|
|
485
|
+
|
|
486
|
+
**Adgang:** Dashboard → Oversætter (sidebjælke)
|
|
487
|
+
|
|
488
|
+
### 💾 Cloud Sync
|
|
489
|
+
|
|
490
|
+
- Synkroniser udbydere, kombinationer og indstillinger på tværs af enheder
|
|
491
|
+
- Automatisk baggrundssynkronisering
|
|
492
|
+
- Sikker krypteret opbevaring
|
|
493
|
+
|
|
494
|
+
</details>
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
498
|
+
## 📖 Opsætningsvejledning
|
|
499
|
+
|
|
500
|
+
<details>
|
|
501
|
+
<summary><b>💳 Abonnementsudbydere</b></summary>
|
|
502
|
+
|
|
503
|
+
### Claude Code (Pro/Max)
|
|
504
|
+
|
|
505
|
+
```bash
|
|
506
|
+
Dashboard → Providers → Connect Claude Code
|
|
507
|
+
→ OAuth login → Auto token refresh
|
|
508
|
+
→ 5-hour + weekly quota tracking
|
|
509
|
+
|
|
510
|
+
Models:
|
|
511
|
+
cc/claude-opus-4-6
|
|
512
|
+
cc/claude-sonnet-4-5-20250929
|
|
513
|
+
cc/claude-haiku-4-5-20251001
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
**Prof tip:** Brug Opus til komplekse opgaver, Sonnet for hurtighed. OmniRoute sporer kvote pr. model!
|
|
517
|
+
|
|
518
|
+
### OpenAI Codex (Plus/Pro)
|
|
519
|
+
|
|
520
|
+
```bash
|
|
521
|
+
Dashboard → Providers → Connect Codex
|
|
522
|
+
→ OAuth login (port 1455)
|
|
523
|
+
→ 5-hour + weekly reset
|
|
524
|
+
|
|
525
|
+
Models:
|
|
526
|
+
cx/gpt-5.2-codex
|
|
527
|
+
cx/gpt-5.1-codex-max
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
### Gemini CLI (GRATIS 180K/måned!)
|
|
531
|
+
|
|
532
|
+
```bash
|
|
533
|
+
Dashboard → Providers → Connect Gemini CLI
|
|
534
|
+
→ Google OAuth
|
|
535
|
+
→ 180K completions/month + 1K/day
|
|
536
|
+
|
|
537
|
+
Models:
|
|
538
|
+
gc/gemini-3-flash-preview
|
|
539
|
+
gc/gemini-2.5-pro
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
**Bedste værdi:** Kæmpe gratis niveau! Brug dette før betalte niveauer.
|
|
543
|
+
|
|
544
|
+
### GitHub Copilot
|
|
545
|
+
|
|
546
|
+
```bash
|
|
547
|
+
Dashboard → Providers → Connect GitHub
|
|
548
|
+
→ OAuth via GitHub
|
|
549
|
+
→ Monthly reset (1st of month)
|
|
550
|
+
|
|
551
|
+
Models:
|
|
552
|
+
gh/gpt-5
|
|
553
|
+
gh/claude-4.5-sonnet
|
|
554
|
+
gh/gemini-3-pro
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
</details>
|
|
558
|
+
|
|
559
|
+
<details>
|
|
560
|
+
<summary><b>🔑 API-nøgleudbydere</b></summary>
|
|
561
|
+
|
|
562
|
+
### NVIDIA NIM (GRATIS 1000 kreditter!)
|
|
563
|
+
|
|
564
|
+
1. Tilmeld dig: [build.nvidia.com](https://build.nvidia.com)
|
|
565
|
+
2. Få gratis API-nøgle (1000 slutningskreditter inkluderet)
|
|
566
|
+
3. Dashboard → Tilføj udbyder → NVIDIA NIM:
|
|
567
|
+
- API-nøgle: `nvapi-your-key`
|
|
568
|
+
|
|
569
|
+
**Modeller:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` og mere end 50
|
|
570
|
+
|
|
571
|
+
**Prof tip:** OpenAI-kompatibel API — fungerer problemfrit med OmniRoutes formatoversættelse!
|
|
572
|
+
|
|
573
|
+
### DeepSeek
|
|
574
|
+
|
|
575
|
+
1. Tilmeld dig: [platform.deepseek.com](https://platform.deepseek.com)
|
|
576
|
+
2. Hent API-nøgle
|
|
577
|
+
3. Dashboard → Tilføj udbyder → DeepSeek
|
|
578
|
+
|
|
579
|
+
**Modeller:** `deepseek/deepseek-chat`, `deepseek/deepseek-coder`
|
|
580
|
+
|
|
581
|
+
### Groq (gratis niveau tilgængelig!)
|
|
582
|
+
|
|
583
|
+
1. Tilmeld dig: [console.groq.com](https://console.groq.com)
|
|
584
|
+
2. Få API-nøgle (gratis niveau inkluderet)
|
|
585
|
+
3. Dashboard → Tilføj udbyder → Groq
|
|
586
|
+
|
|
587
|
+
**Modeller:** `groq/llama-3.3-70b`, `groq/mixtral-8x7b`
|
|
588
|
+
|
|
589
|
+
**Prof tip:** Ultrahurtig slutning — bedst til realtidskodning!
|
|
590
|
+
|
|
591
|
+
### OpenRouter (100+ modeller)
|
|
592
|
+
|
|
593
|
+
1. Tilmeld dig: [openrouter.ai](https://openrouter.ai)
|
|
594
|
+
2. Hent API-nøgle
|
|
595
|
+
3. Dashboard → Tilføj udbyder → OpenRouter
|
|
596
|
+
|
|
597
|
+
**Modeller:** Få adgang til mere end 100 modeller fra alle større udbydere via en enkelt API-nøgle.
|
|
598
|
+
|
|
599
|
+
</details>
|
|
600
|
+
|
|
601
|
+
<details>
|
|
602
|
+
<summary><b>💰 Billige udbydere (backup)</b></summary>
|
|
603
|
+
|
|
604
|
+
### GLM-4.7 (Daglig nulstilling, $0,6/1 mio.)
|
|
605
|
+
|
|
606
|
+
1. Tilmeld dig: [Zhipu AI](https://open.bigmodel.cn/)
|
|
607
|
+
2. Hent API-nøgle fra Coding Plan
|
|
608
|
+
3. Dashboard → Tilføj API-nøgle:
|
|
609
|
+
- Udbyder: `glm`
|
|
610
|
+
- API-nøgle: `your-key`
|
|
611
|
+
|
|
612
|
+
**Brug:** `glm/glm-4.7`
|
|
613
|
+
|
|
614
|
+
**Pro-tip:** Coding Plan tilbyder 3× kvote til 1/7 pris! Nulstil dagligt 10:00.
|
|
615
|
+
|
|
616
|
+
### MiniMax M2.1 (5 timers nulstilling, $0,20/1 mio.)
|
|
617
|
+
|
|
618
|
+
1. Tilmeld dig: [MiniMax](https://www.minimax.io/)
|
|
619
|
+
2. Hent API-nøgle
|
|
620
|
+
3. Dashboard → Tilføj API-nøgle
|
|
621
|
+
|
|
622
|
+
**Brug:** `minimax/MiniMax-M2.1`
|
|
623
|
+
|
|
624
|
+
**Prof tip:** Billigste mulighed for lang sammenhæng (1M tokens)!
|
|
625
|
+
|
|
626
|
+
### Kimi K2 ($9/måned lejlighed)
|
|
627
|
+
|
|
628
|
+
1. Abonner: [Moonshot AI](https://platform.moonshot.ai/)
|
|
629
|
+
2. Hent API-nøgle
|
|
630
|
+
3. Dashboard → Tilføj API-nøgle
|
|
631
|
+
|
|
632
|
+
**Brug:** `kimi/kimi-latest`
|
|
633
|
+
|
|
634
|
+
**Prof tip:** Fast $9/måned for 10M tokens = $0,90/1M effektive omkostninger!
|
|
635
|
+
|
|
636
|
+
</details>
|
|
637
|
+
|
|
638
|
+
<details>
|
|
639
|
+
<summary><b>🆓 GRATIS udbydere (nødbackup)</b></summary>
|
|
640
|
+
|
|
641
|
+
### iFlow (8 GRATIS modeller)
|
|
642
|
+
|
|
643
|
+
```bash
|
|
644
|
+
Dashboard → Connect iFlow
|
|
645
|
+
→ iFlow OAuth login
|
|
646
|
+
→ Unlimited usage
|
|
647
|
+
|
|
648
|
+
Models:
|
|
649
|
+
if/kimi-k2-thinking
|
|
650
|
+
if/qwen3-coder-plus
|
|
651
|
+
if/glm-4.7
|
|
652
|
+
if/minimax-m2
|
|
653
|
+
if/deepseek-r1
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
### Qwen (3 GRATIS modeller)
|
|
657
|
+
|
|
658
|
+
```bash
|
|
659
|
+
Dashboard → Connect Qwen
|
|
660
|
+
→ Device code authorization
|
|
661
|
+
→ Unlimited usage
|
|
662
|
+
|
|
663
|
+
Models:
|
|
664
|
+
qw/qwen3-coder-plus
|
|
665
|
+
qw/qwen3-coder-flash
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
### Kiro (Claude GRATIS)
|
|
669
|
+
|
|
670
|
+
```bash
|
|
671
|
+
Dashboard → Connect Kiro
|
|
672
|
+
→ AWS Builder ID or Google/GitHub
|
|
673
|
+
→ Unlimited usage
|
|
674
|
+
|
|
675
|
+
Models:
|
|
676
|
+
kr/claude-sonnet-4.5
|
|
677
|
+
kr/claude-haiku-4.5
|
|
678
|
+
```
|
|
679
|
+
|
|
680
|
+
</details>
|
|
681
|
+
|
|
682
|
+
<details>
|
|
683
|
+
<summary><b>🎨 Opret kombinationer</b></summary>
|
|
684
|
+
|
|
685
|
+
### Eksempel 1: Maksimer abonnement → Billig backup
|
|
686
|
+
|
|
687
|
+
```
|
|
688
|
+
Dashboard → Combos → Create New
|
|
689
|
+
|
|
690
|
+
Name: premium-coding
|
|
691
|
+
Models:
|
|
692
|
+
1. cc/claude-opus-4-6 (Subscription primary)
|
|
693
|
+
2. glm/glm-4.7 (Cheap backup, $0.6/1M)
|
|
694
|
+
3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M)
|
|
695
|
+
|
|
696
|
+
Use in CLI: premium-coding
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
### Eksempel 2: Kun gratis (nul omkostninger)
|
|
700
|
+
|
|
701
|
+
```
|
|
702
|
+
Name: free-combo
|
|
703
|
+
Models:
|
|
704
|
+
1. gc/gemini-3-flash-preview (180K free/month)
|
|
705
|
+
2. if/kimi-k2-thinking (unlimited)
|
|
706
|
+
3. qw/qwen3-coder-plus (unlimited)
|
|
707
|
+
|
|
708
|
+
Cost: $0 forever!
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
</details>
|
|
712
|
+
|
|
713
|
+
<details>
|
|
714
|
+
<summary><b>🔧 CLI-integration</b></summary>
|
|
715
|
+
|
|
716
|
+
### Markør IDE
|
|
717
|
+
|
|
718
|
+
```
|
|
719
|
+
Settings → Models → Advanced:
|
|
720
|
+
OpenAI API Base URL: http://localhost:20128/v1
|
|
721
|
+
OpenAI API Key: [from OmniRoute dashboard]
|
|
722
|
+
Model: cc/claude-opus-4-6
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
### Claude Code
|
|
726
|
+
|
|
727
|
+
Brug siden **CLI Tools** i dashboardet til konfiguration med et enkelt klik, eller rediger `~/.claude/settings.json` manuelt.
|
|
728
|
+
|
|
729
|
+
### Codex CLI
|
|
730
|
+
|
|
731
|
+
```bash
|
|
732
|
+
export OPENAI_BASE_URL="http://localhost:20128"
|
|
733
|
+
export OPENAI_API_KEY="your-omniroute-api-key"
|
|
734
|
+
|
|
735
|
+
codex "your prompt"
|
|
736
|
+
```
|
|
737
|
+
|
|
738
|
+
### OpenClaw
|
|
739
|
+
|
|
740
|
+
**Mulighed 1 — Dashboard (anbefalet):**
|
|
741
|
+
|
|
742
|
+
```
|
|
743
|
+
Dashboard → CLI Tools → OpenClaw → Select Model → Apply
|
|
744
|
+
```
|
|
745
|
+
|
|
746
|
+
**Mulighed 2 — Manuel:** Rediger `~/.openclaw/openclaw.json`:
|
|
747
|
+
|
|
748
|
+
```json
|
|
749
|
+
{
|
|
750
|
+
"models": {
|
|
751
|
+
"providers": {
|
|
752
|
+
"omniroute": {
|
|
753
|
+
"baseUrl": "http://127.0.0.1:20128/v1",
|
|
754
|
+
"apiKey": "sk_omniroute",
|
|
755
|
+
"api": "openai-completions"
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
```
|
|
761
|
+
|
|
762
|
+
> **Bemærk:** OpenClaw fungerer kun med lokale OmniRoute. Brug `127.0.0.1` i stedet for `localhost` for at undgå problemer med IPv6-opløsning.
|
|
763
|
+
|
|
764
|
+
### Cline / Fortsæt / RooCode
|
|
765
|
+
|
|
766
|
+
```
|
|
767
|
+
Settings → API Configuration:
|
|
768
|
+
Provider: OpenAI Compatible
|
|
769
|
+
Base URL: http://localhost:20128/v1
|
|
770
|
+
API Key: [from OmniRoute dashboard]
|
|
771
|
+
Model: if/kimi-k2-thinking
|
|
772
|
+
```
|
|
773
|
+
|
|
774
|
+
</details>
|
|
775
|
+
|
|
776
|
+
---
|
|
777
|
+
|
|
778
|
+
## 📊 Tilgængelige modeller
|
|
779
|
+
|
|
780
|
+
<details>
|
|
781
|
+
<summary><b>Se alle tilgængelige modeller</b></summary>
|
|
782
|
+
|
|
783
|
+
**Claude-kode (`cc/`)** - Pro/Max:
|
|
784
|
+
|
|
785
|
+
- `cc/claude-opus-4-6`
|
|
786
|
+
- `cc/claude-sonnet-4-5-20250929`
|
|
787
|
+
- `cc/claude-haiku-4-5-20251001`
|
|
788
|
+
|
|
789
|
+
**Codex (`cx/`)** - Plus/Pro:
|
|
790
|
+
|
|
791
|
+
- `cx/gpt-5.2-codex`
|
|
792
|
+
- `cx/gpt-5.1-codex-max`
|
|
793
|
+
|
|
794
|
+
**Gemini CLI (`gc/`)** - GRATIS:
|
|
795
|
+
|
|
796
|
+
- `gc/gemini-3-flash-preview`
|
|
797
|
+
- `gc/gemini-2.5-pro`
|
|
798
|
+
|
|
799
|
+
**GitHub Copilot (`gh/`)**:
|
|
800
|
+
|
|
801
|
+
- `gh/gpt-5`
|
|
802
|
+
- `gh/claude-4.5-sonnet`
|
|
803
|
+
|
|
804
|
+
**NVIDIA NIM (`nvidia/`)** - GRATIS kreditter:
|
|
805
|
+
|
|
806
|
+
- `nvidia/llama-3.3-70b-instruct`
|
|
807
|
+
- `nvidia/mistral-7b-instruct`
|
|
808
|
+
- 50+ flere modeller på [build.nvidia.com](https://build.nvidia.com)
|
|
809
|
+
|
|
810
|
+
**GLM (`glm/`)** - 0,6 USD/1 mio.
|
|
811
|
+
|
|
812
|
+
- `glm/glm-4.7`
|
|
813
|
+
|
|
814
|
+
**MiniMax (`minimax/`)** - 0,2 USD/1 mio.
|
|
815
|
+
|
|
816
|
+
- `minimax/MiniMax-M2.1`
|
|
817
|
+
|
|
818
|
+
**iFlow (`if/`)** - GRATIS:
|
|
819
|
+
|
|
820
|
+
- `if/kimi-k2-thinking`
|
|
821
|
+
- `if/qwen3-coder-plus`
|
|
822
|
+
- `if/deepseek-r1`
|
|
823
|
+
- `if/glm-4.7`
|
|
824
|
+
- `if/minimax-m2`
|
|
825
|
+
|
|
826
|
+
**Qwen (`qw/`)** - GRATIS:
|
|
827
|
+
|
|
828
|
+
- `qw/qwen3-coder-plus`
|
|
829
|
+
- `qw/qwen3-coder-flash`
|
|
830
|
+
|
|
831
|
+
**Kiro (`kr/`)** - GRATIS:
|
|
832
|
+
|
|
833
|
+
- `kr/claude-sonnet-4.5`
|
|
834
|
+
- `kr/claude-haiku-4.5`
|
|
835
|
+
|
|
836
|
+
**OpenRouter (`or/`)** - 100+ modeller:
|
|
837
|
+
|
|
838
|
+
- `or/anthropic/claude-4-sonnet`
|
|
839
|
+
- `or/google/gemini-2.5-pro`
|
|
840
|
+
- Enhver model fra [openrouter.ai/models](https://openrouter.ai/models)
|
|
841
|
+
|
|
842
|
+
</details>
|
|
843
|
+
|
|
844
|
+
---
|
|
845
|
+
|
|
846
|
+
## 🧪 Evalueringer (evalueringer)
|
|
847
|
+
|
|
848
|
+
OmniRoute inkluderer en indbygget evalueringsramme til at teste LLM-svarkvaliteten mod et gyldent sæt. Få adgang til det via **Analytics → Evals** i dashboardet.
|
|
849
|
+
|
|
850
|
+
### Indbygget gyldent sæt
|
|
851
|
+
|
|
852
|
+
Det forudindlæste "OmniRoute Golden Set" indeholder 10 testcases, der dækker:
|
|
853
|
+
|
|
854
|
+
- Hilsen, matematik, geografi, kodegenerering
|
|
855
|
+
- JSON format compliance, oversættelse, markdown
|
|
856
|
+
- Sikkerhedsafvisning (skadeligt indhold), optælling, boolsk logik
|
|
857
|
+
|
|
858
|
+
### Evalueringsstrategier
|
|
859
|
+
|
|
860
|
+
| Strategi | Beskrivelse | Eksempel |
|
|
861
|
+
| ---------- | ----------------------------------------------------------------------- | -------------------------------- |
|
|
862
|
+
| `exact` | Output skal matche nøjagtigt | `"4"` |
|
|
863
|
+
| `contains` | Output skal indeholde understreng (uafhængig af store og små bogstaver) | `"Paris"` |
|
|
864
|
+
| `regex` | Output skal matche regex-mønster | `"1.*2.*3"` |
|
|
865
|
+
| `custom` | Brugerdefineret JS-funktion returnerer sand/falsk | `(output) => output.length > 10` |
|
|
866
|
+
|
|
867
|
+
---
|
|
868
|
+
|
|
869
|
+
## 🔐 OAuth em Servidor Remoto (Remote OAuth Setup)
|
|
870
|
+
|
|
871
|
+
<a name="oauth-em-servidor-remoto"></a>
|
|
872
|
+
|
|
873
|
+
> **⚠️ VIGTIGT til brugere af OmniRoute med VPS/Docker/server-fjernbetjening**
|
|
874
|
+
|
|
875
|
+
### Kan du bruge Antigravity / Gemini CLI til at udføre fjernbetjeninger?
|
|
876
|
+
|
|
877
|
+
Os testedores **Antigravity** og **Gemini CLI** usam **Google OAuth 2.0** for autenticação. O Google exige que a `redirect_uri` usada no fluxo OAuth seja **exatamente** uma das URIs pré-cadastradas no Google Cloud Console do aplicativo.
|
|
878
|
+
|
|
879
|
+
Som credenciais OAuth embutidas no OmniRoute estão cadastradas **apenas para `localhost`**. Quando você acessa o OmniRoute em um servidor remoto (ex: `https://omniroute.meuservidor.com`), o Google afviser en autenticação com:
|
|
880
|
+
|
|
881
|
+
```
|
|
882
|
+
Error 400: redirect_uri_mismatch
|
|
883
|
+
```
|
|
884
|
+
|
|
885
|
+
### Løsning: Konfigurer OAuth, der er godkendt
|
|
886
|
+
|
|
887
|
+
Você precisa criar um **OAuth 2.0 Client ID** ingen Google Cloud Console med en URI, der udfører denne service.
|
|
888
|
+
|
|
889
|
+
#### Passo a passo
|
|
890
|
+
|
|
891
|
+
**1. Adgang til Google Cloud Console**
|
|
892
|
+
|
|
893
|
+
Abra: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials)
|
|
894
|
+
|
|
895
|
+
**2. Crie um novo OAuth 2.0 Client ID**
|
|
896
|
+
|
|
897
|
+
- Klik på dem **"+ Opret legitimationsoplysninger"** → **"OAuth-klient-id"**
|
|
898
|
+
- Tipo de aplicativo: **"Webapplikation"**
|
|
899
|
+
- Navn: escolha qualquer nome (eks.: `OmniRoute Remote`)
|
|
900
|
+
|
|
901
|
+
**3. Adicione som autoriseret omdirigerings-URI**
|
|
902
|
+
|
|
903
|
+
Ingen campo **"Autoriseret omdirigerings-URI'er"**, adicione:
|
|
904
|
+
|
|
905
|
+
```
|
|
906
|
+
https://seu-servidor.com/callback
|
|
907
|
+
```
|
|
908
|
+
|
|
909
|
+
> 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`).
|
|
910
|
+
|
|
911
|
+
**4. Salve e copy as credenciais**
|
|
912
|
+
|
|
913
|
+
Após criar, o Google mostrará o **Client ID** e o **Client Secret**.
|
|
914
|
+
|
|
915
|
+
**5. Konfigurer som variáveis de ambiente**
|
|
916
|
+
|
|
917
|
+
No seu `.env` (ou nas variáveis de ambiente do Docker):
|
|
918
|
+
|
|
919
|
+
```bash
|
|
920
|
+
# Para Antigravity:
|
|
921
|
+
ANTIGRAVITY_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
|
|
922
|
+
ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
|
|
923
|
+
|
|
924
|
+
# Para Gemini CLI:
|
|
925
|
+
GEMINI_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
|
|
926
|
+
GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
|
|
927
|
+
GEMINI_CLI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
|
|
928
|
+
```
|
|
929
|
+
|
|
930
|
+
**6. Reinicie o OmniRoute**
|
|
931
|
+
|
|
932
|
+
```bash
|
|
933
|
+
# Se usando npm:
|
|
934
|
+
npm run dev
|
|
935
|
+
|
|
936
|
+
# Se usando Docker:
|
|
937
|
+
docker restart omniroute
|
|
938
|
+
```
|
|
939
|
+
|
|
940
|
+
**7. Tente conectar novamente**
|
|
941
|
+
|
|
942
|
+
Dashboard → Udbydere → Antigravity (ou Gemini CLI) → OAuth
|
|
943
|
+
|
|
944
|
+
Agora o Google redirecionará corretamente para `https://seu-servidor.com/callback` og autenticação funcionará.
|
|
945
|
+
|
|
946
|
+
---
|
|
947
|
+
|
|
948
|
+
### Løsning midlertidigt (som konfigureret credenciais próprias)
|
|
949
|
+
|
|
950
|
+
Se não quiser criar credenciais próprias agora, ainda é possível usar o fluxo **manual de URL**:
|
|
951
|
+
|
|
952
|
+
1. O OmniRoute abrirá en URL de autorização til Google
|
|
953
|
+
2. Após você autorizar, o Google tentará redirecionar para `localhost` (que falha no servidor remoto)
|
|
954
|
+
3. **Kopier en URL komplet** da barra de endereço do sin browser (mesmo que a página não carregue)
|
|
955
|
+
4. Cole essa URL no campo que aparece no modal de conexão do OmniRoute
|
|
956
|
+
5. Klik på **"Forbind"**
|
|
957
|
+
|
|
958
|
+
> Este workaround funciona porque or código de autorização na URL é válido independente do redirect ter carregado or não.
|
|
959
|
+
|
|
960
|
+
---
|
|
961
|
+
|
|
962
|
+
## 🐛 Fejlfinding
|
|
963
|
+
|
|
964
|
+
<details>
|
|
965
|
+
<summary><b>Klik for at udvide fejlfindingsvejledning</b></summary>
|
|
966
|
+
|
|
967
|
+
**"Sprogmodellen leverede ikke beskeder"**
|
|
968
|
+
|
|
969
|
+
- Udbyderkvote opbrugt → Tjek dashboardkvotesporing
|
|
970
|
+
- Løsning: Brug combo fallback eller skift til et billigere niveau
|
|
971
|
+
|
|
972
|
+
**Satsbegrænsende**
|
|
973
|
+
|
|
974
|
+
- Abonnementskontingent ude → Fallback til GLM/MiniMax
|
|
975
|
+
- Tilføj kombination: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
|
|
976
|
+
|
|
977
|
+
**OAuth-token er udløbet**
|
|
978
|
+
|
|
979
|
+
- Automatisk genopfrisket af OmniRoute
|
|
980
|
+
- Hvis problemerne fortsætter: Dashboard → Udbyder → Genopret forbindelse
|
|
981
|
+
|
|
982
|
+
**Høje omkostninger**
|
|
983
|
+
|
|
984
|
+
- Tjek brugsstatistik i Dashboard → Omkostninger
|
|
985
|
+
- Skift primær model til GLM/MiniMax
|
|
986
|
+
- Brug gratis niveau (Gemini CLI, iFlow) til ikke-kritiske opgaver
|
|
987
|
+
|
|
988
|
+
**Dashboard åbner på forkert port**
|
|
989
|
+
|
|
990
|
+
- Sæt `PORT=20128` og `NEXT_PUBLIC_BASE_URL=http://localhost:20128`
|
|
991
|
+
|
|
992
|
+
**Skysynkroniseringsfejl**
|
|
993
|
+
|
|
994
|
+
- Bekræft `BASE_URL` peger på din løbeforekomst
|
|
995
|
+
- Bekræft `CLOUD_URL` point til dit forventede cloud-endepunkt
|
|
996
|
+
- Hold `NEXT_PUBLIC_*` værdier på linje med værdier på serversiden
|
|
997
|
+
|
|
998
|
+
**Første login virker ikke**
|
|
999
|
+
|
|
1000
|
+
- Tjek `INITIAL_PASSWORD` i `.env`
|
|
1001
|
+
- Hvis den ikke er angivet, er reserveadgangskoden `123456`
|
|
1002
|
+
|
|
1003
|
+
**Ingen anmodningslogfiler**
|
|
1004
|
+
|
|
1005
|
+
- Indstil `ENABLE_REQUEST_LOGS=true` i `.env`
|
|
1006
|
+
|
|
1007
|
+
**Forbindelsestest viser "Ugyldig" for OpenAI-kompatible udbydere**
|
|
1008
|
+
|
|
1009
|
+
- Mange udbydere eksponerer ikke et `/models` slutpunkt
|
|
1010
|
+
- OmniRoute v1.0.6+ inkluderer fallback-validering via chatafslutninger
|
|
1011
|
+
- Sørg for, at basis-URL'en inkluderer suffikset `/v1`
|
|
1012
|
+
|
|
1013
|
+
</details>
|
|
1014
|
+
|
|
1015
|
+
---
|
|
1016
|
+
|
|
1017
|
+
## 🛠️ Tech Stack
|
|
1018
|
+
|
|
1019
|
+
- **Runtime**: Node.js 18–22 LTS (⚠️ Node.js 24+ er **ikke understøttet** — `better-sqlite3` native binære filer er inkompatible)
|
|
1020
|
+
- **Sprog**: TypeScript 5.9 — **100 % TypeScript** på tværs af `src/` og `open-sse/` (v1.0.6)
|
|
1021
|
+
- **Framework**: Next.js 16 + React 19 + Tailwind CSS 4
|
|
1022
|
+
- **Database**: LowDB (JSON) + SQLite (domænetilstand + proxylogfiler)
|
|
1023
|
+
- **Streaming**: Server-sendte hændelser (SSE)
|
|
1024
|
+
- **Auth**: OAuth 2.0 (PKCE) + JWT + API-nøgler
|
|
1025
|
+
- **Test**: Node.js testløber (368+ enhedstest)
|
|
1026
|
+
- **CI/CD**: GitHub-handlinger (automatisk npm-udgivelse + Docker Hub ved udgivelse)
|
|
1027
|
+
- **Websted**: [omniroute.online](https://omniroute.online)
|
|
1028
|
+
- **Pakke**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
|
|
1029
|
+
- **Docker**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
|
|
1030
|
+
- **Resiliens**: Circuit breaker, eksponentiel backoff, anti-tordenbesætning, TLS spoofing
|
|
1031
|
+
|
|
1032
|
+
---
|
|
1033
|
+
|
|
1034
|
+
## 📖 Dokumentation
|
|
1035
|
+
|
|
1036
|
+
| Dokument | Beskrivelse |
|
|
1037
|
+
| -------------------------------------------- | -------------------------------------------------------- |
|
|
1038
|
+
| [User Guide](docs/USER_GUIDE.md) | Udbydere, kombinationer, CLI-integration, implementering |
|
|
1039
|
+
| [API Reference](docs/API_REFERENCE.md) | Alle endepunkter med eksempler |
|
|
1040
|
+
| [Troubleshooting](docs/TROUBLESHOOTING.md) | Almindelige problemer og løsninger |
|
|
1041
|
+
| [Architecture](docs/ARCHITECTURE.md) | Systemarkitektur og indre |
|
|
1042
|
+
| [Contributing](CONTRIBUTING.md) | Udviklingsopsætning og retningslinjer |
|
|
1043
|
+
| [OpenAPI Spec](docs/openapi.yaml) | OpenAPI 3.0-specifikation |
|
|
1044
|
+
| [Security Policy](SECURITY.md) | Sårbarhedsrapportering og sikkerhedspraksis |
|
|
1045
|
+
| [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | Komplet guide: VM + nginx + Cloudflare opsætning |
|
|
1046
|
+
| [Features Gallery](docs/FEATURES.md) | Visuel dashboard-rundvisning med skærmbilleder |
|
|
1047
|
+
|
|
1048
|
+
### 📸 Dashboard Preview
|
|
1049
|
+
|
|
1050
|
+
<details>
|
|
1051
|
+
<summary><b>Klik for at se skærmbilleder af dashboard</b></summary>
|
|
1052
|
+
|
|
1053
|
+
| Side | Skærmbillede |
|
|
1054
|
+
| ----------------- | ------------------------------------------------- |
|
|
1055
|
+
| **Udbydere** |  |
|
|
1056
|
+
| **Komboer** |  |
|
|
1057
|
+
| **Analyse** |  |
|
|
1058
|
+
| **Sundhed** |  |
|
|
1059
|
+
| **Oversætter** |  |
|
|
1060
|
+
| **Indstillinger** |  |
|
|
1061
|
+
| **CLI-værktøjer** |  |
|
|
1062
|
+
| **Brugslogfiler** |  |
|
|
1063
|
+
| **Endpunkt** |  |
|
|
1064
|
+
|
|
1065
|
+
</details>
|
|
1066
|
+
|
|
1067
|
+
---
|
|
1068
|
+
|
|
1069
|
+
## 🗺️ Køreplan
|
|
1070
|
+
|
|
1071
|
+
OmniRoute har **210+ funktioner planlagt** på tværs af flere udviklingsfaser. Her er nøgleområderne:
|
|
1072
|
+
|
|
1073
|
+
| Kategori | Planlagte funktioner | Højdepunkter |
|
|
1074
|
+
| -------------------------------- | -------------------- | ---------------------------------------------------------------------------------------------------------- |
|
|
1075
|
+
| 🧠 **Routing & intelligens** | 25+ | Routing med laveste latens, tag-baseret routing, kvote preflight, valg af P2C-konto |
|
|
1076
|
+
| 🔒 **Sikkerhed og overholdelse** | 20+ | SSRF-hærdning, tilsløring af legitimationsoplysninger, hastighedsgrænse pr. slutpunkt, styringsnøgleomfang |
|
|
1077
|
+
| 📊 **Observabilitet** | 15+ | OpenTelemetry-integration, kvoteovervågning i realtid, omkostningssporing pr. model |
|
|
1078
|
+
| 🔄 **Udbyderintegrationer** | 20+ | Dynamisk modelregistrering, udbydernedkøling, multi-konto Codex, Copilot-kvoteparsing |
|
|
1079
|
+
| ⚡ **Ydeevne** | 15+ | Dobbelt cachelag, promptcache, svarcache, streaming keepalive, batch API |
|
|
1080
|
+
| 🌐 **Økosystem** | 10+ | WebSocket API, config hot-reload, distribueret config butik, kommerciel tilstand |
|
|
1081
|
+
|
|
1082
|
+
### 🔜 Kommer snart
|
|
1083
|
+
|
|
1084
|
+
- 🔗 **OpenCode-integration** — Native udbyderunderstøttelse af OpenCode AI-kodnings-IDE
|
|
1085
|
+
- 🔗 **TRAE-integration** — Fuld understøttelse af TRAE AI-udviklingsrammen
|
|
1086
|
+
- 📦 **Batch API** — Asynkron batchbehandling til masseanmodninger
|
|
1087
|
+
- 🎯 **Tag-baseret Routing** — Ruteanmodninger baseret på tilpassede tags og metadata
|
|
1088
|
+
- 💰 **Laveste omkostningsstrategi** — Vælg automatisk den billigste tilgængelige udbyder
|
|
1089
|
+
|
|
1090
|
+
> 📝 Fuld funktionsspecifikationer tilgængelige i [link](docs/new-features/) (217 detaljerede specifikationer)
|
|
1091
|
+
|
|
1092
|
+
---
|
|
1093
|
+
|
|
1094
|
+
## 📧 Support
|
|
1095
|
+
|
|
1096
|
+
> 💬 **Tilmeld dig vores fællesskab!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Få hjælp, del tips, og hold dig opdateret.
|
|
1097
|
+
|
|
1098
|
+
- **Websted**: [omniroute.online](https://omniroute.online)
|
|
1099
|
+
- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
|
|
1100
|
+
- **Problemer**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
|
|
1101
|
+
- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
|
|
1102
|
+
- **Originalt projekt**: [9router by decolua](https://github.com/decolua/9router)
|
|
1103
|
+
|
|
1104
|
+
---
|
|
1105
|
+
|
|
1106
|
+
## 👥 Bidragydere
|
|
1107
|
+
|
|
1108
|
+
[](https://github.com/diegosouzapw/OmniRoute/graphs/contributors)
|
|
1109
|
+
|
|
1110
|
+
### Sådan bidrager du
|
|
1111
|
+
|
|
1112
|
+
1. Fork depotet
|
|
1113
|
+
2. Opret din funktionsgren (`git checkout -b feature/amazing-feature`)
|
|
1114
|
+
3. Bekræft dine ændringer (`git commit -m 'Add amazing feature'`)
|
|
1115
|
+
4. Skub til grenen (`git push origin feature/amazing-feature`)
|
|
1116
|
+
5. Åbn en pull-anmodning
|
|
1117
|
+
|
|
1118
|
+
Se [CONTRIBUTING.md](CONTRIBUTING.md) for detaljerede retningslinjer.
|
|
1119
|
+
|
|
1120
|
+
### Frigiver en ny version
|
|
1121
|
+
|
|
1122
|
+
```bash
|
|
1123
|
+
# Create a release — npm publish happens automatically
|
|
1124
|
+
gh release create v1.0.6 --title "v1.0.6" --generate-notes
|
|
1125
|
+
```
|
|
1126
|
+
|
|
1127
|
+
---
|
|
1128
|
+
|
|
1129
|
+
## 📊 Stjernehistorie
|
|
1130
|
+
|
|
1131
|
+
<a href="https://star-history.com/#diegosouzapw/OmniRoute&Date">
|
|
1132
|
+
<picture>
|
|
1133
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date&theme=dark" />
|
|
1134
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
|
|
1135
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
|
|
1136
|
+
</picture>
|
|
1137
|
+
</a>
|
|
1138
|
+
|
|
1139
|
+
---
|
|
1140
|
+
|
|
1141
|
+
## 🙏 Tak
|
|
1142
|
+
|
|
1143
|
+
Særlig tak til **[9router](https://github.com/decolua/9router)** af **[decolua](https://github.com/decolua)** — det originale projekt, der inspirerede denne gaffel. OmniRoute bygger på det utrolige fundament med yderligere funktioner, multimodale API'er og en fuld TypeScript-omskrivning.
|
|
1144
|
+
|
|
1145
|
+
Særlig tak til **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** — den originale Go-implementering, der inspirerede denne JavaScript-port.
|
|
1146
|
+
|
|
1147
|
+
---
|
|
1148
|
+
|
|
1149
|
+
## 📄 Licens
|
|
1150
|
+
|
|
1151
|
+
MIT-licens - se [LICENSE](LICENSE) for detaljer.
|
|
1152
|
+
|
|
1153
|
+
---
|
|
1154
|
+
|
|
1155
|
+
---
|
|
1156
|
+
|
|
1157
|
+
## 🇧🇷 OmniRoute — Gateway de IA Gratis
|
|
1158
|
+
|
|
1159
|
+
<a name="-omniroute--gateway-de-ia-gratuito"></a>
|
|
1160
|
+
|
|
1161
|
+
### Nunca pare de codar. Roteamento inteligente para **modelos de IA GRATUITOS e de baixo custo** com fallback automático.
|
|
1162
|
+
|
|
1163
|
+
_Seu proxy universal de API — et slutpunkt, 36+ tests, nul nedetid._
|
|
1164
|
+
|
|
1165
|
+
### 🌐 Internacionalização (i18n)
|
|
1166
|
+
|
|
1167
|
+
O dashboard til OmniRoute understøtter **multiplos idiomas**. Atualmente disponível em:
|
|
1168
|
+
|
|
1169
|
+
| Idioma | Kode | Status |
|
|
1170
|
+
| --------------------- | ------- | ---------- |
|
|
1171
|
+
| 🇺🇸 Engelsk | `en` | ✅ Komplet |
|
|
1172
|
+
| 🇧🇷 Português (Brasil) | `pt-BR` | ✅ Komplet |
|
|
1173
|
+
|
|
1174
|
+
**Para trocar o idioma:** Click no selector de idioma (🇺🇸 EN) no header do dashboard → selection o idioma desejado.
|
|
1175
|
+
|
|
1176
|
+
**Sådan tilføjes et nyt formsprog:**
|
|
1177
|
+
|
|
1178
|
+
1. Crie `src/i18n/messages/{codigo}.json` baseado em `en.json`
|
|
1179
|
+
2. Adicione o código em `src/i18n/config.ts` → `LOCALES` og `LANGUAGES`
|
|
1180
|
+
3. Reinicie o servidor
|
|
1181
|
+
|
|
1182
|
+
### ⚡ Início Rápido
|
|
1183
|
+
|
|
1184
|
+
```bash
|
|
1185
|
+
# Instalar via npm
|
|
1186
|
+
npx omniroute@latest
|
|
1187
|
+
|
|
1188
|
+
# Ou rodar do código-fonte
|
|
1189
|
+
cp .env.example .env
|
|
1190
|
+
npm install
|
|
1191
|
+
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
|
|
1192
|
+
```
|
|
1193
|
+
|
|
1194
|
+
### 🐳 Docker
|
|
1195
|
+
|
|
1196
|
+
```bash
|
|
1197
|
+
docker run -d --name omniroute -p 20128:20128 diegosouzapw/omniroute:latest
|
|
1198
|
+
```
|
|
1199
|
+
|
|
1200
|
+
### 🔑 Funcionalidades Principais
|
|
1201
|
+
|
|
1202
|
+
- **36+ provedores de IA** — Claude, GPT, Gemini, Llama, Qwen, DeepSeek, e mais
|
|
1203
|
+
- **Roteamento inteligente** — Fallback automático entre provedores
|
|
1204
|
+
- **Tradução de formato** — OpenAI ↔ Claude ↔ Gemini automaticamente
|
|
1205
|
+
- **Multi-conta** — Múltiplas contas por provedor com seleção inteligente
|
|
1206
|
+
- **Cache semântico** — Reduz custos e latência
|
|
1207
|
+
- **OAuth automático** — Tokens renovam automaticamente
|
|
1208
|
+
- **Combos personalizados** — 6 estratégias de roteamento
|
|
1209
|
+
- **Dashboard komplet** — Overvågning, logfiler, analyser, konfigurationer
|
|
1210
|
+
- **CLI Tools** — Konfigurer Claude Code, Codex, Cursor, Cline com um clique
|
|
1211
|
+
- **100% TypeScript** — Código limpo e tipado
|
|
1212
|
+
|
|
1213
|
+
### 📖 Dokumentation
|
|
1214
|
+
|
|
1215
|
+
| Dokument | Beskrivelse |
|
|
1216
|
+
| ----------------------------------------------- | ---------------------------------------------- |
|
|
1217
|
+
| [Guia do Usuário](docs/USER_GUIDE.md) | Provedores, combos, CLI, implementering |
|
|
1218
|
+
| [Referência da API](docs/API_REFERENCE.md) | Todos os endepunkter com eksempler |
|
|
1219
|
+
| [Solução de Problemas](docs/TROUBLESHOOTING.md) | Problemas comuns e soluções |
|
|
1220
|
+
| [Arquitetura](docs/ARCHITECTURE.md) | Arquitetura e internos do systema |
|
|
1221
|
+
| [Contribuição](CONTRIBUTING.md) | Opsætning af desenvolvimento og retningslinjer |
|
|
1222
|
+
| [Deploy em VM](docs/VM_DEPLOYMENT_GUIDE.md) | Komplet: VM + nginx + Cloudflare |
|
|
1223
|
+
|
|
1224
|
+
### 📧 Støtte
|
|
1225
|
+
|
|
1226
|
+
> 💬 **Entre para a comunidade!** [Grupo WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Træk til, kompartilhe dicas e fique atualizado.
|
|
1227
|
+
|
|
1228
|
+
- **Websted**: [omniroute.online](https://omniroute.online)
|
|
1229
|
+
- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
|
|
1230
|
+
- **Problemer**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
|
|
1231
|
+
|
|
1232
|
+
---
|
|
1233
|
+
|
|
1234
|
+
<div align="center">
|
|
1235
|
+
<sub>Bygget med ❤️ for udviklere, der koder 24/7</sub>
|
|
1236
|
+
<br/>
|
|
1237
|
+
<sub><a href="https://omniroute.online">omniroute.online</a></sub>
|
|
1238
|
+
</div>
|