omniroute 3.4.5 → 3.4.6
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/app/.next/BUILD_ID +1 -1
- package/app/.next/build-manifest.json +3 -3
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/audit/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cache/page.js.nft.json +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/memory/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page.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_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +1 -1
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/api/monitoring/health/route.js +3 -3
- package/app/.next/server/app/api/provider-models/route.js +2 -2
- package/app/.next/server/app/api/provider-nodes/[id]/route.js +2 -2
- package/app/.next/server/app/api/provider-nodes/route.js +3 -3
- package/app/.next/server/app/api/provider-nodes/validate/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route.js +1 -1
- package/app/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/sync-models/route.js +3 -3
- package/app/.next/server/app/api/providers/[id]/sync-models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/[id]/test/route.js +6 -6
- package/app/.next/server/app/api/providers/route.js +4 -4
- package/app/.next/server/app/api/providers/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/test-batch/route.js +5 -5
- package/app/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
- package/app/.next/server/app/api/providers/validate/route.js +1 -1
- package/app/.next/server/app/api/system/version/route.js.nft.json +1 -1
- package/app/.next/server/app/api/usage/[connectionId]/route.js +2 -2
- package/app/.next/server/app/api/usage/provider-limits/route.js +5 -5
- package/app/.next/server/app/api/usage/provider-limits/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/models/route.js +4 -4
- package/app/.next/server/app/api/v1/models/route.js.nft.json +1 -1
- package/app/.next/server/app/api/v1/route.js +4 -4
- package/app/.next/server/app/api/v1/route.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_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0.7zz6j._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0.lz97q._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0.m9_5-._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__00-bzx_._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__00hsd7k._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__00i_ryi._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__01fudn9._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__024slax._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__030_-af._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__03gl9dh._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__03x69ll._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__047np0t._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__04lc9.m._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__05u48b-._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__06dr~pl._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__06hr_sx._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__06r5eje._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__07.ui7z._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__075j.5s._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__07ju0wx._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__07wj.c4._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__08-9vz.._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0908q-_._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__09blmoy._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__09c50mp._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0a.3c_r._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0bkx9sd._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0c4v_hg._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0c5t729._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0cem6i6._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0d-qyrk._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0d-rd-n._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0djfz6n._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0dmb7bd._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0e7dp.z._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0el_v65._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0enebbv._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0enecpa._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0eps0zu._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0fbv0zh._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0fmf-tk._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0fw0v5q._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0g0b9au._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0gukblk._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0h-q5l0._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0h1fgwr._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0h86b7i._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0h~a5f1._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0irqapk._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0j0ez8_._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0jacr87._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0jnihz9._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0jp3yj4._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0llqbda._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0m-356c._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0mj7x5~._.js +8 -8
- package/app/.next/server/chunks/[root-of-the-server]__0mpnloa._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0n-~kvf._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0n.gjo8._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0n0nara._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0ncz8xj._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0oph175._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0p3a7_l._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0pl_899._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0prott7._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0pwiejj._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0pxqo8v._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0q04t~4._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0q9h_5u._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0qaruz-._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0qka2s7._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0rnvi83._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0rpwwig._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0rs2ec_._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0s1dq3.._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0s1ya.l._.js +5 -5
- package/app/.next/server/chunks/[root-of-the-server]__0svm~lc._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0t83olx._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0tsl88m._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0uctzvq._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0vkqjj1._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0vwq47l._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0vx1juw._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0vzvfbd._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0w39cdo._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0wc__c~._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0y2h760._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0y_c7uk._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0~8fltv._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0~dj8ev._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__10.x-iq._.js +4 -4
- package/app/.next/server/chunks/[root-of-the-server]__10e1a_z._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__10o_k-p._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__10smy7g._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__11wa4b~._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__11xpr8u._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__122-jdl._.js +8 -8
- package/app/.next/server/chunks/[root-of-the-server]__12e9-l1._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__12gh.g1._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__136nal9._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__13_i443._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__13c-d_4._.js +2 -2
- package/app/.next/server/chunks/_0-jnvci._.js +1 -1
- package/app/.next/server/chunks/_0-~thzo._.js +1 -1
- package/app/.next/server/chunks/_00.pgsp._.js +1 -1
- package/app/.next/server/chunks/_013gowh._.js +1 -1
- package/app/.next/server/chunks/{_03c-j3o._.js → _02~yzex._.js} +2 -2
- package/app/.next/server/chunks/_036lxbr._.js +1 -1
- package/app/.next/server/chunks/_05reh6o._.js +1 -1
- package/app/.next/server/chunks/_0a3.3sc._.js +1 -1
- package/app/.next/server/chunks/_0c.abwr._.js +1 -1
- package/app/.next/server/chunks/_0due8oe._.js +2 -2
- package/app/.next/server/chunks/_0h-j8c2._.js +1 -1
- package/app/.next/server/chunks/_0k43pd6._.js +3 -3
- package/app/.next/server/chunks/_0vx-r0i._.js +2 -2
- package/app/.next/server/chunks/_10.rw9f._.js +1 -1
- package/app/.next/server/chunks/_13mo7j5._.js +1 -1
- package/app/.next/server/chunks/src_0f_le~m._.js +1 -1
- package/app/.next/server/chunks/ssr/_008ht2n._.js +2 -2
- package/app/.next/server/chunks/ssr/_0oo1f90._.js +2 -2
- package/app/.next/server/chunks/ssr/_0~laquj._.js +1 -1
- package/app/.next/server/chunks/ssr/src_04gjot1._.js +1 -1
- package/app/.next/server/chunks/ssr/src_app_(dashboard)_dashboard_cache_04_vca6._.js +1 -1
- package/app/.next/server/chunks/ssr/{src_app_(dashboard)_dashboard_settings_0ni3aus._.js → src_app_(dashboard)_dashboard_settings_09gq48u._.js} +2 -2
- package/app/.next/server/chunks/ssr/src_i18n_messages_en_json_[json]_cjs_13rg.m2._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_pt-BR_json_[json]_cjs_01n5fvn._.js +1 -1
- package/app/.next/server/chunks/ssr/src_i18n_messages_pt_json_[json]_cjs_0fwb8p.._.js +1 -1
- package/app/.next/server/chunks/ssr/src_shared_0jy4djq._.js +3 -0
- package/app/.next/server/chunks/ssr/src_shared_components_0v5o286._.js +3 -0
- package/app/.next/server/middleware-build-manifest.js +3 -3
- package/app/.next/server/pages/500.html +1 -1
- 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/{03~_6b5~n101_.js → 0.ap2gsi3d-1e.js} +1 -1
- package/app/.next/static/chunks/08iujr48xci8k.js +1 -0
- package/app/.next/static/chunks/{0up_y.7qkqwxz.js → 08n6n76lz~vt6.js} +1 -1
- package/app/.next/static/chunks/{060zmf~qn1q6y.js → 0f611s~575pn8.js} +1 -1
- package/app/.next/static/chunks/0y5kx9rgeb6~_.js +1 -0
- package/app/.next/static/chunks/13xz-222deqiy.js +1 -0
- package/app/CHANGELOG.md +18 -0
- package/app/docs/openapi.yaml +1 -1
- package/app/llm.txt +2 -2
- package/app/open-sse/handlers/chatCore.ts +2 -2
- package/app/open-sse/package.json +1 -1
- package/app/open-sse/translator/request/claude-to-gemini.ts +17 -0
- package/app/open-sse/translator/request/openai-to-gemini.ts +14 -3
- package/app/open-sse/utils/stream.ts +2 -2
- package/app/package-lock.json +3 -3
- package/app/package.json +1 -1
- package/app/src/app/(dashboard)/dashboard/cache/components/CacheTrends.tsx +19 -12
- package/app/src/app/(dashboard)/dashboard/cache/page.tsx +0 -3
- package/app/src/app/(dashboard)/dashboard/memory/page.tsx +20 -20
- package/app/src/i18n/messages/en.json +55 -1
- package/app/src/i18n/messages/pt-BR.json +53 -0
- package/app/src/i18n/messages/pt.json +54 -1
- package/app/src/shared/constants/providers.ts +40 -0
- package/app/src/shared/constants/sidebarVisibility.ts +6 -0
- package/app/src/shared/utils/circuitBreaker.ts +14 -4
- package/package.json +1 -1
- package/app/.next/server/chunks/ssr/src_05ekey-._.js +0 -3
- package/app/.next/server/chunks/ssr/src_100xxow._.js +0 -3
- package/app/.next/static/chunks/05tcrkqknq.20.js +0 -1
- package/app/.next/static/chunks/0eng4c9gz1s4..js +0 -1
- package/app/.next/static/chunks/0go~kwn1zgxnd.js +0 -1
- /package/app/.next/static/{Dbb1D6OoD7WlyZuPBm3L6 → ImZm5czz4prt8gnJPx7vv}/_buildManifest.js +0 -0
- /package/app/.next/static/{Dbb1D6OoD7WlyZuPBm3L6 → ImZm5czz4prt8gnJPx7vv}/_clientMiddlewareManifest.js +0 -0
- /package/app/.next/static/{Dbb1D6OoD7WlyZuPBm3L6 → ImZm5czz4prt8gnJPx7vv}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,628029,e=>{"use strict";var s=e.i(969353);e.s(["Badge",()=>s.default])},11131,e=>{"use strict";var s=e.i(629342);e.s(["EmptyState",()=>s.default])},565650,e=>{"use strict";e.i(342923),e.i(80173),e.i(907714),e.i(393718),e.i(703166),e.i(454149),e.i(822124),e.i(969353),e.i(635055),e.i(897844),e.i(450222),e.i(647829),e.i(6998),e.i(982131),e.i(116016),e.i(279743),e.i(193464),e.i(548036),e.i(566770),e.i(953789),e.i(8839),e.i(227404),e.i(621745),e.i(567955),e.i(17517),e.i(419947),e.i(323060),e.i(642440),e.i(629342),e.i(816062),e.i(690777),e.i(563201),e.i(115243),e.i(165149),e.i(359505),e.s([],565650)},11477,e=>{"use strict";var s=e.i(393718);e.s(["Card",()=>s.default])},474078,e=>{"use strict";var s=e.i(342923);e.s(["Button",()=>s.default])},339971,e=>{"use strict";var s=e.i(80173);e.s(["Input",()=>s.default])},87855,e=>{"use strict";var s=e.i(703166);e.s(["Modal",()=>s.default])},148943,e=>{"use strict";var s=e.i(635055);e.s(["Toggle",()=>s.default])},105370,e=>{"use strict";var s=e.i(8839);e.s(["ProxyConfigModal",()=>s.default])},516495,e=>{"use strict";e.s(["ROUTING_STRATEGIES",0,[{value:"priority",labelKey:"priority",combosDescKey:"priorityDesc",settingsDescKey:"priorityDesc",icon:"sort"},{value:"weighted",labelKey:"weighted",combosDescKey:"weightedDesc",settingsDescKey:"weightedDesc",icon:"percent"},{value:"round-robin",labelKey:"roundRobin",combosDescKey:"roundRobinDesc",settingsDescKey:"roundRobinDesc",icon:"autorenew"},{value:"fill-first",labelKey:"fillFirst",combosDescKey:"fillFirstDesc",settingsDescKey:"fillFirstDesc",icon:"vertical_align_top"},{value:"p2c",labelKey:"p2c",combosDescKey:"p2cDesc",settingsDescKey:"p2cDesc",icon:"balance"},{value:"random",labelKey:"random",combosDescKey:"randomDesc",settingsDescKey:"randomDesc",icon:"shuffle"},{value:"least-used",labelKey:"leastUsed",combosDescKey:"leastUsedDesc",settingsDescKey:"leastUsedDesc",icon:"low_priority"},{value:"cost-optimized",labelKey:"costOpt",combosDescKey:"costOptimizedDesc",settingsDescKey:"costOptDesc",icon:"savings"},{value:"strict-random",labelKey:"strictRandom",combosDescKey:"strictRandomDesc",settingsDescKey:"strictRandomDesc",icon:"casino"}],"SETTINGS_FALLBACK_STRATEGY_VALUES",0,["fill-first","round-robin","p2c","random","least-used","cost-optimized","strict-random"]])}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,565650,e=>{"use strict";e.i(342923),e.i(80173),e.i(907714),e.i(393718),e.i(703166),e.i(454149),e.i(822124),e.i(969353),e.i(635055),e.i(897844),e.i(450222),e.i(647829),e.i(6998),e.i(982131),e.i(116016),e.i(279743),e.i(193464),e.i(548036),e.i(566770),e.i(953789),e.i(8839),e.i(227404),e.i(621745),e.i(567955),e.i(17517),e.i(419947),e.i(323060),e.i(642440),e.i(629342),e.i(816062),e.i(690777),e.i(563201),e.i(115243),e.i(165149),e.i(359505),e.s([],565650)},11477,e=>{"use strict";var t=e.i(393718);e.s(["Card",()=>t.default])},474078,e=>{"use strict";var t=e.i(342923);e.s(["Button",()=>t.default])},339971,e=>{"use strict";var t=e.i(80173);e.s(["Input",()=>t.default])},961430,e=>{"use strict";var t=e.i(907714);e.s(["Select",()=>t.default])},628029,e=>{"use strict";var t=e.i(969353);e.s(["Badge",()=>t.default])},168903,e=>{"use strict";var t=e.i(843476),s=e.i(271645);e.i(565650);var i=e.i(11477),a=e.i(628029),l=e.i(474078),r=e.i(339971),c=e.i(961430),n=e.i(948148);e.s(["default",0,function(){let e=(0,n.useTranslations)("memory"),[d,o]=(0,s.useState)([]),[x,h]=(0,s.useState)({totalEntries:0,tokensUsed:0,hitRate:0}),[m,u]=(0,s.useState)("all"),[p,j]=(0,s.useState)(""),[f,v]=(0,s.useState)(!0);(0,s.useEffect)(()=>{y()},[]);let y=async()=>{try{let e=await fetch("/api/memory");if(e.ok){let t=await e.json();o(t.memories||[]),h(t.stats||{totalEntries:0,tokensUsed:0,hitRate:0})}}catch(e){console.error("Failed to fetch memories:",e)}finally{v(!1)}},N=async e=>{try{await fetch(`/api/memory/${e}`,{method:"DELETE"}),o(d.filter(t=>t.id!==e))}catch(e){console.error("Failed to delete memory:",e)}},g=d.filter(e=>{let t="all"===m||e.type===m,s=""===p||e.content.toLowerCase().includes(p.toLowerCase())||e.key.toLowerCase().includes(p.toLowerCase());return t&&s});return f?(0,t.jsx)("div",{className:"flex items-center justify-center h-64",children:(0,t.jsx)("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900"})}):(0,t.jsxs)("div",{className:"space-y-6 p-6",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)("h1",{className:"text-2xl font-bold",children:e("title")}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(l.Button,{variant:"outline",onClick:()=>{let e=new Blob([JSON.stringify(d,null,2)],{type:"application/json"}),t=URL.createObjectURL(e),s=document.createElement("a");s.href=t,s.download=`memory-export-${new Date().toISOString()}.json`,s.click()},children:e("export")}),(0,t.jsx)(l.Button,{variant:"outline",children:e("import")}),(0,t.jsx)(l.Button,{children:e("addMemory")})]})]}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[(0,t.jsx)(i.Card,{children:(0,t.jsxs)("div",{className:"p-4",children:[(0,t.jsx)("div",{className:"text-sm text-gray-500",children:e("totalEntries")}),(0,t.jsx)("div",{className:"text-2xl font-bold",children:x.totalEntries})]})}),(0,t.jsx)(i.Card,{children:(0,t.jsxs)("div",{className:"p-4",children:[(0,t.jsx)("div",{className:"text-sm text-gray-500",children:e("tokensUsed")}),(0,t.jsx)("div",{className:"text-2xl font-bold",children:x.tokensUsed.toLocaleString()})]})}),(0,t.jsx)(i.Card,{children:(0,t.jsxs)("div",{className:"p-4",children:[(0,t.jsx)("div",{className:"text-sm text-gray-500",children:e("hitRate")}),(0,t.jsxs)("div",{className:"text-2xl font-bold",children:[(100*x.hitRate).toFixed(1),"%"]})]})})]}),(0,t.jsx)(i.Card,{children:(0,t.jsxs)("div",{className:"p-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,t.jsx)("h2",{className:"text-lg font-semibold",children:e("memories")}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(r.Input,{placeholder:e("search"),value:p,onChange:e=>j(e.target.value),className:"w-64"}),(0,t.jsxs)(c.Select,{value:m,onChange:e=>u(e.target.value),children:[(0,t.jsx)("option",{value:"all",children:e("allTypes")}),(0,t.jsx)("option",{value:"factual",children:e("factual")}),(0,t.jsx)("option",{value:"episodic",children:e("episodic")}),(0,t.jsx)("option",{value:"procedural",children:e("procedural")}),(0,t.jsx)("option",{value:"semantic",children:e("semantic")})]})]})]}),(0,t.jsx)("div",{className:"overflow-x-auto",children:(0,t.jsxs)("table",{className:"w-full",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{className:"border-b",children:[(0,t.jsx)("th",{className:"text-left py-2 px-4",children:e("type")}),(0,t.jsx)("th",{className:"text-left py-2 px-4",children:e("key")}),(0,t.jsx)("th",{className:"text-left py-2 px-4",children:e("content")}),(0,t.jsx)("th",{className:"text-left py-2 px-4",children:e("created")}),(0,t.jsx)("th",{className:"text-left py-2 px-4",children:e("actions")})]})}),(0,t.jsx)("tbody",{children:g.map(s=>(0,t.jsxs)("tr",{className:"border-b",children:[(0,t.jsx)("td",{className:"py-2 px-4",children:(0,t.jsx)(a.Badge,{variant:(e=>{switch(e){case"factual":return"info";case"episodic":return"success";case"procedural":return"warning";case"semantic":return"error";default:return"default"}})(s.type),children:s.type})}),(0,t.jsx)("td",{className:"py-2 px-4 font-medium",children:s.key}),(0,t.jsx)("td",{className:"py-2 px-4 max-w-md truncate",children:s.content}),(0,t.jsx)("td",{className:"py-2 px-4",children:new Date(s.createdAt).toLocaleDateString()}),(0,t.jsx)("td",{className:"py-2 px-4",children:(0,t.jsx)(l.Button,{variant:"ghost",size:"sm",onClick:()=>N(s.id),children:e("delete")})})]},s.id))})]})})]})})]})}])}]);
|
package/app/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,24 @@
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [3.4.6] - 2026-04-02
|
|
8
|
+
|
|
9
|
+
### ✨ New Features
|
|
10
|
+
|
|
11
|
+
- **Providers:** Registered new image, video, and audio generation providers from the community-requested list (#926).
|
|
12
|
+
- **Dashboard UI:** Added standalone sidebar navigation for the new Memory and Skills modules (#926).
|
|
13
|
+
- **i18n:** Added translation strings and layout mappings across 30 languages for the Memory and Skills namespaces.
|
|
14
|
+
|
|
15
|
+
### 🐛 Bug Fixes
|
|
16
|
+
|
|
17
|
+
- **Resilience:** Prevented the proxy Circuit Breaker from becoming stuck in an OPEN state indefinitely by handling direct transitions to CLOSED state inside fallback combo paths (#930).
|
|
18
|
+
- **Protocol Translation:** Patched the streaming transformer to sanitize response blocks based on the expected _source_ protocol rather than the provider _target_ protocol, fixing Anthropics models wrapped in OpenAI payloads crashing Claude Code (#929).
|
|
19
|
+
- **API Specs & Gemini:** Fixed `thought_signature` parsing in `openai-to-gemini` and `claude-to-gemini` translators, preventing HTTP 400 errors across all Gemini 3 API tool-calls.
|
|
20
|
+
- **Providers:** Cleaned up non-OpenAI-compatible endpoints preventing valid upstream connections (#926).
|
|
21
|
+
- **Cache Trends:** Fixed an invalid property mapping data mismatch causing Cache Trends UI charts to crash, and extracted redundant cache metric widgets (#926).
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
7
25
|
## [3.4.5] - 2026-04-02
|
|
8
26
|
|
|
9
27
|
### ✨ New Features
|
package/app/docs/openapi.yaml
CHANGED
package/app/llm.txt
CHANGED
|
@@ -8,7 +8,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo
|
|
|
8
8
|
|
|
9
9
|
**Key value:** One endpoint (`http://localhost:20128/v1`), unlimited models, zero downtime, minimal cost.
|
|
10
10
|
|
|
11
|
-
**Current version:** 3.4.
|
|
11
|
+
**Current version:** 3.4.6
|
|
12
12
|
|
|
13
13
|
## Tech Stack
|
|
14
14
|
|
|
@@ -277,7 +277,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo
|
|
|
277
277
|
└── .env.example # Environment variable template
|
|
278
278
|
```
|
|
279
279
|
|
|
280
|
-
## Key Features (v3.4.
|
|
280
|
+
## Key Features (v3.4.6)
|
|
281
281
|
|
|
282
282
|
### Core Proxy
|
|
283
283
|
- **60+ AI providers** with automatic format translation
|
|
@@ -1776,8 +1776,8 @@ export async function handleChatCore({
|
|
|
1776
1776
|
// Sanitize response for OpenAI SDK compatibility
|
|
1777
1777
|
// Strips non-standard fields (x_groq, usage_breakdown, service_tier, etc.)
|
|
1778
1778
|
// Extracts <think> and <thinking> tags into reasoning_content
|
|
1779
|
-
//
|
|
1780
|
-
if (
|
|
1779
|
+
// Source format determines output shape. If we are outputting OpenAI shape or pseudo-OpenAI shape, sanitize.
|
|
1780
|
+
if (sourceFormat === FORMATS.OPENAI || sourceFormat === FORMATS.OPENAI_RESPONSES) {
|
|
1781
1781
|
translatedResponse = sanitizeOpenAIResponse(translatedResponse);
|
|
1782
1782
|
}
|
|
1783
1783
|
|
|
@@ -147,6 +147,23 @@ export function claudeToGeminiRequest(model, body, stream) {
|
|
|
147
147
|
if (parts.length > 0) {
|
|
148
148
|
// Map Claude roles to Gemini roles
|
|
149
149
|
const geminiRole = msg.role === "assistant" ? "model" : "user";
|
|
150
|
+
|
|
151
|
+
// Gemini 3+ requires thoughtSignature as a sibling part in model content
|
|
152
|
+
// that contains functionCall parts. Inject if not already present from
|
|
153
|
+
// a thinking block. (#927)
|
|
154
|
+
if (geminiRole === "model") {
|
|
155
|
+
const hasFunctionCall = parts.some((p) => p.functionCall);
|
|
156
|
+
const hasSignature = parts.some((p) => p.thoughtSignature);
|
|
157
|
+
if (hasFunctionCall && !hasSignature) {
|
|
158
|
+
// Insert before the first functionCall part
|
|
159
|
+
const fcIndex = parts.findIndex((p) => p.functionCall);
|
|
160
|
+
parts.splice(fcIndex, 0, {
|
|
161
|
+
thoughtSignature: DEFAULT_THINKING_GEMINI_SIGNATURE,
|
|
162
|
+
text: "",
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
150
167
|
result.contents.push({ role: geminiRole, parts });
|
|
151
168
|
}
|
|
152
169
|
}
|
|
@@ -168,14 +168,25 @@ function openaiToGeminiBase(model, body, stream) {
|
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
if (msg.tool_calls && Array.isArray(msg.tool_calls)) {
|
|
171
|
+
// Gemini 3+ requires thoughtSignature as a sibling part in model content
|
|
172
|
+
// that contains functionCall parts. If no reasoning_content was present
|
|
173
|
+
// (which already injects the signature above), inject one now. (#927)
|
|
174
|
+
const hasSignatureAlready = parts.some((p) => p.thoughtSignature);
|
|
175
|
+
if (!hasSignatureAlready) {
|
|
176
|
+
parts.push({
|
|
177
|
+
thoughtSignature: DEFAULT_THINKING_GEMINI_SIGNATURE,
|
|
178
|
+
text: "",
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
171
182
|
const toolCallIds = [];
|
|
172
183
|
for (const tc of msg.tool_calls) {
|
|
173
184
|
if (tc.type !== "function") continue;
|
|
174
185
|
|
|
175
186
|
const args = tryParseJSON(tc.function?.arguments || "{}");
|
|
176
|
-
// Do NOT include thoughtSignature
|
|
177
|
-
//
|
|
178
|
-
//
|
|
187
|
+
// Do NOT include thoughtSignature ON the functionCall part itself — it is
|
|
188
|
+
// only valid as a separate sibling part. Including it inside functionCall
|
|
189
|
+
// causes HTTP 400 "invalid argument" (#725).
|
|
179
190
|
parts.push({
|
|
180
191
|
functionCall: {
|
|
181
192
|
id: tc.id,
|
|
@@ -585,9 +585,9 @@ export function createSSEStream(options: StreamOptions = {}) {
|
|
|
585
585
|
// Content for call log is accumulated only from parsed (above) to avoid double-counting;
|
|
586
586
|
// do not add again from item here.
|
|
587
587
|
|
|
588
|
-
// #723, #727: Sanitize intermediate stream chunks if
|
|
588
|
+
// #723, #727: Sanitize intermediate stream chunks if source (client) is OpenAI format
|
|
589
589
|
let itemSanitized: Record<string, unknown> = item;
|
|
590
|
-
if (
|
|
590
|
+
if (sourceFormat === FORMATS.OPENAI || sourceFormat === FORMATS.OPENAI_RESPONSES) {
|
|
591
591
|
itemSanitized = sanitizeStreamingChunk(itemSanitized) as Record<string, unknown>;
|
|
592
592
|
|
|
593
593
|
// Extract reasoning tags from content if translation generated them
|
package/app/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omniroute",
|
|
3
|
-
"version": "3.4.
|
|
3
|
+
"version": "3.4.6",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "omniroute",
|
|
9
|
-
"version": "3.4.
|
|
9
|
+
"version": "3.4.6",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"workspaces": [
|
|
@@ -20886,7 +20886,7 @@
|
|
|
20886
20886
|
},
|
|
20887
20887
|
"open-sse": {
|
|
20888
20888
|
"name": "@omniroute/open-sse",
|
|
20889
|
-
"version": "3.4.
|
|
20889
|
+
"version": "3.4.6"
|
|
20890
20890
|
}
|
|
20891
20891
|
}
|
|
20892
20892
|
}
|
package/app/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omniroute",
|
|
3
|
-
"version": "3.4.
|
|
3
|
+
"version": "3.4.6",
|
|
4
4
|
"description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -5,9 +5,10 @@ import { useTranslations } from "next-intl";
|
|
|
5
5
|
export interface CacheTrendPoint {
|
|
6
6
|
timestamp: string;
|
|
7
7
|
requests: number;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
cachedRequests: number;
|
|
9
|
+
inputTokens: number;
|
|
10
|
+
cachedTokens: number;
|
|
11
|
+
cacheCreationTokens: number;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
interface CacheTrendsProps {
|
|
@@ -27,7 +28,8 @@ export default function CacheTrends({
|
|
|
27
28
|
|
|
28
29
|
const trendData: CacheTrendPoint[] = data ?? [];
|
|
29
30
|
const maxRequests = trendData.length > 0 ? Math.max(...trendData.map((p) => p.requests), 1) : 1;
|
|
30
|
-
const
|
|
31
|
+
const maxCachedRequests =
|
|
32
|
+
trendData.length > 0 ? Math.max(...trendData.map((p) => p.cachedRequests), 0) : 0;
|
|
31
33
|
|
|
32
34
|
return (
|
|
33
35
|
<div
|
|
@@ -69,17 +71,21 @@ export default function CacheTrends({
|
|
|
69
71
|
</div>
|
|
70
72
|
) : (
|
|
71
73
|
<>
|
|
72
|
-
{
|
|
74
|
+
{maxCachedRequests > 0 && (
|
|
73
75
|
<div className="text-xs text-text-muted">
|
|
74
|
-
|
|
75
|
-
<span className="font-medium text-foreground">
|
|
76
|
+
{t("peakCached")}:{" "}
|
|
77
|
+
<span className="font-medium text-foreground">
|
|
78
|
+
{maxCachedRequests} / {maxRequests}
|
|
79
|
+
</span>
|
|
76
80
|
</div>
|
|
77
81
|
)}
|
|
78
82
|
<div className="flex items-end gap-1 h-32">
|
|
79
83
|
{trendData.map((point) => {
|
|
80
84
|
const height = Math.max(4, (point.requests / maxRequests) * 100);
|
|
81
|
-
const
|
|
82
|
-
point.requests > 0
|
|
85
|
+
const cachedHeight =
|
|
86
|
+
point.requests > 0
|
|
87
|
+
? Math.max(2, (point.cachedRequests / point.requests) * height)
|
|
88
|
+
: 0;
|
|
83
89
|
const hour = new Date(point.timestamp).toLocaleTimeString([], {
|
|
84
90
|
hour: "2-digit",
|
|
85
91
|
minute: "2-digit",
|
|
@@ -92,16 +98,17 @@ export default function CacheTrends({
|
|
|
92
98
|
className="flex-1 flex flex-col items-center gap-1 group relative"
|
|
93
99
|
>
|
|
94
100
|
<div className="absolute bottom-full mb-1 hidden group-hover:block bg-surface-raised border border-border rounded px-2 py-1 text-xs whitespace-nowrap z-10">
|
|
95
|
-
{hour}: {point.requests} requests, {point.
|
|
101
|
+
{hour}: {point.requests} {t("requests").toLowerCase()}, {point.cachedRequests}{" "}
|
|
102
|
+
{t("cached").toLowerCase()}
|
|
96
103
|
</div>
|
|
97
104
|
<div className="w-full flex flex-col justify-end h-full gap-px">
|
|
98
105
|
<div
|
|
99
106
|
className="w-full bg-green-500/30 rounded-t"
|
|
100
|
-
style={{ height: `${
|
|
107
|
+
style={{ height: `${cachedHeight}%` }}
|
|
101
108
|
/>
|
|
102
109
|
<div
|
|
103
110
|
className="w-full bg-text-muted/20 rounded-t"
|
|
104
|
-
style={{ height: `${height -
|
|
111
|
+
style={{ height: `${height - cachedHeight}%` }}
|
|
105
112
|
/>
|
|
106
113
|
</div>
|
|
107
114
|
<span className="text-[10px] text-text-muted truncate w-full text-center">
|
|
@@ -108,32 +108,32 @@ export default function MemoryPage() {
|
|
|
108
108
|
return (
|
|
109
109
|
<div className="space-y-6 p-6">
|
|
110
110
|
<div className="flex items-center justify-between">
|
|
111
|
-
<h1 className="text-2xl font-bold">
|
|
111
|
+
<h1 className="text-2xl font-bold">{t("title")}</h1>
|
|
112
112
|
<div className="flex gap-2">
|
|
113
113
|
<Button variant="outline" onClick={handleExport}>
|
|
114
|
-
|
|
114
|
+
{t("export")}
|
|
115
115
|
</Button>
|
|
116
|
-
<Button variant="outline">
|
|
117
|
-
<Button>
|
|
116
|
+
<Button variant="outline">{t("import")}</Button>
|
|
117
|
+
<Button>{t("addMemory")}</Button>
|
|
118
118
|
</div>
|
|
119
119
|
</div>
|
|
120
120
|
|
|
121
121
|
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
|
|
122
122
|
<Card>
|
|
123
123
|
<div className="p-4">
|
|
124
|
-
<div className="text-sm text-gray-500">
|
|
124
|
+
<div className="text-sm text-gray-500">{t("totalEntries")}</div>
|
|
125
125
|
<div className="text-2xl font-bold">{stats.totalEntries}</div>
|
|
126
126
|
</div>
|
|
127
127
|
</Card>
|
|
128
128
|
<Card>
|
|
129
129
|
<div className="p-4">
|
|
130
|
-
<div className="text-sm text-gray-500">
|
|
130
|
+
<div className="text-sm text-gray-500">{t("tokensUsed")}</div>
|
|
131
131
|
<div className="text-2xl font-bold">{stats.tokensUsed.toLocaleString()}</div>
|
|
132
132
|
</div>
|
|
133
133
|
</Card>
|
|
134
134
|
<Card>
|
|
135
135
|
<div className="p-4">
|
|
136
|
-
<div className="text-sm text-gray-500">
|
|
136
|
+
<div className="text-sm text-gray-500">{t("hitRate")}</div>
|
|
137
137
|
<div className="text-2xl font-bold">{(stats.hitRate * 100).toFixed(1)}%</div>
|
|
138
138
|
</div>
|
|
139
139
|
</Card>
|
|
@@ -142,20 +142,20 @@ export default function MemoryPage() {
|
|
|
142
142
|
<Card>
|
|
143
143
|
<div className="p-4">
|
|
144
144
|
<div className="flex items-center justify-between mb-4">
|
|
145
|
-
<h2 className="text-lg font-semibold">
|
|
145
|
+
<h2 className="text-lg font-semibold">{t("memories")}</h2>
|
|
146
146
|
<div className="flex gap-2">
|
|
147
147
|
<Input
|
|
148
|
-
placeholder="
|
|
148
|
+
placeholder={t("search")}
|
|
149
149
|
value={searchQuery}
|
|
150
150
|
onChange={(e) => setSearchQuery(e.target.value)}
|
|
151
151
|
className="w-64"
|
|
152
152
|
/>
|
|
153
153
|
<Select value={filterType} onChange={(e) => setFilterType(e.target.value)}>
|
|
154
|
-
<option value="all">
|
|
155
|
-
<option value="factual">
|
|
156
|
-
<option value="episodic">
|
|
157
|
-
<option value="procedural">
|
|
158
|
-
<option value="semantic">
|
|
154
|
+
<option value="all">{t("allTypes")}</option>
|
|
155
|
+
<option value="factual">{t("factual")}</option>
|
|
156
|
+
<option value="episodic">{t("episodic")}</option>
|
|
157
|
+
<option value="procedural">{t("procedural")}</option>
|
|
158
|
+
<option value="semantic">{t("semantic")}</option>
|
|
159
159
|
</Select>
|
|
160
160
|
</div>
|
|
161
161
|
</div>
|
|
@@ -164,11 +164,11 @@ export default function MemoryPage() {
|
|
|
164
164
|
<table className="w-full">
|
|
165
165
|
<thead>
|
|
166
166
|
<tr className="border-b">
|
|
167
|
-
<th className="text-left py-2 px-4">
|
|
168
|
-
<th className="text-left py-2 px-4">
|
|
169
|
-
<th className="text-left py-2 px-4">
|
|
170
|
-
<th className="text-left py-2 px-4">
|
|
171
|
-
<th className="text-left py-2 px-4">
|
|
167
|
+
<th className="text-left py-2 px-4">{t("type")}</th>
|
|
168
|
+
<th className="text-left py-2 px-4">{t("key")}</th>
|
|
169
|
+
<th className="text-left py-2 px-4">{t("content")}</th>
|
|
170
|
+
<th className="text-left py-2 px-4">{t("created")}</th>
|
|
171
|
+
<th className="text-left py-2 px-4">{t("actions")}</th>
|
|
172
172
|
</tr>
|
|
173
173
|
</thead>
|
|
174
174
|
<tbody>
|
|
@@ -182,7 +182,7 @@ export default function MemoryPage() {
|
|
|
182
182
|
<td className="py-2 px-4">{new Date(memory.createdAt).toLocaleDateString()}</td>
|
|
183
183
|
<td className="py-2 px-4">
|
|
184
184
|
<Button variant="ghost" size="sm" onClick={() => handleDelete(memory.id)}>
|
|
185
|
-
|
|
185
|
+
{t("delete")}
|
|
186
186
|
</Button>
|
|
187
187
|
</td>
|
|
188
188
|
</tr>
|
|
@@ -156,6 +156,8 @@
|
|
|
156
156
|
"playground": "Playground",
|
|
157
157
|
"searchTools": "Search Tools",
|
|
158
158
|
"agents": "Agents",
|
|
159
|
+
"memory": "Memory",
|
|
160
|
+
"skills": "Skills",
|
|
159
161
|
"docs": "Docs",
|
|
160
162
|
"issues": "Issues",
|
|
161
163
|
"endpoints": "Endpoints",
|
|
@@ -1266,6 +1268,57 @@
|
|
|
1266
1268
|
"events": "Events",
|
|
1267
1269
|
"artifacts": "Artifacts"
|
|
1268
1270
|
},
|
|
1271
|
+
"memory": {
|
|
1272
|
+
"title": "Memory Management",
|
|
1273
|
+
"description": "View and manage stored memory entries",
|
|
1274
|
+
"memories": "Memories",
|
|
1275
|
+
"totalEntries": "Total Entries",
|
|
1276
|
+
"tokensUsed": "Tokens Used",
|
|
1277
|
+
"hitRate": "Hit Rate",
|
|
1278
|
+
"loading": "Loading memories...",
|
|
1279
|
+
"noMemories": "No memories found",
|
|
1280
|
+
"search": "Search memories...",
|
|
1281
|
+
"allTypes": "All Types",
|
|
1282
|
+
"export": "Export",
|
|
1283
|
+
"import": "Import",
|
|
1284
|
+
"addMemory": "Add Memory",
|
|
1285
|
+
"type": "Type",
|
|
1286
|
+
"key": "Key",
|
|
1287
|
+
"content": "Content",
|
|
1288
|
+
"created": "Created",
|
|
1289
|
+
"actions": "Actions",
|
|
1290
|
+
"factual": "Factual",
|
|
1291
|
+
"episodic": "Episodic",
|
|
1292
|
+
"procedural": "Procedural",
|
|
1293
|
+
"semantic": "Semantic"
|
|
1294
|
+
},
|
|
1295
|
+
"skills": {
|
|
1296
|
+
"title": "Skills",
|
|
1297
|
+
"description": "Manage and monitor AI skills",
|
|
1298
|
+
"skillsTab": "Skills",
|
|
1299
|
+
"executionsTab": "Executions",
|
|
1300
|
+
"sandboxTab": "Sandbox",
|
|
1301
|
+
"loading": "Loading skills...",
|
|
1302
|
+
"noSkills": "No skills found",
|
|
1303
|
+
"noExecutions": "No executions found",
|
|
1304
|
+
"enabled": "Enabled",
|
|
1305
|
+
"disabled": "Disabled",
|
|
1306
|
+
"version": "Version",
|
|
1307
|
+
"tableDescription": "Description",
|
|
1308
|
+
"skill": "Skill",
|
|
1309
|
+
"status": "Status",
|
|
1310
|
+
"duration": "Duration",
|
|
1311
|
+
"time": "Time",
|
|
1312
|
+
"sandboxConfig": "Sandbox Configuration",
|
|
1313
|
+
"cpuLimit": "CPU Limit",
|
|
1314
|
+
"cpuLimitDesc": "Maximum execution time per skill",
|
|
1315
|
+
"memoryLimit": "Memory Limit",
|
|
1316
|
+
"memoryLimitDesc": "Maximum memory allocation",
|
|
1317
|
+
"timeout": "Timeout",
|
|
1318
|
+
"timeoutDesc": "Maximum wait time for response",
|
|
1319
|
+
"networkAccess": "Network Access",
|
|
1320
|
+
"networkAccessDesc": "Allow outbound network requests"
|
|
1321
|
+
},
|
|
1269
1322
|
"health": {
|
|
1270
1323
|
"title": "System Health",
|
|
1271
1324
|
"description": "Real-time monitoring of your OmniRoute instance",
|
|
@@ -3015,6 +3068,7 @@
|
|
|
3015
3068
|
"cachedTokensCol": "Cached",
|
|
3016
3069
|
"cacheCreation": "Creation",
|
|
3017
3070
|
"trend24h": "Cache Trend (24h)",
|
|
3071
|
+
"peakCached": "Peak cached",
|
|
3018
3072
|
"cached": "Cached",
|
|
3019
3073
|
"overview": "Overview",
|
|
3020
3074
|
"entries": "Entries",
|
|
@@ -3028,4 +3082,4 @@
|
|
|
3028
3082
|
"expires": "Expires",
|
|
3029
3083
|
"actions": "Actions"
|
|
3030
3084
|
}
|
|
3031
|
-
}
|
|
3085
|
+
}
|
|
@@ -156,6 +156,8 @@
|
|
|
156
156
|
"playground": "Playground",
|
|
157
157
|
"searchTools": "Search Tools",
|
|
158
158
|
"agents": "Agentes",
|
|
159
|
+
"memory": "Memória",
|
|
160
|
+
"skills": "Habilidades",
|
|
159
161
|
"docs": "Documentação",
|
|
160
162
|
"issues": "Problemas",
|
|
161
163
|
"endpoints": "Endpoints",
|
|
@@ -1266,6 +1268,57 @@
|
|
|
1266
1268
|
"events": "Eventos",
|
|
1267
1269
|
"artifacts": "Artefatos"
|
|
1268
1270
|
},
|
|
1271
|
+
"memory": {
|
|
1272
|
+
"title": "Gerenciamento de Memória",
|
|
1273
|
+
"description": "Visualize e gerencie entradas de memória armazenadas",
|
|
1274
|
+
"memories": "Memórias",
|
|
1275
|
+
"totalEntries": "Total de Entradas",
|
|
1276
|
+
"tokensUsed": "Tokens Usados",
|
|
1277
|
+
"hitRate": "Taxa de Acerto",
|
|
1278
|
+
"loading": "Carregando memórias...",
|
|
1279
|
+
"noMemories": "Nenhuma memória encontrada",
|
|
1280
|
+
"search": "Buscar memórias...",
|
|
1281
|
+
"allTypes": "Todos os Tipos",
|
|
1282
|
+
"export": "Exportar",
|
|
1283
|
+
"import": "Importar",
|
|
1284
|
+
"addMemory": "Adicionar Memória",
|
|
1285
|
+
"type": "Tipo",
|
|
1286
|
+
"key": "Chave",
|
|
1287
|
+
"content": "Conteúdo",
|
|
1288
|
+
"created": "Criado",
|
|
1289
|
+
"actions": "Ações",
|
|
1290
|
+
"factual": "Factual",
|
|
1291
|
+
"episodic": "Episódica",
|
|
1292
|
+
"procedural": "Procedural",
|
|
1293
|
+
"semantic": "Semântica"
|
|
1294
|
+
},
|
|
1295
|
+
"skills": {
|
|
1296
|
+
"title": "Skills",
|
|
1297
|
+
"description": "Gerencie e monitore skills de IA",
|
|
1298
|
+
"skillsTab": "Skills",
|
|
1299
|
+
"executionsTab": "Execuções",
|
|
1300
|
+
"sandboxTab": "Sandbox",
|
|
1301
|
+
"loading": "Carregando skills...",
|
|
1302
|
+
"noSkills": "Nenhuma skill encontrada",
|
|
1303
|
+
"noExecutions": "Nenhuma execução encontrada",
|
|
1304
|
+
"enabled": "Ativado",
|
|
1305
|
+
"disabled": "Desativado",
|
|
1306
|
+
"version": "Versão",
|
|
1307
|
+
"tableDescription": "Descrição",
|
|
1308
|
+
"skill": "Skill",
|
|
1309
|
+
"status": "Status",
|
|
1310
|
+
"duration": "Duração",
|
|
1311
|
+
"time": "Tempo",
|
|
1312
|
+
"sandboxConfig": "Configuração da Sandbox",
|
|
1313
|
+
"cpuLimit": "Limite de CPU",
|
|
1314
|
+
"cpuLimitDesc": "Tempo máximo de execução por skill",
|
|
1315
|
+
"memoryLimit": "Limite de Memória",
|
|
1316
|
+
"memoryLimitDesc": "Alocação máxima de memória",
|
|
1317
|
+
"timeout": "Timeout",
|
|
1318
|
+
"timeoutDesc": "Tempo máximo de espera por resposta",
|
|
1319
|
+
"networkAccess": "Acesso à Rede",
|
|
1320
|
+
"networkAccessDesc": "Permitir requisições de rede de saída"
|
|
1321
|
+
},
|
|
1269
1322
|
"health": {
|
|
1270
1323
|
"title": "Saúde do Sistema",
|
|
1271
1324
|
"description": "Monitoramento em tempo real da sua instância OmniRoute",
|
|
@@ -156,6 +156,8 @@
|
|
|
156
156
|
"playground": "Playground",
|
|
157
157
|
"searchTools": "Search Tools",
|
|
158
158
|
"agents": "Agentes",
|
|
159
|
+
"memory": "Memória",
|
|
160
|
+
"skills": "Habilidades",
|
|
159
161
|
"docs": "Documentos",
|
|
160
162
|
"issues": "Problemas",
|
|
161
163
|
"endpoints": "Endpoints",
|
|
@@ -1264,7 +1266,58 @@
|
|
|
1264
1266
|
"close": "Close",
|
|
1265
1267
|
"metadata": "Metadata",
|
|
1266
1268
|
"events": "Events",
|
|
1267
|
-
"artifacts": "
|
|
1269
|
+
"artifacts": "Artefatos"
|
|
1270
|
+
},
|
|
1271
|
+
"memory": {
|
|
1272
|
+
"title": "Gerenciamento de Memória",
|
|
1273
|
+
"description": "Visualize e gerencie entradas de memória armazenadas",
|
|
1274
|
+
"memories": "Memórias",
|
|
1275
|
+
"totalEntries": "Total de Entradas",
|
|
1276
|
+
"tokensUsed": "Tokens Usados",
|
|
1277
|
+
"hitRate": "Taxa de Acerto",
|
|
1278
|
+
"loading": "Carregando memórias...",
|
|
1279
|
+
"noMemories": "Nenhuma memória encontrada",
|
|
1280
|
+
"search": "Buscar memórias...",
|
|
1281
|
+
"allTypes": "Todos os Tipos",
|
|
1282
|
+
"export": "Exportar",
|
|
1283
|
+
"import": "Importar",
|
|
1284
|
+
"addMemory": "Adicionar Memória",
|
|
1285
|
+
"type": "Tipo",
|
|
1286
|
+
"key": "Chave",
|
|
1287
|
+
"content": "Conteúdo",
|
|
1288
|
+
"created": "Criado",
|
|
1289
|
+
"actions": "Ações",
|
|
1290
|
+
"factual": "Factual",
|
|
1291
|
+
"episodic": "Episódica",
|
|
1292
|
+
"procedural": "Procedural",
|
|
1293
|
+
"semantic": "Semântica"
|
|
1294
|
+
},
|
|
1295
|
+
"skills": {
|
|
1296
|
+
"title": "Skills",
|
|
1297
|
+
"description": "Gerencie e monitore skills de IA",
|
|
1298
|
+
"skillsTab": "Skills",
|
|
1299
|
+
"executionsTab": "Execuções",
|
|
1300
|
+
"sandboxTab": "Sandbox",
|
|
1301
|
+
"loading": "Carregando skills...",
|
|
1302
|
+
"noSkills": "Nenhuma skill encontrada",
|
|
1303
|
+
"noExecutions": "Nenhuma execução encontrada",
|
|
1304
|
+
"enabled": "Ativado",
|
|
1305
|
+
"disabled": "Desativado",
|
|
1306
|
+
"version": "Versão",
|
|
1307
|
+
"tableDescription": "Descrição",
|
|
1308
|
+
"skill": "Skill",
|
|
1309
|
+
"status": "Status",
|
|
1310
|
+
"duration": "Duração",
|
|
1311
|
+
"time": "Tempo",
|
|
1312
|
+
"sandboxConfig": "Configuração da Sandbox",
|
|
1313
|
+
"cpuLimit": "Limite de CPU",
|
|
1314
|
+
"cpuLimitDesc": "Tempo máximo de execução por skill",
|
|
1315
|
+
"memoryLimit": "Limite de Memória",
|
|
1316
|
+
"memoryLimitDesc": "Alocação máxima de memória",
|
|
1317
|
+
"timeout": "Timeout",
|
|
1318
|
+
"timeoutDesc": "Tempo máximo de espera por resposta",
|
|
1319
|
+
"networkAccess": "Acesso à Rede",
|
|
1320
|
+
"networkAccessDesc": "Permitir requisições de rede de saída"
|
|
1268
1321
|
},
|
|
1269
1322
|
"health": {
|
|
1270
1323
|
"title": "Saúde do sistema",
|
|
@@ -603,6 +603,46 @@ export const APIKEY_PROVIDERS = {
|
|
|
603
603
|
"$0.025/day free credits — 200+ models (GPT-4o, Claude, Gemini, Llama) via single endpoint",
|
|
604
604
|
passthroughModels: true,
|
|
605
605
|
},
|
|
606
|
+
novita: {
|
|
607
|
+
id: "novita",
|
|
608
|
+
alias: "novita",
|
|
609
|
+
name: "Novita AI",
|
|
610
|
+
icon: "auto_awesome",
|
|
611
|
+
color: "#FF4081",
|
|
612
|
+
textIcon: "NV",
|
|
613
|
+
website: "https://novita.ai",
|
|
614
|
+
passthroughModels: true,
|
|
615
|
+
},
|
|
616
|
+
piapi: {
|
|
617
|
+
id: "piapi",
|
|
618
|
+
alias: "pi",
|
|
619
|
+
name: "PiAPI",
|
|
620
|
+
icon: "api",
|
|
621
|
+
color: "#7C4DFF",
|
|
622
|
+
textIcon: "PI",
|
|
623
|
+
website: "https://piapi.ai",
|
|
624
|
+
passthroughModels: true,
|
|
625
|
+
},
|
|
626
|
+
getgoapi: {
|
|
627
|
+
id: "getgoapi",
|
|
628
|
+
alias: "ggo",
|
|
629
|
+
name: "GoAPI",
|
|
630
|
+
icon: "rocket_launch",
|
|
631
|
+
color: "#FF6D00",
|
|
632
|
+
textIcon: "GO",
|
|
633
|
+
website: "https://api.getgoapi.com",
|
|
634
|
+
passthroughModels: true,
|
|
635
|
+
},
|
|
636
|
+
laozhang: {
|
|
637
|
+
id: "laozhang",
|
|
638
|
+
alias: "lz",
|
|
639
|
+
name: "LaoZhang AI",
|
|
640
|
+
icon: "hub",
|
|
641
|
+
color: "#FF1744",
|
|
642
|
+
textIcon: "LZ",
|
|
643
|
+
website: "https://api.laozhang.ai",
|
|
644
|
+
passthroughModels: true,
|
|
645
|
+
},
|
|
606
646
|
};
|
|
607
647
|
|
|
608
648
|
export const OPENAI_COMPATIBLE_PREFIX = "openai-compatible-";
|